@manifest-editor/components 1.1.0 → 1.3.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.cjs +753 -272
- package/dist/index.css +275 -6
- package/dist/index.d.cts +80 -13
- package/dist/index.d.ts +80 -13
- package/dist/index.js +803 -275
- package/package.json +19 -8
package/dist/index.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
'use client'
|
|
2
2
|
|
|
3
|
+
// src/index.tsx
|
|
4
|
+
import "iiif-browser/dist/index.css";
|
|
5
|
+
|
|
3
6
|
// src/ActionButton.tsx
|
|
4
7
|
import { Button } from "react-aria-components";
|
|
5
8
|
|
|
@@ -52,6 +55,7 @@ import {
|
|
|
52
55
|
FloatingPortal
|
|
53
56
|
} from "@floating-ui/react";
|
|
54
57
|
import { Button as Button2 } from "react-aria-components";
|
|
58
|
+
import { twMerge as twMerge2 } from "tailwind-merge";
|
|
55
59
|
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
56
60
|
function useTooltip({
|
|
57
61
|
initialOpen = false,
|
|
@@ -106,7 +110,10 @@ var useTooltipContext = () => {
|
|
|
106
110
|
}
|
|
107
111
|
return context;
|
|
108
112
|
};
|
|
109
|
-
function Tooltip({
|
|
113
|
+
function Tooltip({
|
|
114
|
+
children,
|
|
115
|
+
...options
|
|
116
|
+
}) {
|
|
110
117
|
const tooltip = useTooltip(options);
|
|
111
118
|
return /* @__PURE__ */ jsx2(TooltipContext.Provider, { value: tooltip, children });
|
|
112
119
|
}
|
|
@@ -153,7 +160,16 @@ var TooltipContent = React.forwardRef(function TooltipContent2({ style, ...props
|
|
|
153
160
|
) });
|
|
154
161
|
});
|
|
155
162
|
function DefaultTooltipContent(props) {
|
|
156
|
-
return /* @__PURE__ */ jsx2(
|
|
163
|
+
return /* @__PURE__ */ jsx2(
|
|
164
|
+
TooltipContent,
|
|
165
|
+
{
|
|
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
|
+
),
|
|
170
|
+
children: props.children
|
|
171
|
+
}
|
|
172
|
+
);
|
|
157
173
|
}
|
|
158
174
|
|
|
159
175
|
// src/Sidebar.tsx
|
|
@@ -166,11 +182,11 @@ function SidebarContent({
|
|
|
166
182
|
className: className2,
|
|
167
183
|
padding
|
|
168
184
|
}) {
|
|
169
|
-
return /* @__PURE__ */ jsx3("div", { className: cn("flex-1 min-h-0 overflow-y-auto", className2, padding && "
|
|
185
|
+
return /* @__PURE__ */ jsx3("div", { className: cn("flex-1 min-h-0 overflow-y-auto pb-64", className2, padding && "px-3 pt-3"), children });
|
|
170
186
|
}
|
|
171
187
|
function SidebarHeader(props) {
|
|
172
188
|
const { actions, title } = props;
|
|
173
|
-
return /* @__PURE__ */ jsxs("div", { className: "bg-me-gray-100 h-12 flex items-center px-3 z-10 text-black border-b-me-gray-300 border-b", children: [
|
|
189
|
+
return /* @__PURE__ */ jsxs("div", { className: "bg-me-gray-100 h-12 flex items-center px-3 z-10 text-black border-b-me-gray-300 border-b flex-shrink-0", children: [
|
|
174
190
|
/* @__PURE__ */ jsx3("div", { className: "flex-1", children: title }),
|
|
175
191
|
/* @__PURE__ */ jsx3("div", { className: "ml-auto flex gap-2 items-center", children: actions?.map((action, index) => /* @__PURE__ */ jsxs(Tooltip, { placement: "bottom", children: [
|
|
176
192
|
/* @__PURE__ */ jsx3(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx3(
|
|
@@ -244,9 +260,19 @@ function ThumbnailGridContainer(props) {
|
|
|
244
260
|
}
|
|
245
261
|
|
|
246
262
|
// src/LazyThumbnail.tsx
|
|
263
|
+
import {
|
|
264
|
+
useCallback,
|
|
265
|
+
useEffect,
|
|
266
|
+
useRef,
|
|
267
|
+
useState as useState2
|
|
268
|
+
} from "react";
|
|
269
|
+
import {
|
|
270
|
+
useCanvas,
|
|
271
|
+
useRenderingStrategy,
|
|
272
|
+
useThumbnail
|
|
273
|
+
} from "react-iiif-vault";
|
|
247
274
|
import { LazyLoadComponent } from "react-lazy-load-image-component";
|
|
248
|
-
import {
|
|
249
|
-
import { useEffect, useLayoutEffect, useRef, useState as useState2 } from "react";
|
|
275
|
+
import { twMerge as twMerge3 } from "tailwind-merge";
|
|
250
276
|
|
|
251
277
|
// src/Spinner.tsx
|
|
252
278
|
import { jsx as jsx7, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
@@ -278,59 +304,118 @@ function Spinner(props) {
|
|
|
278
304
|
);
|
|
279
305
|
}
|
|
280
306
|
|
|
281
|
-
// src/
|
|
307
|
+
// src/icons/TextIcon.tsx
|
|
282
308
|
import { jsx as jsx8, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
283
|
-
function
|
|
284
|
-
return /* @__PURE__ */
|
|
309
|
+
function TextIcon(props) {
|
|
310
|
+
return /* @__PURE__ */ jsxs5(
|
|
311
|
+
"svg",
|
|
312
|
+
{
|
|
313
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
314
|
+
width: "1em",
|
|
315
|
+
height: "1em",
|
|
316
|
+
viewBox: "0 0 24 24",
|
|
317
|
+
...props,
|
|
318
|
+
children: [
|
|
319
|
+
/* @__PURE__ */ jsx8("title", { children: "Text" }),
|
|
320
|
+
/* @__PURE__ */ jsx8(
|
|
321
|
+
"path",
|
|
322
|
+
{
|
|
323
|
+
fill: "currentColor",
|
|
324
|
+
d: "M3 21v-2h18v2zm0-4v-2h12v2zm0-4v-2h18v2zm0-4V7h12v2zm0-4V3h18v2z"
|
|
325
|
+
}
|
|
326
|
+
)
|
|
327
|
+
]
|
|
328
|
+
}
|
|
329
|
+
);
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
// src/LazyThumbnail.tsx
|
|
333
|
+
import { jsx as jsx9, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
334
|
+
function LazyThumbnail({
|
|
335
|
+
cover,
|
|
336
|
+
fade = true
|
|
337
|
+
}) {
|
|
338
|
+
return /* @__PURE__ */ jsx9(LazyLoadComponent, { children: /* @__PURE__ */ jsx9(LazyThumbnailInner, { cover, fade }) });
|
|
285
339
|
}
|
|
286
|
-
|
|
340
|
+
var renderCache = /* @__PURE__ */ new Map();
|
|
341
|
+
function LazyThumbnailInner({
|
|
342
|
+
cover,
|
|
343
|
+
fade = true
|
|
344
|
+
}) {
|
|
287
345
|
const img = useRef(null);
|
|
288
|
-
const
|
|
346
|
+
const canvas = useCanvas();
|
|
347
|
+
const isCached = canvas ? !!renderCache.get(canvas?.id) : false;
|
|
348
|
+
const [isLoading, setIsLoading] = useState2(!isCached);
|
|
289
349
|
const thumbnail = useThumbnail({ height: 256, width: 256 }, true);
|
|
350
|
+
let thumbnailId = thumbnail?.id;
|
|
351
|
+
if (canvas?.id && thumbnailId) {
|
|
352
|
+
renderCache.set(canvas.id, thumbnailId);
|
|
353
|
+
} else if (canvas?.id && renderCache.get(canvas.id)) {
|
|
354
|
+
thumbnailId = renderCache.get(canvas?.id);
|
|
355
|
+
}
|
|
290
356
|
useEffect(() => {
|
|
291
|
-
if (
|
|
357
|
+
if (thumbnailId && !isCached) {
|
|
292
358
|
setIsLoading(true);
|
|
293
359
|
}
|
|
294
|
-
}, [
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
if (
|
|
298
|
-
|
|
360
|
+
}, [thumbnailId, isCached]);
|
|
361
|
+
const checkImage = useCallback(
|
|
362
|
+
(node) => {
|
|
363
|
+
if (node && !isCached) {
|
|
364
|
+
if (node.complete || node.naturalWidth > 0) {
|
|
365
|
+
setIsLoading(false);
|
|
366
|
+
}
|
|
299
367
|
}
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
368
|
+
},
|
|
369
|
+
[isCached]
|
|
370
|
+
);
|
|
371
|
+
return /* @__PURE__ */ jsxs6("div", { className: `w-full h-full relative`, children: [
|
|
372
|
+
thumbnail?.id ? /* @__PURE__ */ jsx9(
|
|
304
373
|
"img",
|
|
305
374
|
{
|
|
306
375
|
onLoad: () => setIsLoading(false),
|
|
307
|
-
ref:
|
|
376
|
+
ref: checkImage,
|
|
308
377
|
src: thumbnail?.id,
|
|
309
378
|
alt: "",
|
|
310
|
-
className: `w-full h-full object-contain ${!isLoading ? "animate-fadeIn" : "opacity-0"}`
|
|
379
|
+
className: `w-full h-full ${cover ? "object-cover" : "object-contain"} ${!isLoading ? isCached ? "" : "animate-fadeIn" : "opacity-0"}`
|
|
311
380
|
}
|
|
312
|
-
) : /* @__PURE__ */
|
|
313
|
-
!thumbnail?.id || isLoading ? /* @__PURE__ */
|
|
381
|
+
) : /* @__PURE__ */ jsx9(ThumbnailFallback, {}),
|
|
382
|
+
!thumbnail?.id || isLoading ? /* @__PURE__ */ jsx9(
|
|
383
|
+
"div",
|
|
384
|
+
{
|
|
385
|
+
className: twMerge3(
|
|
386
|
+
"absolute inset-0 flex items-center justify-center bg-me-gray-100 text-2xl z-10",
|
|
387
|
+
fade && "animate-fadeIn"
|
|
388
|
+
),
|
|
389
|
+
children: /* @__PURE__ */ jsx9(Spinner, {})
|
|
390
|
+
}
|
|
391
|
+
) : null
|
|
314
392
|
] });
|
|
315
393
|
}
|
|
394
|
+
function ThumbnailFallback() {
|
|
395
|
+
const [strategy] = useRenderingStrategy();
|
|
396
|
+
if (strategy.type === "textual-content") {
|
|
397
|
+
return /* @__PURE__ */ jsx9("div", { className: "text-black/30 flex items-center justify-center h-full bg-me-gray-100 animate-fadeInDelayed absolute inset-0 z-20", children: /* @__PURE__ */ jsx9(TextIcon, { className: "w-16 h-16" }) });
|
|
398
|
+
}
|
|
399
|
+
return /* @__PURE__ */ jsx9("div", { className: "text-black/30 flex items-center justify-center h-full bg-me-gray-100 animate-fadeInDelayed absolute inset-0 z-20", children: "No thumbnail" });
|
|
400
|
+
}
|
|
316
401
|
|
|
317
402
|
// src/CanvasThumbnailGridItem.tsx
|
|
318
403
|
import { CanvasContext } from "react-iiif-vault";
|
|
319
404
|
|
|
320
405
|
// src/CanvasLabel.tsx
|
|
321
406
|
import { LocaleString, useCanvas as useCanvas2 } from "react-iiif-vault";
|
|
322
|
-
import { jsx as
|
|
407
|
+
import { jsx as jsx10 } from "react/jsx-runtime";
|
|
323
408
|
function CanvasLabel(props) {
|
|
324
409
|
const canvas = useCanvas2();
|
|
325
410
|
if (!canvas)
|
|
326
411
|
return null;
|
|
327
|
-
return /* @__PURE__ */
|
|
412
|
+
return /* @__PURE__ */ jsx10(LocaleString, { className: props.className, as: props.as, children: canvas.label });
|
|
328
413
|
}
|
|
329
414
|
|
|
330
415
|
// src/Card3D.tsx
|
|
331
416
|
import { useLayoutEffect as useLayoutEffect2, useRef as useRef2 } from "react";
|
|
332
|
-
import { twMerge as
|
|
333
|
-
import { jsx as
|
|
417
|
+
import { twMerge as twMerge4 } from "tailwind-merge";
|
|
418
|
+
import { jsx as jsx11, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
334
419
|
function Card3D({
|
|
335
420
|
className: className2,
|
|
336
421
|
shouldTranslate,
|
|
@@ -401,11 +486,11 @@ function Card3D({
|
|
|
401
486
|
outer.current.removeEventListener("mousemove", mousemove);
|
|
402
487
|
};
|
|
403
488
|
}, []);
|
|
404
|
-
return /* @__PURE__ */
|
|
489
|
+
return /* @__PURE__ */ jsxs7(
|
|
405
490
|
"div",
|
|
406
491
|
{
|
|
407
492
|
ref: outer,
|
|
408
|
-
className:
|
|
493
|
+
className: twMerge4(
|
|
409
494
|
//
|
|
410
495
|
"relative transition-all hover:duration-50",
|
|
411
496
|
shouldTranslate && "hover:shadow-xl",
|
|
@@ -414,7 +499,7 @@ function Card3D({
|
|
|
414
499
|
...props,
|
|
415
500
|
children: [
|
|
416
501
|
children,
|
|
417
|
-
/* @__PURE__ */
|
|
502
|
+
/* @__PURE__ */ jsx11(
|
|
418
503
|
"div",
|
|
419
504
|
{
|
|
420
505
|
className: "pointer-events-none absolute inset-0 transition-all",
|
|
@@ -430,70 +515,99 @@ function Card3D({
|
|
|
430
515
|
}
|
|
431
516
|
|
|
432
517
|
// src/CanvasThumbnailGridItem.tsx
|
|
433
|
-
import { jsx as
|
|
518
|
+
import { jsx as jsx12, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
434
519
|
function CanvasThumbnailGridItem(props) {
|
|
435
|
-
return /* @__PURE__ */
|
|
436
|
-
/* @__PURE__ */
|
|
520
|
+
return /* @__PURE__ */ jsx12(CanvasContext, { canvas: props.id, children: /* @__PURE__ */ jsxs8("div", { onMouseDown: props.onClick, className: "flex flex-col", "data-canvas-selected": props.selected, children: [
|
|
521
|
+
/* @__PURE__ */ jsx12("div", { className: "bg-me-gray-100 w-full aspect-square flex-1 overflow-hidden rounded", children: /* @__PURE__ */ jsx12(
|
|
437
522
|
Card3D,
|
|
438
523
|
{
|
|
524
|
+
"data-canvas-selected": props.active,
|
|
525
|
+
"aria-selected": props.active,
|
|
439
526
|
className: cn(
|
|
440
527
|
"border-2 border-transparent p-1 w-full h-full rounded",
|
|
441
528
|
props.selected && "border-me-primary-500"
|
|
442
529
|
),
|
|
443
|
-
children: /* @__PURE__ */
|
|
530
|
+
children: /* @__PURE__ */ jsx12(LazyThumbnail, {})
|
|
444
531
|
}
|
|
445
532
|
) }),
|
|
446
|
-
/* @__PURE__ */
|
|
533
|
+
/* @__PURE__ */ jsx12(CanvasLabel, { className: "text-sm text-center truncate mt-1", as: "div" })
|
|
447
534
|
] }) });
|
|
448
535
|
}
|
|
449
536
|
|
|
450
537
|
// src/Modal.tsx
|
|
451
|
-
import {
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
538
|
+
import {
|
|
539
|
+
CloseButton,
|
|
540
|
+
Dialog,
|
|
541
|
+
DialogPanel,
|
|
542
|
+
DialogTitle
|
|
543
|
+
} from "@headlessui/react";
|
|
544
|
+
import { Fragment as Fragment2, jsx as jsx13, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
545
|
+
function Modal({
|
|
546
|
+
id,
|
|
547
|
+
title,
|
|
548
|
+
open = true,
|
|
549
|
+
onClose,
|
|
550
|
+
actions,
|
|
551
|
+
children
|
|
552
|
+
}) {
|
|
553
|
+
return /* @__PURE__ */ jsx13(Fragment2, { children: /* @__PURE__ */ jsxs9(
|
|
554
|
+
Dialog,
|
|
555
|
+
{
|
|
556
|
+
open,
|
|
557
|
+
onClose,
|
|
558
|
+
id,
|
|
559
|
+
className: "relative z-[500]",
|
|
560
|
+
children: [
|
|
561
|
+
/* @__PURE__ */ jsx13(
|
|
562
|
+
"div",
|
|
563
|
+
{
|
|
564
|
+
className: `fixed inset-0 bg-black/30 animate-fadeIn z-[501]`,
|
|
565
|
+
"aria-hidden": "true"
|
|
566
|
+
}
|
|
567
|
+
),
|
|
568
|
+
/* @__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: [
|
|
569
|
+
/* @__PURE__ */ jsxs9("div", { className: "flex items-center justify-between p-4 md:p-5 rounded-t-lg sticky top-0 bg-white", children: [
|
|
570
|
+
/* @__PURE__ */ jsx13(DialogTitle, { className: "text-xl font-semibold text-gray-900 ", children: title }),
|
|
571
|
+
/* @__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: [
|
|
572
|
+
/* @__PURE__ */ jsx13(
|
|
573
|
+
"svg",
|
|
470
574
|
{
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
575
|
+
className: "w-3 h-3",
|
|
576
|
+
"aria-hidden": "true",
|
|
577
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
578
|
+
fill: "none",
|
|
579
|
+
viewBox: "0 0 14 14",
|
|
580
|
+
children: /* @__PURE__ */ jsx13(
|
|
581
|
+
"path",
|
|
582
|
+
{
|
|
583
|
+
stroke: "currentColor",
|
|
584
|
+
strokeLinecap: "round",
|
|
585
|
+
strokeLinejoin: "round",
|
|
586
|
+
strokeWidth: "2",
|
|
587
|
+
d: "m1 1 6 6m0 0 6 6M7 7l6-6M7 7l-6 6"
|
|
588
|
+
}
|
|
589
|
+
)
|
|
476
590
|
}
|
|
477
|
-
)
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
591
|
+
),
|
|
592
|
+
/* @__PURE__ */ jsx13("span", { className: "sr-only", children: "Close" })
|
|
593
|
+
] })
|
|
594
|
+
] }),
|
|
595
|
+
/* @__PURE__ */ jsx13("div", { className: "flex-1 min-h-0 overflow-y-auto flex flex-col", children }),
|
|
596
|
+
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
|
|
597
|
+
] }) }) })
|
|
598
|
+
]
|
|
599
|
+
}
|
|
600
|
+
) });
|
|
487
601
|
}
|
|
488
602
|
|
|
489
603
|
// src/ControlButton.tsx
|
|
490
|
-
import { jsx as
|
|
604
|
+
import { jsx as jsx14 } from "react/jsx-runtime";
|
|
491
605
|
function ControlButton({
|
|
492
606
|
children,
|
|
493
607
|
className: className2,
|
|
494
608
|
...props
|
|
495
609
|
}) {
|
|
496
|
-
return /* @__PURE__ */
|
|
610
|
+
return /* @__PURE__ */ jsx14(
|
|
497
611
|
"button",
|
|
498
612
|
{
|
|
499
613
|
className: cn(
|
|
@@ -507,9 +621,9 @@ function ControlButton({
|
|
|
507
621
|
}
|
|
508
622
|
|
|
509
623
|
// src/OpaqueControls.tsx
|
|
510
|
-
import { jsx as
|
|
624
|
+
import { jsx as jsx15 } from "react/jsx-runtime";
|
|
511
625
|
function OpaqueControls(props) {
|
|
512
|
-
return /* @__PURE__ */
|
|
626
|
+
return /* @__PURE__ */ jsx15(
|
|
513
627
|
"div",
|
|
514
628
|
{
|
|
515
629
|
className: cn("flex w-full p-0.5 opacity-0 transition-opacity duration-300 gap-2", props.active && "opacity-1"),
|
|
@@ -525,9 +639,9 @@ import {
|
|
|
525
639
|
Tab as BaseTab,
|
|
526
640
|
TabPanel as BaseTabPanel
|
|
527
641
|
} from "react-aria-components";
|
|
528
|
-
import { jsx as
|
|
642
|
+
import { jsx as jsx16 } from "react/jsx-runtime";
|
|
529
643
|
function Tabs({ className: className2, children, ...props }) {
|
|
530
|
-
return /* @__PURE__ */
|
|
644
|
+
return /* @__PURE__ */ jsx16(
|
|
531
645
|
BaseTabs,
|
|
532
646
|
{
|
|
533
647
|
className: (state) => {
|
|
@@ -544,7 +658,7 @@ function TabList({
|
|
|
544
658
|
children,
|
|
545
659
|
...props
|
|
546
660
|
}) {
|
|
547
|
-
return /* @__PURE__ */
|
|
661
|
+
return /* @__PURE__ */ jsx16(
|
|
548
662
|
BaseTabList,
|
|
549
663
|
{
|
|
550
664
|
className: (state) => {
|
|
@@ -557,7 +671,7 @@ function TabList({
|
|
|
557
671
|
);
|
|
558
672
|
}
|
|
559
673
|
function Tab({ className: className2, children, ...props }) {
|
|
560
|
-
return /* @__PURE__ */
|
|
674
|
+
return /* @__PURE__ */ jsx16(
|
|
561
675
|
BaseTab,
|
|
562
676
|
{
|
|
563
677
|
className: (state) => {
|
|
@@ -575,7 +689,7 @@ function Tab({ className: className2, children, ...props }) {
|
|
|
575
689
|
);
|
|
576
690
|
}
|
|
577
691
|
function TabPanel({ className: className2, children, ...props }) {
|
|
578
|
-
return /* @__PURE__ */
|
|
692
|
+
return /* @__PURE__ */ jsx16(
|
|
579
693
|
BaseTabPanel,
|
|
580
694
|
{
|
|
581
695
|
className: (state) => {
|
|
@@ -590,43 +704,43 @@ function TabPanel({ className: className2, children, ...props }) {
|
|
|
590
704
|
|
|
591
705
|
// src/CreatorGrid.tsx
|
|
592
706
|
import { ListBox, ListBoxItem } from "react-aria-components";
|
|
593
|
-
import { twMerge as
|
|
594
|
-
import { jsx as
|
|
707
|
+
import { twMerge as twMerge5 } from "tailwind-merge";
|
|
708
|
+
import { jsx as jsx17, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
595
709
|
function CreatorGrid(props) {
|
|
596
|
-
return /* @__PURE__ */
|
|
710
|
+
return /* @__PURE__ */ jsx17(
|
|
597
711
|
ListBox,
|
|
598
712
|
{
|
|
599
713
|
orientation: "horizontal",
|
|
600
714
|
"aria-label": props.label,
|
|
601
715
|
selectionMode: "single",
|
|
602
716
|
items: props.items,
|
|
603
|
-
className: "grid grid-sm gap-4 p-4",
|
|
604
|
-
children: (item) => /* @__PURE__ */
|
|
717
|
+
className: "grid grid-sm gap-4 p-4 mb-8",
|
|
718
|
+
children: (item) => /* @__PURE__ */ jsx17(CreatorGridItem, { ...item })
|
|
605
719
|
}
|
|
606
720
|
);
|
|
607
721
|
}
|
|
608
722
|
function CreatorGridItem(props) {
|
|
609
|
-
return /* @__PURE__ */
|
|
723
|
+
return /* @__PURE__ */ jsxs10(
|
|
610
724
|
ListBoxItem,
|
|
611
725
|
{
|
|
612
726
|
id: props.id,
|
|
613
727
|
onAction: props.onClick,
|
|
614
|
-
className: ($s) =>
|
|
728
|
+
className: ($s) => twMerge5(
|
|
615
729
|
"bg-white p-2 border-me-gray-300 rounded-md border hover:border-me-primary-500",
|
|
616
730
|
$s.isFocused && "border-me-primary-500 outline-me-primary-500 outline-2"
|
|
617
731
|
),
|
|
618
732
|
children: [
|
|
619
|
-
/* @__PURE__ */
|
|
620
|
-
/* @__PURE__ */
|
|
621
|
-
/* @__PURE__ */
|
|
733
|
+
/* @__PURE__ */ jsx17("div", { className: "rounded bg-me-gray-300 mb-2 flex items-center justify-center py-1 aspect-square", children: /* @__PURE__ */ jsx17("div", { className: "text-center [&>svg]:w-16 [&>svg]:h-16", children: props.icon }) }),
|
|
734
|
+
/* @__PURE__ */ jsx17("div", { className: "text-center font-semibold text-sm", children: props.title }),
|
|
735
|
+
/* @__PURE__ */ jsx17("div", { className: "text-sm text-center text-black/50", children: props.description })
|
|
622
736
|
]
|
|
623
737
|
}
|
|
624
738
|
);
|
|
625
739
|
}
|
|
626
740
|
|
|
627
741
|
// src/icons/DownloadIcon.tsx
|
|
628
|
-
import { jsx as
|
|
629
|
-
var DownloadIcon = (props) => /* @__PURE__ */
|
|
742
|
+
import { jsx as jsx18 } from "react/jsx-runtime";
|
|
743
|
+
var DownloadIcon = (props) => /* @__PURE__ */ jsx18("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", fill: "#5f6368", viewBox: "0 -960 960 960", ...props, children: /* @__PURE__ */ jsx18(
|
|
630
744
|
"path",
|
|
631
745
|
{
|
|
632
746
|
d: "M480-320 280-520l56-58 104 104v-326h80v326l104-104 56 58-200 200ZM240-160q-33 0-56.5-23.5T160-240v-120h80v120h480v-120h80v120q0 33-23.5 56.5T720-160H240Z",
|
|
@@ -636,10 +750,10 @@ var DownloadIcon = (props) => /* @__PURE__ */ jsx17("svg", { xmlns: "http://www.
|
|
|
636
750
|
|
|
637
751
|
// src/DownloadButton.tsx
|
|
638
752
|
import { useId } from "react-aria";
|
|
639
|
-
import { jsx as
|
|
753
|
+
import { jsx as jsx19, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
640
754
|
function DownloadButton({ label, id: _id, getData, fileName, fileType }) {
|
|
641
755
|
const id = useId(_id);
|
|
642
|
-
return /* @__PURE__ */
|
|
756
|
+
return /* @__PURE__ */ jsx19(Tooltip, { placement: "bottom", children: /* @__PURE__ */ jsxs11(
|
|
643
757
|
TooltipTrigger,
|
|
644
758
|
{
|
|
645
759
|
className: "bg-me-gray-100 hover:bg-me-primary-500 hover:text-white p-1 rounded-md text-me-primary-500 text-2xl",
|
|
@@ -647,8 +761,8 @@ function DownloadButton({ label, id: _id, getData, fileName, fileType }) {
|
|
|
647
761
|
id,
|
|
648
762
|
onPress: () => createDownload(getData(), fileName, fileType),
|
|
649
763
|
children: [
|
|
650
|
-
/* @__PURE__ */
|
|
651
|
-
/* @__PURE__ */
|
|
764
|
+
/* @__PURE__ */ jsx19(DownloadIcon, { "aria-labelledby": _id }),
|
|
765
|
+
/* @__PURE__ */ jsx19(DefaultTooltipContent, { children: label })
|
|
652
766
|
]
|
|
653
767
|
}
|
|
654
768
|
) });
|
|
@@ -668,11 +782,11 @@ function createDownload(data, fileName, fileType = "text/json") {
|
|
|
668
782
|
}
|
|
669
783
|
|
|
670
784
|
// src/AtlasBanner.tsx
|
|
671
|
-
import { jsx as
|
|
785
|
+
import { jsx as jsx20, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
672
786
|
function AtlasBanner({ children, controlsId }) {
|
|
673
|
-
return /* @__PURE__ */
|
|
674
|
-
/* @__PURE__ */
|
|
675
|
-
/* @__PURE__ */
|
|
787
|
+
return /* @__PURE__ */ jsxs12("div", { className: "bg-me-gray-100 border-b text-black p-1 flex gap-4 items-center h-12", children: [
|
|
788
|
+
/* @__PURE__ */ jsx20("div", { className: "px-4", children }),
|
|
789
|
+
/* @__PURE__ */ jsx20("div", { id: controlsId || "atlas-controls", className: "flex gap-2" })
|
|
676
790
|
] });
|
|
677
791
|
}
|
|
678
792
|
|
|
@@ -680,8 +794,8 @@ function AtlasBanner({ children, controlsId }) {
|
|
|
680
794
|
import { RenderSvgEditorControls } from "react-iiif-vault";
|
|
681
795
|
|
|
682
796
|
// src/icons/DrawIcon.tsx
|
|
683
|
-
import { jsx as
|
|
684
|
-
var DrawIcon = ({ title, titleId, ...props }) => /* @__PURE__ */
|
|
797
|
+
import { jsx as jsx21, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
798
|
+
var DrawIcon = ({ title, titleId, ...props }) => /* @__PURE__ */ jsxs13(
|
|
685
799
|
"svg",
|
|
686
800
|
{
|
|
687
801
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -691,8 +805,8 @@ var DrawIcon = ({ title, titleId, ...props }) => /* @__PURE__ */ jsxs12(
|
|
|
691
805
|
"aria-labelledby": titleId,
|
|
692
806
|
...props,
|
|
693
807
|
children: [
|
|
694
|
-
title ? /* @__PURE__ */
|
|
695
|
-
/* @__PURE__ */
|
|
808
|
+
title ? /* @__PURE__ */ jsx21("title", { id: titleId, children: title }) : null,
|
|
809
|
+
/* @__PURE__ */ jsx21(
|
|
696
810
|
"path",
|
|
697
811
|
{
|
|
698
812
|
fill: "currentColor",
|
|
@@ -704,8 +818,8 @@ var DrawIcon = ({ title, titleId, ...props }) => /* @__PURE__ */ jsxs12(
|
|
|
704
818
|
);
|
|
705
819
|
|
|
706
820
|
// src/icons/PolygonIcon.tsx
|
|
707
|
-
import { jsx as
|
|
708
|
-
var PolygonIcon = ({ title, titleId, ...props }) => /* @__PURE__ */
|
|
821
|
+
import { jsx as jsx22, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
822
|
+
var PolygonIcon = ({ title, titleId, ...props }) => /* @__PURE__ */ jsxs14(
|
|
709
823
|
"svg",
|
|
710
824
|
{
|
|
711
825
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -715,8 +829,8 @@ var PolygonIcon = ({ title, titleId, ...props }) => /* @__PURE__ */ jsxs13(
|
|
|
715
829
|
"aria-labelledby": titleId,
|
|
716
830
|
...props,
|
|
717
831
|
children: [
|
|
718
|
-
title ? /* @__PURE__ */
|
|
719
|
-
/* @__PURE__ */
|
|
832
|
+
title ? /* @__PURE__ */ jsx22("title", { id: titleId, children: title }) : null,
|
|
833
|
+
/* @__PURE__ */ jsx22(
|
|
720
834
|
"path",
|
|
721
835
|
{
|
|
722
836
|
fill: "currentColor",
|
|
@@ -728,34 +842,34 @@ var PolygonIcon = ({ title, titleId, ...props }) => /* @__PURE__ */ jsxs13(
|
|
|
728
842
|
);
|
|
729
843
|
|
|
730
844
|
// src/icons/LineIcon.tsx
|
|
731
|
-
import { jsx as
|
|
845
|
+
import { jsx as jsx23, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
732
846
|
function LineIcon({ title, titleId, ...props }) {
|
|
733
|
-
return /* @__PURE__ */
|
|
734
|
-
title ? /* @__PURE__ */
|
|
735
|
-
/* @__PURE__ */
|
|
736
|
-
/* @__PURE__ */
|
|
737
|
-
/* @__PURE__ */
|
|
738
|
-
/* @__PURE__ */
|
|
847
|
+
return /* @__PURE__ */ jsxs15("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", "aria-labelledby": titleId, ...props, children: [
|
|
848
|
+
title ? /* @__PURE__ */ jsx23("title", { id: titleId, children: title }) : null,
|
|
849
|
+
/* @__PURE__ */ jsxs15("g", { fill: "none", fillRule: "evenodd", children: [
|
|
850
|
+
/* @__PURE__ */ jsx23("circle", { cx: 4.5, cy: 4.5, r: 2.5, fill: "currentColor" }),
|
|
851
|
+
/* @__PURE__ */ jsx23("circle", { cx: 15.5, cy: 15.5, r: 2.5, fill: "currentColor" }),
|
|
852
|
+
/* @__PURE__ */ jsx23("path", { stroke: "currentColor", strokeLinecap: "square", strokeWidth: 2, d: "m13.5 13.5-9-9" })
|
|
739
853
|
] })
|
|
740
854
|
] });
|
|
741
855
|
}
|
|
742
856
|
|
|
743
857
|
// src/icons/LineBoxIcon.tsx
|
|
744
|
-
import { jsx as
|
|
858
|
+
import { jsx as jsx24, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
745
859
|
function LineBoxIcon({ title, titleId, ...props }) {
|
|
746
|
-
return /* @__PURE__ */
|
|
747
|
-
title ? /* @__PURE__ */
|
|
748
|
-
/* @__PURE__ */
|
|
749
|
-
/* @__PURE__ */
|
|
750
|
-
/* @__PURE__ */
|
|
751
|
-
/* @__PURE__ */
|
|
860
|
+
return /* @__PURE__ */ jsxs16("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", "aria-labelledby": titleId, ...props, children: [
|
|
861
|
+
title ? /* @__PURE__ */ jsx24("title", { id: titleId, children: title }) : null,
|
|
862
|
+
/* @__PURE__ */ jsxs16("g", { fill: "none", fillRule: "evenodd", children: [
|
|
863
|
+
/* @__PURE__ */ jsx24("path", { d: "M0 0h20v20H0z" }),
|
|
864
|
+
/* @__PURE__ */ jsx24("path", { stroke: "currentColor", strokeLinecap: "square", strokeWidth: 2, d: "m8.5 11.5 6-6M16 4v3m0-3h-3m0 14L2 7" }),
|
|
865
|
+
/* @__PURE__ */ jsx24("path", { stroke: "currentColor", strokeOpacity: 0.407, strokeWidth: 2, d: "m2 7 5-5 11 11-5 5z" })
|
|
752
866
|
] })
|
|
753
867
|
] });
|
|
754
868
|
}
|
|
755
869
|
|
|
756
870
|
// src/icons/ShapesIcon.tsx
|
|
757
|
-
import { jsx as
|
|
758
|
-
var ShapesIcon = ({ title, titleId, ...props }) => /* @__PURE__ */
|
|
871
|
+
import { jsx as jsx25, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
872
|
+
var ShapesIcon = ({ title, titleId, ...props }) => /* @__PURE__ */ jsxs17(
|
|
759
873
|
"svg",
|
|
760
874
|
{
|
|
761
875
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -765,8 +879,8 @@ var ShapesIcon = ({ title, titleId, ...props }) => /* @__PURE__ */ jsxs16(
|
|
|
765
879
|
"aria-labelledby": titleId,
|
|
766
880
|
...props,
|
|
767
881
|
children: [
|
|
768
|
-
title ? /* @__PURE__ */
|
|
769
|
-
/* @__PURE__ */
|
|
882
|
+
title ? /* @__PURE__ */ jsx25("title", { id: titleId, children: title }) : null,
|
|
883
|
+
/* @__PURE__ */ jsx25(
|
|
770
884
|
"path",
|
|
771
885
|
{
|
|
772
886
|
fill: "currentColor",
|
|
@@ -778,8 +892,8 @@ var ShapesIcon = ({ title, titleId, ...props }) => /* @__PURE__ */ jsxs16(
|
|
|
778
892
|
);
|
|
779
893
|
|
|
780
894
|
// src/icons/SquareIcon.tsx
|
|
781
|
-
import { jsx as
|
|
782
|
-
var SquareIcon = ({ title, titleId, ...props }) => /* @__PURE__ */
|
|
895
|
+
import { jsx as jsx26, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
896
|
+
var SquareIcon = ({ title, titleId, ...props }) => /* @__PURE__ */ jsxs18(
|
|
783
897
|
"svg",
|
|
784
898
|
{
|
|
785
899
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -789,8 +903,8 @@ var SquareIcon = ({ title, titleId, ...props }) => /* @__PURE__ */ jsxs17(
|
|
|
789
903
|
"aria-labelledby": titleId,
|
|
790
904
|
...props,
|
|
791
905
|
children: [
|
|
792
|
-
title ? /* @__PURE__ */
|
|
793
|
-
/* @__PURE__ */
|
|
906
|
+
title ? /* @__PURE__ */ jsx26("title", { id: titleId, children: title }) : null,
|
|
907
|
+
/* @__PURE__ */ jsx26(
|
|
794
908
|
"path",
|
|
795
909
|
{
|
|
796
910
|
fill: "currentColor",
|
|
@@ -802,8 +916,8 @@ var SquareIcon = ({ title, titleId, ...props }) => /* @__PURE__ */ jsxs17(
|
|
|
802
916
|
);
|
|
803
917
|
|
|
804
918
|
// src/icons/TriangleIcon.tsx
|
|
805
|
-
import { jsx as
|
|
806
|
-
var TriangleIcon = ({ title, titleId, ...props }) => /* @__PURE__ */
|
|
919
|
+
import { jsx as jsx27, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
920
|
+
var TriangleIcon = ({ title, titleId, ...props }) => /* @__PURE__ */ jsxs19(
|
|
807
921
|
"svg",
|
|
808
922
|
{
|
|
809
923
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -813,15 +927,15 @@ var TriangleIcon = ({ title, titleId, ...props }) => /* @__PURE__ */ jsxs18(
|
|
|
813
927
|
"aria-labelledby": titleId,
|
|
814
928
|
...props,
|
|
815
929
|
children: [
|
|
816
|
-
title ? /* @__PURE__ */
|
|
817
|
-
/* @__PURE__ */
|
|
930
|
+
title ? /* @__PURE__ */ jsx27("title", { id: titleId, children: title }) : null,
|
|
931
|
+
/* @__PURE__ */ jsx27("path", { d: "m80-160 400-640 400 640H80Zm144-80h512L480-650 224-240Zm256-205Z", fill: "currentColor" })
|
|
818
932
|
]
|
|
819
933
|
}
|
|
820
934
|
);
|
|
821
935
|
|
|
822
936
|
// src/icons/HexagonIcon.tsx
|
|
823
|
-
import { jsx as
|
|
824
|
-
var HexagonIcon = ({ title, titleId, ...props }) => /* @__PURE__ */
|
|
937
|
+
import { jsx as jsx28, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
938
|
+
var HexagonIcon = ({ title, titleId, ...props }) => /* @__PURE__ */ jsxs20(
|
|
825
939
|
"svg",
|
|
826
940
|
{
|
|
827
941
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -831,8 +945,8 @@ var HexagonIcon = ({ title, titleId, ...props }) => /* @__PURE__ */ jsxs19(
|
|
|
831
945
|
"aria-labelledby": titleId,
|
|
832
946
|
...props,
|
|
833
947
|
children: [
|
|
834
|
-
title ? /* @__PURE__ */
|
|
835
|
-
/* @__PURE__ */
|
|
948
|
+
title ? /* @__PURE__ */ jsx28("title", { id: titleId, children: title }) : null,
|
|
949
|
+
/* @__PURE__ */ jsx28(
|
|
836
950
|
"path",
|
|
837
951
|
{
|
|
838
952
|
fill: "currentColor",
|
|
@@ -844,12 +958,12 @@ var HexagonIcon = ({ title, titleId, ...props }) => /* @__PURE__ */ jsxs19(
|
|
|
844
958
|
);
|
|
845
959
|
|
|
846
960
|
// src/icons/DeleteForeverIcon.tsx
|
|
847
|
-
import { jsx as
|
|
961
|
+
import { jsx as jsx29, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
848
962
|
function DeleteForeverIcon(props) {
|
|
849
|
-
return /* @__PURE__ */
|
|
850
|
-
/* @__PURE__ */
|
|
851
|
-
/* @__PURE__ */
|
|
852
|
-
/* @__PURE__ */
|
|
963
|
+
return /* @__PURE__ */ jsxs21("svg", { height: "1em", width: "1em", viewBox: "0 0 24 24", ...props, children: [
|
|
964
|
+
/* @__PURE__ */ jsx29("path", { d: "M0 0h24v24H0z", fill: "none" }),
|
|
965
|
+
/* @__PURE__ */ jsx29("path", { d: "M0 0h24v24H0V0z", fill: "none" }),
|
|
966
|
+
/* @__PURE__ */ jsx29(
|
|
853
967
|
"path",
|
|
854
968
|
{
|
|
855
969
|
d: "M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zm2.46-7.12l1.41-1.41L12 12.59l2.12-2.12 1.41 1.41L13.41 14l2.12 2.12-1.41 1.41L12 15.41l-2.12 2.12-1.41-1.41L10.59 14l-2.13-2.12zM15.5 4l-1-1h-5l-1 1H5v2h14V4z",
|
|
@@ -861,18 +975,18 @@ function DeleteForeverIcon(props) {
|
|
|
861
975
|
|
|
862
976
|
// src/SvgControlBar.tsx
|
|
863
977
|
import { useEffect as useEffect2 } from "react";
|
|
864
|
-
import { jsx as
|
|
978
|
+
import { jsx as jsx30 } from "react/jsx-runtime";
|
|
865
979
|
var className = 'bg-me-gray-100 border hover:bg-me-gray-300 rounded p-1 text-2xl text-me-primary-500 data-[active="true"]:border-me-primary-600';
|
|
866
980
|
var icons = {
|
|
867
|
-
DrawIcon: /* @__PURE__ */
|
|
868
|
-
PolygonIcon: /* @__PURE__ */
|
|
869
|
-
LineIcon: /* @__PURE__ */
|
|
870
|
-
LineBoxIcon: /* @__PURE__ */
|
|
871
|
-
ShapesIcon: /* @__PURE__ */
|
|
872
|
-
SquareIcon: /* @__PURE__ */
|
|
873
|
-
TriangleIcon: /* @__PURE__ */
|
|
874
|
-
HexagonIcon: /* @__PURE__ */
|
|
875
|
-
DeleteForeverIcon: /* @__PURE__ */
|
|
981
|
+
DrawIcon: /* @__PURE__ */ jsx30(DrawIcon, {}),
|
|
982
|
+
PolygonIcon: /* @__PURE__ */ jsx30(PolygonIcon, {}),
|
|
983
|
+
LineIcon: /* @__PURE__ */ jsx30(LineIcon, {}),
|
|
984
|
+
LineBoxIcon: /* @__PURE__ */ jsx30(LineBoxIcon, {}),
|
|
985
|
+
ShapesIcon: /* @__PURE__ */ jsx30(ShapesIcon, {}),
|
|
986
|
+
SquareIcon: /* @__PURE__ */ jsx30(SquareIcon, {}),
|
|
987
|
+
TriangleIcon: /* @__PURE__ */ jsx30(TriangleIcon, {}),
|
|
988
|
+
HexagonIcon: /* @__PURE__ */ jsx30(HexagonIcon, {}),
|
|
989
|
+
DeleteForeverIcon: /* @__PURE__ */ jsx30(DeleteForeverIcon, {})
|
|
876
990
|
};
|
|
877
991
|
function SvgControlBar({
|
|
878
992
|
helper,
|
|
@@ -882,7 +996,7 @@ function SvgControlBar({
|
|
|
882
996
|
useEffect2(() => {
|
|
883
997
|
helper.stamps.square();
|
|
884
998
|
}, []);
|
|
885
|
-
return /* @__PURE__ */
|
|
999
|
+
return /* @__PURE__ */ jsx30(
|
|
886
1000
|
RenderSvgEditorControls,
|
|
887
1001
|
{
|
|
888
1002
|
icons,
|
|
@@ -898,17 +1012,17 @@ function SvgControlBar({
|
|
|
898
1012
|
|
|
899
1013
|
// src/ConfirmSelectionButton.tsx
|
|
900
1014
|
import { Button as Button3 } from "react-aria-components";
|
|
901
|
-
import { jsx as
|
|
1015
|
+
import { jsx as jsx31 } from "react/jsx-runtime";
|
|
902
1016
|
function ConfirmSelectionButton({ onPress, children }) {
|
|
903
|
-
return /* @__PURE__ */
|
|
1017
|
+
return /* @__PURE__ */ jsx31(Button3, { className: "bg-me-primary-500 px-3 py-1 hover:bg-me-primary-600 text-white rounded", onPress, children });
|
|
904
1018
|
}
|
|
905
1019
|
|
|
906
1020
|
// src/ManifestOverviewEmptyState.tsx
|
|
907
1021
|
import { Button as Button4 } from "react-aria-components";
|
|
908
|
-
import { jsx as
|
|
1022
|
+
import { jsx as jsx32, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
909
1023
|
function ManifestOverviewEmptyState({ onCreate, canCreate }) {
|
|
910
|
-
return /* @__PURE__ */
|
|
911
|
-
/* @__PURE__ */
|
|
1024
|
+
return /* @__PURE__ */ jsxs22("div", { className: "flex items-center flex-col gap-5 py-16", children: [
|
|
1025
|
+
/* @__PURE__ */ jsx32(
|
|
912
1026
|
Card3D,
|
|
913
1027
|
{
|
|
914
1028
|
shouldTranslate: true,
|
|
@@ -916,9 +1030,9 @@ function ManifestOverviewEmptyState({ onCreate, canCreate }) {
|
|
|
916
1030
|
className: "border-2 border-dotted bg-black/5 aspect-[3/4] rounded w-32 border-black"
|
|
917
1031
|
}
|
|
918
1032
|
),
|
|
919
|
-
/* @__PURE__ */
|
|
920
|
-
/* @__PURE__ */
|
|
921
|
-
canCreate ? /* @__PURE__ */
|
|
1033
|
+
/* @__PURE__ */ jsx32("div", { className: "font-bold text-lg", children: "Let's get started!" }),
|
|
1034
|
+
/* @__PURE__ */ jsx32("div", { className: "max-w-xl px-5 my-4", children: "Add a title and top level information for this manifest using the editing panel on the right, and then add some canvases and content." }),
|
|
1035
|
+
canCreate ? /* @__PURE__ */ jsx32(
|
|
922
1036
|
Button4,
|
|
923
1037
|
{
|
|
924
1038
|
className: "px-8 font-bold py-2 border rounded-lg border-me-primary-500 text-me-primary-500 hover:border-me-primary-600 hover:text-me-primary-600",
|
|
@@ -930,15 +1044,41 @@ function ManifestOverviewEmptyState({ onCreate, canCreate }) {
|
|
|
930
1044
|
}
|
|
931
1045
|
|
|
932
1046
|
// src/SidebarTabs.tsx
|
|
933
|
-
import {
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
1047
|
+
import {
|
|
1048
|
+
useLayoutEffect as useLayoutEffect3,
|
|
1049
|
+
useMemo as useMemo2,
|
|
1050
|
+
useRef as useRef3,
|
|
1051
|
+
useState as useState3
|
|
1052
|
+
} from "react";
|
|
1053
|
+
import {
|
|
1054
|
+
Button as Button5,
|
|
1055
|
+
Menu,
|
|
1056
|
+
MenuItem,
|
|
1057
|
+
MenuTrigger,
|
|
1058
|
+
Popover,
|
|
1059
|
+
Tab as Tab2,
|
|
1060
|
+
TabList as TabList2,
|
|
1061
|
+
TabPanel as TabPanel2,
|
|
1062
|
+
Tabs as Tabs2
|
|
1063
|
+
} from "react-aria-components";
|
|
1064
|
+
import { createHideableComponent } from "@react-aria/collections";
|
|
1065
|
+
import { createPortal } from "react-dom";
|
|
1066
|
+
import { Fragment as Fragment3, jsx as jsx33, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
1067
|
+
function SidebarTabs({
|
|
1068
|
+
menu,
|
|
1069
|
+
menuId,
|
|
1070
|
+
selectedKey,
|
|
1071
|
+
onSelectionChange
|
|
1072
|
+
}) {
|
|
937
1073
|
const ref = useRef3(null);
|
|
938
1074
|
const [hidden, setHidden] = useState3(0);
|
|
1075
|
+
const [hiddenMenu, setHiddenMenu] = useState3(null);
|
|
939
1076
|
const widths = useRef3([]);
|
|
940
1077
|
const itemsRef = useRef3([]);
|
|
941
|
-
const selectedIndex = useMemo2(
|
|
1078
|
+
const selectedIndex = useMemo2(
|
|
1079
|
+
() => menu.findIndex((item) => item.id === selectedKey),
|
|
1080
|
+
[menu, selectedKey]
|
|
1081
|
+
);
|
|
942
1082
|
useLayoutEffect3(() => {
|
|
943
1083
|
const cb = () => {
|
|
944
1084
|
if (widths.current.length === 0) {
|
|
@@ -971,79 +1111,117 @@ function SidebarTabs({ menu, menuId, selectedKey, onSelectionChange }) {
|
|
|
971
1111
|
clearInterval(interval);
|
|
972
1112
|
};
|
|
973
1113
|
}, []);
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
{
|
|
987
|
-
ref: (el) => itemsRef.current[idx] = el,
|
|
988
|
-
id: item.id,
|
|
989
|
-
className: (state) => cn(
|
|
990
|
-
//
|
|
991
|
-
"border-b-2 px-2 py-1 text-sm text-gray-400 select-none hover:text-black focus:ring-0 focus:outline-none",
|
|
992
|
-
state.isSelected && "border-me-primary-500 text-black",
|
|
993
|
-
state.isFocusVisible && "ring-0 bg-me-gray-100",
|
|
994
|
-
isHidden && "hidden"
|
|
995
|
-
),
|
|
996
|
-
children: item.label
|
|
997
|
-
},
|
|
998
|
-
item.id
|
|
999
|
-
);
|
|
1000
|
-
}) }),
|
|
1001
|
-
hidden > 0 && /* @__PURE__ */ jsxs22(MenuTrigger, { children: [
|
|
1002
|
-
/* @__PURE__ */ jsx32(
|
|
1003
|
-
Button5,
|
|
1114
|
+
const menuHidden = menu.filter((item, idx) => hidden >= menu.length - idx);
|
|
1115
|
+
return /* @__PURE__ */ jsxs23(Fragment3, { children: [
|
|
1116
|
+
/* @__PURE__ */ jsxs23(
|
|
1117
|
+
Tabs2,
|
|
1118
|
+
{
|
|
1119
|
+
className: "w-full flex-1 overflow-hidden flex flex-col",
|
|
1120
|
+
selectedKey,
|
|
1121
|
+
onSelectionChange,
|
|
1122
|
+
children: [
|
|
1123
|
+
/* @__PURE__ */ jsxs23("div", { className: "flex items-center w-full tab-shadow", children: [
|
|
1124
|
+
/* @__PURE__ */ jsx33(
|
|
1125
|
+
TabList2,
|
|
1004
1126
|
{
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1127
|
+
ref,
|
|
1128
|
+
className: "flex-1 overflow-hidden w-full flex text-sm whitespace-nowrap",
|
|
1129
|
+
children: menu.map((item, idx) => {
|
|
1130
|
+
const isHidden = hidden >= menu.length - idx;
|
|
1131
|
+
return /* @__PURE__ */ jsx33(
|
|
1132
|
+
Tab2,
|
|
1133
|
+
{
|
|
1134
|
+
ref: (el) => itemsRef.current[idx] = el,
|
|
1135
|
+
id: item.id,
|
|
1136
|
+
className: (state) => cn(
|
|
1137
|
+
//
|
|
1138
|
+
"border-b-2 px-2 py-1 text-sm text-gray-400 select-none hover:text-black focus:ring-0 focus:outline-none",
|
|
1139
|
+
state.isSelected && "border-me-primary-500 text-black",
|
|
1140
|
+
state.isFocusVisible && "ring-0 bg-me-gray-100",
|
|
1141
|
+
isHidden && "hidden"
|
|
1142
|
+
),
|
|
1143
|
+
children: item.label
|
|
1144
|
+
},
|
|
1145
|
+
item.id
|
|
1146
|
+
);
|
|
1147
|
+
})
|
|
1010
1148
|
}
|
|
1011
1149
|
),
|
|
1012
|
-
/* @__PURE__ */
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1150
|
+
/* @__PURE__ */ jsx33("div", { ref: setHiddenMenu, id: "hidden-menu" })
|
|
1151
|
+
] }),
|
|
1152
|
+
menu.map((item) => /* @__PURE__ */ jsx33(
|
|
1153
|
+
TabPanel2,
|
|
1154
|
+
{
|
|
1155
|
+
id: item.id,
|
|
1156
|
+
className: "flex-1 overflow-y-auto h-full",
|
|
1157
|
+
children: item.renderComponent
|
|
1158
|
+
},
|
|
1159
|
+
item.id
|
|
1160
|
+
))
|
|
1161
|
+
]
|
|
1162
|
+
},
|
|
1163
|
+
menuId
|
|
1164
|
+
),
|
|
1165
|
+
hiddenMenu && hidden > 0 ? createPortal(
|
|
1166
|
+
/* @__PURE__ */ jsx33(
|
|
1167
|
+
MoreMenu,
|
|
1168
|
+
{
|
|
1169
|
+
hidden,
|
|
1170
|
+
menuHidden,
|
|
1171
|
+
selectedIndex,
|
|
1172
|
+
selectedKey,
|
|
1173
|
+
onSelectionChange
|
|
1174
|
+
}
|
|
1175
|
+
),
|
|
1176
|
+
hiddenMenu
|
|
1177
|
+
) : null
|
|
1178
|
+
] });
|
|
1035
1179
|
}
|
|
1180
|
+
var MoreMenu = createHideableComponent(({ selectedIndex, hidden, menuHidden, selectedKey, onSelectionChange }) => {
|
|
1181
|
+
return /* @__PURE__ */ jsxs23(MenuTrigger, { children: [
|
|
1182
|
+
/* @__PURE__ */ jsx33(
|
|
1183
|
+
Button5,
|
|
1184
|
+
{
|
|
1185
|
+
className: cn(
|
|
1186
|
+
"border-none rounded bg-gray-100 px-1.5 py-1 mr-2 mb-1 text-me-primary-500 semibold uppercase text-[10px]",
|
|
1187
|
+
selectedIndex > hidden && "bg-me-primary-500 text-white rounded"
|
|
1188
|
+
),
|
|
1189
|
+
children: "MORE"
|
|
1190
|
+
}
|
|
1191
|
+
),
|
|
1192
|
+
/* @__PURE__ */ jsx33(Popover, { children: menuHidden.length ? /* @__PURE__ */ jsx33(
|
|
1193
|
+
Menu,
|
|
1194
|
+
{
|
|
1195
|
+
className: "bg-white rounded shadow-lg flex flex-col gap-0.5 p-0.5 min-w-28",
|
|
1196
|
+
children: menuHidden.map((item) => {
|
|
1197
|
+
return /* @__PURE__ */ jsx33(
|
|
1198
|
+
MenuItem,
|
|
1199
|
+
{
|
|
1200
|
+
className: (state) => cn(
|
|
1201
|
+
"hover:bg-me-gray-100 p-1 rounded-sm text-sm",
|
|
1202
|
+
selectedKey === item.id && "ring ring-me-primary-500"
|
|
1203
|
+
),
|
|
1204
|
+
onAction: () => onSelectionChange?.(item.id),
|
|
1205
|
+
children: item.label
|
|
1206
|
+
},
|
|
1207
|
+
item.id
|
|
1208
|
+
);
|
|
1209
|
+
})
|
|
1210
|
+
}
|
|
1211
|
+
) : null })
|
|
1212
|
+
] });
|
|
1213
|
+
});
|
|
1036
1214
|
|
|
1037
1215
|
// src/MetadataContainer.tsx
|
|
1038
|
-
import { LocaleString as
|
|
1039
|
-
import { jsx as
|
|
1216
|
+
import { LocaleString as LocaleString2 } from "react-iiif-vault";
|
|
1217
|
+
import { jsx as jsx34, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
1040
1218
|
function MetadataContainer({
|
|
1041
1219
|
className: className2,
|
|
1042
1220
|
label,
|
|
1043
1221
|
children,
|
|
1044
1222
|
...props
|
|
1045
1223
|
}) {
|
|
1046
|
-
return /* @__PURE__ */
|
|
1224
|
+
return /* @__PURE__ */ jsxs24(
|
|
1047
1225
|
"div",
|
|
1048
1226
|
{
|
|
1049
1227
|
className: cn(
|
|
@@ -1052,7 +1230,7 @@ function MetadataContainer({
|
|
|
1052
1230
|
),
|
|
1053
1231
|
...props,
|
|
1054
1232
|
children: [
|
|
1055
|
-
/* @__PURE__ */
|
|
1233
|
+
/* @__PURE__ */ jsx34(LocaleString2, { className: "text-lg font-bold text-[#333] mb-2", as: "h3", children: label }),
|
|
1056
1234
|
children
|
|
1057
1235
|
]
|
|
1058
1236
|
}
|
|
@@ -1060,9 +1238,9 @@ function MetadataContainer({
|
|
|
1060
1238
|
}
|
|
1061
1239
|
|
|
1062
1240
|
// src/EmptyState.tsx
|
|
1063
|
-
import { jsx as
|
|
1241
|
+
import { jsx as jsx35 } from "react/jsx-runtime";
|
|
1064
1242
|
function EmptyState(props) {
|
|
1065
|
-
return /* @__PURE__ */
|
|
1243
|
+
return /* @__PURE__ */ jsx35(
|
|
1066
1244
|
"div",
|
|
1067
1245
|
{
|
|
1068
1246
|
className: cn(
|
|
@@ -1076,9 +1254,9 @@ function EmptyState(props) {
|
|
|
1076
1254
|
}
|
|
1077
1255
|
|
|
1078
1256
|
// src/ManifestEditorLogo.tsx
|
|
1079
|
-
import { jsx as
|
|
1257
|
+
import { jsx as jsx36, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
1080
1258
|
function ManifestEditorLogo(props) {
|
|
1081
|
-
return /* @__PURE__ */
|
|
1259
|
+
return /* @__PURE__ */ jsx36(
|
|
1082
1260
|
"svg",
|
|
1083
1261
|
{
|
|
1084
1262
|
width: "1em",
|
|
@@ -1087,17 +1265,17 @@ function ManifestEditorLogo(props) {
|
|
|
1087
1265
|
xmlns: "http://www.w3.org/2000/svg",
|
|
1088
1266
|
className: "me-logo h-[23px] w-[176px]",
|
|
1089
1267
|
...props,
|
|
1090
|
-
children: /* @__PURE__ */
|
|
1091
|
-
/* @__PURE__ */
|
|
1268
|
+
children: /* @__PURE__ */ jsxs25("g", { fill: "none", children: [
|
|
1269
|
+
/* @__PURE__ */ jsx36(
|
|
1092
1270
|
"path",
|
|
1093
1271
|
{
|
|
1094
1272
|
d: "M62.558 5.41v14.873h-2.983v-9.675l-3.985 9.675h-2.26l-4.006-9.675v9.675H46.34V5.41h3.388l4.73 11.06L59.19 5.41zm2.173 8.928c0-1.194.238-2.252.714-3.176.476-.923 1.123-1.633 1.94-2.13.816-.498 1.73-.746 2.738-.746.88 0 1.651.177 2.312.532.66.355 1.19.803 1.588 1.343V8.477h3.004v11.806h-3.004v-1.726c-.384.554-.913 1.012-1.588 1.374-.675.363-1.453.544-2.334.544-.994 0-1.9-.256-2.717-.767-.816-.512-1.463-1.233-1.939-2.163-.476-.93-.714-2-.714-3.207Zm9.292.042c0-.724-.143-1.346-.427-1.864a3.005 3.005 0 0 0-1.15-1.194 3.076 3.076 0 0 0-1.556-.415c-.554 0-1.066.135-1.534.405-.47.27-.85.664-1.14 1.182-.292.519-.437 1.133-.437 1.844 0 .71.145 1.331.437 1.864.29.533.674.941 1.15 1.226.476.284.984.426 1.524.426.554 0 1.073-.139 1.556-.416a3.005 3.005 0 0 0 1.15-1.193c.284-.519.427-1.14.427-1.865Zm12.466-6.073c1.406 0 2.543.444 3.41 1.332.866.888 1.3 2.127 1.3 3.718v6.926h-2.984v-6.52c0-.938-.234-1.66-.703-2.164-.47-.504-1.108-.756-1.918-.756-.824 0-1.474.252-1.95.756-.476.505-.714 1.226-.714 2.163v6.521h-2.983V8.477h2.983v1.47a4.121 4.121 0 0 1 1.524-1.203 4.713 4.713 0 0 1 2.035-.437Zm9.057-1.237c-.526 0-.963-.166-1.311-.5a1.657 1.657 0 0 1-.522-1.247c0-.497.174-.912.522-1.246.348-.334.785-.5 1.31-.5.526 0 .963.166 1.311.5.348.334.522.75.522 1.246 0 .498-.174.913-.522 1.247-.348.334-.785.5-1.31.5Zm1.47 1.407v11.806h-2.983V8.477h2.983Zm8.354 2.451h-2.068v9.355h-3.026v-9.355h-1.342v-2.45h1.342V7.88c0-1.45.412-2.515 1.236-3.197.824-.682 2.067-1.001 3.73-.959V6.24c-.725-.014-1.23.106-1.513.362-.284.256-.427.718-.427 1.385v.49h2.068v2.451Zm12.913 3.197c0 .426-.028.81-.085 1.15h-8.63c.07.853.369 1.52.895 2.003.525.483 1.172.725 1.939.725 1.108 0 1.896-.476 2.365-1.428h3.218c-.34 1.137-.994 2.07-1.96 2.802-.967.732-2.153 1.098-3.56 1.098-1.136 0-2.155-.252-3.057-.757a5.325 5.325 0 0 1-2.11-2.141c-.504-.924-.756-1.99-.756-3.197 0-1.222.248-2.294.745-3.218a5.204 5.204 0 0 1 2.089-2.13c.895-.498 1.925-.746 3.09-.746 1.122 0 2.127.241 3.015.724a5.1 5.1 0 0 1 2.067 2.057c.49.887.735 1.907.735 3.058Zm-3.09-.853c-.014-.767-.29-1.381-.83-1.843-.54-.462-1.201-.693-1.982-.693-.74 0-1.36.224-1.865.671-.504.448-.813 1.07-.927 1.865h5.604Zm9.782 7.203c-.966 0-1.833-.174-2.6-.522-.767-.348-1.375-.82-1.822-1.417a3.591 3.591 0 0 1-.735-1.982h3.004c.057.454.281.83.672 1.13.39.298.877.447 1.46.447.568 0 1.012-.114 1.331-.341.32-.227.48-.519.48-.874 0-.383-.196-.671-.586-.863-.391-.192-1.012-.401-1.865-.629-.88-.213-1.602-.433-2.163-.66a3.755 3.755 0 0 1-1.449-1.044c-.405-.47-.607-1.101-.607-1.897 0-.653.188-1.25.564-1.79.377-.54.917-.966 1.62-1.279.703-.312 1.53-.468 2.483-.468 1.406 0 2.528.351 3.367 1.054.838.704 1.3 1.652 1.385 2.845h-2.856c-.042-.469-.238-.841-.586-1.118-.348-.277-.813-.416-1.396-.416-.54 0-.955.1-1.246.298a.951.951 0 0 0-.437.831c0 .398.199.7.597.906.397.206 1.015.416 1.854.629.852.213 1.555.433 2.11.66a3.727 3.727 0 0 1 1.438 1.055c.405.476.614 1.105.628 1.886 0 .682-.188 1.293-.564 1.833-.377.54-.917.962-1.62 1.268-.703.305-1.524.458-2.461.458Zm10.569-9.547v5.711c0 .398.096.686.288.863.192.178.515.267.97.267h1.385v2.514h-1.875c-2.515 0-3.772-1.222-3.772-3.665v-5.69h-1.407v-2.45h1.407v-2.92h3.004v2.92h2.643v2.45h-2.643Zm12.851-3.111v3.73h5.007v2.364h-5.007v3.943h5.647v2.43h-8.631V5.386h8.63v2.43zm7.585 6.521c0-1.194.239-2.252.715-3.176.476-.923 1.126-1.633 1.95-2.13.824-.498 1.74-.746 2.749-.746.767 0 1.498.167 2.194.5.697.334 1.25.778 1.663 1.332V4.514h3.026v15.77h-3.026v-1.748c-.37.582-.888 1.051-1.556 1.406s-1.442.533-2.323.533a5.07 5.07 0 0 1-2.727-.767c-.824-.512-1.474-1.233-1.95-2.163-.476-.93-.714-2-.714-3.207Zm9.292.042c0-.724-.142-1.346-.426-1.864a3.005 3.005 0 0 0-1.151-1.194 3.076 3.076 0 0 0-1.556-.415 3.02 3.02 0 0 0-1.534.405c-.469.27-.849.664-1.14 1.182-.291.519-.437 1.133-.437 1.844 0 .71.146 1.331.437 1.864.291.533.675.941 1.15 1.226a2.93 2.93 0 0 0 1.524.426c.554 0 1.073-.139 1.556-.416a3.005 3.005 0 0 0 1.15-1.193c.285-.519.427-1.14.427-1.865Zm7.438-7.31c-.527 0-.963-.166-1.311-.5a1.657 1.657 0 0 1-.523-1.247c0-.497.174-.912.523-1.246.348-.334.784-.5 1.31-.5s.963.166 1.31.5c.349.334.523.75.523 1.246 0 .498-.174.913-.522 1.247-.348.334-.785.5-1.31.5Zm1.47 1.407v11.806h-2.984V8.477h2.984Zm6.414 2.451v5.711c0 .398.096.686.287.863.192.178.515.267.97.267h1.385v2.514h-1.875c-2.515 0-3.772-1.222-3.772-3.665v-5.69h-1.406v-2.45h1.406v-2.92h3.005v2.92h2.642v2.45h-2.642Zm10.036 9.547c-1.136 0-2.159-.252-3.068-.757a5.447 5.447 0 0 1-2.141-2.141c-.519-.924-.778-1.99-.778-3.197s.266-2.273.799-3.196a5.553 5.553 0 0 1 2.184-2.142c.924-.504 1.954-.756 3.09-.756 1.137 0 2.167.252 3.09.756a5.553 5.553 0 0 1 2.184 2.142c.533.923.8 1.989.8 3.196 0 1.208-.274 2.273-.821 3.197a5.681 5.681 0 0 1-2.216 2.141c-.93.505-1.971.757-3.122.757Zm0-2.6a3.1 3.1 0 0 0 1.524-.394c.476-.263.856-.657 1.14-1.183.285-.526.427-1.165.427-1.918 0-1.122-.295-1.985-.885-2.589a2.907 2.907 0 0 0-2.163-.906c-.852 0-1.566.302-2.141.906-.576.604-.863 1.467-.863 2.59 0 1.122.28 1.985.841 2.588.562.604 1.268.906 2.12.906Zm11.338-7.565a4.194 4.194 0 0 1 1.502-1.47c.618-.356 1.325-.533 2.12-.533v3.132h-.788c-.938 0-1.644.22-2.12.661-.476.44-.714 1.208-.714 2.302v5.881h-2.984V8.477h2.984v1.833Z",
|
|
1095
1273
|
fill: "#000"
|
|
1096
1274
|
}
|
|
1097
1275
|
),
|
|
1098
|
-
/* @__PURE__ */
|
|
1099
|
-
/* @__PURE__ */
|
|
1100
|
-
/* @__PURE__ */
|
|
1276
|
+
/* @__PURE__ */ jsx36("path", { fill: "#E94581", className: "me-logo-1", d: "M0 13.343 13.343 0l13.343 13.343-13.343 13.343z" }),
|
|
1277
|
+
/* @__PURE__ */ jsx36("path", { fill: "#E94581", className: "me-logo-2", d: "M12.137 13.346 25.48.003l13.343 13.343L25.48 26.69z" }),
|
|
1278
|
+
/* @__PURE__ */ jsx36("path", { fill: "#C63E75", className: "me-logo-3", d: "m12.104 13.348 7.311-7.311 7.312 7.311-7.312 7.312z" })
|
|
1101
1279
|
] })
|
|
1102
1280
|
}
|
|
1103
1281
|
);
|
|
@@ -1105,9 +1283,9 @@ function ManifestEditorLogo(props) {
|
|
|
1105
1283
|
|
|
1106
1284
|
// src/Forms.tsx
|
|
1107
1285
|
import { Label, Form as RAForm, Input, RadioGroup, Radio } from "react-aria-components";
|
|
1108
|
-
import { jsx as
|
|
1286
|
+
import { jsx as jsx37 } from "react/jsx-runtime";
|
|
1109
1287
|
function MeLabel({ className: className2, ...props }) {
|
|
1110
|
-
return /* @__PURE__ */
|
|
1288
|
+
return /* @__PURE__ */ jsx37(
|
|
1111
1289
|
Label,
|
|
1112
1290
|
{
|
|
1113
1291
|
className: cn(
|
|
@@ -1120,7 +1298,7 @@ function MeLabel({ className: className2, ...props }) {
|
|
|
1120
1298
|
);
|
|
1121
1299
|
}
|
|
1122
1300
|
function MeRadioGroup({ className: className2, ...props }) {
|
|
1123
|
-
return /* @__PURE__ */
|
|
1301
|
+
return /* @__PURE__ */ jsx37(
|
|
1124
1302
|
RadioGroup,
|
|
1125
1303
|
{
|
|
1126
1304
|
className: cn(
|
|
@@ -1133,7 +1311,7 @@ function MeRadioGroup({ className: className2, ...props }) {
|
|
|
1133
1311
|
);
|
|
1134
1312
|
}
|
|
1135
1313
|
function MeRadio({ className: className2, ...props }) {
|
|
1136
|
-
return /* @__PURE__ */
|
|
1314
|
+
return /* @__PURE__ */ jsx37(
|
|
1137
1315
|
Radio,
|
|
1138
1316
|
{
|
|
1139
1317
|
className: (state) => cn(
|
|
@@ -1146,7 +1324,7 @@ function MeRadio({ className: className2, ...props }) {
|
|
|
1146
1324
|
);
|
|
1147
1325
|
}
|
|
1148
1326
|
function MeForm({ className: className2, ...props }) {
|
|
1149
|
-
return /* @__PURE__ */
|
|
1327
|
+
return /* @__PURE__ */ jsx37(
|
|
1150
1328
|
RAForm,
|
|
1151
1329
|
{
|
|
1152
1330
|
className: cn(
|
|
@@ -1159,7 +1337,7 @@ function MeForm({ className: className2, ...props }) {
|
|
|
1159
1337
|
);
|
|
1160
1338
|
}
|
|
1161
1339
|
function MeInput({ className: className2, ...props }) {
|
|
1162
|
-
return /* @__PURE__ */
|
|
1340
|
+
return /* @__PURE__ */ jsx37(
|
|
1163
1341
|
Input,
|
|
1164
1342
|
{
|
|
1165
1343
|
className: cn(
|
|
@@ -1177,7 +1355,7 @@ function MeInputContainer({
|
|
|
1177
1355
|
className: className2,
|
|
1178
1356
|
...props
|
|
1179
1357
|
}) {
|
|
1180
|
-
return /* @__PURE__ */
|
|
1358
|
+
return /* @__PURE__ */ jsx37(
|
|
1181
1359
|
"div",
|
|
1182
1360
|
{
|
|
1183
1361
|
className: cn(
|
|
@@ -1199,12 +1377,186 @@ var Form = {
|
|
|
1199
1377
|
Radio: MeRadio
|
|
1200
1378
|
};
|
|
1201
1379
|
|
|
1380
|
+
// src/HTMLEditor.tsx
|
|
1381
|
+
import { useCallback as useCallback2, useEffect as useEffect3, useMemo as useMemo4, useRef as useRef4, useState as useState4 } from "react";
|
|
1382
|
+
import { Converter } from "showdown";
|
|
1383
|
+
import { useDebounce } from "tiny-use-debounce";
|
|
1384
|
+
import TurndownService from "turndown";
|
|
1385
|
+
|
|
1386
|
+
// src/MDXEditor.tsx
|
|
1387
|
+
import "@mdxeditor/editor/style.css";
|
|
1388
|
+
import {
|
|
1389
|
+
MDXEditor as BaseMDXEditor,
|
|
1390
|
+
InsertImage,
|
|
1391
|
+
ListsToggle,
|
|
1392
|
+
UndoRedo,
|
|
1393
|
+
headingsPlugin,
|
|
1394
|
+
imagePlugin,
|
|
1395
|
+
linkPlugin,
|
|
1396
|
+
listsPlugin,
|
|
1397
|
+
markdownShortcutPlugin,
|
|
1398
|
+
quotePlugin,
|
|
1399
|
+
thematicBreakPlugin,
|
|
1400
|
+
toolbarPlugin,
|
|
1401
|
+
BlockTypeSelect
|
|
1402
|
+
} from "@mdxeditor/editor";
|
|
1403
|
+
import { useMemo as useMemo3 } from "react";
|
|
1404
|
+
import { Fragment as Fragment4, jsx as jsx38, jsxs as jsxs26 } from "react/jsx-runtime";
|
|
1405
|
+
function MDXEditor({
|
|
1406
|
+
editorRef,
|
|
1407
|
+
...props
|
|
1408
|
+
}) {
|
|
1409
|
+
return /* @__PURE__ */ jsx38(
|
|
1410
|
+
BaseMDXEditor,
|
|
1411
|
+
{
|
|
1412
|
+
plugins: useMemo3(
|
|
1413
|
+
() => [
|
|
1414
|
+
// Example Plugin Usage
|
|
1415
|
+
headingsPlugin(),
|
|
1416
|
+
listsPlugin(),
|
|
1417
|
+
linkPlugin(),
|
|
1418
|
+
quotePlugin(),
|
|
1419
|
+
thematicBreakPlugin(),
|
|
1420
|
+
headingsPlugin(),
|
|
1421
|
+
// linkDialogPlugin(),
|
|
1422
|
+
markdownShortcutPlugin(),
|
|
1423
|
+
imagePlugin(),
|
|
1424
|
+
toolbarPlugin({
|
|
1425
|
+
toolbarClassName: "mdx-toolbar",
|
|
1426
|
+
toolbarContents: () => /* @__PURE__ */ jsxs26(Fragment4, { children: [
|
|
1427
|
+
" ",
|
|
1428
|
+
/* @__PURE__ */ jsx38(UndoRedo, {}),
|
|
1429
|
+
/* @__PURE__ */ jsx38(BlockTypeSelect, {}),
|
|
1430
|
+
/* @__PURE__ */ jsx38(ListsToggle, {}),
|
|
1431
|
+
/* @__PURE__ */ jsx38(InsertImage, {})
|
|
1432
|
+
] })
|
|
1433
|
+
})
|
|
1434
|
+
],
|
|
1435
|
+
[]
|
|
1436
|
+
),
|
|
1437
|
+
...props,
|
|
1438
|
+
ref: editorRef
|
|
1439
|
+
}
|
|
1440
|
+
);
|
|
1441
|
+
}
|
|
1442
|
+
|
|
1443
|
+
// src/HTMLEditor.tsx
|
|
1444
|
+
import { jsx as jsx39 } from "react/jsx-runtime";
|
|
1445
|
+
var converter = new Converter();
|
|
1446
|
+
converter.setFlavor("github");
|
|
1447
|
+
var turndownService = new TurndownService();
|
|
1448
|
+
function HTMLEditor({
|
|
1449
|
+
value,
|
|
1450
|
+
onChange,
|
|
1451
|
+
disabled
|
|
1452
|
+
}) {
|
|
1453
|
+
const editorRef = useRef4(null);
|
|
1454
|
+
const [_value, _setValue] = useState4(void 0);
|
|
1455
|
+
const internalOnChange = useCallback2(() => {
|
|
1456
|
+
if (editorRef.current) {
|
|
1457
|
+
onChange(converter.makeHtml(editorRef.current.getMarkdown()));
|
|
1458
|
+
}
|
|
1459
|
+
}, []);
|
|
1460
|
+
const debounceSave = useDebounce(internalOnChange, 400);
|
|
1461
|
+
const memoState = useMemo4(() => {
|
|
1462
|
+
return turndownService.turndown(value);
|
|
1463
|
+
}, []);
|
|
1464
|
+
useEffect3(() => {
|
|
1465
|
+
const ref = editorRef.current;
|
|
1466
|
+
return () => {
|
|
1467
|
+
if (ref) {
|
|
1468
|
+
onChange(converter.makeHtml(ref.getMarkdown()));
|
|
1469
|
+
}
|
|
1470
|
+
};
|
|
1471
|
+
}, []);
|
|
1472
|
+
return /* @__PURE__ */ jsx39(
|
|
1473
|
+
MDXEditor,
|
|
1474
|
+
{
|
|
1475
|
+
editorRef,
|
|
1476
|
+
onBlur: internalOnChange,
|
|
1477
|
+
readOnly: disabled,
|
|
1478
|
+
className: "bg-white prose-sm text-sm border rounded-lg p-0.5 focus-within:outline-none focus-within:border-me-primary-500",
|
|
1479
|
+
markdown: memoState,
|
|
1480
|
+
suppressHtmlProcessing: true,
|
|
1481
|
+
onError: (err) => {
|
|
1482
|
+
console.log("err", err);
|
|
1483
|
+
},
|
|
1484
|
+
onChange: (value2) => {
|
|
1485
|
+
_setValue(value2);
|
|
1486
|
+
debounceSave();
|
|
1487
|
+
}
|
|
1488
|
+
}
|
|
1489
|
+
);
|
|
1490
|
+
}
|
|
1491
|
+
|
|
1492
|
+
// src/IconButton.tsx
|
|
1493
|
+
import { twMerge as twMerge6 } from "tailwind-merge";
|
|
1494
|
+
import { jsx as jsx40, jsxs as jsxs27 } from "react/jsx-runtime";
|
|
1495
|
+
function IconButton({
|
|
1496
|
+
children,
|
|
1497
|
+
active,
|
|
1498
|
+
label,
|
|
1499
|
+
disabled,
|
|
1500
|
+
onPress
|
|
1501
|
+
}) {
|
|
1502
|
+
return /* @__PURE__ */ jsx40(Tooltip, { placement: "top", children: /* @__PURE__ */ jsxs27(
|
|
1503
|
+
TooltipTrigger,
|
|
1504
|
+
{
|
|
1505
|
+
onClick: onPress,
|
|
1506
|
+
className: twMerge6(
|
|
1507
|
+
"rounded flex items-center bg-white justify-center p-2 hover:bg-gray-100 text-2xl",
|
|
1508
|
+
active ? "bg-me-primary-500 bg-opacity-40 hover:bg-opacity-70 hover:bg-me-primary-500" : "",
|
|
1509
|
+
disabled ? "opacity-50 pointer-events-none" : ""
|
|
1510
|
+
),
|
|
1511
|
+
children: [
|
|
1512
|
+
children,
|
|
1513
|
+
/* @__PURE__ */ jsx40(DefaultTooltipContent, { className: "translate-x-3", children: label })
|
|
1514
|
+
]
|
|
1515
|
+
}
|
|
1516
|
+
) });
|
|
1517
|
+
}
|
|
1518
|
+
|
|
1519
|
+
// src/ItemWithHandle.tsx
|
|
1520
|
+
import { jsx as jsx41, jsxs as jsxs28 } from "react/jsx-runtime";
|
|
1521
|
+
function ItemWithHandle({
|
|
1522
|
+
children,
|
|
1523
|
+
handle,
|
|
1524
|
+
actions,
|
|
1525
|
+
grid
|
|
1526
|
+
}) {
|
|
1527
|
+
const gridStyleClassName = grid ? (
|
|
1528
|
+
// Tailwind
|
|
1529
|
+
"absolute flex p-1 gap-1 bg-white z-1 right-1 top-1 rounded"
|
|
1530
|
+
) : "flex-shrink-0 flex items-center gap-1 px-1";
|
|
1531
|
+
return /* @__PURE__ */ jsxs28("div", { className: grid ? "relative flex flex-col" : "flex items-center", children: [
|
|
1532
|
+
/* @__PURE__ */ jsx41("div", { className: "flex-1 min-w-0", style: { flex: 1, minWidth: 0 }, children }),
|
|
1533
|
+
/* @__PURE__ */ jsxs28("div", { className: gridStyleClassName, children: [
|
|
1534
|
+
actions,
|
|
1535
|
+
handle
|
|
1536
|
+
] })
|
|
1537
|
+
] });
|
|
1538
|
+
}
|
|
1539
|
+
|
|
1540
|
+
// src/HandleContainer.tsx
|
|
1541
|
+
import { forwardRef as forwardRef2 } from "react";
|
|
1542
|
+
import { jsx as jsx42 } from "react/jsx-runtime";
|
|
1543
|
+
var HandleContainer = forwardRef2(function HandleContainer2({ className: className2, ...props }, ref) {
|
|
1544
|
+
return /* @__PURE__ */ jsx42(
|
|
1545
|
+
"div",
|
|
1546
|
+
{
|
|
1547
|
+
ref,
|
|
1548
|
+
className: `relative text-2xl flex p-0.5 rounded-sm aspect-square hover:bg-me-primary-100 aria-expanded:bg-me-primary-500 aria-expanded:text-white ${className2 || ""}`,
|
|
1549
|
+
...props
|
|
1550
|
+
}
|
|
1551
|
+
);
|
|
1552
|
+
});
|
|
1553
|
+
|
|
1202
1554
|
// src/icons/CreateCanvasIcon.tsx
|
|
1203
|
-
import { jsx as
|
|
1555
|
+
import { jsx as jsx43, jsxs as jsxs29 } from "react/jsx-runtime";
|
|
1204
1556
|
function CreateCanvasIcon() {
|
|
1205
|
-
return /* @__PURE__ */
|
|
1206
|
-
/* @__PURE__ */
|
|
1207
|
-
/* @__PURE__ */
|
|
1557
|
+
return /* @__PURE__ */ jsxs29("svg", { xmlns: "http://www.w3.org/2000/svg", height: "24", viewBox: "0 0 24 24", width: "24", children: [
|
|
1558
|
+
/* @__PURE__ */ jsx43("path", { d: "M0 0h24v24H0V0z", fill: "none" }),
|
|
1559
|
+
/* @__PURE__ */ jsx43(
|
|
1208
1560
|
"path",
|
|
1209
1561
|
{
|
|
1210
1562
|
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",
|
|
@@ -1215,8 +1567,8 @@ function CreateCanvasIcon() {
|
|
|
1215
1567
|
}
|
|
1216
1568
|
|
|
1217
1569
|
// src/icons/AddImageIcon.tsx
|
|
1218
|
-
import { jsx as
|
|
1219
|
-
var AddImageIcon = (props) => /* @__PURE__ */
|
|
1570
|
+
import { jsx as jsx44 } from "react/jsx-runtime";
|
|
1571
|
+
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(
|
|
1220
1572
|
"path",
|
|
1221
1573
|
{
|
|
1222
1574
|
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",
|
|
@@ -1225,8 +1577,8 @@ var AddImageIcon = (props) => /* @__PURE__ */ jsx38("svg", { xmlns: "http://www.
|
|
|
1225
1577
|
) });
|
|
1226
1578
|
|
|
1227
1579
|
// src/icons/IIIFLogo.tsx
|
|
1228
|
-
import { jsx as
|
|
1229
|
-
var IIIFLogo = ({ mono = true, ...props }) => /* @__PURE__ */
|
|
1580
|
+
import { jsx as jsx45, jsxs as jsxs30 } from "react/jsx-runtime";
|
|
1581
|
+
var IIIFLogo = ({ mono = true, ...props }) => /* @__PURE__ */ jsxs30(
|
|
1230
1582
|
"svg",
|
|
1231
1583
|
{
|
|
1232
1584
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -1236,7 +1588,7 @@ var IIIFLogo = ({ mono = true, ...props }) => /* @__PURE__ */ jsxs26(
|
|
|
1236
1588
|
...props,
|
|
1237
1589
|
viewBox: "0 0 493.36 441.333",
|
|
1238
1590
|
children: [
|
|
1239
|
-
/* @__PURE__ */
|
|
1591
|
+
/* @__PURE__ */ jsx45(
|
|
1240
1592
|
"path",
|
|
1241
1593
|
{
|
|
1242
1594
|
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",
|
|
@@ -1249,7 +1601,7 @@ var IIIFLogo = ({ mono = true, ...props }) => /* @__PURE__ */ jsxs26(
|
|
|
1249
1601
|
transform: "matrix(.13333 0 0 -.13333 0 441.333)"
|
|
1250
1602
|
}
|
|
1251
1603
|
),
|
|
1252
|
-
/* @__PURE__ */
|
|
1604
|
+
/* @__PURE__ */ jsx45(
|
|
1253
1605
|
"path",
|
|
1254
1606
|
{
|
|
1255
1607
|
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",
|
|
@@ -1262,7 +1614,7 @@ var IIIFLogo = ({ mono = true, ...props }) => /* @__PURE__ */ jsxs26(
|
|
|
1262
1614
|
transform: "matrix(.13333 0 0 -.13333 0 441.333)"
|
|
1263
1615
|
}
|
|
1264
1616
|
),
|
|
1265
|
-
/* @__PURE__ */
|
|
1617
|
+
/* @__PURE__ */ jsx45(
|
|
1266
1618
|
"path",
|
|
1267
1619
|
{
|
|
1268
1620
|
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",
|
|
@@ -1275,7 +1627,7 @@ var IIIFLogo = ({ mono = true, ...props }) => /* @__PURE__ */ jsxs26(
|
|
|
1275
1627
|
transform: "matrix(.13333 0 0 -.13333 0 441.333)"
|
|
1276
1628
|
}
|
|
1277
1629
|
),
|
|
1278
|
-
/* @__PURE__ */
|
|
1630
|
+
/* @__PURE__ */ jsx45(
|
|
1279
1631
|
"path",
|
|
1280
1632
|
{
|
|
1281
1633
|
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",
|
|
@@ -1293,8 +1645,8 @@ var IIIFLogo = ({ mono = true, ...props }) => /* @__PURE__ */ jsxs26(
|
|
|
1293
1645
|
);
|
|
1294
1646
|
|
|
1295
1647
|
// src/icons/HTMLIcon.tsx
|
|
1296
|
-
import { jsx as
|
|
1297
|
-
var HTMLIcon = (props) => /* @__PURE__ */
|
|
1648
|
+
import { jsx as jsx46 } from "react/jsx-runtime";
|
|
1649
|
+
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(
|
|
1298
1650
|
"path",
|
|
1299
1651
|
{
|
|
1300
1652
|
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",
|
|
@@ -1303,8 +1655,8 @@ var HTMLIcon = (props) => /* @__PURE__ */ jsx40("svg", { xmlns: "http://www.w3.o
|
|
|
1303
1655
|
) });
|
|
1304
1656
|
|
|
1305
1657
|
// src/icons/IIIFBrowserIcon.tsx
|
|
1306
|
-
import { jsx as
|
|
1307
|
-
var IIIFBrowserIcon = (props) => /* @__PURE__ */
|
|
1658
|
+
import { jsx as jsx47 } from "react/jsx-runtime";
|
|
1659
|
+
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(
|
|
1308
1660
|
"path",
|
|
1309
1661
|
{
|
|
1310
1662
|
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",
|
|
@@ -1313,8 +1665,8 @@ var IIIFBrowserIcon = (props) => /* @__PURE__ */ jsx41("svg", { xmlns: "http://w
|
|
|
1313
1665
|
) });
|
|
1314
1666
|
|
|
1315
1667
|
// src/icons/YouTubeIcon.tsx
|
|
1316
|
-
import { jsx as
|
|
1317
|
-
var YouTubeIcon = (props) => /* @__PURE__ */
|
|
1668
|
+
import { jsx as jsx48 } from "react/jsx-runtime";
|
|
1669
|
+
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(
|
|
1318
1670
|
"path",
|
|
1319
1671
|
{
|
|
1320
1672
|
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",
|
|
@@ -1323,8 +1675,8 @@ var YouTubeIcon = (props) => /* @__PURE__ */ jsx42("svg", { xmlns: "http://www.w
|
|
|
1323
1675
|
) });
|
|
1324
1676
|
|
|
1325
1677
|
// src/icons/VideoIcon.tsx
|
|
1326
|
-
import { jsx as
|
|
1327
|
-
var VideoIcon = (props) => /* @__PURE__ */
|
|
1678
|
+
import { jsx as jsx49 } from "react/jsx-runtime";
|
|
1679
|
+
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(
|
|
1328
1680
|
"path",
|
|
1329
1681
|
{
|
|
1330
1682
|
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",
|
|
@@ -1333,8 +1685,8 @@ var VideoIcon = (props) => /* @__PURE__ */ jsx43("svg", { xmlns: "http://www.w3.
|
|
|
1333
1685
|
) });
|
|
1334
1686
|
|
|
1335
1687
|
// src/icons/AudioIcon.tsx
|
|
1336
|
-
import { jsx as
|
|
1337
|
-
var AudioIcon = (props) => /* @__PURE__ */
|
|
1688
|
+
import { jsx as jsx50 } from "react/jsx-runtime";
|
|
1689
|
+
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(
|
|
1338
1690
|
"path",
|
|
1339
1691
|
{
|
|
1340
1692
|
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",
|
|
@@ -1343,8 +1695,8 @@ var AudioIcon = (props) => /* @__PURE__ */ jsx44("svg", { xmlns: "http://www.w3.
|
|
|
1343
1695
|
) });
|
|
1344
1696
|
|
|
1345
1697
|
// src/icons/EmptyCanvasIcon.tsx
|
|
1346
|
-
import { jsx as
|
|
1347
|
-
var EmptyCanvasIcon = (props) => /* @__PURE__ */
|
|
1698
|
+
import { jsx as jsx51 } from "react/jsx-runtime";
|
|
1699
|
+
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(
|
|
1348
1700
|
"path",
|
|
1349
1701
|
{
|
|
1350
1702
|
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",
|
|
@@ -1353,14 +1705,14 @@ var EmptyCanvasIcon = (props) => /* @__PURE__ */ jsx45("svg", { xmlns: "http://w
|
|
|
1353
1705
|
) });
|
|
1354
1706
|
|
|
1355
1707
|
// src/icons/AddIcon.tsx
|
|
1356
|
-
import { jsx as
|
|
1708
|
+
import { jsx as jsx52, jsxs as jsxs31 } from "react/jsx-runtime";
|
|
1357
1709
|
function AddIcon({
|
|
1358
1710
|
className: className2,
|
|
1359
1711
|
inline,
|
|
1360
1712
|
height = 16,
|
|
1361
1713
|
color = "black"
|
|
1362
1714
|
}) {
|
|
1363
|
-
return /* @__PURE__ */
|
|
1715
|
+
return /* @__PURE__ */ jsxs31(
|
|
1364
1716
|
"svg",
|
|
1365
1717
|
{
|
|
1366
1718
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -1371,17 +1723,60 @@ function AddIcon({
|
|
|
1371
1723
|
style: { verticalAlign: inline ? "bottom" : void 0 },
|
|
1372
1724
|
className: className2,
|
|
1373
1725
|
children: [
|
|
1374
|
-
/* @__PURE__ */
|
|
1375
|
-
/* @__PURE__ */
|
|
1726
|
+
/* @__PURE__ */ jsx52("path", { d: "M0 0h24v24H0z", fill: "none" }),
|
|
1727
|
+
/* @__PURE__ */ jsx52("path", { d: "M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z", fill: "currentColor" })
|
|
1376
1728
|
]
|
|
1377
1729
|
}
|
|
1378
1730
|
);
|
|
1379
1731
|
}
|
|
1380
1732
|
|
|
1733
|
+
// src/icons/MoreMenu.tsx
|
|
1734
|
+
import { jsx as jsx53, jsxs as jsxs32 } from "react/jsx-runtime";
|
|
1735
|
+
function MoreMenu2() {
|
|
1736
|
+
return /* @__PURE__ */ jsxs32(
|
|
1737
|
+
"svg",
|
|
1738
|
+
{
|
|
1739
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
1740
|
+
height: "1em",
|
|
1741
|
+
viewBox: "0 0 24 24",
|
|
1742
|
+
width: "1em",
|
|
1743
|
+
children: [
|
|
1744
|
+
/* @__PURE__ */ jsx53("path", { d: "M0 0h24v24H0z", fill: "none" }),
|
|
1745
|
+
/* @__PURE__ */ jsx53(
|
|
1746
|
+
"path",
|
|
1747
|
+
{
|
|
1748
|
+
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",
|
|
1749
|
+
fill: "currentColor"
|
|
1750
|
+
}
|
|
1751
|
+
)
|
|
1752
|
+
]
|
|
1753
|
+
}
|
|
1754
|
+
);
|
|
1755
|
+
}
|
|
1756
|
+
|
|
1757
|
+
// src/ErrorMessage.tsx
|
|
1758
|
+
import { twMerge as twMerge7 } from "tailwind-merge";
|
|
1759
|
+
import { jsx as jsx54 } from "react/jsx-runtime";
|
|
1760
|
+
function ErrorMessage({ children, small = false, className: className2 }) {
|
|
1761
|
+
return /* @__PURE__ */ jsx54(
|
|
1762
|
+
"div",
|
|
1763
|
+
{
|
|
1764
|
+
className: twMerge7(
|
|
1765
|
+
"bg-red-500 text-white",
|
|
1766
|
+
"border-1 drop-shadow border-red-700 w-full rounded-md py-2 px-4 leading-[1.9em] flex items-center",
|
|
1767
|
+
"has-[a]:text-white",
|
|
1768
|
+
small && "text-xs whitespace-nowrap py-1 px-2 leading-[1.6em] w-fit",
|
|
1769
|
+
className2
|
|
1770
|
+
),
|
|
1771
|
+
children
|
|
1772
|
+
}
|
|
1773
|
+
);
|
|
1774
|
+
}
|
|
1775
|
+
|
|
1381
1776
|
// src/hooks.ts
|
|
1382
|
-
import { useLayoutEffect as useLayoutEffect4, useState as
|
|
1777
|
+
import { useLayoutEffect as useLayoutEffect4, useState as useState5 } from "react";
|
|
1383
1778
|
function useFastList(list, firstRender = 24) {
|
|
1384
|
-
const [isMounted, setIsMounted] =
|
|
1779
|
+
const [isMounted, setIsMounted] = useState5(false);
|
|
1385
1780
|
useLayoutEffect4(() => {
|
|
1386
1781
|
if (list) {
|
|
1387
1782
|
setTimeout(() => {
|
|
@@ -1397,6 +1792,128 @@ function useFastList(list, firstRender = 24) {
|
|
|
1397
1792
|
}
|
|
1398
1793
|
return list.slice(0, firstRender);
|
|
1399
1794
|
}
|
|
1795
|
+
|
|
1796
|
+
// src/RenderTextualContent.tsx
|
|
1797
|
+
import { useState as useState6 } from "react";
|
|
1798
|
+
import { Button as Button6 } from "react-aria-components";
|
|
1799
|
+
import {
|
|
1800
|
+
LocaleString as LocaleString3
|
|
1801
|
+
} from "react-iiif-vault";
|
|
1802
|
+
import { jsx as jsx55, jsxs as jsxs33 } from "react/jsx-runtime";
|
|
1803
|
+
function RenderTextualContent(props) {
|
|
1804
|
+
const languages = props.strategy.items.map(
|
|
1805
|
+
(item) => Object.keys(item.text)[0]
|
|
1806
|
+
);
|
|
1807
|
+
const [langauge, setLanguage] = useState6(languages[0]);
|
|
1808
|
+
const selected = props.strategy.items.find(
|
|
1809
|
+
(item) => Object.keys(item.text)[0] === langauge
|
|
1810
|
+
);
|
|
1811
|
+
return /* @__PURE__ */ jsxs33("div", { className: "overflow-y-auto bg-white shadow", children: [
|
|
1812
|
+
/* @__PURE__ */ jsx55("div", { className: "flex gap-2 border-b", children: languages.map((language) => {
|
|
1813
|
+
return /* @__PURE__ */ jsx55(
|
|
1814
|
+
Button6,
|
|
1815
|
+
{
|
|
1816
|
+
className: `py-1 px-3 ${langauge === language ? "bg-me-500 text-white" : "bg-white text-black"}`,
|
|
1817
|
+
onPress: () => setLanguage(language),
|
|
1818
|
+
children: language
|
|
1819
|
+
},
|
|
1820
|
+
language
|
|
1821
|
+
);
|
|
1822
|
+
}) }),
|
|
1823
|
+
/* @__PURE__ */ jsx55("div", { className: "p-4 prose", children: /* @__PURE__ */ jsx55(
|
|
1824
|
+
LocaleString3,
|
|
1825
|
+
{
|
|
1826
|
+
enableDangerouslySetInnerHTML: true,
|
|
1827
|
+
defaultText: /* @__PURE__ */ jsx55("span", { className: "text-gray-500 my-8", children: "No content available" }),
|
|
1828
|
+
children: selected?.text
|
|
1829
|
+
}
|
|
1830
|
+
) })
|
|
1831
|
+
] });
|
|
1832
|
+
}
|
|
1833
|
+
|
|
1834
|
+
// src/IIIFMediaPlayer.tsx
|
|
1835
|
+
import "@vidstack/react/player/styles/base.css";
|
|
1836
|
+
import "@vidstack/react/player/styles/default/theme.css";
|
|
1837
|
+
import "@vidstack/react/player/styles/default/captions.css";
|
|
1838
|
+
import "@vidstack/react/player/styles/default/layouts/video.css";
|
|
1839
|
+
import { MediaPlayer, MediaProvider, Poster, Gesture, Track } from "@vidstack/react";
|
|
1840
|
+
import { defaultLayoutIcons, DefaultVideoLayout } from "@vidstack/react/player/layouts/default";
|
|
1841
|
+
import { getValue } from "@iiif/helpers";
|
|
1842
|
+
import { useRef as useRef5 } from "react";
|
|
1843
|
+
import { Fragment as Fragment5, jsx as jsx56, jsxs as jsxs34 } from "react/jsx-runtime";
|
|
1844
|
+
function IIIFMediaPlayer(props) {
|
|
1845
|
+
const mediaPlayer = useRef5(null);
|
|
1846
|
+
const captions = props.captions || [];
|
|
1847
|
+
const language = props.language;
|
|
1848
|
+
const timeRef = useRef5(props.startTime || 0);
|
|
1849
|
+
return /* @__PURE__ */ jsx56(
|
|
1850
|
+
MediaPlayer,
|
|
1851
|
+
{
|
|
1852
|
+
onTimeUpdate: (time) => {
|
|
1853
|
+
const newT = Math.round(time.currentTime);
|
|
1854
|
+
if (timeRef.current === newT)
|
|
1855
|
+
return;
|
|
1856
|
+
timeRef.current = newT;
|
|
1857
|
+
},
|
|
1858
|
+
ref: mediaPlayer,
|
|
1859
|
+
lang: language,
|
|
1860
|
+
className: "h-full w-full min-w-[275px] flex radius-0",
|
|
1861
|
+
playsInline: true,
|
|
1862
|
+
currentTime: props.startTime,
|
|
1863
|
+
duration: props.media.duration,
|
|
1864
|
+
src: [
|
|
1865
|
+
{
|
|
1866
|
+
src: props.media.url,
|
|
1867
|
+
type: props.media.format
|
|
1868
|
+
}
|
|
1869
|
+
],
|
|
1870
|
+
children: /* @__PURE__ */ jsxs34(MediaProvider, { className: "w-full h-full [&>video]:w-full [&>video]:h-full [&>video]:object-contain", children: [
|
|
1871
|
+
captions.map((caption) => {
|
|
1872
|
+
return /* @__PURE__ */ jsx56(
|
|
1873
|
+
Track,
|
|
1874
|
+
{
|
|
1875
|
+
src: caption.id,
|
|
1876
|
+
kind: "subtitles",
|
|
1877
|
+
label: getValue(caption.label),
|
|
1878
|
+
default: caption.language === language,
|
|
1879
|
+
language: caption.language
|
|
1880
|
+
},
|
|
1881
|
+
caption.id
|
|
1882
|
+
);
|
|
1883
|
+
}),
|
|
1884
|
+
props.poster ? /* @__PURE__ */ jsx56(
|
|
1885
|
+
Poster,
|
|
1886
|
+
{
|
|
1887
|
+
className: "absolute inset-0 bg-black block h-full w-full opacity-0 transition-opacity data-[visible]:opacity-100 object-contain",
|
|
1888
|
+
src: props.poster
|
|
1889
|
+
}
|
|
1890
|
+
) : null,
|
|
1891
|
+
/* @__PURE__ */ jsx56(Gestures, {}),
|
|
1892
|
+
/* @__PURE__ */ jsx56(
|
|
1893
|
+
DefaultVideoLayout,
|
|
1894
|
+
{
|
|
1895
|
+
className: "z-1",
|
|
1896
|
+
noGestures: true,
|
|
1897
|
+
icons: defaultLayoutIcons
|
|
1898
|
+
}
|
|
1899
|
+
)
|
|
1900
|
+
] })
|
|
1901
|
+
}
|
|
1902
|
+
);
|
|
1903
|
+
}
|
|
1904
|
+
function Gestures() {
|
|
1905
|
+
return /* @__PURE__ */ jsxs34(Fragment5, { children: [
|
|
1906
|
+
/* @__PURE__ */ jsx56(
|
|
1907
|
+
Gesture,
|
|
1908
|
+
{
|
|
1909
|
+
className: "pointer-coarse:hidden absolute top-0 start-12 bottom-20 right-0 -z-1 block",
|
|
1910
|
+
event: "pointerup",
|
|
1911
|
+
action: "toggle:paused"
|
|
1912
|
+
}
|
|
1913
|
+
),
|
|
1914
|
+
/* @__PURE__ */ jsx56(Gesture, { className: "absolute inset-0 z-0 block h-full w-full", event: "dblpointerup", action: "toggle:fullscreen" })
|
|
1915
|
+
] });
|
|
1916
|
+
}
|
|
1400
1917
|
export {
|
|
1401
1918
|
ActionButton,
|
|
1402
1919
|
AddIcon,
|
|
@@ -1410,21 +1927,31 @@ export {
|
|
|
1410
1927
|
CreateCanvasIcon,
|
|
1411
1928
|
CreatorGrid,
|
|
1412
1929
|
DefaultTooltipContent,
|
|
1930
|
+
DeleteForeverIcon,
|
|
1413
1931
|
DownloadButton,
|
|
1414
1932
|
DownloadIcon,
|
|
1415
1933
|
EmptyCanvasIcon,
|
|
1416
1934
|
EmptyState,
|
|
1935
|
+
ErrorMessage,
|
|
1417
1936
|
Form,
|
|
1937
|
+
HTMLEditor,
|
|
1418
1938
|
HTMLIcon,
|
|
1939
|
+
HandleContainer,
|
|
1419
1940
|
IIIFBrowserIcon,
|
|
1420
1941
|
IIIFLogo,
|
|
1942
|
+
IIIFMediaPlayer,
|
|
1943
|
+
IconButton,
|
|
1944
|
+
ItemWithHandle,
|
|
1421
1945
|
LazyThumbnail,
|
|
1946
|
+
MDXEditor,
|
|
1422
1947
|
ManifestEditorLogo,
|
|
1423
1948
|
ManifestOverviewEmptyState,
|
|
1424
1949
|
MetadataContainer,
|
|
1425
1950
|
Modal,
|
|
1951
|
+
MoreMenu2 as MoreMenu,
|
|
1426
1952
|
OpaqueControls,
|
|
1427
1953
|
PanelSideMenu,
|
|
1954
|
+
RenderTextualContent,
|
|
1428
1955
|
Sidebar,
|
|
1429
1956
|
SidebarContent,
|
|
1430
1957
|
SidebarHeader,
|
|
@@ -1434,6 +1961,7 @@ export {
|
|
|
1434
1961
|
TabList,
|
|
1435
1962
|
TabPanel,
|
|
1436
1963
|
Tabs,
|
|
1964
|
+
TextIcon,
|
|
1437
1965
|
ThumbnailGridContainer,
|
|
1438
1966
|
Tooltip,
|
|
1439
1967
|
TooltipContent,
|