@canopy-iiif/app 0.7.9 → 0.7.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,41 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __commonJS = (cb, mod) => function __require() {
8
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
19
+ // If the importer is in node compatibility mode or this is not an ESM
20
+ // file that has been converted to a CommonJS file using a Babel-
21
+ // compatible transform (i.e. "__esModule" has not been set), then set
22
+ // "default" to the CommonJS "module.exports" for node compatibility.
23
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
24
+ mod
25
+ ));
26
+
27
+ // ui/src/iiif/hero-utils.js
28
+ var require_hero_utils = __commonJS({
29
+ "ui/src/iiif/hero-utils.js"(exports, module) {
30
+ function computeHeroHeightStyle2(height) {
31
+ const h = typeof height === "number" ? `${height}px` : String(height || "").trim();
32
+ const val = h || "360px";
33
+ return { width: "100%", height: val };
34
+ }
35
+ module.exports = { computeHeroHeightStyle: computeHeroHeightStyle2 };
36
+ }
37
+ });
38
+
1
39
  // ui/src/Fallback.jsx
2
40
  import React from "react";
3
41
  function Fallback({ name, ...props }) {
@@ -136,16 +174,75 @@ function MdxRelatedItems(props) {
136
174
  return /* @__PURE__ */ React5.createElement("div", { "data-canopy-related-items": "1", className: "not-prose" }, /* @__PURE__ */ React5.createElement("script", { type: "application/json", dangerouslySetInnerHTML: { __html: json } }));
137
175
  }
138
176
 
139
- // ui/src/search/MdxSearchForm.jsx
177
+ // ui/src/iiif/Hero.jsx
178
+ var import_hero_utils = __toESM(require_hero_utils());
140
179
  import React6 from "react";
141
- function MdxSearchForm(props) {
142
- let json = "{}";
143
- try {
144
- json = JSON.stringify(props || {});
145
- } catch (_) {
146
- json = "{}";
180
+ import helpers from "/home/runner/work/app/app/packages/app/lib/components/featured.js";
181
+ function Hero({
182
+ height = 360,
183
+ item,
184
+ index,
185
+ random,
186
+ className = "",
187
+ style = {},
188
+ ...rest
189
+ }) {
190
+ let resolved = item;
191
+ if (!resolved) {
192
+ const list = helpers && helpers.readFeaturedFromCacheSync ? helpers.readFeaturedFromCacheSync() : [];
193
+ let idx = 0;
194
+ if (typeof index === "number") {
195
+ idx = Math.max(0, Math.min(list.length - 1, Math.floor(index)));
196
+ } else if (random === true || random === "true") {
197
+ idx = Math.floor(Math.random() * Math.max(1, list.length));
198
+ }
199
+ resolved = list[idx] || list[0] || null;
147
200
  }
148
- return /* @__PURE__ */ React6.createElement("div", { "data-canopy-search-form": "1" }, /* @__PURE__ */ React6.createElement("script", { type: "application/json", dangerouslySetInnerHTML: { __html: json } }));
201
+ const hStyle = (0, import_hero_utils.computeHeroHeightStyle)(height);
202
+ const title = resolved && resolved.title || "";
203
+ const href = resolved && resolved.href || "#";
204
+ const thumbnail = resolved && resolved.thumbnail || "";
205
+ const baseStyles = {
206
+ position: "relative",
207
+ ...hStyle,
208
+ overflow: "hidden",
209
+ backgroundColor: "var(--color-gray-muted)"
210
+ };
211
+ const imgStyles = {
212
+ position: "absolute",
213
+ inset: 0,
214
+ width: "100%",
215
+ height: "100%",
216
+ objectFit: "cover",
217
+ objectPosition: "center",
218
+ filter: "none"
219
+ };
220
+ return /* @__PURE__ */ React6.createElement(
221
+ "figure",
222
+ {
223
+ className: ["canopy-hero", className].filter(Boolean).join(" "),
224
+ style: { ...baseStyles, ...style },
225
+ ...(() => {
226
+ const r = { ...rest };
227
+ try {
228
+ delete r.random;
229
+ delete r.index;
230
+ } catch (_) {
231
+ }
232
+ return r;
233
+ })()
234
+ },
235
+ thumbnail ? /* @__PURE__ */ React6.createElement("img", { src: thumbnail, alt: "", "aria-hidden": "true", style: imgStyles }) : null,
236
+ /* @__PURE__ */ React6.createElement("h3", null, /* @__PURE__ */ React6.createElement(
237
+ "a",
238
+ {
239
+ href,
240
+ style: { color: "inherit", textDecoration: "none" },
241
+ className: "canopy-hero-link"
242
+ },
243
+ title
244
+ ))
245
+ );
149
246
  }
150
247
 
151
248
  // ui/src/search/MdxSearchResults.jsx
@@ -172,20 +269,92 @@ function SearchSummary(props) {
172
269
  return /* @__PURE__ */ React8.createElement("div", { "data-canopy-search-summary": "1" }, /* @__PURE__ */ React8.createElement("script", { type: "application/json", dangerouslySetInnerHTML: { __html: json } }));
173
270
  }
174
271
 
175
- // ui/src/search/SearchTotal.jsx
272
+ // ui/src/search/MdxSearchTabs.jsx
176
273
  import React9 from "react";
177
- function SearchTotal(props) {
274
+ function MdxSearchTabs(props) {
178
275
  let json = "{}";
179
276
  try {
180
277
  json = JSON.stringify(props || {});
181
278
  } catch (_) {
182
279
  json = "{}";
183
280
  }
184
- return /* @__PURE__ */ React9.createElement("div", { "data-canopy-search-total": "1" }, /* @__PURE__ */ React9.createElement("script", { type: "application/json", dangerouslySetInnerHTML: { __html: json } }));
281
+ return /* @__PURE__ */ React9.createElement("div", { "data-canopy-search-tabs": "1" }, /* @__PURE__ */ React9.createElement("script", { type: "application/json", dangerouslySetInnerHTML: { __html: json } }));
185
282
  }
186
283
 
187
284
  // ui/src/command/MdxCommandPalette.jsx
285
+ import React13 from "react";
286
+
287
+ // ui/src/Icons.jsx
188
288
  import React10 from "react";
289
+ var MagnifyingGlassIcon = (props) => /* @__PURE__ */ React10.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 512 512", ...props }, /* @__PURE__ */ React10.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" }));
290
+
291
+ // ui/src/search/SearchPanelForm.jsx
292
+ import React11 from "react";
293
+ function SearchPanelForm(props = {}) {
294
+ const {
295
+ placeholder = "Search\u2026",
296
+ buttonLabel = "Search",
297
+ label,
298
+ searchPath = "/search"
299
+ } = props || {};
300
+ const text = typeof label === "string" && label.trim() ? label.trim() : buttonLabel;
301
+ return /* @__PURE__ */ React11.createElement(
302
+ "form",
303
+ {
304
+ action: searchPath,
305
+ method: "get",
306
+ role: "search",
307
+ autoComplete: "off",
308
+ spellCheck: "false",
309
+ className: "group flex items-center gap-2 px-2 py-1.5 rounded-lg border border-slate-300 bg-white/95 backdrop-blur text-slate-700 shadow-sm hover:shadow transition w-full focus-within:ring-2 focus-within:ring-brand-500"
310
+ },
311
+ /* @__PURE__ */ React11.createElement(MagnifyingGlassIcon, { className: "w-5 h-5 text-slate-400 group-focus-within:text-brand-500" }),
312
+ /* @__PURE__ */ React11.createElement(
313
+ "input",
314
+ {
315
+ type: "search",
316
+ name: "q",
317
+ inputMode: "search",
318
+ "data-canopy-command-input": true,
319
+ placeholder,
320
+ className: "flex-1 bg-transparent outline-none placeholder:text-slate-400 py-0.5 min-w-0",
321
+ "aria-label": "Search"
322
+ }
323
+ ),
324
+ /* @__PURE__ */ React11.createElement(
325
+ "button",
326
+ {
327
+ type: "submit",
328
+ "data-canopy-command-link": true,
329
+ className: "inline-flex items-center gap-1 px-2 py-1 rounded-md border border-slate-200 bg-slate-50 hover:bg-slate-100 text-slate-700"
330
+ },
331
+ /* @__PURE__ */ React11.createElement("span", null, text)
332
+ )
333
+ );
334
+ }
335
+
336
+ // ui/src/search/SearchPanelTeaserResults.jsx
337
+ import React12 from "react";
338
+ function SearchPanelTeaserResults(props = {}) {
339
+ const { style } = props || {};
340
+ const baseStyle = {
341
+ display: "none",
342
+ position: "absolute",
343
+ left: 0,
344
+ right: 0,
345
+ top: "calc(100% + 4px)",
346
+ background: "#fff",
347
+ border: "1px solid #e5e7eb",
348
+ borderRadius: 8,
349
+ boxShadow: "0 10px 25px rgba(0,0,0,0.12)",
350
+ zIndex: 1e3,
351
+ overflow: "auto",
352
+ maxHeight: "60vh"
353
+ };
354
+ return /* @__PURE__ */ React12.createElement("div", { "data-canopy-command-panel": true, style: { ...baseStyle, ...style || {} } }, /* @__PURE__ */ React12.createElement("div", { id: "cplist" }));
355
+ }
356
+
357
+ // ui/src/command/MdxCommandPalette.jsx
189
358
  function MdxCommandPalette(props = {}) {
190
359
  const {
191
360
  placeholder = "Search\u2026",
@@ -193,30 +362,47 @@ function MdxCommandPalette(props = {}) {
193
362
  maxResults = 8,
194
363
  groupOrder = ["work", "page"],
195
364
  button = true,
196
- buttonLabel = "Search"
365
+ // kept for backward compat; ignored by teaser form
366
+ buttonLabel = "Search",
367
+ label,
368
+ searchPath = "/search"
197
369
  } = props || {};
198
- const data = { placeholder, hotkey, maxResults, groupOrder };
199
- return /* @__PURE__ */ React10.createElement("div", { "data-canopy-command": true }, button && /* @__PURE__ */ React10.createElement(
200
- "button",
201
- {
202
- type: "button",
203
- "data-canopy-command-trigger": true,
204
- className: "inline-flex items-center gap-1 px-2 py-1 rounded border border-slate-300 text-slate-700 hover:bg-slate-50",
205
- "aria-label": "Open search"
206
- },
207
- /* @__PURE__ */ React10.createElement("span", { "aria-hidden": true }, "\u2318K"),
208
- /* @__PURE__ */ React10.createElement("span", { className: "sr-only" }, buttonLabel)
209
- ), /* @__PURE__ */ React10.createElement("script", { type: "application/json", dangerouslySetInnerHTML: { __html: JSON.stringify(data) } }));
370
+ const text = typeof label === "string" && label.trim() ? label.trim() : buttonLabel;
371
+ const data = { placeholder, hotkey, maxResults, groupOrder, label: text, searchPath };
372
+ return /* @__PURE__ */ React13.createElement("div", { "data-canopy-command": true, className: "flex-1 min-w-0" }, /* @__PURE__ */ React13.createElement("div", { className: "relative w-full" }, /* @__PURE__ */ React13.createElement("style", null, `.relative[data-canopy-panel-auto='1']:focus-within [data-canopy-command-panel]{display:block}`), /* @__PURE__ */ React13.createElement(SearchPanelForm, { placeholder, buttonLabel, label, searchPath }), /* @__PURE__ */ React13.createElement(SearchPanelTeaserResults, null)), /* @__PURE__ */ React13.createElement("script", { type: "application/json", dangerouslySetInnerHTML: { __html: JSON.stringify(data) } }));
373
+ }
374
+
375
+ // ui/src/search/SearchPanel.jsx
376
+ import React14 from "react";
377
+ function SearchPanel(props = {}) {
378
+ const {
379
+ placeholder = "Search\u2026",
380
+ hotkey = "mod+k",
381
+ maxResults = 8,
382
+ groupOrder = ["work", "page"],
383
+ // Kept for backward compat; form always renders submit
384
+ button = true,
385
+ // eslint-disable-line no-unused-vars
386
+ buttonLabel = "Search",
387
+ label,
388
+ searchPath = "/search"
389
+ } = props || {};
390
+ const text = typeof label === "string" && label.trim() ? label.trim() : buttonLabel;
391
+ const data = { placeholder, hotkey, maxResults, groupOrder, label: text, searchPath };
392
+ return /* @__PURE__ */ React14.createElement("div", { "data-canopy-command": true, className: "flex-1 min-w-0" }, /* @__PURE__ */ React14.createElement("div", { className: "relative w-full" }, /* @__PURE__ */ React14.createElement("style", null, `.relative[data-canopy-panel-auto='1']:focus-within [data-canopy-command-panel]{display:block}`), /* @__PURE__ */ React14.createElement(SearchPanelForm, { placeholder, buttonLabel, label, searchPath }), /* @__PURE__ */ React14.createElement(SearchPanelTeaserResults, null)), /* @__PURE__ */ React14.createElement("script", { type: "application/json", dangerouslySetInnerHTML: { __html: JSON.stringify(data) } }));
210
393
  }
211
394
  export {
212
395
  MdxCommandPalette as CommandPalette,
213
396
  Fallback,
214
397
  HelloWorld,
398
+ Hero,
215
399
  MdxRelatedItems as RelatedItems,
216
- MdxSearchForm as SearchForm,
400
+ SearchPanel,
401
+ SearchPanelForm,
402
+ SearchPanelTeaserResults,
217
403
  MdxSearchResults as SearchResults,
218
404
  SearchSummary,
219
- SearchTotal,
405
+ MdxSearchTabs as SearchTabs,
220
406
  Slider,
221
407
  Viewer
222
408
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/Fallback.jsx", "../src/HelloWorld.jsx", "../src/iiif/Viewer.jsx", "../src/iiif/Slider.jsx", "../src/iiif/MdxRelatedItems.jsx", "../src/search/MdxSearchForm.jsx", "../src/search/MdxSearchResults.jsx", "../src/search/SearchSummary.jsx", "../src/search/SearchTotal.jsx", "../src/command/MdxCommandPalette.jsx"],
4
- "sourcesContent": ["import React from 'react';\n\nexport function Fallback({ name, ...props }) {\n const style = {\n padding: '0.75rem 1rem',\n border: '1px dashed #d1d5db',\n color: '#6b7280',\n borderRadius: 6,\n background: '#f9fafb',\n fontSize: 14,\n };\n return (\n <div style={style} data-fallback-component={name || 'Unknown'}>\n <strong>{name || 'Unknown component'}</strong> not available in UI.\n </div>\n );\n}\n\n", "import React from \"react\";\n\nexport const HelloWorld = () => {\n return <div>Hello, World!</div>;\n};\n", "import React, { useEffect, useState } from \"react\";\n\n// SSR-safe wrapper around Clover's viewer. Clover touches the DOM at import time,\n// so we dynamically import it only in the browser.\n\n// Default Clover viewer options; can be overridden per-usage via props.options\nconst DEFAULT_VIEWER_OPTIONS = {\n showDownload: false,\n showIIIFBadge: false,\n showTitle: false,\n informationPanel: {\n open: false,\n renderAbout: false,\n renderToggle: false,\n },\n};\n\nfunction isPlainObject(val) {\n return val && typeof val === \"object\" && !Array.isArray(val);\n}\n\nfunction deepMerge(base, override) {\n if (!isPlainObject(base)) return override;\n const out = { ...base };\n if (!isPlainObject(override)) return out;\n for (const key of Object.keys(override)) {\n const a = base[key];\n const b = override[key];\n if (isPlainObject(a) && isPlainObject(b)) out[key] = deepMerge(a, b);\n else out[key] = b;\n }\n return out;\n}\n\nexport const Viewer = (props) => {\n const [CloverViewer, setCloverViewer] = useState(null);\n const mergedOptions = deepMerge(\n DEFAULT_VIEWER_OPTIONS,\n props && props.options\n );\n\n useEffect(() => {\n let mounted = true;\n const canUseDom =\n typeof window !== \"undefined\" && typeof document !== \"undefined\";\n if (canUseDom) {\n import(\"@samvera/clover-iiif/viewer\")\n .then((mod) => {\n if (!mounted) return;\n // Loaded Clover viewer dynamically in the browser\n const Comp = mod && (mod.default || mod.Viewer || mod);\n setCloverViewer(() => Comp);\n })\n .catch(() => {\n // Silently ignore load errors on the server or if Clover is unavailable\n });\n }\n return () => {\n mounted = false;\n };\n }, []);\n\n if (!CloverViewer) {\n // SSR placeholder for client hydration; props provided as JSON\n let json = \"{}\";\n try {\n const p = { ...(props || {}) };\n if (mergedOptions) p.options = mergedOptions;\n json = JSON.stringify(p);\n } catch (_) {\n json = \"{}\";\n }\n return (\n <div data-canopy-viewer=\"1\" className=\"not-prose\">\n <script\n type=\"application/json\"\n dangerouslySetInnerHTML={{ __html: json }}\n />\n </div>\n );\n }\n return <CloverViewer {...props} options={mergedOptions} />;\n};\n", "import React, { useEffect, useState } from \"react\";\n\n// SSR-safe wrapper around Clover's slider. Clover touches the DOM at import time,\n// so we dynamically import it only in the browser.\nexport const Slider = (props) => {\n const [CloverSlider, setCloverSlider] = useState(null);\n\n useEffect(() => {\n let mounted = true;\n const canUseDom =\n typeof window !== \"undefined\" && typeof document !== \"undefined\";\n if (canUseDom) {\n import(\"@samvera/clover-iiif/slider\")\n .then((mod) => {\n if (!mounted) return;\n console.log(mod);\n const Comp = mod && (mod.default || mod.Slider || mod);\n setCloverSlider(() => Comp);\n })\n .catch(() => {\n // Silently ignore load errors on the server or if Clover is unavailable\n });\n }\n return () => {\n mounted = false;\n };\n }, []);\n\n if (!CloverSlider) {\n // SSR placeholder for client hydration; props provided as JSON\n let json = \"{}\";\n try {\n json = JSON.stringify(props || {});\n } catch (_) {\n json = \"{}\";\n }\n return (\n <div data-canopy-slider=\"1\" className=\"not-prose\">\n <script\n type=\"application/json\"\n dangerouslySetInnerHTML={{ __html: json }}\n />\n </div>\n );\n }\n return <CloverSlider {...props} />;\n};\n", "import React from 'react';\n\n// SSR-safe placeholder for RelatedItems. Hydrated by canopy-related-items.js + canopy-slider.js\nexport default function MdxRelatedItems(props) {\n let json = '{}';\n try {\n json = JSON.stringify(props || {});\n } catch (_) {\n json = '{}';\n }\n return (\n <div data-canopy-related-items=\"1\" className=\"not-prose\">\n <script type=\"application/json\" dangerouslySetInnerHTML={{ __html: json }} />\n </div>\n );\n}\n", "import React from 'react';\n\nexport default function MdxSearchForm(props) {\n let json = '{}';\n try { json = JSON.stringify(props || {}); } catch (_) { json = '{}'; }\n return (\n <div data-canopy-search-form=\"1\">\n <script type=\"application/json\" dangerouslySetInnerHTML={{ __html: json }} />\n </div>\n );\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 SearchTotal(props) {\n let json = '{}';\n try { json = JSON.stringify(props || {}); } catch (_) { json = '{}'; }\n return (\n <div data-canopy-search-total=\"1\">\n <script type=\"application/json\" dangerouslySetInnerHTML={{ __html: json }} />\n </div>\n );\n}\n\n", "import React from 'react';\n\n// SSR-safe placeholder for the command palette. The real UI mounts client-side.\nexport default function MdxCommandPalette(props = {}) {\n const {\n placeholder = 'Search\u2026',\n hotkey = 'mod+k',\n maxResults = 8,\n groupOrder = ['work', 'page'],\n button = true,\n buttonLabel = 'Search',\n } = props || {};\n\n const data = { placeholder, hotkey, maxResults, groupOrder };\n return (\n <div data-canopy-command>\n {/* Optional trigger button shown in the header layout */}\n {button && (\n <button\n type=\"button\"\n data-canopy-command-trigger\n className=\"inline-flex items-center gap-1 px-2 py-1 rounded border border-slate-300 text-slate-700 hover:bg-slate-50\"\n aria-label=\"Open search\"\n >\n <span aria-hidden>\u2318K</span>\n <span className=\"sr-only\">{buttonLabel}</span>\n </button>\n )}\n <script type=\"application/json\" dangerouslySetInnerHTML={{ __html: JSON.stringify(data) }} />\n </div>\n );\n}\n\n"],
5
- "mappings": "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",
6
- "names": ["React", "React", "React", "useEffect", "useState", "React", "React", "React", "React", "React", "React"]
3
+ "sources": ["../src/iiif/hero-utils.js", "../src/Fallback.jsx", "../src/HelloWorld.jsx", "../src/iiif/Viewer.jsx", "../src/iiif/Slider.jsx", "../src/iiif/MdxRelatedItems.jsx", "../src/iiif/Hero.jsx", "../src/search/MdxSearchResults.jsx", "../src/search/SearchSummary.jsx", "../src/search/MdxSearchTabs.jsx", "../src/command/MdxCommandPalette.jsx", "../src/Icons.jsx", "../src/search/SearchPanelForm.jsx", "../src/search/SearchPanelTeaserResults.jsx", "../src/search/SearchPanel.jsx"],
4
+ "sourcesContent": ["function computeHeroHeightStyle(height) {\n const h = typeof height === 'number' ? `${height}px` : String(height || '').trim();\n const val = h || '360px';\n return { width: '100%', height: val };\n}\n\nmodule.exports = { computeHeroHeightStyle };\n\n", "import React from 'react';\n\nexport function Fallback({ name, ...props }) {\n const style = {\n padding: '0.75rem 1rem',\n border: '1px dashed #d1d5db',\n color: '#6b7280',\n borderRadius: 6,\n background: '#f9fafb',\n fontSize: 14,\n };\n return (\n <div style={style} data-fallback-component={name || 'Unknown'}>\n <strong>{name || 'Unknown component'}</strong> not available in UI.\n </div>\n );\n}\n\n", "import React from \"react\";\n\nexport const HelloWorld = () => {\n return <div>Hello, World!</div>;\n};\n", "import React, { useEffect, useState } from \"react\";\n\n// SSR-safe wrapper around Clover's viewer. Clover touches the DOM at import time,\n// so we dynamically import it only in the browser.\n\n// Default Clover viewer options; can be overridden per-usage via props.options\nconst DEFAULT_VIEWER_OPTIONS = {\n showDownload: false,\n showIIIFBadge: false,\n showTitle: false,\n informationPanel: {\n open: false,\n renderAbout: false,\n renderToggle: false,\n },\n};\n\nfunction isPlainObject(val) {\n return val && typeof val === \"object\" && !Array.isArray(val);\n}\n\nfunction deepMerge(base, override) {\n if (!isPlainObject(base)) return override;\n const out = { ...base };\n if (!isPlainObject(override)) return out;\n for (const key of Object.keys(override)) {\n const a = base[key];\n const b = override[key];\n if (isPlainObject(a) && isPlainObject(b)) out[key] = deepMerge(a, b);\n else out[key] = b;\n }\n return out;\n}\n\nexport const Viewer = (props) => {\n const [CloverViewer, setCloverViewer] = useState(null);\n const mergedOptions = deepMerge(\n DEFAULT_VIEWER_OPTIONS,\n props && props.options\n );\n\n useEffect(() => {\n let mounted = true;\n const canUseDom =\n typeof window !== \"undefined\" && typeof document !== \"undefined\";\n if (canUseDom) {\n import(\"@samvera/clover-iiif/viewer\")\n .then((mod) => {\n if (!mounted) return;\n // Loaded Clover viewer dynamically in the browser\n const Comp = mod && (mod.default || mod.Viewer || mod);\n setCloverViewer(() => Comp);\n })\n .catch(() => {\n // Silently ignore load errors on the server or if Clover is unavailable\n });\n }\n return () => {\n mounted = false;\n };\n }, []);\n\n if (!CloverViewer) {\n // SSR placeholder for client hydration; props provided as JSON\n let json = \"{}\";\n try {\n const p = { ...(props || {}) };\n if (mergedOptions) p.options = mergedOptions;\n json = JSON.stringify(p);\n } catch (_) {\n json = \"{}\";\n }\n return (\n <div data-canopy-viewer=\"1\" className=\"not-prose\">\n <script\n type=\"application/json\"\n dangerouslySetInnerHTML={{ __html: json }}\n />\n </div>\n );\n }\n return <CloverViewer {...props} options={mergedOptions} />;\n};\n", "import React, { useEffect, useState } from \"react\";\n\n// SSR-safe wrapper around Clover's slider. Clover touches the DOM at import time,\n// so we dynamically import it only in the browser.\nexport const Slider = (props) => {\n const [CloverSlider, setCloverSlider] = useState(null);\n\n useEffect(() => {\n let mounted = true;\n const canUseDom =\n typeof window !== \"undefined\" && typeof document !== \"undefined\";\n if (canUseDom) {\n import(\"@samvera/clover-iiif/slider\")\n .then((mod) => {\n if (!mounted) return;\n console.log(mod);\n const Comp = mod && (mod.default || mod.Slider || mod);\n setCloverSlider(() => Comp);\n })\n .catch(() => {\n // Silently ignore load errors on the server or if Clover is unavailable\n });\n }\n return () => {\n mounted = false;\n };\n }, []);\n\n if (!CloverSlider) {\n // SSR placeholder for client hydration; props provided as JSON\n let json = \"{}\";\n try {\n json = JSON.stringify(props || {});\n } catch (_) {\n json = \"{}\";\n }\n return (\n <div data-canopy-slider=\"1\" className=\"not-prose\">\n <script\n type=\"application/json\"\n dangerouslySetInnerHTML={{ __html: json }}\n />\n </div>\n );\n }\n return <CloverSlider {...props} />;\n};\n", "import React from 'react';\n\n// SSR-safe placeholder for RelatedItems. Hydrated by canopy-related-items.js + canopy-slider.js\nexport default function MdxRelatedItems(props) {\n let json = '{}';\n try {\n json = JSON.stringify(props || {});\n } catch (_) {\n json = '{}';\n }\n return (\n <div data-canopy-related-items=\"1\" className=\"not-prose\">\n <script type=\"application/json\" dangerouslySetInnerHTML={{ __html: json }} />\n </div>\n );\n}\n", "import React from \"react\";\n// SSR-only: pulls featured helpers from the library (Node APIs inside)\nimport helpers from \"../../../lib/components/featured.js\";\nimport { computeHeroHeightStyle } from './hero-utils.js';\n\n/**\n * Hero\n *\n * Full-width visual banner for a featured item.\n * - Fluid width (100% of container)\n * - Fixed height from `height` prop (no aspect ratio lock)\n * - Renders a background image from `item.thumbnail` with cover fit\n * - Title overlays with link to item.href\n *\n * Props:\n * - height: number | string \u2014 required; e.g., 360 or '420px'\n * - item: { title, href, thumbnail } \u2014 required\n * - className, style \u2014 optional container overrides\n */\nexport default function Hero({\n height = 360,\n item,\n index,\n random,\n className = \"\",\n style = {},\n ...rest\n}) {\n // Resolve item: prefer explicit prop, else pick from featured list.\n let resolved = item;\n if (!resolved) {\n const list =\n helpers && helpers.readFeaturedFromCacheSync\n ? helpers.readFeaturedFromCacheSync()\n : [];\n let idx = 0;\n if (typeof index === \"number\") {\n idx = Math.max(0, Math.min(list.length - 1, Math.floor(index)));\n } else if (random === true || random === \"true\") {\n idx = Math.floor(Math.random() * Math.max(1, list.length));\n }\n resolved = list[idx] || list[0] || null;\n }\n\n const hStyle = computeHeroHeightStyle(height);\n const title = (resolved && resolved.title) || \"\";\n const href = (resolved && resolved.href) || \"#\";\n const thumbnail = (resolved && resolved.thumbnail) || \"\";\n\n const baseStyles = {\n position: \"relative\",\n ...hStyle,\n overflow: \"hidden\",\n backgroundColor: \"var(--color-gray-muted)\",\n };\n\n const imgStyles = {\n position: \"absolute\",\n inset: 0,\n width: \"100%\",\n height: \"100%\",\n objectFit: \"cover\",\n objectPosition: \"center\",\n filter: \"none\",\n };\n\n return (\n <figure\n className={[\"canopy-hero\", className].filter(Boolean).join(\" \")}\n style={{ ...baseStyles, ...style }}\n {...(() => { const r = { ...rest }; try { delete r.random; delete r.index; } catch (_) {} return r; })()}\n >\n {thumbnail ? (\n <img src={thumbnail} alt=\"\" aria-hidden=\"true\" style={imgStyles} />\n ) : null}\n <h3>\n <a\n href={href}\n style={{ color: \"inherit\", textDecoration: \"none\" }}\n className=\"canopy-hero-link\"\n >\n {title}\n </a>\n </h3>\n </figure>\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 from '../search/SearchPanelForm.jsx';\nimport SearchPanelTeaserResults from '../search/SearchPanelTeaserResults.jsx';\n\n// SSR-safe placeholder for the command palette, composed from SearchPanel parts.\n// This ensures a single JSX source of truth for form/panel markup.\nexport default function MdxCommandPalette(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 data = { placeholder, hotkey, maxResults, groupOrder, label: text, searchPath };\n return (\n <div data-canopy-command className=\"flex-1 min-w-0\">\n <div className=\"relative w-full\">\n <style>{`.relative[data-canopy-panel-auto='1']:focus-within [data-canopy-command-panel]{display:block}`}</style>\n <SearchPanelForm placeholder={placeholder} buttonLabel={buttonLabel} label={label} searchPath={searchPath} />\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\nexport default function SearchPanelForm(props = {}) {\n const {\n placeholder = \"Search\u2026\",\n buttonLabel = \"Search\",\n label,\n searchPath = \"/search\",\n } = props || {};\n\n const text =\n typeof label === \"string\" && label.trim() ? label.trim() : buttonLabel;\n\n return (\n <form\n action={searchPath}\n method=\"get\"\n role=\"search\"\n autoComplete=\"off\"\n spellCheck=\"false\"\n className=\"group flex items-center gap-2 px-2 py-1.5 rounded-lg border border-slate-300 bg-white/95 backdrop-blur text-slate-700 shadow-sm hover:shadow transition w-full focus-within:ring-2 focus-within:ring-brand-500\"\n >\n <MagnifyingGlassIcon className=\"w-5 h-5 text-slate-400 group-focus-within:text-brand-500\" />\n <input\n type=\"search\"\n name=\"q\"\n inputMode=\"search\"\n data-canopy-command-input\n placeholder={placeholder}\n className=\"flex-1 bg-transparent outline-none placeholder:text-slate-400 py-0.5 min-w-0\"\n aria-label=\"Search\"\n />\n <button\n type=\"submit\"\n data-canopy-command-link\n className=\"inline-flex items-center gap-1 px-2 py-1 rounded-md border border-slate-200 bg-slate-50 hover:bg-slate-100 text-slate-700\"\n >\n <span>{text}</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 } = props || {};\n const baseStyle = {\n display: \"none\",\n position: \"absolute\",\n left: 0,\n right: 0,\n top: \"calc(100% + 4px)\",\n background: \"#fff\",\n border: \"1px solid #e5e7eb\",\n borderRadius: 8,\n boxShadow: \"0 10px 25px rgba(0,0,0,0.12)\",\n zIndex: 1000,\n overflow: \"auto\",\n maxHeight: \"60vh\",\n };\n return (\n <div data-canopy-command-panel style={{ ...baseStyle, ...(style || {}) }}>\n <div id=\"cplist\" />\n </div>\n );\n}\n", "import React from 'react';\nimport SearchPanelForm 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', '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 data = { placeholder, hotkey, maxResults, groupOrder, label: text, searchPath };\n\n return (\n <div data-canopy-command className=\"flex-1 min-w-0\">\n <div className=\"relative w-full\">\n <style>{`.relative[data-canopy-panel-auto='1']:focus-within [data-canopy-command-panel]{display:block}`}</style>\n <SearchPanelForm placeholder={placeholder} buttonLabel={buttonLabel} label={label} searchPath={searchPath} />\n <SearchPanelTeaserResults />\n </div>\n <script type=\"application/json\" dangerouslySetInnerHTML={{ __html: JSON.stringify(data) }} />\n </div>\n );\n}\n\n"],
5
+ "mappings": "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",
6
+ "names": ["computeHeroHeightStyle", "React", "React", "React", "useEffect", "useState", "React", "React", "React", "React", "React", "React", "React", "React", "React", "React", "React", "React"]
7
7
  }