@manifest-editor/components 1.3.1 → 1.4.0

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/dist/index.js CHANGED
@@ -5,32 +5,27 @@ import "iiif-browser/dist/index.css";
5
5
 
6
6
  // src/ActionButton.tsx
7
7
  import { Button } from "react-aria-components";
8
-
9
- // src/utils.ts
10
- import { clsx } from "clsx";
11
8
  import { twMerge } from "tailwind-merge";
12
- var cn = (...inputs) => {
13
- return twMerge(clsx(inputs));
14
- };
15
-
16
- // src/ActionButton.tsx
17
9
  import { jsx } from "react/jsx-runtime";
18
10
  function ActionButton({
19
11
  className: className2,
20
12
  primary,
21
13
  center,
14
+ large,
22
15
  children,
23
16
  ...props
24
17
  }) {
25
18
  return /* @__PURE__ */ jsx(
26
19
  Button,
27
20
  {
28
- className: cn(
21
+ className: (t) => twMerge(
29
22
  //
30
- "border-none flex gap-1 items-center px-2 py-1 bg-gray-100 text-me-primary-500 text-sm rounded hover:bg-gray-200",
23
+ "border-none flex gap-1 items-center bg-gray-100 text-me-primary-500 text-sm rounded hover:bg-gray-200",
31
24
  primary ? "bg-me-primary-500 text-white hover:bg-me-primary-600" : "",
32
25
  center ? "place-content-center" : "",
33
- className2
26
+ large ? "px-4 py-2" : "px-2 py-1",
27
+ t.isDisabled ? "opacity-70 cursor-not-allowed pointer-events-none" : "",
28
+ typeof className2 === "string" ? className2 : className2?.(t)
34
29
  ),
35
30
  ...props,
36
31
  children
@@ -38,24 +33,31 @@ function ActionButton({
38
33
  );
39
34
  }
40
35
 
36
+ // src/utils.ts
37
+ import { clsx } from "clsx";
38
+ import { twMerge as twMerge2 } from "tailwind-merge";
39
+ var cn = (...inputs) => {
40
+ return twMerge2(clsx(inputs));
41
+ };
42
+
41
43
  // src/Tooltip.tsx
42
- import * as React from "react";
43
44
  import {
44
- useFloating,
45
+ FloatingPortal,
45
46
  autoUpdate,
46
- offset,
47
47
  flip,
48
+ offset,
48
49
  shift,
49
- useHover,
50
- useFocus,
51
50
  useDismiss,
52
- useRole,
51
+ useFloating,
52
+ useFocus,
53
+ useHover,
53
54
  useInteractions,
54
55
  useMergeRefs,
55
- FloatingPortal
56
+ useRole
56
57
  } from "@floating-ui/react";
58
+ import * as React from "react";
57
59
  import { Button as Button2 } from "react-aria-components";
58
- import { twMerge as twMerge2 } from "tailwind-merge";
60
+ import { twMerge as twMerge3 } from "tailwind-merge";
59
61
  import { jsx as jsx2 } from "react/jsx-runtime";
60
62
  function useTooltip({
61
63
  initialOpen = false,
@@ -110,10 +112,7 @@ var useTooltipContext = () => {
110
112
  }
111
113
  return context;
112
114
  };
113
- function Tooltip({
114
- children,
115
- ...options
116
- }) {
115
+ function Tooltip({ children, ...options }) {
117
116
  const tooltip = useTooltip(options);
118
117
  return /* @__PURE__ */ jsx2(TooltipContext.Provider, { value: tooltip, children });
119
118
  }
@@ -142,12 +141,12 @@ var TooltipTrigger = React.forwardRef(function TooltipTrigger2({ children, asChi
142
141
  }
143
142
  );
144
143
  });
145
- var TooltipContent = React.forwardRef(function TooltipContent2({ style, ...props }, propRef) {
144
+ var TooltipContent = React.forwardRef(function TooltipContent2({ style, root, ...props }, propRef) {
146
145
  const context = useTooltipContext();
147
146
  const ref = useMergeRefs([context.refs.setFloating, propRef]);
148
147
  if (!context.open)
149
148
  return null;
150
- return /* @__PURE__ */ jsx2(FloatingPortal, { children: /* @__PURE__ */ jsx2(
149
+ return /* @__PURE__ */ jsx2(FloatingPortal, { root, children: /* @__PURE__ */ jsx2(
151
150
  "div",
152
151
  {
153
152
  ref,
@@ -163,10 +162,8 @@ function DefaultTooltipContent(props) {
163
162
  return /* @__PURE__ */ jsx2(
164
163
  TooltipContent,
165
164
  {
166
- className: twMerge2(
167
- "bg-me-gray-900 text-white text-sm px-3 py-2 rounded-lg opacity-90 z-50",
168
- props.className
169
- ),
165
+ root: props.root,
166
+ className: twMerge3("bg-me-gray-900 text-white text-sm px-3 py-2 rounded opacity-90 z-50", props.className),
170
167
  children: props.children
171
168
  }
172
169
  );
@@ -227,7 +224,7 @@ function PanelSideMenuItem(props) {
227
224
  onMouseDown: props.onClick,
228
225
  children: [
229
226
  props.icon,
230
- /* @__PURE__ */ jsx4(TooltipContent, { className: "bg-me-gray-900 text-white text-sm px-3 py-2 rounded-lg opacity-90 z-50", children: props.label })
227
+ /* @__PURE__ */ jsx4(TooltipContent, { className: "bg-me-gray-900 text-white text-sm px-3 py-2 rounded opacity-90 z-50", children: props.label })
231
228
  ]
232
229
  }
233
230
  ) }) });
@@ -273,7 +270,7 @@ import {
273
270
  useThumbnail
274
271
  } from "react-iiif-vault";
275
272
  import { LazyLoadComponent } from "react-lazy-load-image-component";
276
- import { twMerge as twMerge3 } from "tailwind-merge";
273
+ import { twMerge as twMerge4 } from "tailwind-merge";
277
274
 
278
275
  // src/Spinner.tsx
279
276
  import { jsx as jsx7, jsxs as jsxs4 } from "react/jsx-runtime";
@@ -383,7 +380,7 @@ function LazyThumbnailInner({
383
380
  !thumbnail?.id || isLoading ? /* @__PURE__ */ jsx9(
384
381
  "div",
385
382
  {
386
- className: twMerge3(
383
+ className: twMerge4(
387
384
  "absolute inset-0 flex items-center justify-center bg-me-gray-100 text-2xl z-10",
388
385
  fade && "animate-fadeIn"
389
386
  ),
@@ -415,7 +412,7 @@ function CanvasLabel(props) {
415
412
 
416
413
  // src/Card3D.tsx
417
414
  import { useLayoutEffect as useLayoutEffect2, useRef as useRef2 } from "react";
418
- import { twMerge as twMerge4 } from "tailwind-merge";
415
+ import { twMerge as twMerge5 } from "tailwind-merge";
419
416
  import { jsx as jsx11, jsxs as jsxs7 } from "react/jsx-runtime";
420
417
  function Card3D({
421
418
  className: className2,
@@ -491,7 +488,7 @@ function Card3D({
491
488
  "div",
492
489
  {
493
490
  ref: outer,
494
- className: twMerge4(
491
+ className: twMerge5(
495
492
  //
496
493
  "relative transition-all hover:duration-50",
497
494
  shouldTranslate && "hover:shadow-xl",
@@ -536,69 +533,50 @@ function CanvasThumbnailGridItem(props) {
536
533
  }
537
534
 
538
535
  // src/Modal.tsx
539
- import {
540
- CloseButton,
541
- Dialog,
542
- DialogPanel,
543
- DialogTitle
544
- } from "@headlessui/react";
536
+ import { CloseButton, Dialog, DialogPanel, DialogTitle } from "@headlessui/react";
537
+ import { createPortal } from "react-dom";
545
538
  import { Fragment as Fragment2, jsx as jsx13, jsxs as jsxs9 } from "react/jsx-runtime";
546
- function Modal({
547
- id,
548
- title,
549
- open = true,
550
- onClose,
551
- actions,
552
- children
553
- }) {
554
- return /* @__PURE__ */ jsx13(Fragment2, { children: /* @__PURE__ */ jsxs9(
555
- Dialog,
556
- {
557
- open,
558
- onClose,
559
- id,
560
- className: "relative z-[500]",
561
- children: [
562
- /* @__PURE__ */ jsx13(
563
- "div",
564
- {
565
- className: `fixed inset-0 bg-black/30 animate-fadeIn z-[501]`,
566
- "aria-hidden": "true"
567
- }
568
- ),
569
- /* @__PURE__ */ jsx13("div", { className: "fixed inset-0 flex w-screen items-center justify-center p-4 z-[502]", children: /* @__PURE__ */ jsx13("div", { className: "relative p-4 w-full max-w-4xl max-h-full", children: /* @__PURE__ */ jsxs9(DialogPanel, { className: "relative bg-white rounded-lg overflow-hidden shadow-2xl max-h-[80vh] flex flex-col", children: [
570
- /* @__PURE__ */ jsxs9("div", { className: "flex items-center justify-between p-4 md:p-5 rounded-t-lg sticky top-0 bg-white", children: [
571
- /* @__PURE__ */ jsx13(DialogTitle, { className: "text-xl font-semibold text-gray-900 ", children: title }),
572
- /* @__PURE__ */ jsxs9(CloseButton, { className: "text-gray-400 bg-transparent hover:bg-gray-200 hover:text-gray-900 rounded-lg text-sm w-8 h-8 ms-auto inline-flex justify-center items-center", children: [
573
- /* @__PURE__ */ jsx13(
574
- "svg",
539
+ function ModalBackSlot({ children }) {
540
+ const element = document.getElementById("modal-back-slot");
541
+ if (!element)
542
+ return null;
543
+ return createPortal(children, element);
544
+ }
545
+ function Modal({ id, title, open = true, onClose, actions, children }) {
546
+ return /* @__PURE__ */ jsx13(Fragment2, { children: /* @__PURE__ */ jsxs9(Dialog, { open, onClose, id, className: "relative z-[500]", children: [
547
+ /* @__PURE__ */ jsx13("div", { className: `fixed inset-0 bg-black/30 animate-fadeIn z-[501]`, "aria-hidden": "true" }),
548
+ /* @__PURE__ */ jsx13("div", { className: "fixed inset-0 flex w-screen items-center justify-center p-4 z-[502]", children: /* @__PURE__ */ jsx13("div", { className: "relative p-4 w-full max-w-4xl max-h-full", children: /* @__PURE__ */ jsxs9(DialogPanel, { className: "relative bg-white rounded-lg overflow-hidden shadow-2xl max-h-[80vh] flex flex-col", children: [
549
+ /* @__PURE__ */ jsxs9("div", { className: "flex items-center justify-between gap-3 p-4 rounded-t-lg sticky top-0 bg-white", children: [
550
+ /* @__PURE__ */ jsx13("div", { id: "modal-back-slot" }),
551
+ /* @__PURE__ */ jsx13(DialogTitle, { className: "text-xl font-semibold text-gray-900 ", children: title }),
552
+ /* @__PURE__ */ jsxs9(CloseButton, { className: "text-gray-400 bg-transparent hover:bg-gray-200 hover:text-gray-900 rounded-lg text-sm w-8 h-8 ms-auto inline-flex justify-center items-center", children: [
553
+ /* @__PURE__ */ jsx13(
554
+ "svg",
555
+ {
556
+ className: "w-3 h-3",
557
+ "aria-hidden": "true",
558
+ xmlns: "http://www.w3.org/2000/svg",
559
+ fill: "none",
560
+ viewBox: "0 0 14 14",
561
+ children: /* @__PURE__ */ jsx13(
562
+ "path",
575
563
  {
576
- className: "w-3 h-3",
577
- "aria-hidden": "true",
578
- xmlns: "http://www.w3.org/2000/svg",
579
- fill: "none",
580
- viewBox: "0 0 14 14",
581
- children: /* @__PURE__ */ jsx13(
582
- "path",
583
- {
584
- stroke: "currentColor",
585
- strokeLinecap: "round",
586
- strokeLinejoin: "round",
587
- strokeWidth: "2",
588
- d: "m1 1 6 6m0 0 6 6M7 7l6-6M7 7l-6 6"
589
- }
590
- )
564
+ stroke: "currentColor",
565
+ strokeLinecap: "round",
566
+ strokeLinejoin: "round",
567
+ strokeWidth: "2",
568
+ d: "m1 1 6 6m0 0 6 6M7 7l6-6M7 7l-6 6"
591
569
  }
592
- ),
593
- /* @__PURE__ */ jsx13("span", { className: "sr-only", children: "Close" })
594
- ] })
595
- ] }),
596
- /* @__PURE__ */ jsx13("div", { className: "flex-1 min-h-0 overflow-y-auto flex flex-col", children }),
597
- actions ? /* @__PURE__ */ jsx13("div", { className: "flex items-center p-4 md:p-5 border-t border-gray-200 rounded-b justify-end", children: actions }) : null
598
- ] }) }) })
599
- ]
600
- }
601
- ) });
570
+ )
571
+ }
572
+ ),
573
+ /* @__PURE__ */ jsx13("span", { className: "sr-only", children: "Close" })
574
+ ] })
575
+ ] }),
576
+ /* @__PURE__ */ jsx13("div", { className: "flex-1 min-h-0 overflow-y-auto flex flex-col", children }),
577
+ actions ? /* @__PURE__ */ jsx13("div", { className: "flex items-center p-4 border-t border-gray-200 rounded-b justify-end", children: actions }) : null
578
+ ] }) }) })
579
+ ] }) });
602
580
  }
603
581
 
604
582
  // src/ControlButton.tsx
@@ -705,7 +683,7 @@ function TabPanel({ className: className2, children, ...props }) {
705
683
 
706
684
  // src/CreatorGrid.tsx
707
685
  import { ListBox, ListBoxItem } from "react-aria-components";
708
- import { twMerge as twMerge5 } from "tailwind-merge";
686
+ import { twMerge as twMerge6 } from "tailwind-merge";
709
687
  import { jsx as jsx17, jsxs as jsxs10 } from "react/jsx-runtime";
710
688
  function CreatorGrid(props) {
711
689
  return /* @__PURE__ */ jsx17(
@@ -726,7 +704,7 @@ function CreatorGridItem(props) {
726
704
  {
727
705
  id: props.id,
728
706
  onAction: props.onClick,
729
- className: ($s) => twMerge5(
707
+ className: ($s) => twMerge6(
730
708
  "bg-white p-2 border-me-gray-300 rounded-md border hover:border-me-primary-500",
731
709
  $s.isFocused && "border-me-primary-500 outline-me-primary-500 outline-2"
732
710
  ),
@@ -1063,7 +1041,7 @@ import {
1063
1041
  Tabs as Tabs2
1064
1042
  } from "react-aria-components";
1065
1043
  import { createHideableComponent } from "@react-aria/collections";
1066
- import { createPortal } from "react-dom";
1044
+ import { createPortal as createPortal2 } from "react-dom";
1067
1045
  import { Fragment as Fragment3, jsx as jsx33, jsxs as jsxs23 } from "react/jsx-runtime";
1068
1046
  function SidebarTabs({
1069
1047
  menu,
@@ -1163,7 +1141,7 @@ function SidebarTabs({
1163
1141
  },
1164
1142
  menuId
1165
1143
  ),
1166
- hiddenMenu && hidden > 0 ? createPortal(
1144
+ hiddenMenu && hidden > 0 ? createPortal2(
1167
1145
  /* @__PURE__ */ jsx33(
1168
1146
  MoreMenu,
1169
1147
  {
@@ -1223,7 +1201,7 @@ function MetadataContainer({
1223
1201
  ...props
1224
1202
  }) {
1225
1203
  return /* @__PURE__ */ jsxs24(
1226
- "div",
1204
+ "fieldset",
1227
1205
  {
1228
1206
  className: cn(
1229
1207
  "hover:ring ring-gray-200 focus-within:ring-me-primary-500 focus-within:ring p-2 rounded mb-2",
@@ -1283,7 +1261,7 @@ function ManifestEditorLogo(props) {
1283
1261
  }
1284
1262
 
1285
1263
  // src/Forms.tsx
1286
- import { Label, Form as RAForm, Input, RadioGroup, Radio } from "react-aria-components";
1264
+ import { Input, Label, Form as RAForm, Radio, RadioGroup, TextArea } from "react-aria-components";
1287
1265
  import { jsx as jsx37 } from "react/jsx-runtime";
1288
1266
  function MeLabel({ className: className2, ...props }) {
1289
1267
  return /* @__PURE__ */ jsx37(
@@ -1351,6 +1329,20 @@ function MeInput({ className: className2, ...props }) {
1351
1329
  }
1352
1330
  );
1353
1331
  }
1332
+ function MeTextArea({ className: className2, ...props }) {
1333
+ return /* @__PURE__ */ jsx37(
1334
+ TextArea,
1335
+ {
1336
+ className: cn(
1337
+ //
1338
+ "p-2 bg-me-gray-100 border-b border-b-me-gray-500",
1339
+ "focus:ring-0 outline-0 focus:border-me-primary-500 focus:bg-[#ECEEF5]",
1340
+ className2
1341
+ ),
1342
+ ...props
1343
+ }
1344
+ );
1345
+ }
1354
1346
  function MeInputContainer({
1355
1347
  horizontal,
1356
1348
  className: className2,
@@ -1375,7 +1367,8 @@ var Form = {
1375
1367
  Label: MeLabel,
1376
1368
  InputContainer: MeInputContainer,
1377
1369
  RadioGroup: MeRadioGroup,
1378
- Radio: MeRadio
1370
+ Radio: MeRadio,
1371
+ TextArea: MeTextArea
1379
1372
  };
1380
1373
 
1381
1374
  // src/HTMLEditor.tsx
@@ -1499,27 +1492,31 @@ function HTMLEditor({
1499
1492
  }
1500
1493
 
1501
1494
  // src/IconButton.tsx
1502
- import { twMerge as twMerge6 } from "tailwind-merge";
1495
+ import { twMerge as twMerge7 } from "tailwind-merge";
1503
1496
  import { jsx as jsx40, jsxs as jsxs27 } from "react/jsx-runtime";
1504
1497
  function IconButton({
1505
1498
  children,
1506
1499
  active,
1507
1500
  label,
1508
1501
  disabled,
1509
- onPress
1502
+ onPress,
1503
+ root,
1504
+ className: className2,
1505
+ placement = "top"
1510
1506
  }) {
1511
- return /* @__PURE__ */ jsx40(Tooltip, { placement: "top", children: /* @__PURE__ */ jsxs27(
1507
+ return /* @__PURE__ */ jsx40(Tooltip, { placement, children: /* @__PURE__ */ jsxs27(
1512
1508
  TooltipTrigger,
1513
1509
  {
1514
1510
  onClick: onPress,
1515
- className: twMerge6(
1511
+ className: twMerge7(
1516
1512
  "rounded flex items-center bg-white justify-center p-2 hover:bg-gray-100 text-2xl",
1517
1513
  active ? "bg-me-primary-500 bg-opacity-40 hover:bg-opacity-70 hover:bg-me-primary-500" : "",
1518
- disabled ? "opacity-50 pointer-events-none" : ""
1514
+ disabled ? "opacity-50 pointer-events-none" : "",
1515
+ className2
1519
1516
  ),
1520
1517
  children: [
1521
1518
  children,
1522
- /* @__PURE__ */ jsx40(DefaultTooltipContent, { className: "translate-x-3", children: label })
1519
+ /* @__PURE__ */ jsx40(DefaultTooltipContent, { root, className: "translate-x-3 z-50", children: label })
1523
1520
  ]
1524
1521
  }
1525
1522
  ) });
@@ -1560,12 +1557,116 @@ var HandleContainer = forwardRef2(function HandleContainer2({ className: classNa
1560
1557
  );
1561
1558
  });
1562
1559
 
1560
+ // src/CollectionListItem.tsx
1561
+ import { Button as Button6 } from "react-aria-components";
1562
+ import { LocaleString as LocaleString3, useCollection } from "react-iiif-vault";
1563
+
1564
+ // src/icons/CollectionIcon.tsx
1565
+ import { jsx as jsx43 } from "react/jsx-runtime";
1566
+ function CollectionIcon(props) {
1567
+ return /* @__PURE__ */ jsx43(
1568
+ "svg",
1569
+ {
1570
+ xmlns: "http://www.w3.org/2000/svg",
1571
+ width: "1em",
1572
+ height: "1em",
1573
+ viewBox: "0 -960 960 960",
1574
+ "aria-label": "collection",
1575
+ role: "img",
1576
+ ...props,
1577
+ children: /* @__PURE__ */ jsx43(
1578
+ "path",
1579
+ {
1580
+ d: "M320-320h480v-480h-80v280l-100-60-100 60v-280H320v480Zm0 80q-33 0-56.5-23.5T240-320v-480q0-33 23.5-56.5T320-880h480q33 0 56.5 23.5T880-800v480q0 33-23.5 56.5T800-240H320ZM160-80q-33 0-56.5-23.5T80-160v-560h80v560h560v80H160Zm360-720h200-200Zm-200 0h480-480Z",
1581
+ fill: "currentColor"
1582
+ }
1583
+ )
1584
+ }
1585
+ );
1586
+ }
1587
+
1588
+ // src/CollectionListItem.tsx
1589
+ import { jsx as jsx44, jsxs as jsxs29 } from "react/jsx-runtime";
1590
+ function CollectionListItem({ isActive, onAction }) {
1591
+ const collection = useCollection({});
1592
+ return /* @__PURE__ */ jsxs29(
1593
+ Button6,
1594
+ {
1595
+ className: "border-b-2 border-b-gray-200 flex p-2 gap-3 text-left truncate items-center w-full hover:bg-gray-100 data-[active]:bg-gray-200 data-[active]:border-b-me-primary-500",
1596
+ onPress: onAction,
1597
+ "data-active": isActive || void 0,
1598
+ children: [
1599
+ /* @__PURE__ */ jsx44(
1600
+ CollectionIcon,
1601
+ {
1602
+ "data-active": isActive || void 0,
1603
+ className: "flex-shrink-0 text-2xl data-[active]:text-me-primary-500 text-gray-400"
1604
+ }
1605
+ ),
1606
+ /* @__PURE__ */ jsx44(LocaleString3, { children: collection?.label })
1607
+ ]
1608
+ }
1609
+ );
1610
+ }
1611
+
1612
+ // src/ManifestListItem.tsx
1613
+ import { Button as Button7 } from "react-aria-components";
1614
+ import { LocaleString as LocaleString4, useManifest } from "react-iiif-vault";
1615
+
1616
+ // src/icons/ManifestIcon.tsx
1617
+ import { jsx as jsx45 } from "react/jsx-runtime";
1618
+ function ManifestIcon(props) {
1619
+ return /* @__PURE__ */ jsx45(
1620
+ "svg",
1621
+ {
1622
+ xmlns: "http://www.w3.org/2000/svg",
1623
+ width: "1em",
1624
+ height: "1em",
1625
+ viewBox: "20 -910 960 960",
1626
+ "aria-label": "manifest",
1627
+ role: "img",
1628
+ ...props,
1629
+ children: /* @__PURE__ */ jsx45(
1630
+ "path",
1631
+ {
1632
+ d: "M480-160q-48-38-104-59t-116-21q-42 0-82.5 11T100-198q-21 11-40.5-1T40-234v-482q0-11 5.5-21T62-752q46-24 96-36t102-12q58 0 113.5 15T480-740v484q51-32 107-48t113-16q36 0 70.5 6t69.5 18v-480q15 5 29.5 10.5T898-752q11 5 16.5 15t5.5 21v482q0 23-19.5 35t-40.5 1q-37-20-77.5-31T700-240q-60 0-116 21t-104 59Zm80-200v-380l200-200v400L560-360Zm-160 65v-396q-33-14-68.5-21.5T260-720q-37 0-72 7t-68 21v397q35-13 69.5-19t70.5-6q36 0 70.5 6t69.5 19Zm0 0v-396 396Z",
1633
+ fill: "currentColor"
1634
+ }
1635
+ )
1636
+ }
1637
+ );
1638
+ }
1639
+
1640
+ // src/ManifestListItem.tsx
1641
+ import { jsx as jsx46, jsxs as jsxs30 } from "react/jsx-runtime";
1642
+ function ManifestListItem({ isActive, onAction }) {
1643
+ const manifest = useManifest();
1644
+ return /* @__PURE__ */ jsxs30(
1645
+ Button7,
1646
+ {
1647
+ className: "border-b-2 border-b-gray-200 flex p-2 gap-3 text-left truncate items-center w-full hover:bg-gray-100 data-[active]:bg-gray-200 data-[active]:border-b-me-primary-500",
1648
+ onPress: onAction,
1649
+ "data-active": isActive || void 0,
1650
+ children: [
1651
+ /* @__PURE__ */ jsx46(
1652
+ ManifestIcon,
1653
+ {
1654
+ "data-active": isActive || void 0,
1655
+ className: "flex-shrink-0 text-2xl data-[active]:text-me-primary-500 text-gray-400"
1656
+ }
1657
+ ),
1658
+ /* @__PURE__ */ jsx46(LocaleString4, { children: manifest?.label })
1659
+ ]
1660
+ }
1661
+ );
1662
+ }
1663
+
1563
1664
  // src/icons/CreateCanvasIcon.tsx
1564
- import { jsx as jsx43, jsxs as jsxs29 } from "react/jsx-runtime";
1665
+ import { jsx as jsx47, jsxs as jsxs31 } from "react/jsx-runtime";
1565
1666
  function CreateCanvasIcon() {
1566
- return /* @__PURE__ */ jsxs29("svg", { xmlns: "http://www.w3.org/2000/svg", height: "24", viewBox: "0 0 24 24", width: "24", children: [
1567
- /* @__PURE__ */ jsx43("path", { d: "M0 0h24v24H0V0z", fill: "none" }),
1568
- /* @__PURE__ */ jsx43(
1667
+ return /* @__PURE__ */ jsxs31("svg", { xmlns: "http://www.w3.org/2000/svg", height: "24", viewBox: "0 0 24 24", width: "24", children: [
1668
+ /* @__PURE__ */ jsx47("path", { d: "M0 0h24v24H0V0z", fill: "none" }),
1669
+ /* @__PURE__ */ jsx47(
1569
1670
  "path",
1570
1671
  {
1571
1672
  d: "M13 11h-2v3H8v2h3v3h2v-3h3v-2h-3zm1-9H6c-1.1 0-2 .9-2 2v16c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6zm4 18H6V4h7v5h5v11z",
@@ -1576,8 +1677,8 @@ function CreateCanvasIcon() {
1576
1677
  }
1577
1678
 
1578
1679
  // src/icons/AddImageIcon.tsx
1579
- import { jsx as jsx44 } from "react/jsx-runtime";
1580
- var AddImageIcon = (props) => /* @__PURE__ */ jsx44("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", fill: "#5f6368", viewBox: "0 -960 960 960", ...props, children: /* @__PURE__ */ jsx44(
1680
+ import { jsx as jsx48 } from "react/jsx-runtime";
1681
+ var AddImageIcon = (props) => /* @__PURE__ */ jsx48("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", fill: "#5f6368", viewBox: "0 -960 960 960", ...props, children: /* @__PURE__ */ jsx48(
1581
1682
  "path",
1582
1683
  {
1583
1684
  d: "M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h360v80H200v560h560v-360h80v360q0 33-23.5 56.5T760-120H200Zm480-480v-80h-80v-80h80v-80h80v80h80v80h-80v80h-80ZM240-280h480L570-480 450-320l-90-120-120 160Zm-40-480v560-560Z",
@@ -1586,8 +1687,8 @@ var AddImageIcon = (props) => /* @__PURE__ */ jsx44("svg", { xmlns: "http://www.
1586
1687
  ) });
1587
1688
 
1588
1689
  // src/icons/IIIFLogo.tsx
1589
- import { jsx as jsx45, jsxs as jsxs30 } from "react/jsx-runtime";
1590
- var IIIFLogo = ({ mono = true, ...props }) => /* @__PURE__ */ jsxs30(
1690
+ import { jsx as jsx49, jsxs as jsxs32 } from "react/jsx-runtime";
1691
+ var IIIFLogo = ({ mono = true, ...props }) => /* @__PURE__ */ jsxs32(
1591
1692
  "svg",
1592
1693
  {
1593
1694
  xmlns: "http://www.w3.org/2000/svg",
@@ -1597,7 +1698,7 @@ var IIIFLogo = ({ mono = true, ...props }) => /* @__PURE__ */ jsxs30(
1597
1698
  ...props,
1598
1699
  viewBox: "0 0 493.36 441.333",
1599
1700
  children: [
1600
- /* @__PURE__ */ jsx45(
1701
+ /* @__PURE__ */ jsx49(
1601
1702
  "path",
1602
1703
  {
1603
1704
  d: "m65.242 2178.75 710-263.75-1.25-1900-708.75 261.25v1902.5m738.903 461.34c81.441-240.91-26.473-436.2-241.04-436.2-214.558 0-454.511 195.29-535.953 436.2-81.433 240.89 26.48 436.18 241.039 436.18 214.567 0 454.512-195.29 535.954-436.18",
@@ -1610,7 +1711,7 @@ var IIIFLogo = ({ mono = true, ...props }) => /* @__PURE__ */ jsxs30(
1610
1711
  transform: "matrix(.13333 0 0 -.13333 0 441.333)"
1611
1712
  }
1612
1713
  ),
1613
- /* @__PURE__ */ jsx45(
1714
+ /* @__PURE__ */ jsx49(
1614
1715
  "path",
1615
1716
  {
1616
1717
  d: "M1678.58 2178.75 968.578 1915l1.25-1900 708.752 261.25v1902.5m-743.498 461.34c-81.437-240.91 26.477-436.2 241.038-436.2 214.56 0 454.51 195.29 535.96 436.2 81.43 240.89-26.48 436.18-241.04 436.18-214.57 0-454.52-195.29-535.958-436.18",
@@ -1623,7 +1724,7 @@ var IIIFLogo = ({ mono = true, ...props }) => /* @__PURE__ */ jsxs30(
1623
1724
  transform: "matrix(.13333 0 0 -.13333 0 441.333)"
1624
1725
  }
1625
1726
  ),
1626
- /* @__PURE__ */ jsx45(
1727
+ /* @__PURE__ */ jsx49(
1627
1728
  "path",
1628
1729
  {
1629
1730
  d: "m1860.24 2178.75 710-263.75-1.25-1900-708.75 261.25v1902.5m743.5 461.34c81.45-240.91-26.47-436.2-241.03-436.2-214.58 0-454.52 195.29-535.96 436.2-81.44 240.89 26.48 436.18 241.03 436.18 214.57 0 454.51-195.29 535.96-436.18",
@@ -1636,7 +1737,7 @@ var IIIFLogo = ({ mono = true, ...props }) => /* @__PURE__ */ jsxs30(
1636
1737
  transform: "matrix(.13333 0 0 -.13333 0 441.333)"
1637
1738
  }
1638
1739
  ),
1639
- /* @__PURE__ */ jsx45(
1740
+ /* @__PURE__ */ jsx49(
1640
1741
  "path",
1641
1742
  {
1642
1743
  d: "M3700.24 3310v-652.5s-230 90-257.5-142.5c-2.5-247.5 0-336.25 0-336.25l257.5 83.75V1690l-258.61-92.5v-1335L2735.24 0v2360s-15 850 965 950",
@@ -1654,8 +1755,8 @@ var IIIFLogo = ({ mono = true, ...props }) => /* @__PURE__ */ jsxs30(
1654
1755
  );
1655
1756
 
1656
1757
  // src/icons/HTMLIcon.tsx
1657
- import { jsx as jsx46 } from "react/jsx-runtime";
1658
- var HTMLIcon = (props) => /* @__PURE__ */ jsx46("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", fill: "#5f6368", viewBox: "0 -960 960 960", ...props, children: /* @__PURE__ */ jsx46(
1758
+ import { jsx as jsx50 } from "react/jsx-runtime";
1759
+ var HTMLIcon = (props) => /* @__PURE__ */ jsx50("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", fill: "#5f6368", viewBox: "0 -960 960 960", ...props, children: /* @__PURE__ */ jsx50(
1659
1760
  "path",
1660
1761
  {
1661
1762
  d: "M0-360v-240h60v80h80v-80h60v240h-60v-100H60v100H0Zm310 0v-180h-70v-60h200v60h-70v180h-60Zm170 0v-200q0-17 11.5-28.5T520-600h180q17 0 28.5 11.5T740-560v200h-60v-180h-40v140h-60v-140h-40v180h-60Zm320 0v-240h60v180h100v60H800Z",
@@ -1664,8 +1765,8 @@ var HTMLIcon = (props) => /* @__PURE__ */ jsx46("svg", { xmlns: "http://www.w3.o
1664
1765
  ) });
1665
1766
 
1666
1767
  // src/icons/IIIFBrowserIcon.tsx
1667
- import { jsx as jsx47 } from "react/jsx-runtime";
1668
- var IIIFBrowserIcon = (props) => /* @__PURE__ */ jsx47("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", fill: "#5f6368", viewBox: "0 -960 960 960", ...props, children: /* @__PURE__ */ jsx47(
1768
+ import { jsx as jsx51 } from "react/jsx-runtime";
1769
+ var IIIFBrowserIcon = (props) => /* @__PURE__ */ jsx51("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", fill: "#5f6368", viewBox: "0 -960 960 960", ...props, children: /* @__PURE__ */ jsx51(
1669
1770
  "path",
1670
1771
  {
1671
1772
  d: "M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h200v80H200v560h560v-214l80 80v134q0 33-23.5 56.5T760-120H200Zm40-160 120-160 90 120 120-160 150 200H240Zm622-144L738-548q-21 14-45 21t-51 7q-74 0-126-52.5T464-700q0-75 52.5-127.5T644-880q75 0 127.5 52.5T824-700q0 27-8 52t-20 46l122 122-56 56ZM644-600q42 0 71-29t29-71q0-42-29-71t-71-29q-42 0-71 29t-29 71q0 42 29 71t71 29Z",
@@ -1673,9 +1774,59 @@ var IIIFBrowserIcon = (props) => /* @__PURE__ */ jsx47("svg", { xmlns: "http://w
1673
1774
  }
1674
1775
  ) });
1675
1776
 
1777
+ // src/icons/InfoIcon.tsx
1778
+ import { jsx as jsx52, jsxs as jsxs33 } from "react/jsx-runtime";
1779
+ function InfoIcon({ title, titleId, ...props }) {
1780
+ return /* @__PURE__ */ jsxs33("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", "aria-labelledby": titleId, ...props, children: [
1781
+ title ? /* @__PURE__ */ jsx52("title", { id: titleId, children: title }) : null,
1782
+ /* @__PURE__ */ jsx52("path", { d: "M0 0h24v24H0V0z", fill: "none" }),
1783
+ /* @__PURE__ */ jsx52(
1784
+ "path",
1785
+ {
1786
+ d: "M11 7h2v2h-2zm0 4h2v6h-2zm1-9C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z",
1787
+ fill: "currentColor"
1788
+ }
1789
+ )
1790
+ ] });
1791
+ }
1792
+
1793
+ // src/icons/ListingIcon.tsx
1794
+ import { jsx as jsx53, jsxs as jsxs34 } from "react/jsx-runtime";
1795
+ function ListingIcon({
1796
+ title,
1797
+ titleId,
1798
+ ...props
1799
+ }) {
1800
+ return /* @__PURE__ */ jsxs34(
1801
+ "svg",
1802
+ {
1803
+ xmlns: "http://www.w3.org/2000/svg",
1804
+ viewBox: "0 0 24 24",
1805
+ width: "1em",
1806
+ height: "1em",
1807
+ "aria-labelledby": titleId,
1808
+ ...props,
1809
+ children: [
1810
+ title ? /* @__PURE__ */ jsx53("title", { id: titleId, children: title }) : null,
1811
+ /* @__PURE__ */ jsxs34("g", { fill: "none", children: [
1812
+ /* @__PURE__ */ jsx53("path", { d: "M0 0h24v24H0V0z" }),
1813
+ /* @__PURE__ */ jsx53("path", { d: "M0 0h24v24H0V0z", opacity: ".87" })
1814
+ ] }),
1815
+ /* @__PURE__ */ jsx53(
1816
+ "path",
1817
+ {
1818
+ d: "M3 13h2v-2H3v2zm0 4h2v-2H3v2zm0-8h2V7H3v2zm4 4h14v-2H7v2zm0 4h14v-2H7v2zM7 7v2h14V7H7zm-4 6h2v-2H3v2zm0 4h2v-2H3v2zm0-8h2V7H3v2zm4 4h14v-2H7v2zm0 4h14v-2H7v2zM7 7v2h14V7H7z",
1819
+ fill: "currentColor"
1820
+ }
1821
+ )
1822
+ ]
1823
+ }
1824
+ );
1825
+ }
1826
+
1676
1827
  // src/icons/YouTubeIcon.tsx
1677
- import { jsx as jsx48 } from "react/jsx-runtime";
1678
- var YouTubeIcon = (props) => /* @__PURE__ */ jsx48("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", fill: "#5f6368", viewBox: "0 -960 960 960", ...props, children: /* @__PURE__ */ jsx48(
1828
+ import { jsx as jsx54 } from "react/jsx-runtime";
1829
+ var YouTubeIcon = (props) => /* @__PURE__ */ jsx54("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", fill: "#5f6368", viewBox: "0 -960 960 960", ...props, children: /* @__PURE__ */ jsx54(
1679
1830
  "path",
1680
1831
  {
1681
1832
  d: "M616-242q-27 1-51.5 1.5t-43.5.5h-41q-71 0-133-2-53-2-104.5-5.5T168-257q-26-7-45-26t-26-45q-6-23-9.5-56T82-447q-2-36-2-73t2-73q2-30 5.5-63t9.5-56q7-26 26-45t45-26q23-6 74.5-9.5T347-798q62-2 133-2t133 2q53 2 104.5 5.5T792-783q26 7 45 26t26 45q6 23 9.5 56t5.5 63q2 36 2 73v17q-19-8-39-12.5t-41-4.5q-83 0-141.5 58.5T600-320q0 21 4 40.5t12 37.5ZM400-400l208-120-208-120v240Zm360 200v-80h-80v-80h80v-80h80v80h80v80h-80v80h-80Z",
@@ -1683,9 +1834,34 @@ var YouTubeIcon = (props) => /* @__PURE__ */ jsx48("svg", { xmlns: "http://www.w
1683
1834
  }
1684
1835
  ) });
1685
1836
 
1837
+ // src/icons/ListEditIcon.tsx
1838
+ import { jsx as jsx55, jsxs as jsxs35 } from "react/jsx-runtime";
1839
+ function ListEditIcon({
1840
+ title,
1841
+ titleId,
1842
+ ...props
1843
+ }) {
1844
+ return /* @__PURE__ */ jsxs35(
1845
+ "svg",
1846
+ {
1847
+ xmlns: "http://www.w3.org/2000/svg",
1848
+ height: "24",
1849
+ viewBox: "0 0 24 24",
1850
+ width: "24",
1851
+ "aria-labelledby": titleId,
1852
+ ...props,
1853
+ children: [
1854
+ title ? /* @__PURE__ */ jsx55("title", { id: titleId, children: title }) : null,
1855
+ /* @__PURE__ */ jsx55("path", { d: "M0 0h24v24H0V0z", fill: "none" }),
1856
+ /* @__PURE__ */ jsx55("path", { d: "M14.06 9.02l.92.92L5.92 19H5v-.92l9.06-9.06M17.66 3c-.25 0-.51.1-.7.29l-1.83 1.83 3.75 3.75 1.83-1.83c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.2-.2-.45-.29-.71-.29zm-3.6 3.19L3 17.25V21h3.75L17.81 9.94l-3.75-3.75z" })
1857
+ ]
1858
+ }
1859
+ );
1860
+ }
1861
+
1686
1862
  // src/icons/VideoIcon.tsx
1687
- import { jsx as jsx49 } from "react/jsx-runtime";
1688
- var VideoIcon = (props) => /* @__PURE__ */ jsx49("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", fill: "#5f6368", viewBox: "0 -960 960 960", ...props, children: /* @__PURE__ */ jsx49(
1863
+ import { jsx as jsx56 } from "react/jsx-runtime";
1864
+ var VideoIcon = (props) => /* @__PURE__ */ jsx56("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", fill: "#5f6368", viewBox: "0 -960 960 960", ...props, children: /* @__PURE__ */ jsx56(
1689
1865
  "path",
1690
1866
  {
1691
1867
  d: "M160-160q-33 0-56.5-23.5T80-240v-480q0-33 23.5-56.5T160-800h480q33 0 56.5 23.5T720-720v180l160-160v440L720-420v180q0 33-23.5 56.5T640-160H160Zm0-80h480v-480H160v480Zm0 0v-480 480Z",
@@ -1694,8 +1870,8 @@ var VideoIcon = (props) => /* @__PURE__ */ jsx49("svg", { xmlns: "http://www.w3.
1694
1870
  ) });
1695
1871
 
1696
1872
  // src/icons/AudioIcon.tsx
1697
- import { jsx as jsx50 } from "react/jsx-runtime";
1698
- var AudioIcon = (props) => /* @__PURE__ */ jsx50("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", fill: "#5f6368", viewBox: "0 -960 960 960", ...props, children: /* @__PURE__ */ jsx50(
1873
+ import { jsx as jsx57 } from "react/jsx-runtime";
1874
+ var AudioIcon = (props) => /* @__PURE__ */ jsx57("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", fill: "#5f6368", viewBox: "0 -960 960 960", ...props, children: /* @__PURE__ */ jsx57(
1699
1875
  "path",
1700
1876
  {
1701
1877
  d: "M480-400q-50 0-85-35t-35-85v-240q0-50 35-85t85-35q50 0 85 35t35 85v240q0 50-35 85t-85 35Zm0-240Zm-40 520v-123q-104-14-172-93t-68-184h80q0 83 58.5 141.5T480-320q83 0 141.5-58.5T680-520h80q0 105-68 184t-172 93v123h-80Zm40-360q17 0 28.5-11.5T520-520v-240q0-17-11.5-28.5T480-800q-17 0-28.5 11.5T440-760v240q0 17 11.5 28.5T480-480Z",
@@ -1704,8 +1880,8 @@ var AudioIcon = (props) => /* @__PURE__ */ jsx50("svg", { xmlns: "http://www.w3.
1704
1880
  ) });
1705
1881
 
1706
1882
  // src/icons/EmptyCanvasIcon.tsx
1707
- import { jsx as jsx51 } from "react/jsx-runtime";
1708
- var EmptyCanvasIcon = (props) => /* @__PURE__ */ jsx51("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", fill: "#5f6368", viewBox: "0 -960 960 960", ...props, children: /* @__PURE__ */ jsx51(
1883
+ import { jsx as jsx58 } from "react/jsx-runtime";
1884
+ var EmptyCanvasIcon = (props) => /* @__PURE__ */ jsx58("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", fill: "#5f6368", viewBox: "0 -960 960 960", ...props, children: /* @__PURE__ */ jsx58(
1709
1885
  "path",
1710
1886
  {
1711
1887
  d: "M240-80q-33 0-56.5-23.5T160-160v-640q0-33 23.5-56.5T240-880h320l240 240v480q0 33-23.5 56.5T720-80H240Zm280-520v-200H240v640h480v-440H520ZM240-800v200-200 640-640Z",
@@ -1714,14 +1890,14 @@ var EmptyCanvasIcon = (props) => /* @__PURE__ */ jsx51("svg", { xmlns: "http://w
1714
1890
  ) });
1715
1891
 
1716
1892
  // src/icons/AddIcon.tsx
1717
- import { jsx as jsx52, jsxs as jsxs31 } from "react/jsx-runtime";
1893
+ import { jsx as jsx59, jsxs as jsxs36 } from "react/jsx-runtime";
1718
1894
  function AddIcon({
1719
1895
  className: className2,
1720
1896
  inline,
1721
1897
  height = 16,
1722
1898
  color = "black"
1723
1899
  }) {
1724
- return /* @__PURE__ */ jsxs31(
1900
+ return /* @__PURE__ */ jsxs36(
1725
1901
  "svg",
1726
1902
  {
1727
1903
  xmlns: "http://www.w3.org/2000/svg",
@@ -1732,17 +1908,17 @@ function AddIcon({
1732
1908
  style: { verticalAlign: inline ? "bottom" : void 0 },
1733
1909
  className: className2,
1734
1910
  children: [
1735
- /* @__PURE__ */ jsx52("path", { d: "M0 0h24v24H0z", fill: "none" }),
1736
- /* @__PURE__ */ jsx52("path", { d: "M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z", fill: "currentColor" })
1911
+ /* @__PURE__ */ jsx59("path", { d: "M0 0h24v24H0z", fill: "none" }),
1912
+ /* @__PURE__ */ jsx59("path", { d: "M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z", fill: "currentColor" })
1737
1913
  ]
1738
1914
  }
1739
1915
  );
1740
1916
  }
1741
1917
 
1742
1918
  // src/icons/MoreMenu.tsx
1743
- import { jsx as jsx53, jsxs as jsxs32 } from "react/jsx-runtime";
1919
+ import { jsx as jsx60, jsxs as jsxs37 } from "react/jsx-runtime";
1744
1920
  function MoreMenu2() {
1745
- return /* @__PURE__ */ jsxs32(
1921
+ return /* @__PURE__ */ jsxs37(
1746
1922
  "svg",
1747
1923
  {
1748
1924
  xmlns: "http://www.w3.org/2000/svg",
@@ -1750,8 +1926,8 @@ function MoreMenu2() {
1750
1926
  viewBox: "0 0 24 24",
1751
1927
  width: "1em",
1752
1928
  children: [
1753
- /* @__PURE__ */ jsx53("path", { d: "M0 0h24v24H0z", fill: "none" }),
1754
- /* @__PURE__ */ jsx53(
1929
+ /* @__PURE__ */ jsx60("path", { d: "M0 0h24v24H0z", fill: "none" }),
1930
+ /* @__PURE__ */ jsx60(
1755
1931
  "path",
1756
1932
  {
1757
1933
  d: "M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z",
@@ -1763,14 +1939,78 @@ function MoreMenu2() {
1763
1939
  );
1764
1940
  }
1765
1941
 
1942
+ // src/icons/PreviewIcon.tsx
1943
+ import { jsx as jsx61 } from "react/jsx-runtime";
1944
+ function PreviewIcon(props) {
1945
+ return /* @__PURE__ */ jsx61("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", viewBox: "0 0 24 24", ...props, children: /* @__PURE__ */ jsx61(
1946
+ "path",
1947
+ {
1948
+ fill: "currentColor",
1949
+ d: "M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5M12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5s5 2.24 5 5s-2.24 5-5 5m0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3s3-1.34 3-3s-1.34-3-3-3"
1950
+ }
1951
+ ) });
1952
+ }
1953
+
1954
+ // src/icons/ImageListIcon.tsx
1955
+ import { jsx as jsx62 } from "react/jsx-runtime";
1956
+ function ImageListIcon(props) {
1957
+ return /* @__PURE__ */ jsx62("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", viewBox: "0 0 24 24", ...props, children: /* @__PURE__ */ jsx62(
1958
+ "path",
1959
+ {
1960
+ fill: "currentColor",
1961
+ d: "M1 5h2v14H1zm4 0h2v14H5zm17 0H10c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h12c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1M11 17l2.5-3.15L15.29 16l2.5-3.22L21 17z"
1962
+ }
1963
+ ) });
1964
+ }
1965
+
1966
+ // src/icons/BackIcon.tsx
1967
+ import { jsx as jsx63 } from "react/jsx-runtime";
1968
+ function BackIcon(props) {
1969
+ return /* @__PURE__ */ jsx63("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", viewBox: "0 0 24 24", ...props, children: /* @__PURE__ */ jsx63("path", { fill: "currentColor", d: "M20 11H7.83l5.59-5.59L12 4l-8 8l8 8l1.41-1.41L7.83 13H20z" }) });
1970
+ }
1971
+
1972
+ // src/icons/GridIcon.tsx
1973
+ import { jsx as jsx64, jsxs as jsxs38 } from "react/jsx-runtime";
1974
+ function GridIcon(props) {
1975
+ return /* @__PURE__ */ jsxs38("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", viewBox: "0 0 24 24", ...props, children: [
1976
+ /* @__PURE__ */ jsx64(
1977
+ "path",
1978
+ {
1979
+ fill: "currentColor",
1980
+ d: "M10 10h4v4h-4zm0 6h4v4h-4zM4 4h4v4H4zm0 6h4v4H4zm0 6h4v4H4zM16 4h4v4h-4zm0 6h4v4h-4zm0 6h4v4h-4zM10 4h4v4h-4z",
1981
+ opacity: ".3"
1982
+ }
1983
+ ),
1984
+ /* @__PURE__ */ jsx64(
1985
+ "path",
1986
+ {
1987
+ fill: "currentColor",
1988
+ d: "M20 2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2M8 20H4v-4h4zm0-6H4v-4h4zm0-6H4V4h4zm6 12h-4v-4h4zm0-6h-4v-4h4zm0-6h-4V4h4zm6 12h-4v-4h4zm0-6h-4v-4h4zm0-6h-4V4h4z"
1989
+ }
1990
+ )
1991
+ ] });
1992
+ }
1993
+
1994
+ // src/icons/ScaledImageIcon.tsx
1995
+ import { jsx as jsx65 } from "react/jsx-runtime";
1996
+ function ScaledImageIcon(props) {
1997
+ return /* @__PURE__ */ jsx65("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", viewBox: "0 0 24 24", ...props, children: /* @__PURE__ */ jsx65(
1998
+ "path",
1999
+ {
2000
+ fill: "currentColor",
2001
+ d: "M21 15h2v2h-2zm0-4h2v2h-2zm2 8h-2v2c1 0 2-1 2-2M13 3h2v2h-2zm8 4h2v2h-2zm0-4v2h2c0-1-1-2-2-2M1 7h2v2H1zm16-4h2v2h-2zm0 16h2v2h-2zM3 3C2 3 1 4 1 5h2zm6 0h2v2H9zM5 3h2v2H5zm-4 8v8c0 1.1.9 2 2 2h12V11zm2 8l2.5-3.21l1.79 2.15l2.5-3.22L13 19z"
2002
+ }
2003
+ ) });
2004
+ }
2005
+
1766
2006
  // src/ErrorMessage.tsx
1767
- import { twMerge as twMerge7 } from "tailwind-merge";
1768
- import { jsx as jsx54 } from "react/jsx-runtime";
2007
+ import { twMerge as twMerge8 } from "tailwind-merge";
2008
+ import { jsx as jsx66 } from "react/jsx-runtime";
1769
2009
  function ErrorMessage({ children, small = false, className: className2 }) {
1770
- return /* @__PURE__ */ jsx54(
2010
+ return /* @__PURE__ */ jsx66(
1771
2011
  "div",
1772
2012
  {
1773
- className: twMerge7(
2013
+ className: twMerge8(
1774
2014
  "bg-red-500 text-white",
1775
2015
  "border-1 drop-shadow border-red-700 w-full rounded-md py-2 px-4 leading-[1.9em] flex items-center",
1776
2016
  "has-[a]:text-white",
@@ -1804,11 +2044,11 @@ function useFastList(list, firstRender = 24) {
1804
2044
 
1805
2045
  // src/RenderTextualContent.tsx
1806
2046
  import { useState as useState6 } from "react";
1807
- import { Button as Button6 } from "react-aria-components";
2047
+ import { Button as Button8 } from "react-aria-components";
1808
2048
  import {
1809
- LocaleString as LocaleString3
2049
+ LocaleString as LocaleString5
1810
2050
  } from "react-iiif-vault";
1811
- import { jsx as jsx55, jsxs as jsxs33 } from "react/jsx-runtime";
2051
+ import { jsx as jsx67, jsxs as jsxs39 } from "react/jsx-runtime";
1812
2052
  function RenderTextualContent(props) {
1813
2053
  const languages = props.strategy.items.map(
1814
2054
  (item) => Object.keys(item.text)[0]
@@ -1817,10 +2057,10 @@ function RenderTextualContent(props) {
1817
2057
  const selected = props.strategy.items.find(
1818
2058
  (item) => Object.keys(item.text)[0] === langauge
1819
2059
  );
1820
- return /* @__PURE__ */ jsxs33("div", { className: "overflow-y-auto bg-white shadow", children: [
1821
- /* @__PURE__ */ jsx55("div", { className: "flex gap-2 border-b", children: languages.map((language) => {
1822
- return /* @__PURE__ */ jsx55(
1823
- Button6,
2060
+ return /* @__PURE__ */ jsxs39("div", { className: "overflow-y-auto bg-white shadow", children: [
2061
+ /* @__PURE__ */ jsx67("div", { className: "flex gap-2 border-b", children: languages.map((language) => {
2062
+ return /* @__PURE__ */ jsx67(
2063
+ Button8,
1824
2064
  {
1825
2065
  className: `py-1 px-3 ${langauge === language ? "bg-me-500 text-white" : "bg-white text-black"}`,
1826
2066
  onPress: () => setLanguage(language),
@@ -1829,11 +2069,11 @@ function RenderTextualContent(props) {
1829
2069
  language
1830
2070
  );
1831
2071
  }) }),
1832
- /* @__PURE__ */ jsx55("div", { className: "p-4 prose", children: /* @__PURE__ */ jsx55(
1833
- LocaleString3,
2072
+ /* @__PURE__ */ jsx67("div", { className: "p-4 prose", children: /* @__PURE__ */ jsx67(
2073
+ LocaleString5,
1834
2074
  {
1835
2075
  enableDangerouslySetInnerHTML: true,
1836
- defaultText: /* @__PURE__ */ jsx55("span", { className: "text-gray-500 my-8", children: "No content available" }),
2076
+ defaultText: /* @__PURE__ */ jsx67("span", { className: "text-gray-500 my-8", children: "No content available" }),
1837
2077
  children: selected?.text
1838
2078
  }
1839
2079
  ) })
@@ -1849,13 +2089,13 @@ import { MediaPlayer, MediaProvider, Poster, Gesture, Track } from "@vidstack/re
1849
2089
  import { defaultLayoutIcons, DefaultVideoLayout } from "@vidstack/react/player/layouts/default";
1850
2090
  import { getValue } from "@iiif/helpers";
1851
2091
  import { useRef as useRef5 } from "react";
1852
- import { Fragment as Fragment5, jsx as jsx56, jsxs as jsxs34 } from "react/jsx-runtime";
2092
+ import { Fragment as Fragment5, jsx as jsx68, jsxs as jsxs40 } from "react/jsx-runtime";
1853
2093
  function IIIFMediaPlayer(props) {
1854
2094
  const mediaPlayer = useRef5(null);
1855
2095
  const captions = props.captions || [];
1856
2096
  const language = props.language;
1857
2097
  const timeRef = useRef5(props.startTime || 0);
1858
- return /* @__PURE__ */ jsx56(
2098
+ return /* @__PURE__ */ jsx68(
1859
2099
  MediaPlayer,
1860
2100
  {
1861
2101
  onTimeUpdate: (time) => {
@@ -1876,9 +2116,9 @@ function IIIFMediaPlayer(props) {
1876
2116
  type: props.media.format
1877
2117
  }
1878
2118
  ],
1879
- children: /* @__PURE__ */ jsxs34(MediaProvider, { className: "w-full h-full [&>video]:w-full [&>video]:h-full [&>video]:object-contain", children: [
2119
+ children: /* @__PURE__ */ jsxs40(MediaProvider, { className: "w-full h-full [&>video]:w-full [&>video]:h-full [&>video]:object-contain", children: [
1880
2120
  captions.map((caption) => {
1881
- return /* @__PURE__ */ jsx56(
2121
+ return /* @__PURE__ */ jsx68(
1882
2122
  Track,
1883
2123
  {
1884
2124
  src: caption.id,
@@ -1890,15 +2130,15 @@ function IIIFMediaPlayer(props) {
1890
2130
  caption.id
1891
2131
  );
1892
2132
  }),
1893
- props.poster ? /* @__PURE__ */ jsx56(
2133
+ props.poster ? /* @__PURE__ */ jsx68(
1894
2134
  Poster,
1895
2135
  {
1896
2136
  className: "absolute inset-0 bg-black block h-full w-full opacity-0 transition-opacity data-[visible]:opacity-100 object-contain",
1897
2137
  src: props.poster
1898
2138
  }
1899
2139
  ) : null,
1900
- /* @__PURE__ */ jsx56(Gestures, {}),
1901
- /* @__PURE__ */ jsx56(
2140
+ /* @__PURE__ */ jsx68(Gestures, {}),
2141
+ /* @__PURE__ */ jsx68(
1902
2142
  DefaultVideoLayout,
1903
2143
  {
1904
2144
  className: "z-1",
@@ -1911,8 +2151,8 @@ function IIIFMediaPlayer(props) {
1911
2151
  );
1912
2152
  }
1913
2153
  function Gestures() {
1914
- return /* @__PURE__ */ jsxs34(Fragment5, { children: [
1915
- /* @__PURE__ */ jsx56(
2154
+ return /* @__PURE__ */ jsxs40(Fragment5, { children: [
2155
+ /* @__PURE__ */ jsx68(
1916
2156
  Gesture,
1917
2157
  {
1918
2158
  className: "pointer-coarse:hidden absolute top-0 start-12 bottom-20 right-0 -z-1 block",
@@ -1920,7 +2160,7 @@ function Gestures() {
1920
2160
  action: "toggle:paused"
1921
2161
  }
1922
2162
  ),
1923
- /* @__PURE__ */ jsx56(Gesture, { className: "absolute inset-0 z-0 block h-full w-full", event: "dblpointerup", action: "toggle:fullscreen" })
2163
+ /* @__PURE__ */ jsx68(Gesture, { className: "absolute inset-0 z-0 block h-full w-full", event: "dblpointerup", action: "toggle:fullscreen" })
1924
2164
  ] });
1925
2165
  }
1926
2166
  export {
@@ -1929,8 +2169,11 @@ export {
1929
2169
  AddImageIcon,
1930
2170
  AtlasBanner,
1931
2171
  AudioIcon,
2172
+ BackIcon,
1932
2173
  CanvasThumbnailGridItem,
1933
2174
  Card3D,
2175
+ CollectionIcon,
2176
+ CollectionListItem,
1934
2177
  ConfirmSelectionButton,
1935
2178
  ControlButton,
1936
2179
  CreateCanvasIcon,
@@ -1943,6 +2186,7 @@ export {
1943
2186
  EmptyState,
1944
2187
  ErrorMessage,
1945
2188
  Form,
2189
+ GridIcon,
1946
2190
  HTMLEditor,
1947
2191
  HTMLIcon,
1948
2192
  HandleContainer,
@@ -1950,21 +2194,31 @@ export {
1950
2194
  IIIFLogo,
1951
2195
  IIIFMediaPlayer,
1952
2196
  IconButton,
2197
+ ImageListIcon,
2198
+ InfoIcon,
1953
2199
  ItemWithHandle,
1954
2200
  LazyThumbnail,
2201
+ ListEditIcon,
2202
+ ListingIcon,
1955
2203
  MDXEditor,
1956
2204
  ManifestEditorLogo,
2205
+ ManifestIcon,
2206
+ ManifestListItem,
1957
2207
  ManifestOverviewEmptyState,
1958
2208
  MetadataContainer,
1959
2209
  Modal,
2210
+ ModalBackSlot,
1960
2211
  MoreMenu2 as MoreMenu,
1961
2212
  OpaqueControls,
1962
2213
  PanelSideMenu,
2214
+ PreviewIcon,
1963
2215
  RenderTextualContent,
2216
+ ScaledImageIcon,
1964
2217
  Sidebar,
1965
2218
  SidebarContent,
1966
2219
  SidebarHeader,
1967
2220
  SidebarTabs,
2221
+ Spinner,
1968
2222
  SvgControlBar,
1969
2223
  Tab,
1970
2224
  TabList,