@canopy-iiif/app 0.8.3 → 0.8.4

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
- "sources": ["../src/iiif/hero-utils.js", "../src/HelloWorld.jsx", "../src/iiif/Viewer.jsx", "../src/iiif/Slider.jsx", "../src/iiif/MdxRelatedItems.jsx", "../src/iiif/Hero.jsx", "../src/iiif/FeaturedHero.jsx", "../src/search/MdxSearchResults.jsx", "../src/search/SearchSummary.jsx", "../src/search/MdxSearchTabs.jsx", "../src/search-form/MdxSearchFormModal.jsx", "../src/Icons.jsx", "../src/search/SearchPanelForm.jsx", "../src/search/SearchPanelTeaserResults.jsx", "../src/search/SearchPanel.jsx", "../src/iiif/ManifestPrimitives.jsx"],
4
- "sourcesContent": ["function computeHeroHeightStyle(height) {\n const h = typeof height === 'number' ? `${height}px` : String(height || '').trim();\n const val = h || '360px';\n return { width: '100%', height: val };\n}\n\nmodule.exports = { computeHeroHeightStyle };\n\n", "import React from \"react\";\n\nexport const HelloWorld = () => {\n return <div>Hello, World!</div>;\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 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// SSR-only: pulls featured helpers from the library (Node APIs inside)\nimport helpers from \"../../../lib/components/featured.js\";\nimport { computeHeroHeightStyle } from './hero-utils.js';\n\nconst basePath = (() => {\n try {\n const raw =\n typeof process !== \"undefined\" && process && process.env\n ? String(process.env.CANOPY_BASE_PATH || \"\")\n : \"\";\n return raw.replace(/\\/$/, \"\");\n } catch (_) {\n return \"\";\n }\n})();\n\nfunction applyBasePath(href) {\n try {\n if (!href) return href;\n if (!basePath) return href;\n if (typeof href === \"string\" && href.startsWith(\"/\")) {\n return `${basePath}${href}`;\n }\n } catch (_) {}\n return href;\n}\n\n/**\n * Hero\n *\n * Full-width visual banner for a featured item.\n * - Fluid width (100% of container)\n * - Fixed height from `height` prop (no aspect ratio lock)\n * - Renders a background image from `item.thumbnail` with cover fit\n * - Title rendered as caption beneath the hero and linked to item.href\n *\n * Props:\n * - height: number | string \u2014 required; e.g., 360 or '420px'\n * - item: { title, href, thumbnail } \u2014 required\n * - className, style \u2014 optional container overrides\n */\nexport default function Hero({\n height = 360,\n item,\n index,\n random,\n className = \"\",\n style = {},\n ...rest\n}) {\n // Resolve item: prefer explicit prop, else pick from featured list.\n let resolved = item;\n if (!resolved) {\n const list =\n helpers && helpers.readFeaturedFromCacheSync\n ? helpers.readFeaturedFromCacheSync()\n : [];\n let idx = 0;\n if (typeof index === \"number\") {\n idx = Math.max(0, Math.min(list.length - 1, Math.floor(index)));\n } else if (random === true || random === \"true\") {\n idx = Math.floor(Math.random() * Math.max(1, list.length));\n }\n resolved = list[idx] || list[0] || null;\n }\n\n const hStyle = computeHeroHeightStyle(height);\n const title = (resolved && resolved.title) || \"\";\n const href = (resolved && resolved.href) || \"#\";\n const thumbnail = (resolved && resolved.thumbnail) || \"\";\n\n const mediaStyles = {\n position: \"relative\",\n ...hStyle,\n overflow: \"hidden\",\n backgroundColor: \"var(--color-gray-muted)\",\n };\n\n const imgStyles = {\n position: \"absolute\",\n inset: 0,\n width: \"100%\",\n height: \"100%\",\n objectFit: \"cover\",\n objectPosition: \"center\",\n filter: \"none\",\n };\n\n const sanitizedRest = (() => {\n const r = { ...rest };\n try {\n delete r.random;\n delete r.index;\n } catch (_) {}\n return r;\n })();\n\n const figureClassName = [\"canopy-hero\", className].filter(Boolean).join(\" \");\n const figureStyles = { margin: 0, padding: 0, ...style };\n const safeHref = applyBasePath(href);\n\n return (\n <a href={safeHref} className=\"canopy-hero-link\">\n <figure className={figureClassName} style={figureStyles} {...sanitizedRest}>\n <div className=\"canopy-hero__media\" style={mediaStyles}>\n {thumbnail ? (\n <img src={thumbnail} alt=\"\" aria-hidden=\"true\" style={imgStyles} />\n ) : null}\n </div>\n {title ? <figcaption>{title}</figcaption> : null}\n </figure>\n </a>\n );\n}\n", "import React from \"react\";\nimport Hero from \"./Hero.jsx\";\n\n/**\n * FeaturedHero\n *\n * Thin wrapper around <Hero /> kept for backward compatibility and clarity in MDX.\n * Delegates selection logic to Hero (which reads the featured cache when no item is provided).\n */\nexport default function FeaturedHero(props = {}) {\n return <Hero {...props} />;\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 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 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 } = 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 }\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(event?.target?.value && event.target.value.trim());\n setHasValue(nextHasValue);\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-placeholder={placeholder || \"\"}\n data-has-value={hasValue ? \"1\" : \"0\"}\n >\n <label\n htmlFor={inputId}\n className=\"canopy-search-form__label\"\n >\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 <button\n type=\"submit\"\n data-canopy-search-form-trigger=\"submit\"\n className=\"canopy-search-form__submit\"\n >\n <span>{text}</span>\n <span aria-hidden className=\"canopy-search-form__shortcut\">\n <span>\u2318</span>\n <span>K</span>\n </span>\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';\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\";\nimport {\n Label as CloverLabel,\n Metadata as CloverMetadata,\n RequiredStatement as CloverRequiredStatement,\n Summary as CloverSummary,\n} from \"@samvera/clover-iiif/primitives\";\n\nfunction hasInternationalValue(value) {\n if (!value || typeof value !== \"object\") return false;\n return Object.keys(value).some((key) => {\n const entries = value[key];\n return (\n Array.isArray(entries) &&\n entries.some((entry) => String(entry || \"\").trim().length > 0)\n );\n });\n}\n\nfunction ensureMetadata(items) {\n if (!Array.isArray(items)) return [];\n return items.filter((item) => {\n if (!item || typeof item !== \"object\") return false;\n const { label, value } = item;\n return hasInternationalValue(label) && hasInternationalValue(value);\n });\n}\n\nexport function Label({ manifest, label, ...rest }) {\n const intl = label || (manifest && manifest.label);\n if (!hasInternationalValue(intl)) return null;\n return <CloverLabel label={intl} {...rest} />;\n}\n\nexport function Summary({ manifest, summary, ...rest }) {\n const intl = summary || (manifest && manifest.summary);\n if (!hasInternationalValue(intl)) return null;\n return <CloverSummary summary={intl} {...rest} />;\n}\n\nexport function Metadata({ manifest, metadata, ...rest }) {\n const items = ensureMetadata(metadata || (manifest && manifest.metadata));\n if (!items.length) return null;\n return <CloverMetadata metadata={items} {...rest} />;\n}\n\nexport function RequiredStatement({ manifest, requiredStatement, ...rest }) {\n const stmt = requiredStatement || (manifest && manifest.requiredStatement);\n if (\n !stmt ||\n !hasInternationalValue(stmt.label) ||\n !hasInternationalValue(stmt.value)\n ) {\n return null;\n }\n return <CloverRequiredStatement requiredStatement={stmt} {...rest} />;\n}\n\nexport const Primitives = {\n Label,\n Summary,\n Metadata,\n RequiredStatement,\n};\n\nexport default Primitives;\n"],
5
- "mappings": "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",
6
- "names": ["computeHeroHeightStyle", "React", "React", "useEffect", "useState", "React", "React", "React", "React", "React", "React", "React", "React", "React", "React", "_", "React", "React", "React", "React", "React"]
3
+ "sources": ["../src/iiif/hero-utils.js", "../src/HelloWorld.jsx", "../src/iiif/Viewer.jsx", "../src/iiif/Slider.jsx", "../src/iiif/MdxRelatedItems.jsx", "../src/iiif/Hero.jsx", "../src/iiif/FeaturedHero.jsx", "../src/layout/SubNavigation.jsx", "../src/search/MdxSearchResults.jsx", "../src/search/SearchSummary.jsx", "../src/search/MdxSearchTabs.jsx", "../src/search-form/MdxSearchFormModal.jsx", "../src/Icons.jsx", "../src/search/SearchPanelForm.jsx", "../src/search/SearchPanelTeaserResults.jsx", "../src/search/SearchPanel.jsx", "../src/iiif/ManifestPrimitives.jsx"],
4
+ "sourcesContent": ["function computeHeroHeightStyle(height) {\n const h = typeof height === 'number' ? `${height}px` : String(height || '').trim();\n const val = h || '360px';\n return { width: '100%', height: val };\n}\n\nmodule.exports = { computeHeroHeightStyle };\n\n", "import React from \"react\";\n\nexport const HelloWorld = () => {\n return <div>Hello, World!</div>;\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 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// SSR-only: pulls featured helpers from the library (Node APIs inside)\nimport helpers from \"../../../lib/components/featured.js\";\nimport { computeHeroHeightStyle } from './hero-utils.js';\n\nconst basePath = (() => {\n try {\n const raw =\n typeof process !== \"undefined\" && process && process.env\n ? String(process.env.CANOPY_BASE_PATH || \"\")\n : \"\";\n return raw.replace(/\\/$/, \"\");\n } catch (_) {\n return \"\";\n }\n})();\n\nfunction applyBasePath(href) {\n try {\n if (!href) return href;\n if (!basePath) return href;\n if (typeof href === \"string\" && href.startsWith(\"/\")) {\n return `${basePath}${href}`;\n }\n } catch (_) {}\n return href;\n}\n\n/**\n * Hero\n *\n * Full-width visual banner for a featured item.\n * - Fluid width (100% of container)\n * - Fixed height from `height` prop (no aspect ratio lock)\n * - Renders a background image from `item.thumbnail` with cover fit\n * - Title rendered as caption beneath the hero and linked to item.href\n *\n * Props:\n * - height: number | string \u2014 required; e.g., 360 or '420px'\n * - item: { title, href, thumbnail } \u2014 required\n * - className, style \u2014 optional container overrides\n */\nexport default function Hero({\n height = 360,\n item,\n index,\n random,\n className = \"\",\n style = {},\n ...rest\n}) {\n // Resolve item: prefer explicit prop, else pick from featured list.\n let resolved = item;\n if (!resolved) {\n const list =\n helpers && helpers.readFeaturedFromCacheSync\n ? helpers.readFeaturedFromCacheSync()\n : [];\n let idx = 0;\n if (typeof index === \"number\") {\n idx = Math.max(0, Math.min(list.length - 1, Math.floor(index)));\n } else if (random === true || random === \"true\") {\n idx = Math.floor(Math.random() * Math.max(1, list.length));\n }\n resolved = list[idx] || list[0] || null;\n }\n\n const hStyle = computeHeroHeightStyle(height);\n const title = (resolved && resolved.title) || \"\";\n const href = (resolved && resolved.href) || \"#\";\n const thumbnail = (resolved && resolved.thumbnail) || \"\";\n\n const mediaStyles = {\n position: \"relative\",\n ...hStyle,\n overflow: \"hidden\",\n backgroundColor: \"var(--color-gray-muted)\",\n };\n\n const imgStyles = {\n position: \"absolute\",\n inset: 0,\n width: \"100%\",\n height: \"100%\",\n objectFit: \"cover\",\n objectPosition: \"center\",\n filter: \"none\",\n };\n\n const sanitizedRest = (() => {\n const r = { ...rest };\n try {\n delete r.random;\n delete r.index;\n } catch (_) {}\n return r;\n })();\n\n const figureClassName = [\"canopy-hero\", className].filter(Boolean).join(\" \");\n const figureStyles = { margin: 0, padding: 0, ...style };\n const safeHref = applyBasePath(href);\n\n return (\n <a href={safeHref} className=\"canopy-hero-link\">\n <figure className={figureClassName} style={figureStyles} {...sanitizedRest}>\n <div className=\"canopy-hero__media\" style={mediaStyles}>\n {thumbnail ? (\n <img src={thumbnail} alt=\"\" aria-hidden=\"true\" style={imgStyles} />\n ) : null}\n </div>\n {title ? <figcaption>{title}</figcaption> : null}\n </figure>\n </a>\n );\n}\n", "import React from \"react\";\nimport Hero from \"./Hero.jsx\";\n\n/**\n * FeaturedHero\n *\n * Thin wrapper around <Hero /> kept for backward compatibility and clarity in MDX.\n * Delegates selection logic to Hero (which reads the featured cache when no item is provided).\n */\nexport default function FeaturedHero(props = {}) {\n return <Hero {...props} />;\n}\n", "import React from \"react\";\nimport navigationHelpers from \"../../../lib/components/navigation.js\";\n\nfunction resolveRelativeCandidate(page, current) {\n if (page && typeof page.relativePath === \"string\" && page.relativePath) return page.relativePath;\n if (page && typeof page.slug === \"string\" && page.slug) return page.slug;\n if (typeof current === \"string\" && current) return current;\n return \"\";\n}\n\nfunction renderNodes(nodes, parentKey = \"node\") {\n if (!Array.isArray(nodes) || !nodes.length) return null;\n return nodes.map((node, index) => {\n if (!node) return null;\n const key = node.slug || node.relativePath || `${parentKey}-${index}`;\n const hasChildren = Array.isArray(node.children) && node.children.length > 0;\n const showChildren = hasChildren && (node.isExpanded || node.depth === 0);\n const depth = typeof node.depth === \"number\" ? Math.max(0, node.depth) : 0;\n const depthClass = `depth-${Math.min(depth, 5)}`;\n const classes = [\n \"canopy-sub-navigation__link\",\n depthClass,\n ];\n if (!node.href) classes.push(\"is-label\");\n if (node.isActive) classes.push(\"is-active\");\n const linkClass = classes.join(\" \");\n const Tag = node.href ? \"a\" : \"span\";\n return (\n <li\n key={key}\n className=\"canopy-sub-navigation__item\"\n data-depth={depth}\n >\n <Tag\n className={linkClass}\n href={node.href || undefined}\n aria-current={node.isActive ? \"page\" : undefined}\n >\n {node.title || node.slug}\n </Tag>\n {showChildren ? (\n <ul className=\"canopy-sub-navigation__list canopy-sub-navigation__list--nested\" role=\"list\">\n {renderNodes(node.children, key)}\n </ul>\n ) : null}\n </li>\n );\n });\n}\n\nexport default function SubNavigation({\n navigation: navigationProp,\n page,\n current,\n className = \"\",\n style = {},\n heading,\n ariaLabel,\n}) {\n const PageContext = navigationHelpers && navigationHelpers.getPageContext\n ? navigationHelpers.getPageContext()\n : null;\n const context = PageContext ? React.useContext(PageContext) : null;\n const contextNavigation = context && context.navigation ? context.navigation : null;\n const contextPage = context && context.page ? context.page : null;\n const effectiveNavigation = navigationProp || contextNavigation;\n const effectivePage = page || contextPage;\n const resolvedNavigation = React.useMemo(() => {\n if (effectiveNavigation && effectiveNavigation.root) return effectiveNavigation;\n const candidate = resolveRelativeCandidate(effectivePage, current);\n if (!candidate) return effectiveNavigation || null;\n const helpers = navigationHelpers && navigationHelpers.buildNavigationForFile ? navigationHelpers : null;\n if (!helpers) return effectiveNavigation || null;\n try {\n const normalized = navigationHelpers.normalizeRelativePath\n ? navigationHelpers.normalizeRelativePath(candidate)\n : candidate;\n const built = helpers.buildNavigationForFile(normalized);\n if (built) return built;\n } catch (_) {\n // ignore helper errors and fall back to provided navigation\n }\n return effectiveNavigation || null;\n }, [effectiveNavigation, effectivePage, current]);\n\n if (!resolvedNavigation || !resolvedNavigation.root) return null;\n\n const rootNode = resolvedNavigation.root;\n const finalHeading = heading || null;\n const labelSource = finalHeading || resolvedNavigation.title;\n const navLabel = ariaLabel || (labelSource ? `${labelSource} navigation` : \"Section navigation\");\n const combinedClassName = [\"canopy-sub-navigation\", className].filter(Boolean).join(\" \");\n const inlineStyle = { ...style };\n if (!Object.prototype.hasOwnProperty.call(inlineStyle, \"--sub-nav-indent\")) {\n inlineStyle[\"--sub-nav-indent\"] = \"0.85rem\";\n }\n\n return (\n <nav className={combinedClassName} style={inlineStyle} aria-label={navLabel}>\n {finalHeading ? (\n <div className=\"canopy-sub-navigation__heading\">{finalHeading}</div>\n ) : null}\n <ul className=\"canopy-sub-navigation__list\" role=\"list\">\n {renderNodes([rootNode], rootNode.slug || \"root\")}\n </ul>\n </nav>\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 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 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 } = 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 }\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(event?.target?.value && event.target.value.trim());\n setHasValue(nextHasValue);\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-placeholder={placeholder || \"\"}\n data-has-value={hasValue ? \"1\" : \"0\"}\n >\n <label\n htmlFor={inputId}\n className=\"canopy-search-form__label\"\n >\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 <button\n type=\"submit\"\n data-canopy-search-form-trigger=\"submit\"\n className=\"canopy-search-form__submit\"\n >\n <span>{text}</span>\n <span aria-hidden className=\"canopy-search-form__shortcut\">\n <span>\u2318</span>\n <span>K</span>\n </span>\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';\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\";\nimport {\n Label as CloverLabel,\n Metadata as CloverMetadata,\n RequiredStatement as CloverRequiredStatement,\n Summary as CloverSummary,\n} from \"@samvera/clover-iiif/primitives\";\n\nfunction hasInternationalValue(value) {\n if (!value || typeof value !== \"object\") return false;\n return Object.keys(value).some((key) => {\n const entries = value[key];\n return (\n Array.isArray(entries) &&\n entries.some((entry) => String(entry || \"\").trim().length > 0)\n );\n });\n}\n\nfunction ensureMetadata(items) {\n if (!Array.isArray(items)) return [];\n return items.filter((item) => {\n if (!item || typeof item !== \"object\") return false;\n const { label, value } = item;\n return hasInternationalValue(label) && hasInternationalValue(value);\n });\n}\n\nexport function Label({ manifest, label, ...rest }) {\n const intl = label || (manifest && manifest.label);\n if (!hasInternationalValue(intl)) return null;\n return <CloverLabel label={intl} {...rest} />;\n}\n\nexport function Summary({ manifest, summary, ...rest }) {\n const intl = summary || (manifest && manifest.summary);\n if (!hasInternationalValue(intl)) return null;\n return <CloverSummary summary={intl} {...rest} />;\n}\n\nexport function Metadata({ manifest, metadata, ...rest }) {\n const items = ensureMetadata(metadata || (manifest && manifest.metadata));\n if (!items.length) return null;\n return <CloverMetadata metadata={items} {...rest} />;\n}\n\nexport function RequiredStatement({ manifest, requiredStatement, ...rest }) {\n const stmt = requiredStatement || (manifest && manifest.requiredStatement);\n if (\n !stmt ||\n !hasInternationalValue(stmt.label) ||\n !hasInternationalValue(stmt.value)\n ) {\n return null;\n }\n return <CloverRequiredStatement requiredStatement={stmt} {...rest} />;\n}\n\nexport const Primitives = {\n Label,\n Summary,\n Metadata,\n RequiredStatement,\n};\n\nexport default Primitives;\n"],
5
+ "mappings": "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",
6
+ "names": ["computeHeroHeightStyle", "React", "React", "useEffect", "useState", "React", "React", "React", "React", "React", "helpers", "React", "React", "React", "React", "React", "React", "_", "React", "React", "React", "React", "React"]
7
7
  }
