@canopy-iiif/app 1.2.5 → 1.2.6
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/iiif.js +29 -0
- package/package.json +1 -1
- package/ui/dist/server.mjs +263 -2
- package/ui/dist/server.mjs.map +4 -4
package/lib/build/iiif.js
CHANGED
|
@@ -1160,6 +1160,23 @@ async function buildIiifCollectionPages(CONFIG) {
|
|
|
1160
1160
|
.map((label) => normalizeMetadataLabel(String(label || "")))
|
|
1161
1161
|
.filter(Boolean)
|
|
1162
1162
|
);
|
|
1163
|
+
const metadataFacetLabels = (() => {
|
|
1164
|
+
if (!Array.isArray(metadataLabelsRaw) || !metadataLabelsRaw.length)
|
|
1165
|
+
return [];
|
|
1166
|
+
const seen = new Set();
|
|
1167
|
+
const entries = [];
|
|
1168
|
+
for (const label of metadataLabelsRaw) {
|
|
1169
|
+
const raw = typeof label === "string" ? label.trim() : String(label || "");
|
|
1170
|
+
if (!raw) continue;
|
|
1171
|
+
const normalized = normalizeMetadataLabel(raw);
|
|
1172
|
+
if (!normalized || seen.has(normalized)) continue;
|
|
1173
|
+
const slug = slugify(raw, {lower: true, strict: true, trim: true});
|
|
1174
|
+
if (!slug) continue;
|
|
1175
|
+
seen.add(normalized);
|
|
1176
|
+
entries.push({label: raw, slug, normalized});
|
|
1177
|
+
}
|
|
1178
|
+
return entries;
|
|
1179
|
+
})();
|
|
1163
1180
|
const metadataOptions = {
|
|
1164
1181
|
enabled:
|
|
1165
1182
|
metadataEnabled &&
|
|
@@ -1479,6 +1496,18 @@ async function buildIiifCollectionPages(CONFIG) {
|
|
|
1479
1496
|
pageDetails.meta.ogImage = ogImageForPage;
|
|
1480
1497
|
}
|
|
1481
1498
|
const pageContextValue = { navigation: null, page: pageDetails };
|
|
1499
|
+
if (metadataFacetLabels.length && manifest && typeof manifest === "object") {
|
|
1500
|
+
try {
|
|
1501
|
+
Object.defineProperty(manifest, "__canopyMetadataFacets", {
|
|
1502
|
+
configurable: true,
|
|
1503
|
+
enumerable: false,
|
|
1504
|
+
writable: true,
|
|
1505
|
+
value: metadataFacetLabels,
|
|
1506
|
+
});
|
|
1507
|
+
} catch (_) {
|
|
1508
|
+
manifest.__canopyMetadataFacets = metadataFacetLabels;
|
|
1509
|
+
}
|
|
1510
|
+
}
|
|
1482
1511
|
const mdxContent = React.createElement(WorksLayoutComp, {
|
|
1483
1512
|
manifest,
|
|
1484
1513
|
references,
|
package/package.json
CHANGED
package/ui/dist/server.mjs
CHANGED
|
@@ -1,8 +1,82 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
1
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
|
+
};
|
|
2
10
|
var __export = (target, all) => {
|
|
3
11
|
for (var name in all)
|
|
4
12
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
5
13
|
};
|
|
14
|
+
var __copyProps = (to, from, except, desc) => {
|
|
15
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
16
|
+
for (let key of __getOwnPropNames(from))
|
|
17
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
18
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
19
|
+
}
|
|
20
|
+
return to;
|
|
21
|
+
};
|
|
22
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
23
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
24
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
25
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
26
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
27
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
28
|
+
mod
|
|
29
|
+
));
|
|
30
|
+
|
|
31
|
+
// ../../node_modules/slugify/slugify.js
|
|
32
|
+
var require_slugify = __commonJS({
|
|
33
|
+
"../../node_modules/slugify/slugify.js"(exports, module) {
|
|
34
|
+
(function(name, root, factory) {
|
|
35
|
+
if (typeof exports === "object") {
|
|
36
|
+
module.exports = factory();
|
|
37
|
+
module.exports["default"] = factory();
|
|
38
|
+
} else if (typeof define === "function" && define.amd) {
|
|
39
|
+
define(factory);
|
|
40
|
+
} else {
|
|
41
|
+
root[name] = factory();
|
|
42
|
+
}
|
|
43
|
+
})("slugify", exports, function() {
|
|
44
|
+
var charMap = JSON.parse(`{"$":"dollar","%":"percent","&":"and","<":"less",">":"greater","|":"or","\xA2":"cent","\xA3":"pound","\xA4":"currency","\xA5":"yen","\xA9":"(c)","\xAA":"a","\xAE":"(r)","\xBA":"o","\xC0":"A","\xC1":"A","\xC2":"A","\xC3":"A","\xC4":"A","\xC5":"A","\xC6":"AE","\xC7":"C","\xC8":"E","\xC9":"E","\xCA":"E","\xCB":"E","\xCC":"I","\xCD":"I","\xCE":"I","\xCF":"I","\xD0":"D","\xD1":"N","\xD2":"O","\xD3":"O","\xD4":"O","\xD5":"O","\xD6":"O","\xD8":"O","\xD9":"U","\xDA":"U","\xDB":"U","\xDC":"U","\xDD":"Y","\xDE":"TH","\xDF":"ss","\xE0":"a","\xE1":"a","\xE2":"a","\xE3":"a","\xE4":"a","\xE5":"a","\xE6":"ae","\xE7":"c","\xE8":"e","\xE9":"e","\xEA":"e","\xEB":"e","\xEC":"i","\xED":"i","\xEE":"i","\xEF":"i","\xF0":"d","\xF1":"n","\xF2":"o","\xF3":"o","\xF4":"o","\xF5":"o","\xF6":"o","\xF8":"o","\xF9":"u","\xFA":"u","\xFB":"u","\xFC":"u","\xFD":"y","\xFE":"th","\xFF":"y","\u0100":"A","\u0101":"a","\u0102":"A","\u0103":"a","\u0104":"A","\u0105":"a","\u0106":"C","\u0107":"c","\u010C":"C","\u010D":"c","\u010E":"D","\u010F":"d","\u0110":"DJ","\u0111":"dj","\u0112":"E","\u0113":"e","\u0116":"E","\u0117":"e","\u0118":"e","\u0119":"e","\u011A":"E","\u011B":"e","\u011E":"G","\u011F":"g","\u0122":"G","\u0123":"g","\u0128":"I","\u0129":"i","\u012A":"i","\u012B":"i","\u012E":"I","\u012F":"i","\u0130":"I","\u0131":"i","\u0136":"k","\u0137":"k","\u013B":"L","\u013C":"l","\u013D":"L","\u013E":"l","\u0141":"L","\u0142":"l","\u0143":"N","\u0144":"n","\u0145":"N","\u0146":"n","\u0147":"N","\u0148":"n","\u014C":"O","\u014D":"o","\u0150":"O","\u0151":"o","\u0152":"OE","\u0153":"oe","\u0154":"R","\u0155":"r","\u0158":"R","\u0159":"r","\u015A":"S","\u015B":"s","\u015E":"S","\u015F":"s","\u0160":"S","\u0161":"s","\u0162":"T","\u0163":"t","\u0164":"T","\u0165":"t","\u0168":"U","\u0169":"u","\u016A":"u","\u016B":"u","\u016E":"U","\u016F":"u","\u0170":"U","\u0171":"u","\u0172":"U","\u0173":"u","\u0174":"W","\u0175":"w","\u0176":"Y","\u0177":"y","\u0178":"Y","\u0179":"Z","\u017A":"z","\u017B":"Z","\u017C":"z","\u017D":"Z","\u017E":"z","\u018F":"E","\u0192":"f","\u01A0":"O","\u01A1":"o","\u01AF":"U","\u01B0":"u","\u01C8":"LJ","\u01C9":"lj","\u01CB":"NJ","\u01CC":"nj","\u0218":"S","\u0219":"s","\u021A":"T","\u021B":"t","\u0259":"e","\u02DA":"o","\u0386":"A","\u0388":"E","\u0389":"H","\u038A":"I","\u038C":"O","\u038E":"Y","\u038F":"W","\u0390":"i","\u0391":"A","\u0392":"B","\u0393":"G","\u0394":"D","\u0395":"E","\u0396":"Z","\u0397":"H","\u0398":"8","\u0399":"I","\u039A":"K","\u039B":"L","\u039C":"M","\u039D":"N","\u039E":"3","\u039F":"O","\u03A0":"P","\u03A1":"R","\u03A3":"S","\u03A4":"T","\u03A5":"Y","\u03A6":"F","\u03A7":"X","\u03A8":"PS","\u03A9":"W","\u03AA":"I","\u03AB":"Y","\u03AC":"a","\u03AD":"e","\u03AE":"h","\u03AF":"i","\u03B0":"y","\u03B1":"a","\u03B2":"b","\u03B3":"g","\u03B4":"d","\u03B5":"e","\u03B6":"z","\u03B7":"h","\u03B8":"8","\u03B9":"i","\u03BA":"k","\u03BB":"l","\u03BC":"m","\u03BD":"n","\u03BE":"3","\u03BF":"o","\u03C0":"p","\u03C1":"r","\u03C2":"s","\u03C3":"s","\u03C4":"t","\u03C5":"y","\u03C6":"f","\u03C7":"x","\u03C8":"ps","\u03C9":"w","\u03CA":"i","\u03CB":"y","\u03CC":"o","\u03CD":"y","\u03CE":"w","\u0401":"Yo","\u0402":"DJ","\u0404":"Ye","\u0406":"I","\u0407":"Yi","\u0408":"J","\u0409":"LJ","\u040A":"NJ","\u040B":"C","\u040F":"DZ","\u0410":"A","\u0411":"B","\u0412":"V","\u0413":"G","\u0414":"D","\u0415":"E","\u0416":"Zh","\u0417":"Z","\u0418":"I","\u0419":"J","\u041A":"K","\u041B":"L","\u041C":"M","\u041D":"N","\u041E":"O","\u041F":"P","\u0420":"R","\u0421":"S","\u0422":"T","\u0423":"U","\u0424":"F","\u0425":"H","\u0426":"C","\u0427":"Ch","\u0428":"Sh","\u0429":"Sh","\u042A":"U","\u042B":"Y","\u042C":"","\u042D":"E","\u042E":"Yu","\u042F":"Ya","\u0430":"a","\u0431":"b","\u0432":"v","\u0433":"g","\u0434":"d","\u0435":"e","\u0436":"zh","\u0437":"z","\u0438":"i","\u0439":"j","\u043A":"k","\u043B":"l","\u043C":"m","\u043D":"n","\u043E":"o","\u043F":"p","\u0440":"r","\u0441":"s","\u0442":"t","\u0443":"u","\u0444":"f","\u0445":"h","\u0446":"c","\u0447":"ch","\u0448":"sh","\u0449":"sh","\u044A":"u","\u044B":"y","\u044C":"","\u044D":"e","\u044E":"yu","\u044F":"ya","\u0451":"yo","\u0452":"dj","\u0454":"ye","\u0456":"i","\u0457":"yi","\u0458":"j","\u0459":"lj","\u045A":"nj","\u045B":"c","\u045D":"u","\u045F":"dz","\u0490":"G","\u0491":"g","\u0492":"GH","\u0493":"gh","\u049A":"KH","\u049B":"kh","\u04A2":"NG","\u04A3":"ng","\u04AE":"UE","\u04AF":"ue","\u04B0":"U","\u04B1":"u","\u04BA":"H","\u04BB":"h","\u04D8":"AE","\u04D9":"ae","\u04E8":"OE","\u04E9":"oe","\u0531":"A","\u0532":"B","\u0533":"G","\u0534":"D","\u0535":"E","\u0536":"Z","\u0537":"E'","\u0538":"Y'","\u0539":"T'","\u053A":"JH","\u053B":"I","\u053C":"L","\u053D":"X","\u053E":"C'","\u053F":"K","\u0540":"H","\u0541":"D'","\u0542":"GH","\u0543":"TW","\u0544":"M","\u0545":"Y","\u0546":"N","\u0547":"SH","\u0549":"CH","\u054A":"P","\u054B":"J","\u054C":"R'","\u054D":"S","\u054E":"V","\u054F":"T","\u0550":"R","\u0551":"C","\u0553":"P'","\u0554":"Q'","\u0555":"O''","\u0556":"F","\u0587":"EV","\u0621":"a","\u0622":"aa","\u0623":"a","\u0624":"u","\u0625":"i","\u0626":"e","\u0627":"a","\u0628":"b","\u0629":"h","\u062A":"t","\u062B":"th","\u062C":"j","\u062D":"h","\u062E":"kh","\u062F":"d","\u0630":"th","\u0631":"r","\u0632":"z","\u0633":"s","\u0634":"sh","\u0635":"s","\u0636":"dh","\u0637":"t","\u0638":"z","\u0639":"a","\u063A":"gh","\u0641":"f","\u0642":"q","\u0643":"k","\u0644":"l","\u0645":"m","\u0646":"n","\u0647":"h","\u0648":"w","\u0649":"a","\u064A":"y","\u064B":"an","\u064C":"on","\u064D":"en","\u064E":"a","\u064F":"u","\u0650":"e","\u0652":"","\u0660":"0","\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u067E":"p","\u0686":"ch","\u0698":"zh","\u06A9":"k","\u06AF":"g","\u06CC":"y","\u06F0":"0","\u06F1":"1","\u06F2":"2","\u06F3":"3","\u06F4":"4","\u06F5":"5","\u06F6":"6","\u06F7":"7","\u06F8":"8","\u06F9":"9","\u0E3F":"baht","\u10D0":"a","\u10D1":"b","\u10D2":"g","\u10D3":"d","\u10D4":"e","\u10D5":"v","\u10D6":"z","\u10D7":"t","\u10D8":"i","\u10D9":"k","\u10DA":"l","\u10DB":"m","\u10DC":"n","\u10DD":"o","\u10DE":"p","\u10DF":"zh","\u10E0":"r","\u10E1":"s","\u10E2":"t","\u10E3":"u","\u10E4":"f","\u10E5":"k","\u10E6":"gh","\u10E7":"q","\u10E8":"sh","\u10E9":"ch","\u10EA":"ts","\u10EB":"dz","\u10EC":"ts","\u10ED":"ch","\u10EE":"kh","\u10EF":"j","\u10F0":"h","\u1E62":"S","\u1E63":"s","\u1E80":"W","\u1E81":"w","\u1E82":"W","\u1E83":"w","\u1E84":"W","\u1E85":"w","\u1E9E":"SS","\u1EA0":"A","\u1EA1":"a","\u1EA2":"A","\u1EA3":"a","\u1EA4":"A","\u1EA5":"a","\u1EA6":"A","\u1EA7":"a","\u1EA8":"A","\u1EA9":"a","\u1EAA":"A","\u1EAB":"a","\u1EAC":"A","\u1EAD":"a","\u1EAE":"A","\u1EAF":"a","\u1EB0":"A","\u1EB1":"a","\u1EB2":"A","\u1EB3":"a","\u1EB4":"A","\u1EB5":"a","\u1EB6":"A","\u1EB7":"a","\u1EB8":"E","\u1EB9":"e","\u1EBA":"E","\u1EBB":"e","\u1EBC":"E","\u1EBD":"e","\u1EBE":"E","\u1EBF":"e","\u1EC0":"E","\u1EC1":"e","\u1EC2":"E","\u1EC3":"e","\u1EC4":"E","\u1EC5":"e","\u1EC6":"E","\u1EC7":"e","\u1EC8":"I","\u1EC9":"i","\u1ECA":"I","\u1ECB":"i","\u1ECC":"O","\u1ECD":"o","\u1ECE":"O","\u1ECF":"o","\u1ED0":"O","\u1ED1":"o","\u1ED2":"O","\u1ED3":"o","\u1ED4":"O","\u1ED5":"o","\u1ED6":"O","\u1ED7":"o","\u1ED8":"O","\u1ED9":"o","\u1EDA":"O","\u1EDB":"o","\u1EDC":"O","\u1EDD":"o","\u1EDE":"O","\u1EDF":"o","\u1EE0":"O","\u1EE1":"o","\u1EE2":"O","\u1EE3":"o","\u1EE4":"U","\u1EE5":"u","\u1EE6":"U","\u1EE7":"u","\u1EE8":"U","\u1EE9":"u","\u1EEA":"U","\u1EEB":"u","\u1EEC":"U","\u1EED":"u","\u1EEE":"U","\u1EEF":"u","\u1EF0":"U","\u1EF1":"u","\u1EF2":"Y","\u1EF3":"y","\u1EF4":"Y","\u1EF5":"y","\u1EF6":"Y","\u1EF7":"y","\u1EF8":"Y","\u1EF9":"y","\u2013":"-","\u2018":"'","\u2019":"'","\u201C":"\\"","\u201D":"\\"","\u201E":"\\"","\u2020":"+","\u2022":"*","\u2026":"...","\u20A0":"ecu","\u20A2":"cruzeiro","\u20A3":"french franc","\u20A4":"lira","\u20A5":"mill","\u20A6":"naira","\u20A7":"peseta","\u20A8":"rupee","\u20A9":"won","\u20AA":"new shequel","\u20AB":"dong","\u20AC":"euro","\u20AD":"kip","\u20AE":"tugrik","\u20AF":"drachma","\u20B0":"penny","\u20B1":"peso","\u20B2":"guarani","\u20B3":"austral","\u20B4":"hryvnia","\u20B5":"cedi","\u20B8":"kazakhstani tenge","\u20B9":"indian rupee","\u20BA":"turkish lira","\u20BD":"russian ruble","\u20BF":"bitcoin","\u2120":"sm","\u2122":"tm","\u2202":"d","\u2206":"delta","\u2211":"sum","\u221E":"infinity","\u2665":"love","\u5143":"yuan","\u5186":"yen","\uFDFC":"rial","\uFEF5":"laa","\uFEF7":"laa","\uFEF9":"lai","\uFEFB":"la"}`);
|
|
45
|
+
var locales = JSON.parse('{"bg":{"\u0419":"Y","\u0426":"Ts","\u0429":"Sht","\u042A":"A","\u042C":"Y","\u0439":"y","\u0446":"ts","\u0449":"sht","\u044A":"a","\u044C":"y"},"de":{"\xC4":"AE","\xE4":"ae","\xD6":"OE","\xF6":"oe","\xDC":"UE","\xFC":"ue","\xDF":"ss","%":"prozent","&":"und","|":"oder","\u2211":"summe","\u221E":"unendlich","\u2665":"liebe"},"es":{"%":"por ciento","&":"y","<":"menor que",">":"mayor que","|":"o","\xA2":"centavos","\xA3":"libras","\xA4":"moneda","\u20A3":"francos","\u2211":"suma","\u221E":"infinito","\u2665":"amor"},"fr":{"%":"pourcent","&":"et","<":"plus petit",">":"plus grand","|":"ou","\xA2":"centime","\xA3":"livre","\xA4":"devise","\u20A3":"franc","\u2211":"somme","\u221E":"infini","\u2665":"amour"},"pt":{"%":"porcento","&":"e","<":"menor",">":"maior","|":"ou","\xA2":"centavo","\u2211":"soma","\xA3":"libra","\u221E":"infinito","\u2665":"amor"},"uk":{"\u0418":"Y","\u0438":"y","\u0419":"Y","\u0439":"y","\u0426":"Ts","\u0446":"ts","\u0425":"Kh","\u0445":"kh","\u0429":"Shch","\u0449":"shch","\u0413":"H","\u0433":"h"},"vi":{"\u0110":"D","\u0111":"d"},"da":{"\xD8":"OE","\xF8":"oe","\xC5":"AA","\xE5":"aa","%":"procent","&":"og","|":"eller","$":"dollar","<":"mindre end",">":"st\xF8rre end"},"nb":{"&":"og","\xC5":"AA","\xC6":"AE","\xD8":"OE","\xE5":"aa","\xE6":"ae","\xF8":"oe"},"it":{"&":"e"},"nl":{"&":"en"},"sv":{"&":"och","\xC5":"AA","\xC4":"AE","\xD6":"OE","\xE5":"aa","\xE4":"ae","\xF6":"oe"}}');
|
|
46
|
+
function replace(string, options) {
|
|
47
|
+
if (typeof string !== "string") {
|
|
48
|
+
throw new Error("slugify: string argument expected");
|
|
49
|
+
}
|
|
50
|
+
options = typeof options === "string" ? { replacement: options } : options || {};
|
|
51
|
+
var locale = locales[options.locale] || {};
|
|
52
|
+
var replacement = options.replacement === void 0 ? "-" : options.replacement;
|
|
53
|
+
var trim = options.trim === void 0 ? true : options.trim;
|
|
54
|
+
var slug = string.normalize().split("").reduce(function(result, ch) {
|
|
55
|
+
var appendChar = locale[ch];
|
|
56
|
+
if (appendChar === void 0) appendChar = charMap[ch];
|
|
57
|
+
if (appendChar === void 0) appendChar = ch;
|
|
58
|
+
if (appendChar === replacement) appendChar = " ";
|
|
59
|
+
return result + appendChar.replace(options.remove || /[^\w\s$*_+~.()'"!\-:@]+/g, "");
|
|
60
|
+
}, "");
|
|
61
|
+
if (options.strict) {
|
|
62
|
+
slug = slug.replace(/[^A-Za-z0-9\s]/g, "");
|
|
63
|
+
}
|
|
64
|
+
if (trim) {
|
|
65
|
+
slug = slug.trim();
|
|
66
|
+
}
|
|
67
|
+
slug = slug.replace(/\s+/g, replacement);
|
|
68
|
+
if (options.lower) {
|
|
69
|
+
slug = slug.toLowerCase();
|
|
70
|
+
}
|
|
71
|
+
return slug;
|
|
72
|
+
}
|
|
73
|
+
replace.extend = function(customMap) {
|
|
74
|
+
Object.assign(charMap, customMap);
|
|
75
|
+
};
|
|
76
|
+
return replace;
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
});
|
|
6
80
|
|
|
7
81
|
// ui/src/HelloWorld.jsx
|
|
8
82
|
import React from "react";
|
|
@@ -3217,6 +3291,7 @@ function MdxSearchFormModal(props = {}) {
|
|
|
3217
3291
|
}
|
|
3218
3292
|
|
|
3219
3293
|
// ui/src/iiif/ManifestPrimitives.jsx
|
|
3294
|
+
var import_slugify = __toESM(require_slugify());
|
|
3220
3295
|
import React34 from "react";
|
|
3221
3296
|
import {
|
|
3222
3297
|
Label as CloverLabel,
|
|
@@ -3239,6 +3314,180 @@ function ensureMetadata(items) {
|
|
|
3239
3314
|
return hasInternationalValue(label) && hasInternationalValue(value);
|
|
3240
3315
|
});
|
|
3241
3316
|
}
|
|
3317
|
+
function getFirstIntlValue(value) {
|
|
3318
|
+
if (!value) return "";
|
|
3319
|
+
if (typeof value === "string") return value;
|
|
3320
|
+
try {
|
|
3321
|
+
const keys = Object.keys(value || {});
|
|
3322
|
+
for (const key of keys) {
|
|
3323
|
+
const arr = Array.isArray(value[key]) ? value[key] : [];
|
|
3324
|
+
for (const entry of arr) {
|
|
3325
|
+
if (entry == null) continue;
|
|
3326
|
+
const str = typeof entry === "string" ? entry : String(entry);
|
|
3327
|
+
if (str) return str;
|
|
3328
|
+
}
|
|
3329
|
+
}
|
|
3330
|
+
} catch (_) {
|
|
3331
|
+
}
|
|
3332
|
+
return "";
|
|
3333
|
+
}
|
|
3334
|
+
function normalizeMetadataLabelText(label) {
|
|
3335
|
+
if (!label) return "";
|
|
3336
|
+
return label.trim().replace(/[:\s]+$/g, "").toLowerCase();
|
|
3337
|
+
}
|
|
3338
|
+
function normalizeMetadataLabelValue(value) {
|
|
3339
|
+
const raw = getFirstIntlValue(value);
|
|
3340
|
+
if (!raw) return "";
|
|
3341
|
+
return normalizeMetadataLabelText(String(raw));
|
|
3342
|
+
}
|
|
3343
|
+
function buildFacetLabelMap(manifest) {
|
|
3344
|
+
const source = manifest && Array.isArray(manifest.__canopyMetadataFacets) ? manifest.__canopyMetadataFacets : null;
|
|
3345
|
+
if (!source || !source.length) return null;
|
|
3346
|
+
const map = /* @__PURE__ */ new Map();
|
|
3347
|
+
for (const entry of source) {
|
|
3348
|
+
if (!entry || !entry.normalized) continue;
|
|
3349
|
+
map.set(entry.normalized, entry);
|
|
3350
|
+
}
|
|
3351
|
+
return map.size ? map : null;
|
|
3352
|
+
}
|
|
3353
|
+
var SLUG_OPTIONS = { lower: true, strict: true, trim: true };
|
|
3354
|
+
function toValueSlug(value) {
|
|
3355
|
+
if (value == null) return "";
|
|
3356
|
+
try {
|
|
3357
|
+
const raw = typeof value === "string" ? value : String(value);
|
|
3358
|
+
return (0, import_slugify.default)(raw, SLUG_OPTIONS);
|
|
3359
|
+
} catch (_) {
|
|
3360
|
+
return "";
|
|
3361
|
+
}
|
|
3362
|
+
}
|
|
3363
|
+
function normalizeBasePath(value) {
|
|
3364
|
+
if (value == null) return "";
|
|
3365
|
+
const raw = String(value).trim();
|
|
3366
|
+
if (!raw) return "";
|
|
3367
|
+
const prefixed = raw.startsWith("/") ? raw : `/${raw}`;
|
|
3368
|
+
const cleaned = prefixed.replace(/\/+$/, "");
|
|
3369
|
+
return cleaned === "/" ? "" : cleaned;
|
|
3370
|
+
}
|
|
3371
|
+
var cachedBasePath = null;
|
|
3372
|
+
function readBasePath2() {
|
|
3373
|
+
if (cachedBasePath !== null) return cachedBasePath;
|
|
3374
|
+
const candidates = [];
|
|
3375
|
+
try {
|
|
3376
|
+
if (typeof window !== "undefined" && window.CANOPY_BASE_PATH != null) {
|
|
3377
|
+
candidates.push(window.CANOPY_BASE_PATH);
|
|
3378
|
+
}
|
|
3379
|
+
} catch (_) {
|
|
3380
|
+
}
|
|
3381
|
+
try {
|
|
3382
|
+
if (typeof globalThis !== "undefined" && globalThis.CANOPY_BASE_PATH != null) {
|
|
3383
|
+
candidates.push(globalThis.CANOPY_BASE_PATH);
|
|
3384
|
+
}
|
|
3385
|
+
} catch (_) {
|
|
3386
|
+
}
|
|
3387
|
+
try {
|
|
3388
|
+
if (typeof process !== "undefined" && process.env) {
|
|
3389
|
+
candidates.push(process.env.CANOPY_BASE_PATH);
|
|
3390
|
+
}
|
|
3391
|
+
} catch (_) {
|
|
3392
|
+
}
|
|
3393
|
+
for (const candidate of candidates) {
|
|
3394
|
+
const normalized = normalizeBasePath(candidate);
|
|
3395
|
+
if (normalized) {
|
|
3396
|
+
cachedBasePath = normalized;
|
|
3397
|
+
return cachedBasePath;
|
|
3398
|
+
}
|
|
3399
|
+
}
|
|
3400
|
+
cachedBasePath = "";
|
|
3401
|
+
return cachedBasePath;
|
|
3402
|
+
}
|
|
3403
|
+
function withBasePath(href) {
|
|
3404
|
+
try {
|
|
3405
|
+
const raw = typeof href === "string" ? href.trim() : "";
|
|
3406
|
+
if (!raw) return href;
|
|
3407
|
+
if (/^(?:[a-z][a-z0-9+.-]*:|\/\/|#)/i.test(raw)) return raw;
|
|
3408
|
+
if (!raw.startsWith("/")) return raw;
|
|
3409
|
+
const base = readBasePath2();
|
|
3410
|
+
if (!base) return raw;
|
|
3411
|
+
if (raw === base || raw.startsWith(`${base}/`)) return raw;
|
|
3412
|
+
return `${base}${raw}`;
|
|
3413
|
+
} catch (_) {
|
|
3414
|
+
return href;
|
|
3415
|
+
}
|
|
3416
|
+
}
|
|
3417
|
+
function buildFacetSearchHref(labelSlug, valueSlug) {
|
|
3418
|
+
if (!labelSlug || !valueSlug) return "";
|
|
3419
|
+
try {
|
|
3420
|
+
const params = new URLSearchParams();
|
|
3421
|
+
params.set("type", "work");
|
|
3422
|
+
params.set(labelSlug, valueSlug);
|
|
3423
|
+
const path = `/search?${params.toString()}`;
|
|
3424
|
+
return withBasePath(path);
|
|
3425
|
+
} catch (_) {
|
|
3426
|
+
return "";
|
|
3427
|
+
}
|
|
3428
|
+
}
|
|
3429
|
+
function MetadataFacetLink(props) {
|
|
3430
|
+
const { value, facetSlug } = props;
|
|
3431
|
+
const text = value == null ? "" : String(value);
|
|
3432
|
+
if (!text) return null;
|
|
3433
|
+
const valueSlug = facetSlug ? toValueSlug(text) : "";
|
|
3434
|
+
const href = facetSlug && valueSlug ? buildFacetSearchHref(facetSlug, valueSlug) : "";
|
|
3435
|
+
if (!href) return text;
|
|
3436
|
+
return /* @__PURE__ */ React34.createElement(
|
|
3437
|
+
"a",
|
|
3438
|
+
{
|
|
3439
|
+
href,
|
|
3440
|
+
"data-canopy-facet-link": "",
|
|
3441
|
+
"data-facet-label": facetSlug,
|
|
3442
|
+
"data-facet-value": valueSlug
|
|
3443
|
+
},
|
|
3444
|
+
text
|
|
3445
|
+
);
|
|
3446
|
+
}
|
|
3447
|
+
function buildFacetCustomValueContent(items, manifest) {
|
|
3448
|
+
if (!Array.isArray(items) || !items.length || !manifest) return [];
|
|
3449
|
+
const facetMap = buildFacetLabelMap(manifest);
|
|
3450
|
+
if (!facetMap) return [];
|
|
3451
|
+
const seen = /* @__PURE__ */ new Set();
|
|
3452
|
+
const custom = [];
|
|
3453
|
+
for (const item of items) {
|
|
3454
|
+
if (!item || !item.label) continue;
|
|
3455
|
+
const normalized = normalizeMetadataLabelValue(item.label);
|
|
3456
|
+
if (!normalized || seen.has(normalized)) continue;
|
|
3457
|
+
if (!facetMap.has(normalized)) continue;
|
|
3458
|
+
const facet = facetMap.get(normalized);
|
|
3459
|
+
seen.add(normalized);
|
|
3460
|
+
custom.push({
|
|
3461
|
+
matchingLabel: item.label,
|
|
3462
|
+
Content: /* @__PURE__ */ React34.createElement(MetadataFacetLink, { facetSlug: facet.slug })
|
|
3463
|
+
});
|
|
3464
|
+
}
|
|
3465
|
+
return custom;
|
|
3466
|
+
}
|
|
3467
|
+
function normalizeMatchingLabel(label) {
|
|
3468
|
+
if (!label) return "";
|
|
3469
|
+
return normalizeMetadataLabelValue(label);
|
|
3470
|
+
}
|
|
3471
|
+
function mergeCustomValueContent(userContent, autoContent) {
|
|
3472
|
+
const merged = [];
|
|
3473
|
+
const seen = /* @__PURE__ */ new Set();
|
|
3474
|
+
const addEntry = (entry, track = false) => {
|
|
3475
|
+
if (!entry || !entry.matchingLabel || !entry.Content) return;
|
|
3476
|
+
merged.push(entry);
|
|
3477
|
+
if (!track) return;
|
|
3478
|
+
const normalized = normalizeMatchingLabel(entry.matchingLabel);
|
|
3479
|
+
if (normalized) seen.add(normalized);
|
|
3480
|
+
};
|
|
3481
|
+
const userList = Array.isArray(userContent) ? userContent : [];
|
|
3482
|
+
userList.forEach((entry) => addEntry(entry, true));
|
|
3483
|
+
const autoList = Array.isArray(autoContent) ? autoContent : [];
|
|
3484
|
+
autoList.forEach((entry) => {
|
|
3485
|
+
const normalized = normalizeMatchingLabel(entry.matchingLabel);
|
|
3486
|
+
if (normalized && seen.has(normalized)) return;
|
|
3487
|
+
addEntry(entry, false);
|
|
3488
|
+
});
|
|
3489
|
+
return merged.length ? merged : void 0;
|
|
3490
|
+
}
|
|
3242
3491
|
function Label({ manifest, label, ...rest }) {
|
|
3243
3492
|
const intl = label || manifest && manifest.label;
|
|
3244
3493
|
if (!hasInternationalValue(intl)) return null;
|
|
@@ -3249,10 +3498,22 @@ function Summary({ manifest, summary, ...rest }) {
|
|
|
3249
3498
|
if (!hasInternationalValue(intl)) return null;
|
|
3250
3499
|
return /* @__PURE__ */ React34.createElement(CloverSummary, { summary: intl, ...rest });
|
|
3251
3500
|
}
|
|
3252
|
-
function Metadata({ manifest, metadata, ...rest }) {
|
|
3501
|
+
function Metadata({ manifest, metadata, customValueContent, ...rest }) {
|
|
3253
3502
|
const items = ensureMetadata(metadata || manifest && manifest.metadata);
|
|
3254
3503
|
if (!items.length) return null;
|
|
3255
|
-
|
|
3504
|
+
const autoCustomContent = buildFacetCustomValueContent(items, manifest);
|
|
3505
|
+
const mergedCustomContent = mergeCustomValueContent(
|
|
3506
|
+
customValueContent,
|
|
3507
|
+
autoCustomContent
|
|
3508
|
+
);
|
|
3509
|
+
return /* @__PURE__ */ React34.createElement(
|
|
3510
|
+
CloverMetadata,
|
|
3511
|
+
{
|
|
3512
|
+
metadata: items,
|
|
3513
|
+
customValueContent: mergedCustomContent,
|
|
3514
|
+
...rest
|
|
3515
|
+
}
|
|
3516
|
+
);
|
|
3256
3517
|
}
|
|
3257
3518
|
function RequiredStatement({ manifest, requiredStatement, ...rest }) {
|
|
3258
3519
|
const stmt = requiredStatement || manifest && manifest.requiredStatement;
|