@canopy-iiif/app 0.9.13 → 0.9.14
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 +11 -0
- package/package.json +2 -1
- package/ui/dist/index.mjs +162 -102
- package/ui/dist/index.mjs.map +4 -4
- package/ui/dist/server.mjs +192 -129
- package/ui/dist/server.mjs.map +4 -4
- package/ui/styles/base/_heading.scss +9 -1
- package/ui/styles/base/_markdown.scss +43 -0
- package/ui/styles/base/index.scss +1 -0
- package/ui/styles/components/_buttons.scss +7 -0
- package/ui/styles/index.css +53 -1
package/ui/dist/index.mjs
CHANGED
|
@@ -226,18 +226,67 @@ function Grid({
|
|
|
226
226
|
));
|
|
227
227
|
}
|
|
228
228
|
|
|
229
|
+
// ui/src/layout/Container.jsx
|
|
230
|
+
import React5 from "react";
|
|
231
|
+
function Container({ className = "", children, ...rest }) {
|
|
232
|
+
const classes = ["mx-auto", "max-w-content", "w-full", "px-6", className].filter(Boolean).join(" ");
|
|
233
|
+
return /* @__PURE__ */ React5.createElement("div", { className: classes, ...rest }, children);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
// ui/src/layout/Button.jsx
|
|
237
|
+
import React6 from "react";
|
|
238
|
+
var VARIANTS = /* @__PURE__ */ new Set(["primary", "secondary"]);
|
|
239
|
+
function Button({
|
|
240
|
+
label,
|
|
241
|
+
href = "#",
|
|
242
|
+
target,
|
|
243
|
+
rel,
|
|
244
|
+
variant = "primary",
|
|
245
|
+
className = "",
|
|
246
|
+
children,
|
|
247
|
+
...rest
|
|
248
|
+
}) {
|
|
249
|
+
const resolvedVariant = VARIANTS.has(variant) ? variant : "primary";
|
|
250
|
+
const computedRel = target === "_blank" && !rel ? "noopener noreferrer" : rel;
|
|
251
|
+
const content = children != null ? children : label;
|
|
252
|
+
if (!content) return null;
|
|
253
|
+
const classes = [
|
|
254
|
+
"canopy-button",
|
|
255
|
+
`canopy-button--${resolvedVariant}`,
|
|
256
|
+
className
|
|
257
|
+
].filter(Boolean).join(" ");
|
|
258
|
+
return /* @__PURE__ */ React6.createElement(
|
|
259
|
+
"a",
|
|
260
|
+
{
|
|
261
|
+
href,
|
|
262
|
+
className: classes,
|
|
263
|
+
target,
|
|
264
|
+
rel: computedRel,
|
|
265
|
+
...rest
|
|
266
|
+
},
|
|
267
|
+
content
|
|
268
|
+
);
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
// ui/src/layout/ButtonWrapper.jsx
|
|
272
|
+
import React7 from "react";
|
|
273
|
+
function ButtonWrapper({ className = "", children, ...rest }) {
|
|
274
|
+
const classes = ["canopy-button-group", className].filter(Boolean).join(" ");
|
|
275
|
+
return /* @__PURE__ */ React7.createElement("div", { className: classes, ...rest }, children);
|
|
276
|
+
}
|
|
277
|
+
|
|
229
278
|
// ui/src/layout/CanopyHeader.jsx
|
|
230
|
-
import
|
|
279
|
+
import React14 from "react";
|
|
231
280
|
|
|
232
281
|
// ui/src/search/SearchPanel.jsx
|
|
233
|
-
import
|
|
282
|
+
import React11 from "react";
|
|
234
283
|
|
|
235
284
|
// ui/src/Icons.jsx
|
|
236
|
-
import
|
|
237
|
-
var MagnifyingGlassIcon = (props) => /* @__PURE__ */
|
|
285
|
+
import React8 from "react";
|
|
286
|
+
var MagnifyingGlassIcon = (props) => /* @__PURE__ */ React8.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 512 512", ...props }, /* @__PURE__ */ React8.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" }));
|
|
238
287
|
|
|
239
288
|
// ui/src/search/SearchPanelForm.jsx
|
|
240
|
-
import
|
|
289
|
+
import React9 from "react";
|
|
241
290
|
function readBasePath() {
|
|
242
291
|
const normalize = (val) => {
|
|
243
292
|
const raw = typeof val === "string" ? val.trim() : "";
|
|
@@ -300,18 +349,18 @@ function SearchPanelForm(props = {}) {
|
|
|
300
349
|
clearLabel = "Clear search"
|
|
301
350
|
} = props || {};
|
|
302
351
|
const text = typeof label === "string" && label.trim() ? label.trim() : buttonLabel;
|
|
303
|
-
const action =
|
|
352
|
+
const action = React9.useMemo(
|
|
304
353
|
() => resolveSearchPath(searchPath),
|
|
305
354
|
[searchPath]
|
|
306
355
|
);
|
|
307
|
-
const autoId = typeof
|
|
308
|
-
const [fallbackId] =
|
|
356
|
+
const autoId = typeof React9.useId === "function" ? React9.useId() : void 0;
|
|
357
|
+
const [fallbackId] = React9.useState(
|
|
309
358
|
() => `canopy-search-form-${Math.random().toString(36).slice(2, 10)}`
|
|
310
359
|
);
|
|
311
360
|
const inputId = inputIdProp || autoId || fallbackId;
|
|
312
|
-
const inputRef =
|
|
313
|
-
const [hasValue, setHasValue] =
|
|
314
|
-
const focusInput =
|
|
361
|
+
const inputRef = React9.useRef(null);
|
|
362
|
+
const [hasValue, setHasValue] = React9.useState(false);
|
|
363
|
+
const focusInput = React9.useCallback(() => {
|
|
315
364
|
const el = inputRef.current;
|
|
316
365
|
if (!el) return;
|
|
317
366
|
if (document.activeElement === el) return;
|
|
@@ -324,7 +373,7 @@ function SearchPanelForm(props = {}) {
|
|
|
324
373
|
}
|
|
325
374
|
}
|
|
326
375
|
}, []);
|
|
327
|
-
const handlePointerDown =
|
|
376
|
+
const handlePointerDown = React9.useCallback(
|
|
328
377
|
(event) => {
|
|
329
378
|
const target = event.target;
|
|
330
379
|
if (target && typeof target.closest === "function") {
|
|
@@ -336,23 +385,23 @@ function SearchPanelForm(props = {}) {
|
|
|
336
385
|
},
|
|
337
386
|
[focusInput]
|
|
338
387
|
);
|
|
339
|
-
|
|
388
|
+
React9.useEffect(() => {
|
|
340
389
|
const el = inputRef.current;
|
|
341
390
|
if (!el) return;
|
|
342
391
|
if (el.value && el.value.trim()) {
|
|
343
392
|
setHasValue(true);
|
|
344
393
|
}
|
|
345
394
|
}, []);
|
|
346
|
-
const handleInputChange =
|
|
395
|
+
const handleInputChange = React9.useCallback((event) => {
|
|
347
396
|
var _a;
|
|
348
397
|
const nextHasValue = Boolean(
|
|
349
398
|
((_a = event == null ? void 0 : event.target) == null ? void 0 : _a.value) && event.target.value.trim()
|
|
350
399
|
);
|
|
351
400
|
setHasValue(nextHasValue);
|
|
352
401
|
}, []);
|
|
353
|
-
const handleClear =
|
|
402
|
+
const handleClear = React9.useCallback((event) => {
|
|
354
403
|
}, []);
|
|
355
|
-
const handleClearKey =
|
|
404
|
+
const handleClearKey = React9.useCallback(
|
|
356
405
|
(event) => {
|
|
357
406
|
if (event.key === "Enter" || event.key === " ") {
|
|
358
407
|
event.preventDefault();
|
|
@@ -361,7 +410,7 @@ function SearchPanelForm(props = {}) {
|
|
|
361
410
|
},
|
|
362
411
|
[handleClear]
|
|
363
412
|
);
|
|
364
|
-
return /* @__PURE__ */
|
|
413
|
+
return /* @__PURE__ */ React9.createElement(
|
|
365
414
|
"form",
|
|
366
415
|
{
|
|
367
416
|
action,
|
|
@@ -373,7 +422,7 @@ function SearchPanelForm(props = {}) {
|
|
|
373
422
|
onPointerDown: handlePointerDown,
|
|
374
423
|
"data-has-value": hasValue ? "1" : "0"
|
|
375
424
|
},
|
|
376
|
-
/* @__PURE__ */
|
|
425
|
+
/* @__PURE__ */ React9.createElement("label", { htmlFor: inputId, className: "canopy-search-form__label" }, /* @__PURE__ */ React9.createElement(MagnifyingGlassIcon, { className: "canopy-search-form__icon" }), /* @__PURE__ */ React9.createElement(
|
|
377
426
|
"input",
|
|
378
427
|
{
|
|
379
428
|
id: inputId,
|
|
@@ -389,7 +438,7 @@ function SearchPanelForm(props = {}) {
|
|
|
389
438
|
onInput: handleInputChange
|
|
390
439
|
}
|
|
391
440
|
)),
|
|
392
|
-
hasValue ? /* @__PURE__ */
|
|
441
|
+
hasValue ? /* @__PURE__ */ React9.createElement(
|
|
393
442
|
"button",
|
|
394
443
|
{
|
|
395
444
|
type: "button",
|
|
@@ -402,32 +451,32 @@ function SearchPanelForm(props = {}) {
|
|
|
402
451
|
},
|
|
403
452
|
"\xD7"
|
|
404
453
|
) : null,
|
|
405
|
-
/* @__PURE__ */
|
|
454
|
+
/* @__PURE__ */ React9.createElement(
|
|
406
455
|
"button",
|
|
407
456
|
{
|
|
408
457
|
type: "submit",
|
|
409
458
|
"data-canopy-search-form-trigger": "submit",
|
|
410
459
|
className: "canopy-search-form__submit"
|
|
411
460
|
},
|
|
412
|
-
/* @__PURE__ */
|
|
413
|
-
/* @__PURE__ */
|
|
461
|
+
/* @__PURE__ */ React9.createElement("span", null, text),
|
|
462
|
+
/* @__PURE__ */ React9.createElement("span", { "aria-hidden": true, className: "canopy-search-form__shortcut" }, /* @__PURE__ */ React9.createElement("span", null, "\u2318"), /* @__PURE__ */ React9.createElement("span", null, "K"))
|
|
414
463
|
)
|
|
415
464
|
);
|
|
416
465
|
}
|
|
417
466
|
|
|
418
467
|
// ui/src/search/SearchPanelTeaserResults.jsx
|
|
419
|
-
import
|
|
468
|
+
import React10 from "react";
|
|
420
469
|
function SearchPanelTeaserResults(props = {}) {
|
|
421
470
|
const { style, className } = props || {};
|
|
422
471
|
const classes = ["canopy-search-teaser", className].filter(Boolean).join(" ");
|
|
423
|
-
return /* @__PURE__ */
|
|
472
|
+
return /* @__PURE__ */ React10.createElement(
|
|
424
473
|
"div",
|
|
425
474
|
{
|
|
426
475
|
"data-canopy-search-form-panel": true,
|
|
427
476
|
className: classes || void 0,
|
|
428
477
|
style
|
|
429
478
|
},
|
|
430
|
-
/* @__PURE__ */
|
|
479
|
+
/* @__PURE__ */ React10.createElement("div", { id: "cplist" })
|
|
431
480
|
);
|
|
432
481
|
}
|
|
433
482
|
|
|
@@ -448,11 +497,11 @@ function SearchPanel(props = {}) {
|
|
|
448
497
|
const text = typeof label === "string" && label.trim() ? label.trim() : buttonLabel;
|
|
449
498
|
const resolvedSearchPath = resolveSearchPath(searchPath);
|
|
450
499
|
const data = { placeholder, hotkey, maxResults, groupOrder, label: text, searchPath: resolvedSearchPath };
|
|
451
|
-
return /* @__PURE__ */
|
|
500
|
+
return /* @__PURE__ */ React11.createElement("div", { "data-canopy-search-form": true, className: "flex-1 min-w-0" }, /* @__PURE__ */ React11.createElement("div", { className: "relative w-full" }, /* @__PURE__ */ React11.createElement(SearchPanelForm, { placeholder, buttonLabel, label, searchPath: resolvedSearchPath }), /* @__PURE__ */ React11.createElement(SearchPanelTeaserResults, null)), /* @__PURE__ */ React11.createElement("script", { type: "application/json", dangerouslySetInnerHTML: { __html: JSON.stringify(data) } }));
|
|
452
501
|
}
|
|
453
502
|
|
|
454
503
|
// ui/src/layout/CanopyBrand.jsx
|
|
455
|
-
import
|
|
504
|
+
import React12 from "react";
|
|
456
505
|
function CanopyBrand(props = {}) {
|
|
457
506
|
const {
|
|
458
507
|
labelId,
|
|
@@ -463,11 +512,11 @@ function CanopyBrand(props = {}) {
|
|
|
463
512
|
} = props || {};
|
|
464
513
|
const spanProps = labelId ? { id: labelId } : {};
|
|
465
514
|
const classes = ["canopy-logo", className].filter(Boolean).join(" ");
|
|
466
|
-
return /* @__PURE__ */
|
|
515
|
+
return /* @__PURE__ */ React12.createElement("a", { href, className: classes }, typeof Logo === "function" ? /* @__PURE__ */ React12.createElement(Logo, null) : null, /* @__PURE__ */ React12.createElement("span", { ...spanProps }, label));
|
|
467
516
|
}
|
|
468
517
|
|
|
469
518
|
// ui/src/layout/CanopyModal.jsx
|
|
470
|
-
import
|
|
519
|
+
import React13 from "react";
|
|
471
520
|
function CanopyModal(props = {}) {
|
|
472
521
|
const {
|
|
473
522
|
id,
|
|
@@ -518,7 +567,7 @@ function CanopyModal(props = {}) {
|
|
|
518
567
|
if (padded) bodyClasses.push("canopy-modal__body--padded");
|
|
519
568
|
if (bodyClassName) bodyClasses.push(bodyClassName);
|
|
520
569
|
const bodyClassNameValue = bodyClasses.join(" ");
|
|
521
|
-
return /* @__PURE__ */
|
|
570
|
+
return /* @__PURE__ */ React13.createElement("div", { ...modalProps }, /* @__PURE__ */ React13.createElement("div", { className: "canopy-modal__panel" }, /* @__PURE__ */ React13.createElement("button", { ...closeButtonProps }, /* @__PURE__ */ React13.createElement(
|
|
522
571
|
"svg",
|
|
523
572
|
{
|
|
524
573
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -528,8 +577,8 @@ function CanopyModal(props = {}) {
|
|
|
528
577
|
strokeWidth: "1.5",
|
|
529
578
|
className: "canopy-modal__close-icon"
|
|
530
579
|
},
|
|
531
|
-
/* @__PURE__ */
|
|
532
|
-
), /* @__PURE__ */
|
|
580
|
+
/* @__PURE__ */ React13.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6 6l12 12M6 18L18 6" })
|
|
581
|
+
), /* @__PURE__ */ React13.createElement("span", { className: "sr-only" }, closeLabel)), /* @__PURE__ */ React13.createElement("div", { className: bodyClassNameValue }, label ? /* @__PURE__ */ React13.createElement("div", { className: "canopy-modal__brand" }, /* @__PURE__ */ React13.createElement(
|
|
533
582
|
CanopyBrand,
|
|
534
583
|
{
|
|
535
584
|
labelId: resolvedLabelId,
|
|
@@ -733,7 +782,7 @@ function HeaderScript() {
|
|
|
733
782
|
});
|
|
734
783
|
})();
|
|
735
784
|
`;
|
|
736
|
-
return /* @__PURE__ */
|
|
785
|
+
return /* @__PURE__ */ React14.createElement(
|
|
737
786
|
"script",
|
|
738
787
|
{
|
|
739
788
|
dangerouslySetInnerHTML: {
|
|
@@ -757,7 +806,7 @@ function CanopyHeader(props = {}) {
|
|
|
757
806
|
logo: SiteLogo
|
|
758
807
|
} = props;
|
|
759
808
|
const navLinks = ensureArray(navLinksProp);
|
|
760
|
-
return /* @__PURE__ */
|
|
809
|
+
return /* @__PURE__ */ React14.createElement(React14.Fragment, null, /* @__PURE__ */ React14.createElement("header", { className: "canopy-header", "data-mobile-nav": "closed", "data-mobile-search": "closed" }, /* @__PURE__ */ React14.createElement("div", { className: "canopy-header__brand" }, /* @__PURE__ */ React14.createElement(
|
|
761
810
|
CanopyBrand,
|
|
762
811
|
{
|
|
763
812
|
label: title,
|
|
@@ -765,7 +814,7 @@ function CanopyHeader(props = {}) {
|
|
|
765
814
|
className: "canopy-header__brand-link",
|
|
766
815
|
Logo: SiteLogo
|
|
767
816
|
}
|
|
768
|
-
)), /* @__PURE__ */
|
|
817
|
+
)), /* @__PURE__ */ React14.createElement("div", { className: "canopy-header__desktop-search" }, /* @__PURE__ */ React14.createElement(SearchPanel, { label: searchLabel, hotkey: searchHotkey, placeholder: searchPlaceholder })), /* @__PURE__ */ React14.createElement("nav", { className: "canopy-nav-links canopy-header__desktop-nav", "aria-label": "Primary navigation" }, navLinks.map((link) => /* @__PURE__ */ React14.createElement("a", { key: link.href, href: link.href }, link.label || link.href))), /* @__PURE__ */ React14.createElement("div", { className: "canopy-header__actions" }, /* @__PURE__ */ React14.createElement(
|
|
769
818
|
"button",
|
|
770
819
|
{
|
|
771
820
|
type: "button",
|
|
@@ -775,7 +824,7 @@ function CanopyHeader(props = {}) {
|
|
|
775
824
|
"aria-expanded": "false",
|
|
776
825
|
"data-canopy-header-toggle": "search"
|
|
777
826
|
},
|
|
778
|
-
/* @__PURE__ */
|
|
827
|
+
/* @__PURE__ */ React14.createElement(
|
|
779
828
|
"svg",
|
|
780
829
|
{
|
|
781
830
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -785,9 +834,9 @@ function CanopyHeader(props = {}) {
|
|
|
785
834
|
strokeWidth: "1.5",
|
|
786
835
|
className: "canopy-header__search-icon"
|
|
787
836
|
},
|
|
788
|
-
/* @__PURE__ */
|
|
837
|
+
/* @__PURE__ */ React14.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "m21 21-3.8-3.8M10.5 18a7.5 7.5 0 1 1 0-15 7.5 7.5 0 0 1 0 15Z" })
|
|
789
838
|
)
|
|
790
|
-
), /* @__PURE__ */
|
|
839
|
+
), /* @__PURE__ */ React14.createElement(
|
|
791
840
|
"button",
|
|
792
841
|
{
|
|
793
842
|
type: "button",
|
|
@@ -797,7 +846,7 @@ function CanopyHeader(props = {}) {
|
|
|
797
846
|
"aria-expanded": "false",
|
|
798
847
|
"data-canopy-header-toggle": "nav"
|
|
799
848
|
},
|
|
800
|
-
/* @__PURE__ */
|
|
849
|
+
/* @__PURE__ */ React14.createElement(
|
|
801
850
|
"svg",
|
|
802
851
|
{
|
|
803
852
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -807,9 +856,9 @@ function CanopyHeader(props = {}) {
|
|
|
807
856
|
stroke: "currentColor",
|
|
808
857
|
className: "canopy-header__menu-icon"
|
|
809
858
|
},
|
|
810
|
-
/* @__PURE__ */
|
|
859
|
+
/* @__PURE__ */ React14.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5" })
|
|
811
860
|
)
|
|
812
|
-
))), /* @__PURE__ */
|
|
861
|
+
))), /* @__PURE__ */ React14.createElement(
|
|
813
862
|
CanopyModal,
|
|
814
863
|
{
|
|
815
864
|
id: "canopy-modal-nav",
|
|
@@ -821,8 +870,8 @@ function CanopyHeader(props = {}) {
|
|
|
821
870
|
closeLabel: "Close navigation",
|
|
822
871
|
closeDataAttr: "nav"
|
|
823
872
|
},
|
|
824
|
-
/* @__PURE__ */
|
|
825
|
-
), /* @__PURE__ */
|
|
873
|
+
/* @__PURE__ */ React14.createElement("nav", { className: "canopy-nav-links canopy-modal__nav", "aria-label": "Primary navigation" }, navLinks.map((link) => /* @__PURE__ */ React14.createElement("a", { key: link.href, href: link.href }, link.label || link.href)))
|
|
874
|
+
), /* @__PURE__ */ React14.createElement(
|
|
826
875
|
CanopyModal,
|
|
827
876
|
{
|
|
828
877
|
id: "canopy-modal-search",
|
|
@@ -835,19 +884,19 @@ function CanopyHeader(props = {}) {
|
|
|
835
884
|
closeDataAttr: "search",
|
|
836
885
|
bodyClassName: "canopy-modal__body--search"
|
|
837
886
|
},
|
|
838
|
-
/* @__PURE__ */
|
|
839
|
-
), /* @__PURE__ */
|
|
887
|
+
/* @__PURE__ */ React14.createElement(SearchPanel, { label: searchLabel, hotkey: searchHotkey, placeholder: searchPlaceholder })
|
|
888
|
+
), /* @__PURE__ */ React14.createElement(HeaderScript, null));
|
|
840
889
|
}
|
|
841
890
|
|
|
842
891
|
// ui/src/layout/CanopyFooter.jsx
|
|
843
|
-
import
|
|
892
|
+
import React15 from "react";
|
|
844
893
|
function CanopyFooter({ className = "", children }) {
|
|
845
894
|
const footerClassName = ["canopy-footer", className].filter(Boolean).join(" ");
|
|
846
|
-
return /* @__PURE__ */
|
|
895
|
+
return /* @__PURE__ */ React15.createElement("footer", { className: footerClassName }, /* @__PURE__ */ React15.createElement("div", { className: "canopy-footer__inner" }, children));
|
|
847
896
|
}
|
|
848
897
|
|
|
849
898
|
// ui/src/iiif/Viewer.jsx
|
|
850
|
-
import
|
|
899
|
+
import React16, { useEffect as useEffect2, useState as useState2 } from "react";
|
|
851
900
|
var DEFAULT_VIEWER_OPTIONS = {
|
|
852
901
|
showDownload: false,
|
|
853
902
|
showIIIFBadge: false,
|
|
@@ -903,7 +952,7 @@ var Viewer = (props) => {
|
|
|
903
952
|
} catch (_) {
|
|
904
953
|
json = "{}";
|
|
905
954
|
}
|
|
906
|
-
return /* @__PURE__ */
|
|
955
|
+
return /* @__PURE__ */ React16.createElement("div", { "data-canopy-viewer": "1", className: "not-prose" }, /* @__PURE__ */ React16.createElement(
|
|
907
956
|
"script",
|
|
908
957
|
{
|
|
909
958
|
type: "application/json",
|
|
@@ -911,11 +960,11 @@ var Viewer = (props) => {
|
|
|
911
960
|
}
|
|
912
961
|
));
|
|
913
962
|
}
|
|
914
|
-
return /* @__PURE__ */
|
|
963
|
+
return /* @__PURE__ */ React16.createElement(CloverViewer, { ...props, options: mergedOptions });
|
|
915
964
|
};
|
|
916
965
|
|
|
917
966
|
// ui/src/iiif/Slider.jsx
|
|
918
|
-
import
|
|
967
|
+
import React17, { useEffect as useEffect3, useState as useState3 } from "react";
|
|
919
968
|
var Slider = (props) => {
|
|
920
969
|
const [CloverSlider, setCloverSlider] = useState3(null);
|
|
921
970
|
useEffect3(() => {
|
|
@@ -941,7 +990,7 @@ var Slider = (props) => {
|
|
|
941
990
|
} catch (_) {
|
|
942
991
|
json = "{}";
|
|
943
992
|
}
|
|
944
|
-
return /* @__PURE__ */
|
|
993
|
+
return /* @__PURE__ */ React17.createElement("div", { "data-canopy-slider": "1", className: "not-prose" }, /* @__PURE__ */ React17.createElement(
|
|
945
994
|
"script",
|
|
946
995
|
{
|
|
947
996
|
type: "application/json",
|
|
@@ -949,11 +998,11 @@ var Slider = (props) => {
|
|
|
949
998
|
}
|
|
950
999
|
));
|
|
951
1000
|
}
|
|
952
|
-
return /* @__PURE__ */
|
|
1001
|
+
return /* @__PURE__ */ React17.createElement(CloverSlider, { ...props });
|
|
953
1002
|
};
|
|
954
1003
|
|
|
955
1004
|
// ui/src/iiif/Scroll.jsx
|
|
956
|
-
import
|
|
1005
|
+
import React18, { useEffect as useEffect4, useState as useState4 } from "react";
|
|
957
1006
|
var Scroll = (props) => {
|
|
958
1007
|
const [CloverScroll, setCloverScroll] = useState4(null);
|
|
959
1008
|
useEffect4(() => {
|
|
@@ -978,7 +1027,7 @@ var Scroll = (props) => {
|
|
|
978
1027
|
} catch (_) {
|
|
979
1028
|
json = "{}";
|
|
980
1029
|
}
|
|
981
|
-
return /* @__PURE__ */
|
|
1030
|
+
return /* @__PURE__ */ React18.createElement("div", { "data-canopy-scroll": "1", className: "not-prose" }, /* @__PURE__ */ React18.createElement(
|
|
982
1031
|
"script",
|
|
983
1032
|
{
|
|
984
1033
|
type: "application/json",
|
|
@@ -986,11 +1035,11 @@ var Scroll = (props) => {
|
|
|
986
1035
|
}
|
|
987
1036
|
));
|
|
988
1037
|
}
|
|
989
|
-
return /* @__PURE__ */
|
|
1038
|
+
return /* @__PURE__ */ React18.createElement(CloverScroll, { ...props });
|
|
990
1039
|
};
|
|
991
1040
|
|
|
992
1041
|
// ui/src/iiif/MdxRelatedItems.jsx
|
|
993
|
-
import
|
|
1042
|
+
import React19 from "react";
|
|
994
1043
|
function MdxRelatedItems(props) {
|
|
995
1044
|
let json = "{}";
|
|
996
1045
|
try {
|
|
@@ -998,11 +1047,11 @@ function MdxRelatedItems(props) {
|
|
|
998
1047
|
} catch (_) {
|
|
999
1048
|
json = "{}";
|
|
1000
1049
|
}
|
|
1001
|
-
return /* @__PURE__ */
|
|
1050
|
+
return /* @__PURE__ */ React19.createElement("div", { "data-canopy-related-items": "1", className: "not-prose" }, /* @__PURE__ */ React19.createElement("script", { type: "application/json", dangerouslySetInnerHTML: { __html: json } }));
|
|
1002
1051
|
}
|
|
1003
1052
|
|
|
1004
1053
|
// ui/src/search/MdxSearchResults.jsx
|
|
1005
|
-
import
|
|
1054
|
+
import React20 from "react";
|
|
1006
1055
|
function MdxSearchResults(props) {
|
|
1007
1056
|
let json = "{}";
|
|
1008
1057
|
try {
|
|
@@ -1010,11 +1059,11 @@ function MdxSearchResults(props) {
|
|
|
1010
1059
|
} catch (_) {
|
|
1011
1060
|
json = "{}";
|
|
1012
1061
|
}
|
|
1013
|
-
return /* @__PURE__ */
|
|
1062
|
+
return /* @__PURE__ */ React20.createElement("div", { "data-canopy-search-results": "1" }, /* @__PURE__ */ React20.createElement("script", { type: "application/json", dangerouslySetInnerHTML: { __html: json } }));
|
|
1014
1063
|
}
|
|
1015
1064
|
|
|
1016
1065
|
// ui/src/search/SearchSummary.jsx
|
|
1017
|
-
import
|
|
1066
|
+
import React21 from "react";
|
|
1018
1067
|
function SearchSummary(props) {
|
|
1019
1068
|
let json = "{}";
|
|
1020
1069
|
try {
|
|
@@ -1022,11 +1071,11 @@ function SearchSummary(props) {
|
|
|
1022
1071
|
} catch (_) {
|
|
1023
1072
|
json = "{}";
|
|
1024
1073
|
}
|
|
1025
|
-
return /* @__PURE__ */
|
|
1074
|
+
return /* @__PURE__ */ React21.createElement("div", { "data-canopy-search-summary": "1" }, /* @__PURE__ */ React21.createElement("script", { type: "application/json", dangerouslySetInnerHTML: { __html: json } }));
|
|
1026
1075
|
}
|
|
1027
1076
|
|
|
1028
1077
|
// ui/src/search/MdxSearchTabs.jsx
|
|
1029
|
-
import
|
|
1078
|
+
import React22 from "react";
|
|
1030
1079
|
function MdxSearchTabs(props) {
|
|
1031
1080
|
let json = "{}";
|
|
1032
1081
|
try {
|
|
@@ -1034,11 +1083,11 @@ function MdxSearchTabs(props) {
|
|
|
1034
1083
|
} catch (_) {
|
|
1035
1084
|
json = "{}";
|
|
1036
1085
|
}
|
|
1037
|
-
return /* @__PURE__ */
|
|
1086
|
+
return /* @__PURE__ */ React22.createElement("div", { "data-canopy-search-tabs": "1" }, /* @__PURE__ */ React22.createElement("script", { type: "application/json", dangerouslySetInnerHTML: { __html: json } }));
|
|
1038
1087
|
}
|
|
1039
1088
|
|
|
1040
1089
|
// ui/src/search/SearchResults.jsx
|
|
1041
|
-
import
|
|
1090
|
+
import React23 from "react";
|
|
1042
1091
|
function SearchResults({
|
|
1043
1092
|
results = [],
|
|
1044
1093
|
type = "all",
|
|
@@ -1046,19 +1095,19 @@ function SearchResults({
|
|
|
1046
1095
|
query = ""
|
|
1047
1096
|
}) {
|
|
1048
1097
|
if (!results.length) {
|
|
1049
|
-
return /* @__PURE__ */
|
|
1098
|
+
return /* @__PURE__ */ React23.createElement("div", { className: "text-slate-600" }, /* @__PURE__ */ React23.createElement("em", null, "No results"));
|
|
1050
1099
|
}
|
|
1051
1100
|
const normalizedType = String(type || "all").toLowerCase();
|
|
1052
1101
|
const isAnnotationView = normalizedType === "annotation";
|
|
1053
1102
|
if (isAnnotationView) {
|
|
1054
|
-
return /* @__PURE__ */
|
|
1103
|
+
return /* @__PURE__ */ React23.createElement("div", { id: "search-results", className: "space-y-4" }, results.map((r, i) => {
|
|
1055
1104
|
if (!r) return null;
|
|
1056
1105
|
return renderTextCard(r, r.id || i);
|
|
1057
1106
|
}));
|
|
1058
1107
|
}
|
|
1059
1108
|
const renderTextCard = (record, key) => {
|
|
1060
1109
|
if (!record) return null;
|
|
1061
|
-
return /* @__PURE__ */
|
|
1110
|
+
return /* @__PURE__ */ React23.createElement(
|
|
1062
1111
|
TextCard,
|
|
1063
1112
|
{
|
|
1064
1113
|
key,
|
|
@@ -1074,20 +1123,20 @@ function SearchResults({
|
|
|
1074
1123
|
const isWorkRecord = (record) => String(record && record.type).toLowerCase() === "work";
|
|
1075
1124
|
const shouldRenderAsTextCard = (record) => !isWorkRecord(record) || normalizedType !== "work";
|
|
1076
1125
|
if (layout === "list") {
|
|
1077
|
-
return /* @__PURE__ */
|
|
1126
|
+
return /* @__PURE__ */ React23.createElement("ul", { id: "search-results", className: "space-y-3" }, results.map((r, i) => {
|
|
1078
1127
|
if (shouldRenderAsTextCard(r)) {
|
|
1079
|
-
return /* @__PURE__ */
|
|
1128
|
+
return /* @__PURE__ */ React23.createElement("li", { key: i, className: `search-result ${r && r.type}` }, renderTextCard(r, i));
|
|
1080
1129
|
}
|
|
1081
1130
|
const hasDims = Number.isFinite(Number(r.thumbnailWidth)) && Number(r.thumbnailWidth) > 0 && Number.isFinite(Number(r.thumbnailHeight)) && Number(r.thumbnailHeight) > 0;
|
|
1082
1131
|
const aspect = hasDims ? Number(r.thumbnailWidth) / Number(r.thumbnailHeight) : void 0;
|
|
1083
|
-
return /* @__PURE__ */
|
|
1132
|
+
return /* @__PURE__ */ React23.createElement(
|
|
1084
1133
|
"li",
|
|
1085
1134
|
{
|
|
1086
1135
|
key: i,
|
|
1087
1136
|
className: `search-result ${r.type}`,
|
|
1088
1137
|
"data-thumbnail-aspect-ratio": aspect
|
|
1089
1138
|
},
|
|
1090
|
-
/* @__PURE__ */
|
|
1139
|
+
/* @__PURE__ */ React23.createElement(
|
|
1091
1140
|
Card,
|
|
1092
1141
|
{
|
|
1093
1142
|
href: r.href,
|
|
@@ -1101,20 +1150,20 @@ function SearchResults({
|
|
|
1101
1150
|
);
|
|
1102
1151
|
}));
|
|
1103
1152
|
}
|
|
1104
|
-
return /* @__PURE__ */
|
|
1153
|
+
return /* @__PURE__ */ React23.createElement("div", { id: "search-results" }, /* @__PURE__ */ React23.createElement(Grid, null, results.map((r, i) => {
|
|
1105
1154
|
if (shouldRenderAsTextCard(r)) {
|
|
1106
|
-
return /* @__PURE__ */
|
|
1155
|
+
return /* @__PURE__ */ React23.createElement(GridItem, { key: i, className: `search-result ${r && r.type}` }, renderTextCard(r, i));
|
|
1107
1156
|
}
|
|
1108
1157
|
const hasDims = Number.isFinite(Number(r.thumbnailWidth)) && Number(r.thumbnailWidth) > 0 && Number.isFinite(Number(r.thumbnailHeight)) && Number(r.thumbnailHeight) > 0;
|
|
1109
1158
|
const aspect = hasDims ? Number(r.thumbnailWidth) / Number(r.thumbnailHeight) : void 0;
|
|
1110
|
-
return /* @__PURE__ */
|
|
1159
|
+
return /* @__PURE__ */ React23.createElement(
|
|
1111
1160
|
GridItem,
|
|
1112
1161
|
{
|
|
1113
1162
|
key: i,
|
|
1114
1163
|
className: `search-result ${r.type}`,
|
|
1115
1164
|
"data-thumbnail-aspect-ratio": aspect
|
|
1116
1165
|
},
|
|
1117
|
-
/* @__PURE__ */
|
|
1166
|
+
/* @__PURE__ */ React23.createElement(
|
|
1118
1167
|
Card,
|
|
1119
1168
|
{
|
|
1120
1169
|
href: r.href,
|
|
@@ -1130,7 +1179,7 @@ function SearchResults({
|
|
|
1130
1179
|
}
|
|
1131
1180
|
|
|
1132
1181
|
// ui/src/search/SearchTabs.jsx
|
|
1133
|
-
import
|
|
1182
|
+
import React24 from "react";
|
|
1134
1183
|
function SearchTabs({
|
|
1135
1184
|
type = "all",
|
|
1136
1185
|
onTypeChange,
|
|
@@ -1145,7 +1194,7 @@ function SearchTabs({
|
|
|
1145
1194
|
const toLabel = (t) => t && t.length ? t.charAt(0).toUpperCase() + t.slice(1) : "";
|
|
1146
1195
|
const hasFilters = typeof onOpenFilters === "function";
|
|
1147
1196
|
const filterBadge = activeFilterCount > 0 ? ` (${activeFilterCount})` : "";
|
|
1148
|
-
return /* @__PURE__ */
|
|
1197
|
+
return /* @__PURE__ */ React24.createElement("div", { className: "canopy-search-tabs-wrapper" }, /* @__PURE__ */ React24.createElement(
|
|
1149
1198
|
"div",
|
|
1150
1199
|
{
|
|
1151
1200
|
role: "tablist",
|
|
@@ -1156,7 +1205,7 @@ function SearchTabs({
|
|
|
1156
1205
|
const active = String(type).toLowerCase() === String(t).toLowerCase();
|
|
1157
1206
|
const cRaw = counts && Object.prototype.hasOwnProperty.call(counts, t) ? counts[t] : void 0;
|
|
1158
1207
|
const c = Number.isFinite(Number(cRaw)) ? Number(cRaw) : 0;
|
|
1159
|
-
return /* @__PURE__ */
|
|
1208
|
+
return /* @__PURE__ */ React24.createElement(
|
|
1160
1209
|
"button",
|
|
1161
1210
|
{
|
|
1162
1211
|
key: t,
|
|
@@ -1171,7 +1220,7 @@ function SearchTabs({
|
|
|
1171
1220
|
")"
|
|
1172
1221
|
);
|
|
1173
1222
|
})
|
|
1174
|
-
), hasFilters ? /* @__PURE__ */
|
|
1223
|
+
), hasFilters ? /* @__PURE__ */ React24.createElement(
|
|
1175
1224
|
"button",
|
|
1176
1225
|
{
|
|
1177
1226
|
type: "button",
|
|
@@ -1179,12 +1228,12 @@ function SearchTabs({
|
|
|
1179
1228
|
"aria-expanded": filtersOpen ? "true" : "false",
|
|
1180
1229
|
className: "inline-flex items-center gap-2 rounded-md border border-slate-200 bg-white px-3 py-1.5 text-sm font-medium text-slate-700 shadow-sm transition hover:border-brand-200 hover:bg-brand-50 hover:text-brand-700"
|
|
1181
1230
|
},
|
|
1182
|
-
/* @__PURE__ */
|
|
1231
|
+
/* @__PURE__ */ React24.createElement("span", null, filtersLabel, filterBadge)
|
|
1183
1232
|
) : null);
|
|
1184
1233
|
}
|
|
1185
1234
|
|
|
1186
1235
|
// ui/src/search/SearchFiltersDialog.jsx
|
|
1187
|
-
import
|
|
1236
|
+
import React25 from "react";
|
|
1188
1237
|
function toArray(input) {
|
|
1189
1238
|
if (!input) return [];
|
|
1190
1239
|
if (Array.isArray(input)) return input;
|
|
@@ -1223,20 +1272,20 @@ function FacetSection({ facet, selected, onToggle }) {
|
|
|
1223
1272
|
const selectedValues = selected.get(String(slug)) || /* @__PURE__ */ new Set();
|
|
1224
1273
|
const checkboxId = (valueSlug) => `filter-${slug}-${valueSlug}`;
|
|
1225
1274
|
const hasSelection = selectedValues.size > 0;
|
|
1226
|
-
const [quickQuery, setQuickQuery] =
|
|
1275
|
+
const [quickQuery, setQuickQuery] = React25.useState("");
|
|
1227
1276
|
const hasQuery = quickQuery.trim().length > 0;
|
|
1228
|
-
const filteredValues =
|
|
1277
|
+
const filteredValues = React25.useMemo(
|
|
1229
1278
|
() => facetMatches(values, quickQuery),
|
|
1230
1279
|
[values, quickQuery]
|
|
1231
1280
|
);
|
|
1232
|
-
return /* @__PURE__ */
|
|
1281
|
+
return /* @__PURE__ */ React25.createElement(
|
|
1233
1282
|
"details",
|
|
1234
1283
|
{
|
|
1235
1284
|
className: "canopy-search-filters__facet",
|
|
1236
1285
|
open: hasSelection
|
|
1237
1286
|
},
|
|
1238
|
-
/* @__PURE__ */
|
|
1239
|
-
/* @__PURE__ */
|
|
1287
|
+
/* @__PURE__ */ React25.createElement("summary", { className: "canopy-search-filters__facet-summary" }, /* @__PURE__ */ React25.createElement("span", null, label), /* @__PURE__ */ React25.createElement("span", { className: "canopy-search-filters__facet-count" }, values.length)),
|
|
1288
|
+
/* @__PURE__ */ React25.createElement("div", { className: "canopy-search-filters__facet-content" }, /* @__PURE__ */ React25.createElement("div", { className: "canopy-search-filters__quick" }, /* @__PURE__ */ React25.createElement(
|
|
1240
1289
|
"input",
|
|
1241
1290
|
{
|
|
1242
1291
|
type: "search",
|
|
@@ -1246,7 +1295,7 @@ function FacetSection({ facet, selected, onToggle }) {
|
|
|
1246
1295
|
className: "canopy-search-filters__quick-input",
|
|
1247
1296
|
"aria-label": `Filter ${label} values`
|
|
1248
1297
|
}
|
|
1249
|
-
), quickQuery ? /* @__PURE__ */
|
|
1298
|
+
), quickQuery ? /* @__PURE__ */ React25.createElement(
|
|
1250
1299
|
"button",
|
|
1251
1300
|
{
|
|
1252
1301
|
type: "button",
|
|
@@ -1254,11 +1303,11 @@ function FacetSection({ facet, selected, onToggle }) {
|
|
|
1254
1303
|
className: "canopy-search-filters__quick-clear"
|
|
1255
1304
|
},
|
|
1256
1305
|
"Clear"
|
|
1257
|
-
) : null), hasQuery && !filteredValues.length ? /* @__PURE__ */
|
|
1306
|
+
) : null), hasQuery && !filteredValues.length ? /* @__PURE__ */ React25.createElement("p", { className: "canopy-search-filters__facet-notice" }, "No matches found.") : null, /* @__PURE__ */ React25.createElement("ul", { className: "canopy-search-filters__facet-list" }, filteredValues.map((entry) => {
|
|
1258
1307
|
const valueSlug = String(entry.slug || entry.value || "");
|
|
1259
1308
|
const isChecked = selectedValues.has(valueSlug);
|
|
1260
1309
|
const inputId = checkboxId(valueSlug);
|
|
1261
|
-
return /* @__PURE__ */
|
|
1310
|
+
return /* @__PURE__ */ React25.createElement("li", { key: valueSlug, className: "canopy-search-filters__facet-item" }, /* @__PURE__ */ React25.createElement(
|
|
1262
1311
|
"input",
|
|
1263
1312
|
{
|
|
1264
1313
|
id: inputId,
|
|
@@ -1270,15 +1319,15 @@ function FacetSection({ facet, selected, onToggle }) {
|
|
|
1270
1319
|
if (onToggle) onToggle(slug, valueSlug, nextChecked);
|
|
1271
1320
|
}
|
|
1272
1321
|
}
|
|
1273
|
-
), /* @__PURE__ */
|
|
1322
|
+
), /* @__PURE__ */ React25.createElement(
|
|
1274
1323
|
"label",
|
|
1275
1324
|
{
|
|
1276
1325
|
htmlFor: inputId,
|
|
1277
1326
|
className: "canopy-search-filters__facet-label"
|
|
1278
1327
|
},
|
|
1279
|
-
/* @__PURE__ */
|
|
1328
|
+
/* @__PURE__ */ React25.createElement("span", null, entry.value, " ", Number.isFinite(entry.doc_count) ? /* @__PURE__ */ React25.createElement("span", { className: "canopy-search-filters__facet-count" }, "(", entry.doc_count, ")") : null)
|
|
1280
1329
|
));
|
|
1281
|
-
}), !filteredValues.length && !hasQuery ? /* @__PURE__ */
|
|
1330
|
+
}), !filteredValues.length && !hasQuery ? /* @__PURE__ */ React25.createElement("li", { className: "canopy-search-filters__facet-empty" }, "No values available.") : null))
|
|
1282
1331
|
);
|
|
1283
1332
|
}
|
|
1284
1333
|
function SearchFiltersDialog(props = {}) {
|
|
@@ -1300,7 +1349,7 @@ function SearchFiltersDialog(props = {}) {
|
|
|
1300
1349
|
(total, set) => total + set.size,
|
|
1301
1350
|
0
|
|
1302
1351
|
);
|
|
1303
|
-
|
|
1352
|
+
React25.useEffect(() => {
|
|
1304
1353
|
if (!open) return void 0;
|
|
1305
1354
|
if (typeof document === "undefined") return void 0;
|
|
1306
1355
|
const body = document.body;
|
|
@@ -1317,7 +1366,7 @@ function SearchFiltersDialog(props = {}) {
|
|
|
1317
1366
|
if (!open) return null;
|
|
1318
1367
|
const brandId = "canopy-modal-filters-label";
|
|
1319
1368
|
const subtitleText = subtitle != null ? subtitle : title;
|
|
1320
|
-
return /* @__PURE__ */
|
|
1369
|
+
return /* @__PURE__ */ React25.createElement(
|
|
1321
1370
|
CanopyModal,
|
|
1322
1371
|
{
|
|
1323
1372
|
id: "canopy-modal-filters",
|
|
@@ -1332,8 +1381,8 @@ function SearchFiltersDialog(props = {}) {
|
|
|
1332
1381
|
onBackgroundClick: () => onOpenChange && onOpenChange(false),
|
|
1333
1382
|
bodyClassName: "canopy-modal__body--filters"
|
|
1334
1383
|
},
|
|
1335
|
-
subtitleText ? /* @__PURE__ */
|
|
1336
|
-
/* @__PURE__ */
|
|
1384
|
+
subtitleText ? /* @__PURE__ */ React25.createElement("p", { className: "canopy-search-filters__subtitle" }, subtitleText) : null,
|
|
1385
|
+
/* @__PURE__ */ React25.createElement("div", { className: "canopy-search-filters__body" }, Array.isArray(facets) && facets.length ? /* @__PURE__ */ React25.createElement("div", { className: "canopy-search-filters__facets" }, facets.map((facet) => /* @__PURE__ */ React25.createElement(
|
|
1337
1386
|
FacetSection,
|
|
1338
1387
|
{
|
|
1339
1388
|
key: facet.slug || facet.label,
|
|
@@ -1341,8 +1390,8 @@ function SearchFiltersDialog(props = {}) {
|
|
|
1341
1390
|
selected: selectedMap,
|
|
1342
1391
|
onToggle
|
|
1343
1392
|
}
|
|
1344
|
-
))) : /* @__PURE__ */
|
|
1345
|
-
/* @__PURE__ */
|
|
1393
|
+
))) : /* @__PURE__ */ React25.createElement("p", { className: "canopy-search-filters__empty" }, "No filters are available for this collection.")),
|
|
1394
|
+
/* @__PURE__ */ React25.createElement("footer", { className: "canopy-search-filters__footer" }, /* @__PURE__ */ React25.createElement("div", null, activeCount ? `${activeCount} filter${activeCount === 1 ? "" : "s"} applied` : "No filters applied"), /* @__PURE__ */ React25.createElement("div", { className: "canopy-search-filters__footer-actions" }, /* @__PURE__ */ React25.createElement(
|
|
1346
1395
|
"button",
|
|
1347
1396
|
{
|
|
1348
1397
|
type: "button",
|
|
@@ -1353,7 +1402,7 @@ function SearchFiltersDialog(props = {}) {
|
|
|
1353
1402
|
className: "canopy-search-filters__button canopy-search-filters__button--secondary"
|
|
1354
1403
|
},
|
|
1355
1404
|
"Clear all"
|
|
1356
|
-
), /* @__PURE__ */
|
|
1405
|
+
), /* @__PURE__ */ React25.createElement(
|
|
1357
1406
|
"button",
|
|
1358
1407
|
{
|
|
1359
1408
|
type: "button",
|
|
@@ -1366,7 +1415,7 @@ function SearchFiltersDialog(props = {}) {
|
|
|
1366
1415
|
}
|
|
1367
1416
|
|
|
1368
1417
|
// ui/src/search-form/MdxSearchFormModal.jsx
|
|
1369
|
-
import
|
|
1418
|
+
import React26 from "react";
|
|
1370
1419
|
function MdxSearchFormModal(props = {}) {
|
|
1371
1420
|
const {
|
|
1372
1421
|
placeholder = "Search\u2026",
|
|
@@ -1382,14 +1431,25 @@ function MdxSearchFormModal(props = {}) {
|
|
|
1382
1431
|
const text = typeof label === "string" && label.trim() ? label.trim() : buttonLabel;
|
|
1383
1432
|
const resolvedSearchPath = resolveSearchPath(searchPath);
|
|
1384
1433
|
const data = { placeholder, hotkey, maxResults, groupOrder, label: text, searchPath: resolvedSearchPath };
|
|
1385
|
-
return /* @__PURE__ */
|
|
1434
|
+
return /* @__PURE__ */ React26.createElement("div", { "data-canopy-search-form": true, className: "flex-1 min-w-0" }, /* @__PURE__ */ React26.createElement("div", { className: "relative w-full" }, /* @__PURE__ */ React26.createElement(SearchPanelForm, { placeholder, buttonLabel, label, searchPath: resolvedSearchPath }), /* @__PURE__ */ React26.createElement(SearchPanelTeaserResults, null)), /* @__PURE__ */ React26.createElement("script", { type: "application/json", dangerouslySetInnerHTML: { __html: JSON.stringify(data) } }));
|
|
1435
|
+
}
|
|
1436
|
+
|
|
1437
|
+
// ui/src/docs/MarkdownTable.jsx
|
|
1438
|
+
import React27 from "react";
|
|
1439
|
+
function MarkdownTable({ className = "", ...rest }) {
|
|
1440
|
+
const merged = ["markdown-table", className].filter(Boolean).join(" ");
|
|
1441
|
+
return /* @__PURE__ */ React27.createElement("div", { className: "markdown-table__frame" }, /* @__PURE__ */ React27.createElement("table", { className: merged, ...rest }));
|
|
1386
1442
|
}
|
|
1387
1443
|
export {
|
|
1444
|
+
Button,
|
|
1445
|
+
ButtonWrapper,
|
|
1388
1446
|
CanopyBrand,
|
|
1389
1447
|
CanopyFooter,
|
|
1390
1448
|
CanopyHeader,
|
|
1391
1449
|
CanopyModal,
|
|
1392
1450
|
Card,
|
|
1451
|
+
Container,
|
|
1452
|
+
MarkdownTable as DocsMarkdownTable,
|
|
1393
1453
|
Grid,
|
|
1394
1454
|
GridItem,
|
|
1395
1455
|
HelloWorld,
|