@canopy-iiif/app 0.9.0 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/build/mdx.js CHANGED
@@ -139,6 +139,50 @@ async function loadUiComponents() {
139
139
  return UI_COMPONENTS;
140
140
  }
141
141
 
142
+ function slugifyHeading(text) {
143
+ try {
144
+ return String(text || '')
145
+ .toLowerCase()
146
+ .trim()
147
+ .replace(/[^a-z0-9\s-]/g, '')
148
+ .replace(/\s+/g, '-');
149
+ } catch (_) {
150
+ return '';
151
+ }
152
+ }
153
+
154
+ function extractHeadings(mdxSource) {
155
+ const { content } = parseFrontmatter(String(mdxSource || ''));
156
+ const cleaned = content.replace(/```[\s\S]*?```/g, '');
157
+ const headingRegex = /^ {0,3}(#{1,6})\s+(.+?)\s*$/gm;
158
+ const seen = new Map();
159
+ const headings = [];
160
+ let match;
161
+ while ((match = headingRegex.exec(cleaned))) {
162
+ const hashes = match[1] || '';
163
+ const depth = hashes.length;
164
+ let raw = match[2] || '';
165
+ let explicitId = null;
166
+ const idMatch = raw.match(/\s*\{#([A-Za-z0-9_-]+)\}\s*$/);
167
+ if (idMatch) {
168
+ explicitId = idMatch[1];
169
+ raw = raw.slice(0, raw.length - idMatch[0].length);
170
+ }
171
+ const title = raw.replace(/\<[^>]*\>/g, '').replace(/\[([^\]]+)\]\([^)]*\)/g, '$1').trim();
172
+ if (!title) continue;
173
+ const baseId = explicitId || slugifyHeading(title) || `section-${headings.length + 1}`;
174
+ const count = seen.get(baseId) || 0;
175
+ seen.set(baseId, count + 1);
176
+ const id = count === 0 ? baseId : `${baseId}-${count + 1}`;
177
+ headings.push({
178
+ id,
179
+ title,
180
+ depth,
181
+ });
182
+ }
183
+ return headings;
184
+ }
185
+
142
186
  function extractTitle(mdxSource) {
143
187
  const { data, content } = parseFrontmatter(String(mdxSource || ""));
144
188
  if (data && typeof data.title === "string" && data.title.trim()) {
@@ -271,6 +315,84 @@ async function compileMdxFile(filePath, outPath, Layout, extraProps = {}) {
271
315
  const mod = await import(pathToFileURL(tmpFile).href + bust);
272
316
  const MDXContent = mod.default || mod.MDXContent || mod;
273
317
  const components = await loadUiComponents();
318
+ const rawHeadings = Array.isArray(extraProps && extraProps.page && extraProps.page.headings)
319
+ ? extraProps.page.headings
320
+ .map((heading) => (heading ? { ...heading } : heading))
321
+ .filter(Boolean)
322
+ : [];
323
+ const headingQueue = rawHeadings.slice();
324
+ const headingIdCounts = new Map();
325
+ headingQueue.forEach((heading) => {
326
+ if (heading && heading.id) {
327
+ const key = String(heading.id);
328
+ headingIdCounts.set(key, (headingIdCounts.get(key) || 0) + 1);
329
+ }
330
+ });
331
+
332
+ function reserveHeadingId(base) {
333
+ const fallback = base || 'section';
334
+ let candidate = fallback;
335
+ let attempt = 1;
336
+ while (headingIdCounts.has(candidate)) {
337
+ attempt += 1;
338
+ candidate = `${fallback}-${attempt}`;
339
+ }
340
+ headingIdCounts.set(candidate, 1);
341
+ return candidate;
342
+ }
343
+
344
+ function extractTextFromChildren(children) {
345
+ if (children == null) return '';
346
+ if (typeof children === 'string' || typeof children === 'number') return String(children);
347
+ if (Array.isArray(children)) return children.map((child) => extractTextFromChildren(child)).join('');
348
+ if (React.isValidElement(children)) return extractTextFromChildren(children.props && children.props.children);
349
+ return '';
350
+ }
351
+
352
+ function takeHeading(level, children) {
353
+ if (!headingQueue.length) return null;
354
+ const idx = headingQueue.findIndex((item) => {
355
+ if (!item || typeof item !== 'object') return false;
356
+ const depth = typeof item.depth === 'number' ? item.depth : item.level;
357
+ return depth === level;
358
+ });
359
+ if (idx === -1) return null;
360
+ const [heading] = headingQueue.splice(idx, 1);
361
+ if (!heading.id) {
362
+ const text = heading.title || extractTextFromChildren(children);
363
+ const baseId = slugifyHeading(text);
364
+ heading.id = reserveHeadingId(baseId);
365
+ }
366
+ if (!heading.title) {
367
+ heading.title = extractTextFromChildren(children);
368
+ }
369
+ return heading;
370
+ }
371
+
372
+ function createHeadingComponent(level) {
373
+ const tag = `h${level}`;
374
+ const Base = components && components[tag] ? components[tag] : tag;
375
+ return function HeadingComponent(props) {
376
+ const heading = takeHeading(level, props && props.children);
377
+ const id = props && props.id ? props.id : heading && heading.id;
378
+ const finalProps = id ? { ...props, id } : props;
379
+ return React.createElement(Base, finalProps, props && props.children);
380
+ };
381
+ }
382
+
383
+ const levelsPresent = Array.from(
384
+ new Set(
385
+ headingQueue
386
+ .map((heading) => (heading ? heading.depth || heading.level : null))
387
+ .filter((level) => typeof level === 'number' && level >= 1 && level <= 6)
388
+ )
389
+ );
390
+ const headingComponents = levelsPresent.length
391
+ ? levelsPresent.reduce((acc, level) => {
392
+ acc[`h${level}`] = createHeadingComponent(level);
393
+ return acc;
394
+ }, {})
395
+ : {};
274
396
  const MDXProvider = await getMdxProvider();
275
397
  // Base path support for anchors
276
398
  const Anchor = function A(props) {
@@ -294,7 +416,7 @@ async function compileMdxFile(filePath, outPath, Layout, extraProps = {}) {
294
416
  ? React.createElement(PageContext.Provider, { value: contextValue }, withLayout)
295
417
  : withLayout;
296
418
  const withApp = React.createElement(app.App, null, withContext);
297
- const compMap = { ...components, a: Anchor };
419
+ const compMap = { ...components, ...headingComponents, a: Anchor };
298
420
  const page = MDXProvider
299
421
  ? React.createElement(MDXProvider, { components: compMap }, withApp)
300
422
  : withApp;
@@ -811,6 +933,7 @@ async function ensureHeroRuntime() {
811
933
 
812
934
  module.exports = {
813
935
  extractTitle,
936
+ extractHeadings,
814
937
  isReservedFile,
815
938
  parseFrontmatter,
816
939
  compileMdxFile,
@@ -50,6 +50,7 @@ async function renderContentMdxToHtml(filePath, outPath, extraProps = {}) {
50
50
  const pageInfo = navigation.getPageInfo(normalizedRel);
51
51
  const navData = navigation.buildNavigationForFile(normalizedRel);
52
52
  const mergedProps = { ...(extraProps || {}) };
53
+ const headings = mdx.extractHeadings(source);
53
54
  if (pageInfo) {
54
55
  mergedProps.page = mergedProps.page
55
56
  ? { ...pageInfo, ...mergedProps.page }
@@ -58,6 +59,11 @@ async function renderContentMdxToHtml(filePath, outPath, extraProps = {}) {
58
59
  if (navData && !mergedProps.navigation) {
59
60
  mergedProps.navigation = navData;
60
61
  }
62
+ if (headings && headings.length) {
63
+ mergedProps.page = mergedProps.page
64
+ ? { ...mergedProps.page, headings }
65
+ : { headings };
66
+ }
61
67
  const { body, head } = await mdx.compileMdxFile(filePath, outPath, null, mergedProps);
62
68
  const needsHydrateViewer =
63
69
  body.includes('data-canopy-viewer') || body.includes('data-canopy-scroll');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@canopy-iiif/app",
3
- "version": "0.9.0",
3
+ "version": "0.9.1",
4
4
  "private": false,
5
5
  "license": "MIT",
6
6
  "author": "Mat Jordan <mat@northwestern.edu>",
@@ -479,8 +479,338 @@ function SubNavigation({
479
479
  return /* @__PURE__ */ React7.createElement("nav", { className: combinedClassName, style: inlineStyle, "aria-label": navLabel }, finalHeading ? /* @__PURE__ */ React7.createElement("div", { className: "canopy-sub-navigation__heading" }, finalHeading) : null, /* @__PURE__ */ React7.createElement("ul", { className: "canopy-sub-navigation__list", role: "list" }, renderNodes([rootNode], rootNode.slug || "root")));
480
480
  }
481
481
 
482
- // ui/src/search/MdxSearchResults.jsx
482
+ // ui/src/layout/Layout.jsx
483
+ import React9 from "react";
484
+ import navigationHelpers2 from "@canopy-iiif/app/lib/components/navigation.js";
485
+
486
+ // ui/src/layout/ContentNavigation.jsx
483
487
  import React8 from "react";
488
+ var SCROLL_OFFSET_REM = 1.618;
489
+ function depthIndex(depth) {
490
+ return Math.max(0, Math.min(5, (depth || 1) - 1));
491
+ }
492
+ function ContentNavigation({
493
+ items = [],
494
+ className = "",
495
+ style = {},
496
+ heading,
497
+ headingId,
498
+ pageTitle,
499
+ ariaLabel
500
+ }) {
501
+ const isBrowser = typeof window !== "undefined" && typeof document !== "undefined";
502
+ const savedDepthsRef = React8.useRef(null);
503
+ if ((!items || !items.length) && !headingId) return null;
504
+ const combinedClassName = ["canopy-sub-navigation canopy-content-navigation", className].filter(Boolean).join(" ");
505
+ const effectiveHeading = heading || pageTitle || null;
506
+ const navLabel = ariaLabel || (effectiveHeading ? `${effectiveHeading} navigation` : "Section navigation");
507
+ const getSavedDepth = React8.useCallback(
508
+ (id, fallback) => {
509
+ if (!id) return fallback;
510
+ if (!savedDepthsRef.current) savedDepthsRef.current = /* @__PURE__ */ new Map();
511
+ const store = savedDepthsRef.current;
512
+ if (store.has(id)) return store.get(id);
513
+ store.set(id, fallback);
514
+ return fallback;
515
+ },
516
+ []
517
+ );
518
+ const headingEntries = React8.useMemo(() => {
519
+ const entries = [];
520
+ const seen = /* @__PURE__ */ new Set();
521
+ if (headingId) {
522
+ const topId = String(headingId);
523
+ entries.push({ id: topId, depth: 1 });
524
+ seen.add(topId);
525
+ }
526
+ const pushNodes = (nodes) => {
527
+ if (!Array.isArray(nodes)) return;
528
+ nodes.forEach((node) => {
529
+ if (!node || !node.id) return;
530
+ const id = String(node.id);
531
+ if (seen.has(id)) return;
532
+ seen.add(id);
533
+ const depth = node.depth || node.level || getSavedDepth(id, 2);
534
+ entries.push({ id, depth });
535
+ if (node.children && node.children.length) pushNodes(node.children);
536
+ });
537
+ };
538
+ pushNodes(items);
539
+ return entries;
540
+ }, [headingId, items, getSavedDepth]);
541
+ const fallbackId = headingEntries.length ? headingEntries[0].id : headingId || null;
542
+ const [activeId, setActiveId] = React8.useState(fallbackId);
543
+ const activeIdRef = React8.useRef(activeId);
544
+ React8.useEffect(() => {
545
+ activeIdRef.current = activeId;
546
+ }, [activeId]);
547
+ React8.useEffect(() => {
548
+ if (!headingEntries.length) return;
549
+ if (!headingEntries.some((entry) => entry.id === activeIdRef.current)) {
550
+ const next = headingEntries[0].id;
551
+ activeIdRef.current = next;
552
+ setActiveId(next);
553
+ }
554
+ }, [headingEntries]);
555
+ const computeOffsetPx = React8.useCallback(() => {
556
+ if (!isBrowser) return 0;
557
+ try {
558
+ const root = document.documentElement;
559
+ const fontSize = root ? parseFloat(window.getComputedStyle(root).fontSize || "16") || 16 : 16;
560
+ return fontSize * SCROLL_OFFSET_REM;
561
+ } catch (_) {
562
+ return 0;
563
+ }
564
+ }, [isBrowser]);
565
+ const headingElementsRef = React8.useRef([]);
566
+ const updateActiveFromElements = React8.useCallback(
567
+ (elements) => {
568
+ if (!elements || !elements.length) return;
569
+ const offset = computeOffsetPx();
570
+ let nextId = elements[0].id;
571
+ for (const { id, element } of elements) {
572
+ const rect = element.getBoundingClientRect();
573
+ if (rect.top - offset <= 0) {
574
+ nextId = id;
575
+ } else {
576
+ break;
577
+ }
578
+ }
579
+ if (nextId && nextId !== activeIdRef.current) {
580
+ activeIdRef.current = nextId;
581
+ setActiveId(nextId);
582
+ }
583
+ },
584
+ [computeOffsetPx]
585
+ );
586
+ React8.useEffect(() => {
587
+ if (!isBrowser) return void 0;
588
+ const elements = headingEntries.map((entry) => {
589
+ const element = document.getElementById(entry.id);
590
+ return element ? { id: entry.id, element } : null;
591
+ }).filter(Boolean);
592
+ headingElementsRef.current = elements;
593
+ updateActiveFromElements(elements);
594
+ if (!elements.length) return void 0;
595
+ let ticking = false;
596
+ const handle = () => {
597
+ if (!ticking) {
598
+ ticking = true;
599
+ window.requestAnimationFrame(() => {
600
+ updateActiveFromElements(elements);
601
+ ticking = false;
602
+ });
603
+ }
604
+ };
605
+ window.addEventListener("scroll", handle, { passive: true });
606
+ window.addEventListener("resize", handle);
607
+ return () => {
608
+ window.removeEventListener("scroll", handle);
609
+ window.removeEventListener("resize", handle);
610
+ };
611
+ }, [headingEntries, isBrowser, updateActiveFromElements]);
612
+ const handleAnchorClick = React8.useCallback(
613
+ (event, targetId, options = {}) => {
614
+ var _a;
615
+ try {
616
+ if (event && typeof event.preventDefault === "function") event.preventDefault();
617
+ } catch (_) {
618
+ }
619
+ if (!isBrowser) return;
620
+ const offset = computeOffsetPx();
621
+ let top = 0;
622
+ if (targetId && targetId !== "top" && !options.scrollToTop) {
623
+ const el = document.getElementById(targetId);
624
+ if (el) {
625
+ const rect = el.getBoundingClientRect();
626
+ top = window.scrollY + rect.top - offset;
627
+ }
628
+ }
629
+ if (!Number.isFinite(top) || top < 0 || options.scrollToTop) top = 0;
630
+ const nextId = targetId && targetId !== "top" ? targetId : ((_a = headingEntries[0]) == null ? void 0 : _a.id) || headingId || null;
631
+ if (nextId) {
632
+ activeIdRef.current = nextId;
633
+ setActiveId(nextId);
634
+ }
635
+ try {
636
+ window.scrollTo({ top, behavior: "smooth" });
637
+ } catch (_) {
638
+ window.scrollTo(0, top);
639
+ }
640
+ },
641
+ [computeOffsetPx, headingEntries, headingId, isBrowser]
642
+ );
643
+ const renderNodes2 = React8.useCallback(
644
+ (nodes) => {
645
+ if (!nodes || !nodes.length) return null;
646
+ return nodes.map((node) => {
647
+ if (!node) return null;
648
+ const id = node.id ? String(node.id) : "";
649
+ const depth = node.depth || node.level || getSavedDepth(id, 2);
650
+ const idx = depthIndex(depth);
651
+ const isActive = id && activeId === id;
652
+ return /* @__PURE__ */ React8.createElement("li", { key: id || node.title, className: "canopy-sub-navigation__item", "data-depth": idx }, /* @__PURE__ */ React8.createElement(
653
+ "a",
654
+ {
655
+ className: `canopy-sub-navigation__link depth-${idx}${isActive ? " is-active" : ""}`,
656
+ href: id ? `#${id}` : "#",
657
+ onClick: (event) => handleAnchorClick(event, id || null),
658
+ "aria-current": isActive ? "location" : void 0
659
+ },
660
+ node.title
661
+ ), node.children && node.children.length ? /* @__PURE__ */ React8.createElement(
662
+ "ul",
663
+ {
664
+ className: "canopy-sub-navigation__list canopy-sub-navigation__list--nested",
665
+ role: "list"
666
+ },
667
+ renderNodes2(node.children)
668
+ ) : null);
669
+ });
670
+ },
671
+ [handleAnchorClick, activeId, getSavedDepth]
672
+ );
673
+ const nestedItems = renderNodes2(items);
674
+ const topLink = headingId ? /* @__PURE__ */ React8.createElement("li", { className: "canopy-sub-navigation__item", "data-depth": 0 }, /* @__PURE__ */ React8.createElement(
675
+ "a",
676
+ {
677
+ className: `canopy-sub-navigation__link depth-0${activeId === headingId ? " is-active" : ""}`,
678
+ href: `#${headingId}`,
679
+ onClick: (event) => handleAnchorClick(event, headingId, { scrollToTop: true }),
680
+ "aria-current": activeId === headingId ? "location" : void 0
681
+ },
682
+ effectiveHeading || pageTitle || headingId
683
+ ), nestedItems ? /* @__PURE__ */ React8.createElement(
684
+ "ul",
685
+ {
686
+ className: "canopy-sub-navigation__list canopy-sub-navigation__list--nested",
687
+ role: "list"
688
+ },
689
+ nestedItems
690
+ ) : null) : null;
691
+ return /* @__PURE__ */ React8.createElement("nav", { className: combinedClassName, style, "aria-label": navLabel }, /* @__PURE__ */ React8.createElement("ul", { className: "canopy-sub-navigation__list", role: "list" }, topLink || nestedItems));
692
+ }
693
+
694
+ // ui/src/layout/Layout.jsx
695
+ function buildHeadingTree(headings) {
696
+ if (!Array.isArray(headings) || !headings.length) return [];
697
+ const root = [];
698
+ const stack = [];
699
+ headings.forEach((heading) => {
700
+ if (!heading || typeof heading !== "object") return;
701
+ const depth = typeof heading.depth === "number" ? heading.depth : heading.level;
702
+ if (typeof depth !== "number" || depth < 2) return;
703
+ const entry = {
704
+ id: heading.id || heading.slug || heading.title,
705
+ title: heading.title || heading.text || heading.id,
706
+ depth,
707
+ children: []
708
+ };
709
+ while (stack.length && stack[stack.length - 1].depth >= entry.depth) {
710
+ stack.pop();
711
+ }
712
+ if (!stack.length) {
713
+ root.push(entry);
714
+ } else {
715
+ stack[stack.length - 1].children.push(entry);
716
+ }
717
+ stack.push(entry);
718
+ });
719
+ return root;
720
+ }
721
+ function buildNavigationAside(sidebar, className) {
722
+ if (!sidebar) {
723
+ return /* @__PURE__ */ React9.createElement(SubNavigation, { className });
724
+ }
725
+ if (typeof sidebar === "function") {
726
+ return React9.createElement(sidebar);
727
+ }
728
+ return sidebar;
729
+ }
730
+ function Layout({
731
+ children,
732
+ sidebar,
733
+ navigation = true,
734
+ fluid = false,
735
+ contentNavigation = true,
736
+ className = "",
737
+ contentClassName = "",
738
+ sidebarClassName = "",
739
+ contentNavigationClassName = "",
740
+ ...rest
741
+ }) {
742
+ const PageContext = navigationHelpers2 && typeof navigationHelpers2.getPageContext === "function" ? navigationHelpers2.getPageContext() : null;
743
+ const context = PageContext ? React9.useContext(PageContext) : null;
744
+ const pageHeadings = React9.useMemo(() => {
745
+ const headings = context && context.page ? context.page.headings : null;
746
+ return Array.isArray(headings) ? headings : [];
747
+ }, [context]);
748
+ const contentHeading = React9.useMemo(() => {
749
+ const first = pageHeadings.find((heading) => {
750
+ const depth = heading && (heading.depth || heading.level);
751
+ return depth === 1;
752
+ });
753
+ return first && first.title ? first.title : null;
754
+ }, [pageHeadings]);
755
+ const headingAnchorId = React9.useMemo(() => {
756
+ const first = pageHeadings.find((heading) => {
757
+ const depth = heading && (heading.depth || heading.level);
758
+ return depth === 1;
759
+ });
760
+ return first && first.id ? first.id : null;
761
+ }, [pageHeadings]);
762
+ const headingTree = React9.useMemo(
763
+ () => buildHeadingTree(pageHeadings),
764
+ [pageHeadings]
765
+ );
766
+ const showLeftColumn = navigation !== false;
767
+ const hasContentNavigation = navigation !== false && contentNavigation !== false && headingTree.length > 0;
768
+ const gridClass = (() => {
769
+ if (showLeftColumn && hasContentNavigation) {
770
+ return "md:grid md:grid-cols-[17rem_minmax(0,1fr)_14rem] md:items-start md:gap-10";
771
+ }
772
+ if (showLeftColumn) {
773
+ return "md:grid md:grid-cols-[17rem_minmax(0,1fr)] md:items-start md:gap-10";
774
+ }
775
+ if (hasContentNavigation) {
776
+ return "md:grid md:grid-cols-[minmax(0,1fr)_14rem] md:items-start md:gap-10";
777
+ }
778
+ return "";
779
+ })();
780
+ const containerClassName = [
781
+ "w-full py-6 getting-started-layout",
782
+ gridClass,
783
+ fluid ? "px-4 md:px-8 lg:px-12" : "mx-auto max-w-content px-4",
784
+ className
785
+ ].filter(Boolean).join(" ");
786
+ const leftAsideClassName = [
787
+ "mt-8 md:mt-0 md:order-1 md:sticky md:top-24 md:max-h-[calc(100vh-6rem)] md:overflow-y-auto text-sm text-slate-600",
788
+ sidebarClassName
789
+ ].filter(Boolean).join(" ");
790
+ const contentOrderClass = showLeftColumn ? "md:order-2" : hasContentNavigation ? "md:order-1" : "";
791
+ const contentClassNames = [
792
+ "space-y-6",
793
+ contentOrderClass,
794
+ contentClassName
795
+ ].filter(Boolean).join(" ");
796
+ const contentNavigationAsideClassName = [
797
+ "hidden md:block md:order-3 mt-8 md:mt-0 md:sticky md:top-24 md:max-h-[calc(100vh-6rem)] md:overflow-y-auto text-sm text-slate-600",
798
+ contentNavigationClassName
799
+ ].filter(Boolean).join(" ");
800
+ const sidebarNode = showLeftColumn ? buildNavigationAside(sidebar, sidebarClassName) : null;
801
+ return /* @__PURE__ */ React9.createElement("div", { className: containerClassName, ...rest }, showLeftColumn ? /* @__PURE__ */ React9.createElement("aside", { className: leftAsideClassName }, sidebarNode) : null, /* @__PURE__ */ React9.createElement("div", { className: contentClassNames }, children), hasContentNavigation ? /* @__PURE__ */ React9.createElement("aside", { className: contentNavigationAsideClassName }, /* @__PURE__ */ React9.createElement(
802
+ ContentNavigation,
803
+ {
804
+ items: headingTree,
805
+ heading: contentHeading || void 0,
806
+ headingId: headingAnchorId || void 0,
807
+ pageTitle: context && context.page ? context.page.title : void 0
808
+ }
809
+ )) : null);
810
+ }
811
+
812
+ // ui/src/search/MdxSearchResults.jsx
813
+ import React10 from "react";
484
814
  function MdxSearchResults(props) {
485
815
  let json = "{}";
486
816
  try {
@@ -488,11 +818,11 @@ function MdxSearchResults(props) {
488
818
  } catch (_) {
489
819
  json = "{}";
490
820
  }
491
- return /* @__PURE__ */ React8.createElement("div", { "data-canopy-search-results": "1" }, /* @__PURE__ */ React8.createElement("script", { type: "application/json", dangerouslySetInnerHTML: { __html: json } }));
821
+ return /* @__PURE__ */ React10.createElement("div", { "data-canopy-search-results": "1" }, /* @__PURE__ */ React10.createElement("script", { type: "application/json", dangerouslySetInnerHTML: { __html: json } }));
492
822
  }
493
823
 
494
824
  // ui/src/search/SearchSummary.jsx
495
- import React9 from "react";
825
+ import React11 from "react";
496
826
  function SearchSummary(props) {
497
827
  let json = "{}";
498
828
  try {
@@ -500,11 +830,11 @@ function SearchSummary(props) {
500
830
  } catch (_) {
501
831
  json = "{}";
502
832
  }
503
- return /* @__PURE__ */ React9.createElement("div", { "data-canopy-search-summary": "1" }, /* @__PURE__ */ React9.createElement("script", { type: "application/json", dangerouslySetInnerHTML: { __html: json } }));
833
+ return /* @__PURE__ */ React11.createElement("div", { "data-canopy-search-summary": "1" }, /* @__PURE__ */ React11.createElement("script", { type: "application/json", dangerouslySetInnerHTML: { __html: json } }));
504
834
  }
505
835
 
506
836
  // ui/src/search/MdxSearchTabs.jsx
507
- import React10 from "react";
837
+ import React12 from "react";
508
838
  function MdxSearchTabs(props) {
509
839
  let json = "{}";
510
840
  try {
@@ -512,18 +842,18 @@ function MdxSearchTabs(props) {
512
842
  } catch (_) {
513
843
  json = "{}";
514
844
  }
515
- return /* @__PURE__ */ React10.createElement("div", { "data-canopy-search-tabs": "1" }, /* @__PURE__ */ React10.createElement("script", { type: "application/json", dangerouslySetInnerHTML: { __html: json } }));
845
+ return /* @__PURE__ */ React12.createElement("div", { "data-canopy-search-tabs": "1" }, /* @__PURE__ */ React12.createElement("script", { type: "application/json", dangerouslySetInnerHTML: { __html: json } }));
516
846
  }
517
847
 
518
848
  // ui/src/search-form/MdxSearchFormModal.jsx
519
- import React14 from "react";
849
+ import React16 from "react";
520
850
 
521
851
  // ui/src/Icons.jsx
522
- import React11 from "react";
523
- var MagnifyingGlassIcon = (props) => /* @__PURE__ */ React11.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 512 512", ...props }, /* @__PURE__ */ React11.createElement("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" }));
852
+ import React13 from "react";
853
+ var MagnifyingGlassIcon = (props) => /* @__PURE__ */ React13.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 512 512", ...props }, /* @__PURE__ */ React13.createElement("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" }));
524
854
 
525
855
  // ui/src/search/SearchPanelForm.jsx
526
- import React12 from "react";
856
+ import React14 from "react";
527
857
  function readBasePath() {
528
858
  const normalize = (val) => {
529
859
  const raw = typeof val === "string" ? val.trim() : "";
@@ -586,18 +916,18 @@ function SearchPanelForm(props = {}) {
586
916
  clearLabel = "Clear search"
587
917
  } = props || {};
588
918
  const text = typeof label === "string" && label.trim() ? label.trim() : buttonLabel;
589
- const action = React12.useMemo(
919
+ const action = React14.useMemo(
590
920
  () => resolveSearchPath(searchPath),
591
921
  [searchPath]
592
922
  );
593
- const autoId = typeof React12.useId === "function" ? React12.useId() : void 0;
594
- const [fallbackId] = React12.useState(
923
+ const autoId = typeof React14.useId === "function" ? React14.useId() : void 0;
924
+ const [fallbackId] = React14.useState(
595
925
  () => `canopy-search-form-${Math.random().toString(36).slice(2, 10)}`
596
926
  );
597
927
  const inputId = inputIdProp || autoId || fallbackId;
598
- const inputRef = React12.useRef(null);
599
- const [hasValue, setHasValue] = React12.useState(false);
600
- const focusInput = React12.useCallback(() => {
928
+ const inputRef = React14.useRef(null);
929
+ const [hasValue, setHasValue] = React14.useState(false);
930
+ const focusInput = React14.useCallback(() => {
601
931
  const el = inputRef.current;
602
932
  if (!el) return;
603
933
  if (document.activeElement === el) return;
@@ -610,7 +940,7 @@ function SearchPanelForm(props = {}) {
610
940
  }
611
941
  }
612
942
  }, []);
613
- const handlePointerDown = React12.useCallback(
943
+ const handlePointerDown = React14.useCallback(
614
944
  (event) => {
615
945
  const target = event.target;
616
946
  if (target && typeof target.closest === "function") {
@@ -622,23 +952,23 @@ function SearchPanelForm(props = {}) {
622
952
  },
623
953
  [focusInput]
624
954
  );
625
- React12.useEffect(() => {
955
+ React14.useEffect(() => {
626
956
  const el = inputRef.current;
627
957
  if (!el) return;
628
958
  if (el.value && el.value.trim()) {
629
959
  setHasValue(true);
630
960
  }
631
961
  }, []);
632
- const handleInputChange = React12.useCallback((event) => {
962
+ const handleInputChange = React14.useCallback((event) => {
633
963
  var _a;
634
964
  const nextHasValue = Boolean(
635
965
  ((_a = event == null ? void 0 : event.target) == null ? void 0 : _a.value) && event.target.value.trim()
636
966
  );
637
967
  setHasValue(nextHasValue);
638
968
  }, []);
639
- const handleClear = React12.useCallback((event) => {
969
+ const handleClear = React14.useCallback((event) => {
640
970
  }, []);
641
- const handleClearKey = React12.useCallback(
971
+ const handleClearKey = React14.useCallback(
642
972
  (event) => {
643
973
  if (event.key === "Enter" || event.key === " ") {
644
974
  event.preventDefault();
@@ -647,7 +977,7 @@ function SearchPanelForm(props = {}) {
647
977
  },
648
978
  [handleClear]
649
979
  );
650
- return /* @__PURE__ */ React12.createElement(
980
+ return /* @__PURE__ */ React14.createElement(
651
981
  "form",
652
982
  {
653
983
  action,
@@ -659,7 +989,7 @@ function SearchPanelForm(props = {}) {
659
989
  onPointerDown: handlePointerDown,
660
990
  "data-has-value": hasValue ? "1" : "0"
661
991
  },
662
- /* @__PURE__ */ React12.createElement("label", { htmlFor: inputId, className: "canopy-search-form__label" }, /* @__PURE__ */ React12.createElement(MagnifyingGlassIcon, { className: "canopy-search-form__icon" }), /* @__PURE__ */ React12.createElement(
992
+ /* @__PURE__ */ React14.createElement("label", { htmlFor: inputId, className: "canopy-search-form__label" }, /* @__PURE__ */ React14.createElement(MagnifyingGlassIcon, { className: "canopy-search-form__icon" }), /* @__PURE__ */ React14.createElement(
663
993
  "input",
664
994
  {
665
995
  id: inputId,
@@ -675,7 +1005,7 @@ function SearchPanelForm(props = {}) {
675
1005
  onInput: handleInputChange
676
1006
  }
677
1007
  )),
678
- hasValue ? /* @__PURE__ */ React12.createElement(
1008
+ hasValue ? /* @__PURE__ */ React14.createElement(
679
1009
  "button",
680
1010
  {
681
1011
  type: "button",
@@ -688,32 +1018,32 @@ function SearchPanelForm(props = {}) {
688
1018
  },
689
1019
  "\xD7"
690
1020
  ) : null,
691
- /* @__PURE__ */ React12.createElement(
1021
+ /* @__PURE__ */ React14.createElement(
692
1022
  "button",
693
1023
  {
694
1024
  type: "submit",
695
1025
  "data-canopy-search-form-trigger": "submit",
696
1026
  className: "canopy-search-form__submit"
697
1027
  },
698
- /* @__PURE__ */ React12.createElement("span", null, text),
699
- /* @__PURE__ */ React12.createElement("span", { "aria-hidden": true, className: "canopy-search-form__shortcut" }, /* @__PURE__ */ React12.createElement("span", null, "\u2318"), /* @__PURE__ */ React12.createElement("span", null, "K"))
1028
+ /* @__PURE__ */ React14.createElement("span", null, text),
1029
+ /* @__PURE__ */ React14.createElement("span", { "aria-hidden": true, className: "canopy-search-form__shortcut" }, /* @__PURE__ */ React14.createElement("span", null, "\u2318"), /* @__PURE__ */ React14.createElement("span", null, "K"))
700
1030
  )
701
1031
  );
702
1032
  }
703
1033
 
704
1034
  // ui/src/search/SearchPanelTeaserResults.jsx
705
- import React13 from "react";
1035
+ import React15 from "react";
706
1036
  function SearchPanelTeaserResults(props = {}) {
707
1037
  const { style, className } = props || {};
708
1038
  const classes = ["canopy-search-teaser", className].filter(Boolean).join(" ");
709
- return /* @__PURE__ */ React13.createElement(
1039
+ return /* @__PURE__ */ React15.createElement(
710
1040
  "div",
711
1041
  {
712
1042
  "data-canopy-search-form-panel": true,
713
1043
  className: classes || void 0,
714
1044
  style
715
1045
  },
716
- /* @__PURE__ */ React13.createElement("div", { id: "cplist" })
1046
+ /* @__PURE__ */ React15.createElement("div", { id: "cplist" })
717
1047
  );
718
1048
  }
719
1049
 
@@ -733,11 +1063,11 @@ function MdxSearchFormModal(props = {}) {
733
1063
  const text = typeof label === "string" && label.trim() ? label.trim() : buttonLabel;
734
1064
  const resolvedSearchPath = resolveSearchPath(searchPath);
735
1065
  const data = { placeholder, hotkey, maxResults, groupOrder, label: text, searchPath: resolvedSearchPath };
736
- return /* @__PURE__ */ React14.createElement("div", { "data-canopy-search-form": true, className: "flex-1 min-w-0" }, /* @__PURE__ */ React14.createElement("div", { className: "relative w-full" }, /* @__PURE__ */ React14.createElement(SearchPanelForm, { placeholder, buttonLabel, label, searchPath: resolvedSearchPath }), /* @__PURE__ */ React14.createElement(SearchPanelTeaserResults, null)), /* @__PURE__ */ React14.createElement("script", { type: "application/json", dangerouslySetInnerHTML: { __html: JSON.stringify(data) } }));
1066
+ return /* @__PURE__ */ React16.createElement("div", { "data-canopy-search-form": true, className: "flex-1 min-w-0" }, /* @__PURE__ */ React16.createElement("div", { className: "relative w-full" }, /* @__PURE__ */ React16.createElement(SearchPanelForm, { placeholder, buttonLabel, label, searchPath: resolvedSearchPath }), /* @__PURE__ */ React16.createElement(SearchPanelTeaserResults, null)), /* @__PURE__ */ React16.createElement("script", { type: "application/json", dangerouslySetInnerHTML: { __html: JSON.stringify(data) } }));
737
1067
  }
738
1068
 
739
1069
  // ui/src/search/SearchPanel.jsx
740
- import React15 from "react";
1070
+ import React17 from "react";
741
1071
  function SearchPanel(props = {}) {
742
1072
  const {
743
1073
  placeholder = "Search\u2026",
@@ -754,11 +1084,11 @@ function SearchPanel(props = {}) {
754
1084
  const text = typeof label === "string" && label.trim() ? label.trim() : buttonLabel;
755
1085
  const resolvedSearchPath = resolveSearchPath(searchPath);
756
1086
  const data = { placeholder, hotkey, maxResults, groupOrder, label: text, searchPath: resolvedSearchPath };
757
- return /* @__PURE__ */ React15.createElement("div", { "data-canopy-search-form": true, className: "flex-1 min-w-0" }, /* @__PURE__ */ React15.createElement("div", { className: "relative w-full" }, /* @__PURE__ */ React15.createElement(SearchPanelForm, { placeholder, buttonLabel, label, searchPath: resolvedSearchPath }), /* @__PURE__ */ React15.createElement(SearchPanelTeaserResults, null)), /* @__PURE__ */ React15.createElement("script", { type: "application/json", dangerouslySetInnerHTML: { __html: JSON.stringify(data) } }));
1087
+ return /* @__PURE__ */ React17.createElement("div", { "data-canopy-search-form": true, className: "flex-1 min-w-0" }, /* @__PURE__ */ React17.createElement("div", { className: "relative w-full" }, /* @__PURE__ */ React17.createElement(SearchPanelForm, { placeholder, buttonLabel, label, searchPath: resolvedSearchPath }), /* @__PURE__ */ React17.createElement(SearchPanelTeaserResults, null)), /* @__PURE__ */ React17.createElement("script", { type: "application/json", dangerouslySetInnerHTML: { __html: JSON.stringify(data) } }));
758
1088
  }
759
1089
 
760
1090
  // ui/src/iiif/ManifestPrimitives.jsx
761
- import React16 from "react";
1091
+ import React18 from "react";
762
1092
  import {
763
1093
  Label as CloverLabel,
764
1094
  Metadata as CloverMetadata,
@@ -783,29 +1113,30 @@ function ensureMetadata(items) {
783
1113
  function Label({ manifest, label, ...rest }) {
784
1114
  const intl = label || manifest && manifest.label;
785
1115
  if (!hasInternationalValue(intl)) return null;
786
- return /* @__PURE__ */ React16.createElement(CloverLabel, { label: intl, ...rest });
1116
+ return /* @__PURE__ */ React18.createElement(CloverLabel, { label: intl, ...rest });
787
1117
  }
788
1118
  function Summary({ manifest, summary, ...rest }) {
789
1119
  const intl = summary || manifest && manifest.summary;
790
1120
  if (!hasInternationalValue(intl)) return null;
791
- return /* @__PURE__ */ React16.createElement(CloverSummary, { summary: intl, ...rest });
1121
+ return /* @__PURE__ */ React18.createElement(CloverSummary, { summary: intl, ...rest });
792
1122
  }
793
1123
  function Metadata({ manifest, metadata, ...rest }) {
794
1124
  const items = ensureMetadata(metadata || manifest && manifest.metadata);
795
1125
  if (!items.length) return null;
796
- return /* @__PURE__ */ React16.createElement(CloverMetadata, { metadata: items, ...rest });
1126
+ return /* @__PURE__ */ React18.createElement(CloverMetadata, { metadata: items, ...rest });
797
1127
  }
798
1128
  function RequiredStatement({ manifest, requiredStatement, ...rest }) {
799
1129
  const stmt = requiredStatement || manifest && manifest.requiredStatement;
800
1130
  if (!stmt || !hasInternationalValue(stmt.label) || !hasInternationalValue(stmt.value)) {
801
1131
  return null;
802
1132
  }
803
- return /* @__PURE__ */ React16.createElement(CloverRequiredStatement, { requiredStatement: stmt, ...rest });
1133
+ return /* @__PURE__ */ React18.createElement(CloverRequiredStatement, { requiredStatement: stmt, ...rest });
804
1134
  }
805
1135
  export {
806
1136
  HelloWorld,
807
1137
  interstitials_exports as Interstitials,
808
1138
  Label,
1139
+ Layout,
809
1140
  Metadata,
810
1141
  MdxRelatedItems as RelatedItems,
811
1142
  RequiredStatement,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/HelloWorld.jsx", "../src/iiif/Viewer.jsx", "../src/iiif/Slider.jsx", "../src/iiif/Scroll.jsx", "../src/iiif/MdxRelatedItems.jsx", "../src/interstitials/index.js", "../src/interstitials/Hero.jsx", "../src/interstitials/hero-utils.js", "../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": ["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, { 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 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", "export { default as Hero } from './Hero.jsx';\nexport { computeHeroHeightStyle } from './hero-utils.js';\n", "import React from \"react\";\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\nfunction resolveFeaturedItem({item, index, random}) {\n if (item) return item;\n const list =\n helpers && helpers.readFeaturedFromCacheSync\n ? helpers.readFeaturedFromCacheSync()\n : [];\n if (!list.length) return null;\n if (typeof index === \"number\") {\n const idx = Math.max(0, Math.min(list.length - 1, Math.floor(index)));\n return list[idx];\n }\n if (random === true || random === \"true\") {\n const idx = Math.floor(Math.random() * Math.max(1, list.length));\n return list[idx];\n }\n return list[0];\n}\n\nfunction normalizeLinks(links) {\n if (!Array.isArray(links)) return [];\n return links\n .map((link) => {\n if (!link) return null;\n const href = applyBasePath(link.href || \"\");\n const title = link.title ? String(link.title) : \"\";\n if (!href || !title) return null;\n const type = link.type === \"secondary\" ? \"secondary\" : \"primary\";\n return {href, title, type};\n })\n .filter(Boolean);\n}\n\nfunction sanitizeRest(rest) {\n const clone = {...rest};\n try {\n delete clone.random;\n delete clone.index;\n delete clone.item;\n delete clone.links;\n delete clone.overlay;\n delete clone.variant;\n delete clone.background;\n } catch (_) {}\n return clone;\n}\n\nfunction normalizeBackground(value) {\n try {\n const allowed = new Set([\"theme\", \"transparent\"]);\n const raw = value == null ? \"\" : String(value);\n const normalized = raw.trim().toLowerCase();\n return allowed.has(normalized) ? normalized : \"theme\";\n } catch (_) {\n return \"theme\";\n }\n}\n\nexport default function Hero({\n height = 520,\n item,\n index,\n random = true,\n headline,\n description,\n links = [],\n className = \"\",\n style = {},\n background = \"theme\",\n ...rest\n}) {\n const resolved = resolveFeaturedItem({item, index, random});\n const helpersList =\n helpers && helpers.readFeaturedFromCacheSync\n ? helpers.readFeaturedFromCacheSync()\n : [];\n\n const slides = [];\n const pushUnique = (entry) => {\n if (!entry) return;\n const key = String(entry.href || entry.id || entry.title || \"\");\n const hasKey = slides.some(\n (item) =>\n String(item && (item.href || item.id || item.title || \"\")) === key\n );\n if (!hasKey) {\n slides.push(entry);\n }\n };\n\n if (resolved) pushUnique(resolved);\n helpersList.forEach(pushUnique);\n\n if (!slides.length) return null;\n\n let orderedSlides = slides.slice();\n if (typeof index === \"number\" && orderedSlides.length > 1) {\n const clamp = Math.max(\n 0,\n Math.min(orderedSlides.length - 1, Math.floor(index))\n );\n if (clamp > 0) {\n orderedSlides = orderedSlides\n .slice(clamp)\n .concat(orderedSlides.slice(0, clamp));\n }\n } else if (random === true || random === \"true\") {\n const rand = Math.floor(Math.random() * orderedSlides.length);\n if (rand > 0) {\n orderedSlides = orderedSlides\n .slice(rand)\n .concat(orderedSlides.slice(0, rand));\n }\n }\n\n const heroHeight = computeHeroHeightStyle(height);\n const heroStyles = {...(style || {})};\n if (heroHeight && heroHeight.height) {\n heroStyles[\"--hero-height\"] = heroHeight.height;\n }\n\n const derivedDescription = description ? String(description) : \"\";\n const normalizedLinks = normalizeLinks(links);\n\n const primarySlide = orderedSlides[0] || null;\n const overlayTitle = headline || (primarySlide && primarySlide.title) || \"\";\n const defaultLinkHref = applyBasePath(\n primarySlide && primarySlide.href ? primarySlide.href : \"#\"\n );\n const overlayLinks = normalizedLinks.length\n ? normalizedLinks\n : [\n {\n href: defaultLinkHref,\n title: \"View work\",\n type: \"primary\",\n },\n ];\n\n const normalizedBackground = normalizeBackground(background);\n const backgroundClassName =\n normalizedBackground === \"transparent\"\n ? \"canopy-interstitial--bg-transparent\"\n : \"\";\n\n const containerClassName = [\n \"canopy-interstitial\",\n \"canopy-interstitial--hero\",\n backgroundClassName,\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n const renderSlide = (\n slide,\n idx,\n { showVeil = true, captionVariant = \"overlay\" } = {}\n ) => {\n const safeHref = applyBasePath(slide.href || \"#\");\n const isStaticCaption = captionVariant === \"static\";\n const paneClassName = [\n \"canopy-interstitial__pane\",\n showVeil ? \"\" : \"canopy-interstitial__pane--flat\",\n isStaticCaption ? \"canopy-interstitial__pane--static\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n if (isStaticCaption) {\n return (\n <div className=\"swiper-slide\" key={safeHref || idx}>\n <article className={paneClassName}>\n {slide.thumbnail ? (\n <div className=\"canopy-interstitial__media-frame\">\n <img\n src={slide.thumbnail}\n alt=\"\"\n aria-hidden=\"true\"\n className=\"canopy-interstitial__media canopy-interstitial__media--static\"\n loading={idx === 0 ? \"eager\" : \"lazy\"}\n />\n </div>\n ) : null}\n {slide.title ? (\n <div className=\"canopy-interstitial__caption canopy-interstitial__caption--static\">\n <a href={safeHref} className=\"canopy-interstitial__caption-link\">\n {slide.title}\n </a>\n </div>\n ) : null}\n </article>\n </div>\n );\n }\n\n return (\n <div className=\"swiper-slide\" key={safeHref || idx}>\n <article className={paneClassName}>\n {slide.thumbnail ? (\n <img\n src={slide.thumbnail}\n alt=\"\"\n aria-hidden=\"true\"\n className=\"canopy-interstitial__media\"\n loading={idx === 0 ? \"eager\" : \"lazy\"}\n />\n ) : null}\n {showVeil ? (\n <div className=\"canopy-interstitial__veil\" aria-hidden=\"true\" />\n ) : null}\n {slide.title ? (\n <div className=\"canopy-interstitial__caption\">\n <a href={safeHref} className=\"canopy-interstitial__caption-link\">\n {slide.title}\n </a>\n </div>\n ) : null}\n </article>\n </div>\n );\n };\n\n const renderSlider = (options = {}) => (\n <div className=\"canopy-interstitial__slider swiper\">\n <div className=\"swiper-wrapper\">\n {orderedSlides.map((slide, idx) => renderSlide(slide, idx, options))}\n </div>\n <div className=\"canopy-interstitial__nav\">\n <button\n type=\"button\"\n aria-label=\"Previous slide\"\n className=\"canopy-interstitial__nav-btn canopy-interstitial__nav-btn--prev swiper-button-prev\"\n />\n <button\n type=\"button\"\n aria-label=\"Next slide\"\n className=\"canopy-interstitial__nav-btn canopy-interstitial__nav-btn--next swiper-button-next\"\n />\n </div>\n <div className=\"canopy-interstitial__pagination swiper-pagination\" />\n </div>\n );\n\n const overlayContent = (\n <>\n {overlayTitle ? (\n <h1 className=\"canopy-interstitial__headline\">{overlayTitle}</h1>\n ) : null}\n {derivedDescription ? (\n <p className=\"canopy-interstitial__description\">\n {derivedDescription}\n </p>\n ) : null}\n {overlayLinks.length ? (\n <div className=\"canopy-interstitial__actions\">\n {overlayLinks.map((link) => (\n <a\n key={`${link.href}-${link.title}`}\n href={link.href}\n className={\n link.type === \"secondary\"\n ? \"canopy-button canopy-button--secondary\"\n : \"canopy-button canopy-button--primary\"\n }\n >\n {link.title}\n </a>\n ))}\n </div>\n ) : null}\n </>\n );\n\n const cleanedProps = sanitizeRest(rest);\n\n return (\n <section\n className={containerClassName}\n data-canopy-hero-slider=\"1\"\n style={heroStyles}\n {...cleanedProps}\n >\n <div className=\"canopy-interstitial__layout\">\n <div className=\"canopy-interstitial__panel\">\n <div className=\"canopy-interstitial__body\">{overlayContent}</div>\n </div>\n <div className=\"canopy-interstitial__media-group\">\n {renderSlider({ showVeil: false, captionVariant: \"static\" })}\n </div>\n </div>\n </section>\n );\n}\n", "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\nexport { computeHeroHeightStyle };\nexport default computeHeroHeightStyle;\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 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 <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": ["React", "React", "useEffect", "useState", "React", "useEffect", "useState", "React", "React", "item", "React", "React", "helpers", "React", "React", "React", "React", "React", "React", "_", "React", "React", "React", "React", "React"]
3
+ "sources": ["../src/HelloWorld.jsx", "../src/iiif/Viewer.jsx", "../src/iiif/Slider.jsx", "../src/iiif/Scroll.jsx", "../src/iiif/MdxRelatedItems.jsx", "../src/interstitials/index.js", "../src/interstitials/Hero.jsx", "../src/interstitials/hero-utils.js", "../src/layout/SubNavigation.jsx", "../src/layout/Layout.jsx", "../src/layout/ContentNavigation.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": ["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, { 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 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", "export { default as Hero } from './Hero.jsx';\nexport { computeHeroHeightStyle } from './hero-utils.js';\n", "import React from \"react\";\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\nfunction resolveFeaturedItem({item, index, random}) {\n if (item) return item;\n const list =\n helpers && helpers.readFeaturedFromCacheSync\n ? helpers.readFeaturedFromCacheSync()\n : [];\n if (!list.length) return null;\n if (typeof index === \"number\") {\n const idx = Math.max(0, Math.min(list.length - 1, Math.floor(index)));\n return list[idx];\n }\n if (random === true || random === \"true\") {\n const idx = Math.floor(Math.random() * Math.max(1, list.length));\n return list[idx];\n }\n return list[0];\n}\n\nfunction normalizeLinks(links) {\n if (!Array.isArray(links)) return [];\n return links\n .map((link) => {\n if (!link) return null;\n const href = applyBasePath(link.href || \"\");\n const title = link.title ? String(link.title) : \"\";\n if (!href || !title) return null;\n const type = link.type === \"secondary\" ? \"secondary\" : \"primary\";\n return {href, title, type};\n })\n .filter(Boolean);\n}\n\nfunction sanitizeRest(rest) {\n const clone = {...rest};\n try {\n delete clone.random;\n delete clone.index;\n delete clone.item;\n delete clone.links;\n delete clone.overlay;\n delete clone.variant;\n delete clone.background;\n } catch (_) {}\n return clone;\n}\n\nfunction normalizeBackground(value) {\n try {\n const allowed = new Set([\"theme\", \"transparent\"]);\n const raw = value == null ? \"\" : String(value);\n const normalized = raw.trim().toLowerCase();\n return allowed.has(normalized) ? normalized : \"theme\";\n } catch (_) {\n return \"theme\";\n }\n}\n\nexport default function Hero({\n height = 520,\n item,\n index,\n random = true,\n headline,\n description,\n links = [],\n className = \"\",\n style = {},\n background = \"theme\",\n ...rest\n}) {\n const resolved = resolveFeaturedItem({item, index, random});\n const helpersList =\n helpers && helpers.readFeaturedFromCacheSync\n ? helpers.readFeaturedFromCacheSync()\n : [];\n\n const slides = [];\n const pushUnique = (entry) => {\n if (!entry) return;\n const key = String(entry.href || entry.id || entry.title || \"\");\n const hasKey = slides.some(\n (item) =>\n String(item && (item.href || item.id || item.title || \"\")) === key\n );\n if (!hasKey) {\n slides.push(entry);\n }\n };\n\n if (resolved) pushUnique(resolved);\n helpersList.forEach(pushUnique);\n\n if (!slides.length) return null;\n\n let orderedSlides = slides.slice();\n if (typeof index === \"number\" && orderedSlides.length > 1) {\n const clamp = Math.max(\n 0,\n Math.min(orderedSlides.length - 1, Math.floor(index))\n );\n if (clamp > 0) {\n orderedSlides = orderedSlides\n .slice(clamp)\n .concat(orderedSlides.slice(0, clamp));\n }\n } else if (random === true || random === \"true\") {\n const rand = Math.floor(Math.random() * orderedSlides.length);\n if (rand > 0) {\n orderedSlides = orderedSlides\n .slice(rand)\n .concat(orderedSlides.slice(0, rand));\n }\n }\n\n const heroHeight = computeHeroHeightStyle(height);\n const heroStyles = {...(style || {})};\n if (heroHeight && heroHeight.height) {\n heroStyles[\"--hero-height\"] = heroHeight.height;\n }\n\n const derivedDescription = description ? String(description) : \"\";\n const normalizedLinks = normalizeLinks(links);\n\n const primarySlide = orderedSlides[0] || null;\n const overlayTitle = headline || (primarySlide && primarySlide.title) || \"\";\n const defaultLinkHref = applyBasePath(\n primarySlide && primarySlide.href ? primarySlide.href : \"#\"\n );\n const overlayLinks = normalizedLinks.length\n ? normalizedLinks\n : [\n {\n href: defaultLinkHref,\n title: \"View work\",\n type: \"primary\",\n },\n ];\n\n const normalizedBackground = normalizeBackground(background);\n const backgroundClassName =\n normalizedBackground === \"transparent\"\n ? \"canopy-interstitial--bg-transparent\"\n : \"\";\n\n const containerClassName = [\n \"canopy-interstitial\",\n \"canopy-interstitial--hero\",\n backgroundClassName,\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n const renderSlide = (\n slide,\n idx,\n { showVeil = true, captionVariant = \"overlay\" } = {}\n ) => {\n const safeHref = applyBasePath(slide.href || \"#\");\n const isStaticCaption = captionVariant === \"static\";\n const paneClassName = [\n \"canopy-interstitial__pane\",\n showVeil ? \"\" : \"canopy-interstitial__pane--flat\",\n isStaticCaption ? \"canopy-interstitial__pane--static\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n if (isStaticCaption) {\n return (\n <div className=\"swiper-slide\" key={safeHref || idx}>\n <article className={paneClassName}>\n {slide.thumbnail ? (\n <div className=\"canopy-interstitial__media-frame\">\n <img\n src={slide.thumbnail}\n alt=\"\"\n aria-hidden=\"true\"\n className=\"canopy-interstitial__media canopy-interstitial__media--static\"\n loading={idx === 0 ? \"eager\" : \"lazy\"}\n />\n </div>\n ) : null}\n {slide.title ? (\n <div className=\"canopy-interstitial__caption canopy-interstitial__caption--static\">\n <a href={safeHref} className=\"canopy-interstitial__caption-link\">\n {slide.title}\n </a>\n </div>\n ) : null}\n </article>\n </div>\n );\n }\n\n return (\n <div className=\"swiper-slide\" key={safeHref || idx}>\n <article className={paneClassName}>\n {slide.thumbnail ? (\n <img\n src={slide.thumbnail}\n alt=\"\"\n aria-hidden=\"true\"\n className=\"canopy-interstitial__media\"\n loading={idx === 0 ? \"eager\" : \"lazy\"}\n />\n ) : null}\n {showVeil ? (\n <div className=\"canopy-interstitial__veil\" aria-hidden=\"true\" />\n ) : null}\n {slide.title ? (\n <div className=\"canopy-interstitial__caption\">\n <a href={safeHref} className=\"canopy-interstitial__caption-link\">\n {slide.title}\n </a>\n </div>\n ) : null}\n </article>\n </div>\n );\n };\n\n const renderSlider = (options = {}) => (\n <div className=\"canopy-interstitial__slider swiper\">\n <div className=\"swiper-wrapper\">\n {orderedSlides.map((slide, idx) => renderSlide(slide, idx, options))}\n </div>\n <div className=\"canopy-interstitial__nav\">\n <button\n type=\"button\"\n aria-label=\"Previous slide\"\n className=\"canopy-interstitial__nav-btn canopy-interstitial__nav-btn--prev swiper-button-prev\"\n />\n <button\n type=\"button\"\n aria-label=\"Next slide\"\n className=\"canopy-interstitial__nav-btn canopy-interstitial__nav-btn--next swiper-button-next\"\n />\n </div>\n <div className=\"canopy-interstitial__pagination swiper-pagination\" />\n </div>\n );\n\n const overlayContent = (\n <>\n {overlayTitle ? (\n <h1 className=\"canopy-interstitial__headline\">{overlayTitle}</h1>\n ) : null}\n {derivedDescription ? (\n <p className=\"canopy-interstitial__description\">\n {derivedDescription}\n </p>\n ) : null}\n {overlayLinks.length ? (\n <div className=\"canopy-interstitial__actions\">\n {overlayLinks.map((link) => (\n <a\n key={`${link.href}-${link.title}`}\n href={link.href}\n className={\n link.type === \"secondary\"\n ? \"canopy-button canopy-button--secondary\"\n : \"canopy-button canopy-button--primary\"\n }\n >\n {link.title}\n </a>\n ))}\n </div>\n ) : null}\n </>\n );\n\n const cleanedProps = sanitizeRest(rest);\n\n return (\n <section\n className={containerClassName}\n data-canopy-hero-slider=\"1\"\n style={heroStyles}\n {...cleanedProps}\n >\n <div className=\"canopy-interstitial__layout\">\n <div className=\"canopy-interstitial__panel\">\n <div className=\"canopy-interstitial__body\">{overlayContent}</div>\n </div>\n <div className=\"canopy-interstitial__media-group\">\n {renderSlider({ showVeil: false, captionVariant: \"static\" })}\n </div>\n </div>\n </section>\n );\n}\n", "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\nexport { computeHeroHeightStyle };\nexport default computeHeroHeightStyle;\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';\nimport navigationHelpers from '../../../lib/components/navigation.js';\nimport SubNavigation from './SubNavigation.jsx';\nimport ContentNavigation from './ContentNavigation.jsx';\n\nfunction buildHeadingTree(headings) {\n if (!Array.isArray(headings) || !headings.length) return [];\n const root = [];\n const stack = [];\n headings.forEach((heading) => {\n if (!heading || typeof heading !== 'object') return;\n const depth = typeof heading.depth === 'number' ? heading.depth : heading.level;\n if (typeof depth !== 'number' || depth < 2) return;\n const entry = {\n id: heading.id || heading.slug || heading.title,\n title: heading.title || heading.text || heading.id,\n depth,\n children: [],\n };\n while (stack.length && stack[stack.length - 1].depth >= entry.depth) {\n stack.pop();\n }\n if (!stack.length) {\n root.push(entry);\n } else {\n stack[stack.length - 1].children.push(entry);\n }\n stack.push(entry);\n });\n return root;\n}\n\nfunction buildNavigationAside(sidebar, className) {\n if (!sidebar) {\n return <SubNavigation className={className} />;\n }\n if (typeof sidebar === 'function') {\n return React.createElement(sidebar);\n }\n return sidebar;\n}\n\nexport default function Layout({\n children,\n sidebar,\n navigation = true,\n fluid = false,\n contentNavigation = true,\n className = '',\n contentClassName = '',\n sidebarClassName = '',\n contentNavigationClassName = '',\n ...rest\n}) {\n const PageContext =\n navigationHelpers && typeof navigationHelpers.getPageContext === 'function'\n ? navigationHelpers.getPageContext()\n : null;\n const context = PageContext ? React.useContext(PageContext) : null;\n const pageHeadings = React.useMemo(() => {\n const headings = context && context.page ? context.page.headings : null;\n return Array.isArray(headings) ? headings : [];\n }, [context]);\n const contentHeading = React.useMemo(() => {\n const first = pageHeadings.find((heading) => {\n const depth = heading && (heading.depth || heading.level);\n return depth === 1;\n });\n return first && first.title ? first.title : null;\n }, [pageHeadings]);\n const headingAnchorId = React.useMemo(() => {\n const first = pageHeadings.find((heading) => {\n const depth = heading && (heading.depth || heading.level);\n return depth === 1;\n });\n return first && first.id ? first.id : null;\n }, [pageHeadings]);\n const headingTree = React.useMemo(\n () => buildHeadingTree(pageHeadings),\n [pageHeadings]\n );\n\n const showLeftColumn = navigation !== false;\n const hasContentNavigation =\n navigation !== false &&\n contentNavigation !== false &&\n headingTree.length > 0;\n\n const gridClass = (() => {\n if (showLeftColumn && hasContentNavigation) {\n return 'md:grid md:grid-cols-[17rem_minmax(0,1fr)_14rem] md:items-start md:gap-10';\n }\n if (showLeftColumn) {\n return 'md:grid md:grid-cols-[17rem_minmax(0,1fr)] md:items-start md:gap-10';\n }\n if (hasContentNavigation) {\n return 'md:grid md:grid-cols-[minmax(0,1fr)_14rem] md:items-start md:gap-10';\n }\n return '';\n })();\n\n const containerClassName = [\n 'w-full py-6 getting-started-layout',\n gridClass,\n fluid ? 'px-4 md:px-8 lg:px-12' : 'mx-auto max-w-content px-4',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const leftAsideClassName = [\n 'mt-8 md:mt-0 md:order-1 md:sticky md:top-24 md:max-h-[calc(100vh-6rem)] md:overflow-y-auto text-sm text-slate-600',\n sidebarClassName,\n ]\n .filter(Boolean)\n .join(' ');\n\n const contentOrderClass = showLeftColumn ? 'md:order-2' : hasContentNavigation ? 'md:order-1' : '';\n const contentClassNames = [\n 'space-y-6',\n contentOrderClass,\n contentClassName,\n ]\n .filter(Boolean)\n .join(' ');\n\n const contentNavigationAsideClassName = [\n 'hidden md:block md:order-3 mt-8 md:mt-0 md:sticky md:top-24 md:max-h-[calc(100vh-6rem)] md:overflow-y-auto text-sm text-slate-600',\n contentNavigationClassName,\n ]\n .filter(Boolean)\n .join(' ');\n\n const sidebarNode = showLeftColumn\n ? buildNavigationAside(sidebar, sidebarClassName)\n : null;\n\n return (\n <div className={containerClassName} {...rest}>\n {showLeftColumn ? (\n <aside className={leftAsideClassName}>{sidebarNode}</aside>\n ) : null}\n <div className={contentClassNames}>{children}</div>\n {hasContentNavigation ? (\n <aside className={contentNavigationAsideClassName}>\n <ContentNavigation\n items={headingTree}\n heading={contentHeading || undefined}\n headingId={headingAnchorId || undefined}\n pageTitle={context && context.page ? context.page.title : undefined}\n />\n </aside>\n ) : null}\n </div>\n );\n}\n", "import React from 'react';\n\nconst SCROLL_OFFSET_REM = 1.618;\n\nfunction depthIndex(depth) {\n return Math.max(0, Math.min(5, (depth || 1) - 1));\n}\n\nexport default function ContentNavigation({\n items = [],\n className = '',\n style = {},\n heading,\n headingId,\n pageTitle,\n ariaLabel,\n}) {\n const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\n const savedDepthsRef = React.useRef(null);\n\n if ((!items || !items.length) && !headingId) return null;\n\n const combinedClassName = ['canopy-sub-navigation canopy-content-navigation', className]\n .filter(Boolean)\n .join(' ');\n\n const effectiveHeading = heading || pageTitle || null;\n const navLabel = ariaLabel || (effectiveHeading ? `${effectiveHeading} navigation` : 'Section navigation');\n\n const getSavedDepth = React.useCallback(\n (id, fallback) => {\n if (!id) return fallback;\n if (!savedDepthsRef.current) savedDepthsRef.current = new Map();\n const store = savedDepthsRef.current;\n if (store.has(id)) return store.get(id);\n store.set(id, fallback);\n return fallback;\n },\n []\n );\n\n const headingEntries = React.useMemo(() => {\n const entries = [];\n const seen = new Set();\n if (headingId) {\n const topId = String(headingId);\n entries.push({ id: topId, depth: 1 });\n seen.add(topId);\n }\n const pushNodes = (nodes) => {\n if (!Array.isArray(nodes)) return;\n nodes.forEach((node) => {\n if (!node || !node.id) return;\n const id = String(node.id);\n if (seen.has(id)) return;\n seen.add(id);\n const depth = node.depth || node.level || getSavedDepth(id, 2);\n entries.push({ id, depth });\n if (node.children && node.children.length) pushNodes(node.children);\n });\n };\n pushNodes(items);\n return entries;\n }, [headingId, items, getSavedDepth]);\n\n const fallbackId = headingEntries.length ? headingEntries[0].id : headingId || null;\n const [activeId, setActiveId] = React.useState(fallbackId);\n const activeIdRef = React.useRef(activeId);\n React.useEffect(() => {\n activeIdRef.current = activeId;\n }, [activeId]);\n\n React.useEffect(() => {\n if (!headingEntries.length) return;\n if (!headingEntries.some((entry) => entry.id === activeIdRef.current)) {\n const next = headingEntries[0].id;\n activeIdRef.current = next;\n setActiveId(next);\n }\n }, [headingEntries]);\n\n const computeOffsetPx = React.useCallback(() => {\n if (!isBrowser) return 0;\n try {\n const root = document.documentElement;\n const fontSize = root\n ? parseFloat(window.getComputedStyle(root).fontSize || '16') || 16\n : 16;\n return fontSize * SCROLL_OFFSET_REM;\n } catch (_) {\n return 0;\n }\n }, [isBrowser]);\n\n const headingElementsRef = React.useRef([]);\n\n const updateActiveFromElements = React.useCallback(\n (elements) => {\n if (!elements || !elements.length) return;\n const offset = computeOffsetPx();\n let nextId = elements[0].id;\n for (const { id, element } of elements) {\n const rect = element.getBoundingClientRect();\n if (rect.top - offset <= 0) {\n nextId = id;\n } else {\n break;\n }\n }\n if (nextId && nextId !== activeIdRef.current) {\n activeIdRef.current = nextId;\n setActiveId(nextId);\n }\n },\n [computeOffsetPx]\n );\n\n React.useEffect(() => {\n if (!isBrowser) return undefined;\n const elements = headingEntries\n .map((entry) => {\n const element = document.getElementById(entry.id);\n return element ? { id: entry.id, element } : null;\n })\n .filter(Boolean);\n headingElementsRef.current = elements;\n updateActiveFromElements(elements);\n if (!elements.length) return undefined;\n\n let ticking = false;\n const handle = () => {\n if (!ticking) {\n ticking = true;\n window.requestAnimationFrame(() => {\n updateActiveFromElements(elements);\n ticking = false;\n });\n }\n };\n window.addEventListener('scroll', handle, { passive: true });\n window.addEventListener('resize', handle);\n return () => {\n window.removeEventListener('scroll', handle);\n window.removeEventListener('resize', handle);\n };\n }, [headingEntries, isBrowser, updateActiveFromElements]);\n\n const handleAnchorClick = React.useCallback(\n (event, targetId, options = {}) => {\n try {\n if (event && typeof event.preventDefault === 'function') event.preventDefault();\n } catch (_) {}\n if (!isBrowser) return;\n const offset = computeOffsetPx();\n let top = 0;\n if (targetId && targetId !== 'top' && !options.scrollToTop) {\n const el = document.getElementById(targetId);\n if (el) {\n const rect = el.getBoundingClientRect();\n top = window.scrollY + rect.top - offset;\n }\n }\n if (!Number.isFinite(top) || top < 0 || options.scrollToTop) top = 0;\n const nextId = targetId && targetId !== 'top'\n ? targetId\n : headingEntries[0]?.id || headingId || null;\n if (nextId) {\n activeIdRef.current = nextId;\n setActiveId(nextId);\n }\n try {\n window.scrollTo({ top, behavior: 'smooth' });\n } catch (_) {\n window.scrollTo(0, top);\n }\n },\n [computeOffsetPx, headingEntries, headingId, isBrowser]\n );\n\n const renderNodes = React.useCallback(\n (nodes) => {\n if (!nodes || !nodes.length) return null;\n return nodes.map((node) => {\n if (!node) return null;\n const id = node.id ? String(node.id) : '';\n const depth = node.depth || node.level || getSavedDepth(id, 2);\n const idx = depthIndex(depth);\n const isActive = id && activeId === id;\n return (\n <li key={id || node.title} className=\"canopy-sub-navigation__item\" data-depth={idx}>\n <a\n className={`canopy-sub-navigation__link depth-${idx}${isActive ? ' is-active' : ''}`}\n href={id ? `#${id}` : '#'}\n onClick={(event) => handleAnchorClick(event, id || null)}\n aria-current={isActive ? 'location' : undefined}\n >\n {node.title}\n </a>\n {node.children && node.children.length ? (\n <ul\n className=\"canopy-sub-navigation__list canopy-sub-navigation__list--nested\"\n role=\"list\"\n >\n {renderNodes(node.children)}\n </ul>\n ) : null}\n </li>\n );\n });\n },\n [handleAnchorClick, activeId, getSavedDepth]\n );\n\n const nestedItems = renderNodes(items);\n const topLink = headingId\n ? (\n <li className=\"canopy-sub-navigation__item\" data-depth={0}>\n <a\n className={`canopy-sub-navigation__link depth-0${activeId === headingId ? ' is-active' : ''}`}\n href={`#${headingId}`}\n onClick={(event) => handleAnchorClick(event, headingId, { scrollToTop: true })}\n aria-current={activeId === headingId ? 'location' : undefined}\n >\n {effectiveHeading || pageTitle || headingId}\n </a>\n {nestedItems ? (\n <ul\n className=\"canopy-sub-navigation__list canopy-sub-navigation__list--nested\"\n role=\"list\"\n >\n {nestedItems}\n </ul>\n ) : null}\n </li>\n )\n : null;\n\n return (\n <nav className={combinedClassName} style={style} aria-label={navLabel}>\n <ul className=\"canopy-sub-navigation__list\" role=\"list\">\n {topLink || nestedItems}\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 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 <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": ["React", "React", "useEffect", "useState", "React", "useEffect", "useState", "React", "React", "item", "React", "React", "helpers", "React", "navigationHelpers", "React", "renderNodes", "React", "navigationHelpers", "React", "React", "React", "React", "React", "React", "_", "React", "React", "React", "React", "React"]
7
7
  }
@@ -1,5 +1,4 @@
1
1
  .canopy-sub-navigation {
2
- font-size: 0.95rem;
3
2
  color: inherit;
4
3
  }
5
4
 
@@ -1189,7 +1189,6 @@ html.dark a.canopy-logo svg path.canopy-logo-overlay {
1189
1189
  }
1190
1190
 
1191
1191
  .canopy-sub-navigation {
1192
- font-size: 0.95rem;
1193
1192
  color: inherit;
1194
1193
  }
1195
1194