@@ -0,0 +1,76 @@
1
+ .canopy-sub-navigation {
2
+ --sub-nav-indent: 0.85rem;
3
+ font-size: 0.95rem;
4
+ color: inherit;
5
+ }
6
+
7
+ .canopy-sub-navigation__heading {
8
+ font-weight: 600;
9
+ margin-bottom: 0.5rem;
10
+ }
11
+
12
+ .canopy-sub-navigation__list {
13
+ list-style: none;
14
+ margin: 0;
15
+ padding: 0;
16
+ }
17
+
18
+ .canopy-sub-navigation__item {
19
+ margin: 0;
20
+ padding: 0;
21
+ }
22
+
23
+ .canopy-sub-navigation__link {
24
+ display: block;
25
+ padding: 0.35rem 0.5rem;
26
+ border-radius: 0.375rem;
27
+ color: inherit;
28
+ text-decoration: none;
29
+ transition: background-color 120ms ease, color 120ms ease;
30
+ }
31
+
32
+ .canopy-sub-navigation__link:hover {
33
+ background-color: var(--sub-nav-hover, rgba(37, 99, 235, 0.08));
34
+ color: inherit;
35
+ }
36
+
37
+ .canopy-sub-navigation__link.is-label {
38
+ cursor: default;
39
+ color: var(--color-gray-600, #52525b);
40
+ }
41
+
42
+ .canopy-sub-navigation__link.is-active {
43
+ background-color: var(--sub-nav-active, rgba(37, 99, 235, 0.16));
44
+ color: var(--color-brand-900, #1d4ed8);
45
+ font-weight: 600;
46
+ }
47
+
48
+ .canopy-sub-navigation__list--nested {
49
+ margin: 0.35rem 0 0.35rem 0.5rem;
50
+ padding-left: 0.75rem;
51
+ border-left: 1px solid var(--color-gray-200, #e4e4e7);
52
+ }
53
+
54
+ .canopy-sub-navigation__link.depth-0 {
55
+ padding-left: 0.5rem;
56
+ }
57
+
58
+ .canopy-sub-navigation__link.depth-1 {
59
+ padding-left: calc(0.5rem + var(--sub-nav-indent));
60
+ }
61
+
62
+ .canopy-sub-navigation__link.depth-2 {
63
+ padding-left: calc(0.5rem + var(--sub-nav-indent) * 2);
64
+ }
65
+
66
+ .canopy-sub-navigation__link.depth-3 {
67
+ padding-left: calc(0.5rem + var(--sub-nav-indent) * 3);
68
+ }
69
+
70
+ .canopy-sub-navigation__link.depth-4 {
71
+ padding-left: calc(0.5rem + var(--sub-nav-indent) * 4);
72
+ }
73
+
74
+ .canopy-sub-navigation__link.depth-5 {
75
+ padding-left: calc(0.5rem + var(--sub-nav-indent) * 5);
76
+ }
@@ -2,3 +2,4 @@
2
2
  @use "./header";
3
3
  @use "./hero";
4
4
  @use "./search";
5
+ @use "./sub-navigation";
@@ -1,4 +1,40 @@
1
- @use '../../variables' as *;
1
+ @use "../../variables" as *;
2
+
3
+ .canopy-search-tabs-wrapper {
4
+ display: flex;
5
+ flex-wrap: wrap;
6
+ align-items: center;
7
+ justify-content: space-between;
8
+ }
9
+
10
+ .canopy-search-results {
11
+ padding: 1.618rem;
12
+ }
13
+
14
+ .canopy-search-tabs {
15
+ display: flex;
16
+ align-items: center;
17
+ gap: 0.5rem;
18
+ margin-bottom: 1rem;
19
+
20
+ button {
21
+ background: none;
22
+ border: none;
23
+ padding: 0.382rem 0.618rem;
24
+ font-size: 1rem;
25
+ cursor: pointer;
26
+ color: $color-gray-600;
27
+ transition: all 0.2s ease-in-out;
28
+
29
+ &.active,
30
+ &:hover {
31
+ color: $color-brand-default;
32
+ background-color: $color-brand-100;
33
+ border-radius: 0.382rem;
34
+ font-weight: 400;
35
+ }
36
+ }
37
+ }
2
38
 
3
39
  .canopy-search-form-modal {
4
40
  .canopy-search-form-modal__trigger {
@@ -37,8 +73,8 @@
37
73
  --canopy-font-sans,
38
74
  system-ui,
39
75
  -apple-system,
40
- 'Segoe UI',
41
- 'Helvetica Neue',
76
+ "Segoe UI",
77
+ "Helvetica Neue",
42
78
  Helvetica,
43
79
  Arial,
44
80
  sans-serif
@@ -116,6 +152,7 @@
116
152
  display: none;
117
153
  }
118
154
 
119
- .relative[data-canopy-search-form-auto='1']:focus-within [data-canopy-search-form-panel] {
155
+ .relative[data-canopy-search-form-auto="1"]:focus-within
156
+ [data-canopy-search-form-panel] {
120
157
  display: block;
121
158
  }
@@ -284,6 +284,39 @@ h2 {
284
284
  opacity: 0.7;
285
285
  }
286
286
 
287
+ .canopy-search-tabs-wrapper {
288
+ display: flex;
289
+ flex-wrap: wrap;
290
+ align-items: center;
291
+ justify-content: space-between;
292
+ }
293
+
294
+ .canopy-search-results {
295
+ padding: 1.618rem;
296
+ }
297
+
298
+ .canopy-search-tabs {
299
+ display: flex;
300
+ align-items: center;
301
+ gap: 0.5rem;
302
+ margin-bottom: 1rem;
303
+ }
304
+ .canopy-search-tabs button {
305
+ background: none;
306
+ border: none;
307
+ padding: 0.382rem 0.618rem;
308
+ font-size: 1rem;
309
+ cursor: pointer;
310
+ color: #80838d;
311
+ transition: all 0.2s ease-in-out;
312
+ }
313
+ .canopy-search-tabs button.active, .canopy-search-tabs button:hover {
314
+ color: #3358d4;
315
+ background-color: #edf2fe;
316
+ border-radius: 0.382rem;
317
+ font-weight: 400;
318
+ }
319
+
287
320
  .canopy-search-form-modal .canopy-search-form-modal__trigger {
288
321
  display: inline-flex;
289
322
  align-items: center;
@@ -631,4 +664,81 @@ h2 {
631
664
  .canopy-search-filters__button--primary:hover {
632
665
  background: var(--color-brand-700, #2c4bbd);
633
666
  box-shadow: var(--shadow-md, 0 4px 6px rgba(0, 0, 0, 0.1));
667
+ }
668
+
669
+ .canopy-sub-navigation {
670
+ --sub-nav-indent: 0.85rem;
671
+ font-size: 0.95rem;
672
+ color: inherit;
673
+ }
674
+
675
+ .canopy-sub-navigation__heading {
676
+ font-weight: 600;
677
+ margin-bottom: 0.5rem;
678
+ }
679
+
680
+ .canopy-sub-navigation__list {
681
+ list-style: none;
682
+ margin: 0;
683
+ padding: 0;
684
+ }
685
+
686
+ .canopy-sub-navigation__item {
687
+ margin: 0;
688
+ padding: 0;
689
+ }
690
+
691
+ .canopy-sub-navigation__link {
692
+ display: block;
693
+ padding: 0.35rem 0.5rem;
694
+ border-radius: 0.375rem;
695
+ color: inherit;
696
+ text-decoration: none;
697
+ transition: background-color 120ms ease, color 120ms ease;
698
+ }
699
+
700
+ .canopy-sub-navigation__link:hover {
701
+ background-color: var(--sub-nav-hover, rgba(37, 99, 235, 0.08));
702
+ color: inherit;
703
+ }
704
+
705
+ .canopy-sub-navigation__link.is-label {
706
+ cursor: default;
707
+ color: var(--color-gray-600, #52525b);
708
+ }
709
+
710
+ .canopy-sub-navigation__link.is-active {
711
+ background-color: var(--sub-nav-active, rgba(37, 99, 235, 0.16));
712
+ color: var(--color-brand-900, #1d4ed8);
713
+ font-weight: 600;
714
+ }
715
+
716
+ .canopy-sub-navigation__list--nested {
717
+ margin: 0.35rem 0 0.35rem 0.5rem;
718
+ padding-left: 0.75rem;
719
+ border-left: 1px solid var(--color-gray-200, #e4e4e7);
720
+ }
721
+
722
+ .canopy-sub-navigation__link.depth-0 {
723
+ padding-left: 0.5rem;
724
+ }
725
+
726
+ .canopy-sub-navigation__link.depth-1 {
727
+ padding-left: calc(0.5rem + var(--sub-nav-indent));
728
+ }
729
+
730
+ .canopy-sub-navigation__link.depth-2 {
731
+ padding-left: calc(0.5rem + var(--sub-nav-indent) * 2);
732
+ }
733
+
734
+ .canopy-sub-navigation__link.depth-3 {
735
+ padding-left: calc(0.5rem + var(--sub-nav-indent) * 3);
736
+ }
737
+
738
+ .canopy-sub-navigation__link.depth-4 {
739
+ padding-left: calc(0.5rem + var(--sub-nav-indent) * 4);
740
+ }
741
+
742
+ .canopy-sub-navigation__link.depth-5 {
743
+ padding-left: calc(0.5rem + var(--sub-nav-indent) * 5);
634
744
  }