@manifest-editor/components 1.0.2
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/LICENSE +21 -0
- package/dist/index.cjs +1457 -0
- package/dist/index.css +812 -0
- package/dist/index.d.cts +250 -0
- package/dist/index.d.ts +250 -0
- package/dist/index.js +1443 -0
- package/package.json +80 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,1443 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
// src/ActionButton.tsx
|
|
4
|
+
import { Button } from "react-aria-components";
|
|
5
|
+
|
|
6
|
+
// src/utils.ts
|
|
7
|
+
import { clsx } from "clsx";
|
|
8
|
+
import { twMerge } from "tailwind-merge";
|
|
9
|
+
var cn = (...inputs) => {
|
|
10
|
+
return twMerge(clsx(inputs));
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
// src/ActionButton.tsx
|
|
14
|
+
import { jsx } from "react/jsx-runtime";
|
|
15
|
+
function ActionButton({
|
|
16
|
+
className: className2,
|
|
17
|
+
primary,
|
|
18
|
+
center,
|
|
19
|
+
children,
|
|
20
|
+
...props
|
|
21
|
+
}) {
|
|
22
|
+
return /* @__PURE__ */ jsx(
|
|
23
|
+
Button,
|
|
24
|
+
{
|
|
25
|
+
className: cn(
|
|
26
|
+
//
|
|
27
|
+
"flex gap-1 items-center px-2 py-1 bg-gray-100 text-me-primary-500 text-sm rounded hover:bg-gray-200",
|
|
28
|
+
primary ? "bg-me-primary-500 text-white hover:bg-me-primary-600" : "",
|
|
29
|
+
center ? "place-content-center" : "",
|
|
30
|
+
className2
|
|
31
|
+
),
|
|
32
|
+
...props,
|
|
33
|
+
children
|
|
34
|
+
}
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// src/Tooltip.tsx
|
|
39
|
+
import * as React from "react";
|
|
40
|
+
import {
|
|
41
|
+
useFloating,
|
|
42
|
+
autoUpdate,
|
|
43
|
+
offset,
|
|
44
|
+
flip,
|
|
45
|
+
shift,
|
|
46
|
+
useHover,
|
|
47
|
+
useFocus,
|
|
48
|
+
useDismiss,
|
|
49
|
+
useRole,
|
|
50
|
+
useInteractions,
|
|
51
|
+
useMergeRefs,
|
|
52
|
+
FloatingPortal
|
|
53
|
+
} from "@floating-ui/react";
|
|
54
|
+
import { Button as Button2 } from "react-aria-components";
|
|
55
|
+
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
56
|
+
function useTooltip({
|
|
57
|
+
initialOpen = false,
|
|
58
|
+
placement = "top",
|
|
59
|
+
open: controlledOpen,
|
|
60
|
+
onOpenChange: setControlledOpen
|
|
61
|
+
} = {}) {
|
|
62
|
+
const [uncontrolledOpen, setUncontrolledOpen] = React.useState(initialOpen);
|
|
63
|
+
const open = controlledOpen ?? uncontrolledOpen;
|
|
64
|
+
const setOpen = setControlledOpen ?? setUncontrolledOpen;
|
|
65
|
+
const data = useFloating({
|
|
66
|
+
placement,
|
|
67
|
+
open,
|
|
68
|
+
onOpenChange: setOpen,
|
|
69
|
+
whileElementsMounted: autoUpdate,
|
|
70
|
+
middleware: [
|
|
71
|
+
offset(5),
|
|
72
|
+
flip({
|
|
73
|
+
crossAxis: placement.includes("-"),
|
|
74
|
+
fallbackAxisSideDirection: "start",
|
|
75
|
+
padding: 5
|
|
76
|
+
}),
|
|
77
|
+
shift({ padding: 5 })
|
|
78
|
+
]
|
|
79
|
+
});
|
|
80
|
+
const context = data.context;
|
|
81
|
+
const hover = useHover(context, {
|
|
82
|
+
move: false,
|
|
83
|
+
enabled: controlledOpen == null
|
|
84
|
+
});
|
|
85
|
+
const focus = useFocus(context, {
|
|
86
|
+
enabled: controlledOpen == null
|
|
87
|
+
});
|
|
88
|
+
const dismiss = useDismiss(context);
|
|
89
|
+
const role = useRole(context, { role: "tooltip" });
|
|
90
|
+
const interactions = useInteractions([hover, focus, dismiss, role]);
|
|
91
|
+
return React.useMemo(
|
|
92
|
+
() => ({
|
|
93
|
+
open,
|
|
94
|
+
setOpen,
|
|
95
|
+
...interactions,
|
|
96
|
+
...data
|
|
97
|
+
}),
|
|
98
|
+
[open, setOpen, interactions, data]
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
var TooltipContext = React.createContext(null);
|
|
102
|
+
var useTooltipContext = () => {
|
|
103
|
+
const context = React.useContext(TooltipContext);
|
|
104
|
+
if (context == null) {
|
|
105
|
+
throw new Error("Tooltip components must be wrapped in <Tooltip />");
|
|
106
|
+
}
|
|
107
|
+
return context;
|
|
108
|
+
};
|
|
109
|
+
function Tooltip({ children, ...options }) {
|
|
110
|
+
const tooltip = useTooltip(options);
|
|
111
|
+
return /* @__PURE__ */ jsx2(TooltipContext.Provider, { value: tooltip, children });
|
|
112
|
+
}
|
|
113
|
+
var TooltipTrigger = React.forwardRef(function TooltipTrigger2({ children, asChild = false, ...props }, propRef) {
|
|
114
|
+
const context = useTooltipContext();
|
|
115
|
+
const childrenRef = children.ref;
|
|
116
|
+
const ref = useMergeRefs([context.refs.setReference, propRef, childrenRef]);
|
|
117
|
+
if (asChild && React.isValidElement(children)) {
|
|
118
|
+
return React.cloneElement(
|
|
119
|
+
children,
|
|
120
|
+
context.getReferenceProps({
|
|
121
|
+
ref,
|
|
122
|
+
...props,
|
|
123
|
+
...children.props,
|
|
124
|
+
"data-state": context.open ? "open" : "closed"
|
|
125
|
+
})
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
return /* @__PURE__ */ jsx2(
|
|
129
|
+
Button2,
|
|
130
|
+
{
|
|
131
|
+
ref,
|
|
132
|
+
"data-state": context.open ? "open" : "closed",
|
|
133
|
+
...context.getReferenceProps(props),
|
|
134
|
+
children
|
|
135
|
+
}
|
|
136
|
+
);
|
|
137
|
+
});
|
|
138
|
+
var TooltipContent = React.forwardRef(function TooltipContent2({ style, ...props }, propRef) {
|
|
139
|
+
const context = useTooltipContext();
|
|
140
|
+
const ref = useMergeRefs([context.refs.setFloating, propRef]);
|
|
141
|
+
if (!context.open)
|
|
142
|
+
return null;
|
|
143
|
+
return /* @__PURE__ */ jsx2(FloatingPortal, { children: /* @__PURE__ */ jsx2(
|
|
144
|
+
"div",
|
|
145
|
+
{
|
|
146
|
+
ref,
|
|
147
|
+
style: {
|
|
148
|
+
...context.floatingStyles,
|
|
149
|
+
...style
|
|
150
|
+
},
|
|
151
|
+
...context.getFloatingProps(props)
|
|
152
|
+
}
|
|
153
|
+
) });
|
|
154
|
+
});
|
|
155
|
+
function DefaultTooltipContent(props) {
|
|
156
|
+
return /* @__PURE__ */ jsx2(TooltipContent, { className: "bg-me-gray-900 text-white text-sm px-3 py-2 rounded-lg opacity-90 z-50", children: props.children });
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// src/Sidebar.tsx
|
|
160
|
+
import { jsx as jsx3, jsxs } from "react/jsx-runtime";
|
|
161
|
+
function Sidebar({ children }) {
|
|
162
|
+
return /* @__PURE__ */ jsx3("div", { className: "w-full h-full flex flex-col overflow-hidden", children });
|
|
163
|
+
}
|
|
164
|
+
function SidebarContent({ children, className: className2 }) {
|
|
165
|
+
return /* @__PURE__ */ jsx3("div", { className: cn("flex-1 min-h-0 overflow-y-auto", className2), children });
|
|
166
|
+
}
|
|
167
|
+
function SidebarHeader(props) {
|
|
168
|
+
const { actions, title } = props;
|
|
169
|
+
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: [
|
|
170
|
+
/* @__PURE__ */ jsx3("div", { className: "flex-1", children: title }),
|
|
171
|
+
/* @__PURE__ */ jsx3("div", { className: "ml-auto flex gap-2 items-center", children: actions?.map((action, index) => /* @__PURE__ */ jsxs(Tooltip, { placement: "bottom", children: [
|
|
172
|
+
/* @__PURE__ */ jsx3(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx3(
|
|
173
|
+
"button",
|
|
174
|
+
{
|
|
175
|
+
className: cn(
|
|
176
|
+
//
|
|
177
|
+
`p-1 rounded hover:bg-me-gray-300`,
|
|
178
|
+
action.toggled && "bg-me-gray-300",
|
|
179
|
+
action.disabled && "opacity-50 cursor-not-allowed"
|
|
180
|
+
),
|
|
181
|
+
onClick: action.onClick,
|
|
182
|
+
title: action.title,
|
|
183
|
+
disabled: action.disabled,
|
|
184
|
+
children: action.icon
|
|
185
|
+
},
|
|
186
|
+
index
|
|
187
|
+
) }),
|
|
188
|
+
!action.disabled ? /* @__PURE__ */ jsx3(DefaultTooltipContent, { children: action.title }) : null
|
|
189
|
+
] }, index)) })
|
|
190
|
+
] });
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// src/PanelSideMenu.tsx
|
|
194
|
+
import { Fragment } from "react/jsx-runtime";
|
|
195
|
+
|
|
196
|
+
// src/PanelSideMenuItem.tsx
|
|
197
|
+
import { jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
198
|
+
function PanelSideMenuItem(props) {
|
|
199
|
+
return /* @__PURE__ */ jsx4(Tooltip, { placement: "right", children: /* @__PURE__ */ jsx4(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxs2(
|
|
200
|
+
"button",
|
|
201
|
+
{
|
|
202
|
+
className: cn(
|
|
203
|
+
"aspect-square w-full flex justify-center items-center hover:bg-me-primary-100 hover:text-black [&>svg]:text-2xl cursor-default",
|
|
204
|
+
props.selected ? "bg-me-primary-500 hover:bg-me-primary-600 hover:text-white text-white" : "text-me-gray-700"
|
|
205
|
+
),
|
|
206
|
+
onMouseDown: props.onClick,
|
|
207
|
+
children: [
|
|
208
|
+
props.icon,
|
|
209
|
+
/* @__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 })
|
|
210
|
+
]
|
|
211
|
+
}
|
|
212
|
+
) }) });
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
// src/PanelSideMenu.tsx
|
|
216
|
+
import { jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
217
|
+
function PanelSideMenu(props) {
|
|
218
|
+
return /* @__PURE__ */ jsx5("div", { className: "bg-white border-t border-r flex flex-col w-12 pb-2", "data-open": props.open, children: props.items.map((panel) => /* @__PURE__ */ jsxs3(Fragment, { children: [
|
|
219
|
+
panel.divide ? /* @__PURE__ */ jsx5("div", { className: "flex-1 block w-2 min-h-1" }) : null,
|
|
220
|
+
/* @__PURE__ */ jsx5(
|
|
221
|
+
PanelSideMenuItem,
|
|
222
|
+
{
|
|
223
|
+
label: panel.label,
|
|
224
|
+
selected: panel.id === props.current && props.open,
|
|
225
|
+
icon: panel.icon,
|
|
226
|
+
onClick: panel.onClick
|
|
227
|
+
},
|
|
228
|
+
panel.id
|
|
229
|
+
)
|
|
230
|
+
] }, panel.id)) });
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
// src/ThumbnailGridContainer.tsx
|
|
234
|
+
import { jsx as jsx6 } from "react/jsx-runtime";
|
|
235
|
+
function ThumbnailGridContainer(props) {
|
|
236
|
+
if (props.wide) {
|
|
237
|
+
return /* @__PURE__ */ jsx6("div", { className: "grid grid-md gap-4 p-4 overflow-y-auto", children: props.children });
|
|
238
|
+
}
|
|
239
|
+
return /* @__PURE__ */ jsx6("div", { className: "grid grid-cols-2 gap-4 p-4", children: props.children });
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
// src/LazyThumbnail.tsx
|
|
243
|
+
import { LazyLoadComponent } from "react-lazy-load-image-component";
|
|
244
|
+
import { useThumbnail } from "react-iiif-vault";
|
|
245
|
+
import { useEffect, useLayoutEffect, useRef, useState as useState2 } from "react";
|
|
246
|
+
|
|
247
|
+
// src/Spinner.tsx
|
|
248
|
+
import { jsx as jsx7, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
249
|
+
function Spinner(props) {
|
|
250
|
+
return /* @__PURE__ */ jsx7(
|
|
251
|
+
"svg",
|
|
252
|
+
{
|
|
253
|
+
width: "1em",
|
|
254
|
+
height: "1em",
|
|
255
|
+
viewBox: "0 0 42 42",
|
|
256
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
257
|
+
stroke: "currentColor",
|
|
258
|
+
...props,
|
|
259
|
+
children: /* @__PURE__ */ jsxs4("g", { transform: "translate(2 2)", strokeWidth: 5, fill: "none", fillRule: "evenodd", children: [
|
|
260
|
+
/* @__PURE__ */ jsx7("circle", { strokeOpacity: 0.5, cx: 18, cy: 18, r: 18 }),
|
|
261
|
+
/* @__PURE__ */ jsx7("path", { d: "M36 18c0-9.94-8.06-18-18-18", children: /* @__PURE__ */ jsx7(
|
|
262
|
+
"animateTransform",
|
|
263
|
+
{
|
|
264
|
+
attributeName: "transform",
|
|
265
|
+
type: "rotate",
|
|
266
|
+
from: "0 18 18",
|
|
267
|
+
to: "360 18 18",
|
|
268
|
+
dur: "1s",
|
|
269
|
+
repeatCount: "indefinite"
|
|
270
|
+
}
|
|
271
|
+
) })
|
|
272
|
+
] })
|
|
273
|
+
}
|
|
274
|
+
);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
// src/LazyThumbnail.tsx
|
|
278
|
+
import { jsx as jsx8, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
279
|
+
function LazyThumbnail() {
|
|
280
|
+
return /* @__PURE__ */ jsx8(LazyLoadComponent, { children: /* @__PURE__ */ jsx8(LazyThumbnailInner, {}) });
|
|
281
|
+
}
|
|
282
|
+
function LazyThumbnailInner() {
|
|
283
|
+
const img = useRef(null);
|
|
284
|
+
const [isLoading, setIsLoading] = useState2(false);
|
|
285
|
+
const thumbnail = useThumbnail({ height: 256, width: 256 }, true);
|
|
286
|
+
useEffect(() => {
|
|
287
|
+
if (thumbnail?.id) {
|
|
288
|
+
setIsLoading(true);
|
|
289
|
+
}
|
|
290
|
+
}, [thumbnail?.id]);
|
|
291
|
+
useLayoutEffect(() => {
|
|
292
|
+
if (img.current) {
|
|
293
|
+
if (img.current.complete || img.current.naturalWidth > 0) {
|
|
294
|
+
setIsLoading(false);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}, [thumbnail?.id]);
|
|
298
|
+
return /* @__PURE__ */ jsxs5("div", { className: `w-full h-full relative`, children: [
|
|
299
|
+
thumbnail?.id ? /* @__PURE__ */ jsx8(
|
|
300
|
+
"img",
|
|
301
|
+
{
|
|
302
|
+
onLoad: () => setIsLoading(false),
|
|
303
|
+
ref: img,
|
|
304
|
+
src: thumbnail?.id,
|
|
305
|
+
alt: "",
|
|
306
|
+
className: `w-full h-full object-contain ${!isLoading ? "animate-fadeIn" : "opacity-0"}`
|
|
307
|
+
}
|
|
308
|
+
) : /* @__PURE__ */ jsx8("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" }),
|
|
309
|
+
!thumbnail?.id || isLoading ? /* @__PURE__ */ jsx8("div", { className: "absolute inset-0 flex items-center justify-center bg-me-gray-100 text-2xl animate-fadeIn z-10", children: /* @__PURE__ */ jsx8(Spinner, {}) }) : null
|
|
310
|
+
] });
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
// src/CanvasThumbnailGridItem.tsx
|
|
314
|
+
import { CanvasContext } from "react-iiif-vault";
|
|
315
|
+
|
|
316
|
+
// src/CanvasLabel.tsx
|
|
317
|
+
import { LocaleString, useCanvas as useCanvas2 } from "react-iiif-vault";
|
|
318
|
+
import { jsx as jsx9 } from "react/jsx-runtime";
|
|
319
|
+
function CanvasLabel(props) {
|
|
320
|
+
const canvas = useCanvas2();
|
|
321
|
+
if (!canvas)
|
|
322
|
+
return null;
|
|
323
|
+
return /* @__PURE__ */ jsx9(LocaleString, { className: props.className, as: props.as, children: canvas.label });
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
// src/Card3D.tsx
|
|
327
|
+
import { useLayoutEffect as useLayoutEffect2, useRef as useRef2 } from "react";
|
|
328
|
+
import { twMerge as twMerge2 } from "tailwind-merge";
|
|
329
|
+
import { jsx as jsx10, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
330
|
+
function Card3D({
|
|
331
|
+
className: className2,
|
|
332
|
+
shouldTranslate,
|
|
333
|
+
children,
|
|
334
|
+
...props
|
|
335
|
+
}) {
|
|
336
|
+
const outer = useRef2(null);
|
|
337
|
+
const inner = useRef2(null);
|
|
338
|
+
useLayoutEffect2(() => {
|
|
339
|
+
if (!outer.current || !inner.current)
|
|
340
|
+
return;
|
|
341
|
+
let bounds;
|
|
342
|
+
function rotateToMouse(e) {
|
|
343
|
+
const mouseX = e.clientX;
|
|
344
|
+
const mouseY = e.clientY;
|
|
345
|
+
const leftX = mouseX - bounds.x;
|
|
346
|
+
const topY = mouseY - bounds.y;
|
|
347
|
+
const center = {
|
|
348
|
+
x: leftX - bounds.width / 2,
|
|
349
|
+
y: topY - bounds.height / 2
|
|
350
|
+
};
|
|
351
|
+
const distance = Math.sqrt(center.x ** 2 + center.y ** 2);
|
|
352
|
+
if (shouldTranslate) {
|
|
353
|
+
outer.current.style.transform = `
|
|
354
|
+
scale3d(1.07, 1.07, 1.07)
|
|
355
|
+
rotate3d(
|
|
356
|
+
${center.y / 100},
|
|
357
|
+
${-center.x / 100},
|
|
358
|
+
0,
|
|
359
|
+
${Math.log(distance) * 2}deg
|
|
360
|
+
)
|
|
361
|
+
`;
|
|
362
|
+
}
|
|
363
|
+
inner.current.style.backgroundImage = `
|
|
364
|
+
radial-gradient(
|
|
365
|
+
circle at
|
|
366
|
+
${center.x * 2 + bounds.width / 2}px
|
|
367
|
+
${center.y * 2 + bounds.height / 2}px,
|
|
368
|
+
#ffffff66,
|
|
369
|
+
#ffffff00
|
|
370
|
+
)
|
|
371
|
+
`;
|
|
372
|
+
}
|
|
373
|
+
function reset() {
|
|
374
|
+
outer.current.style.transform = "";
|
|
375
|
+
inner.current.style.backgroundImage = "";
|
|
376
|
+
}
|
|
377
|
+
let isActive = false;
|
|
378
|
+
const mouseenter = () => {
|
|
379
|
+
bounds = outer.current.getBoundingClientRect();
|
|
380
|
+
isActive = true;
|
|
381
|
+
};
|
|
382
|
+
const mouseleave = () => {
|
|
383
|
+
isActive = false;
|
|
384
|
+
reset();
|
|
385
|
+
};
|
|
386
|
+
const mousemove = (e) => {
|
|
387
|
+
if (!isActive)
|
|
388
|
+
return;
|
|
389
|
+
rotateToMouse(e);
|
|
390
|
+
};
|
|
391
|
+
outer.current.addEventListener("mouseenter", mouseenter);
|
|
392
|
+
outer.current.addEventListener("mouseleave", mouseleave);
|
|
393
|
+
outer.current.addEventListener("mousemove", mousemove);
|
|
394
|
+
return () => {
|
|
395
|
+
outer.current.removeEventListener("mouseenter", mouseenter);
|
|
396
|
+
outer.current.removeEventListener("mouseleave", mouseleave);
|
|
397
|
+
outer.current.removeEventListener("mousemove", mousemove);
|
|
398
|
+
};
|
|
399
|
+
}, []);
|
|
400
|
+
return /* @__PURE__ */ jsxs6(
|
|
401
|
+
"div",
|
|
402
|
+
{
|
|
403
|
+
ref: outer,
|
|
404
|
+
className: twMerge2(
|
|
405
|
+
//
|
|
406
|
+
"relative transition-all hover:duration-50",
|
|
407
|
+
shouldTranslate && "hover:shadow-xl",
|
|
408
|
+
className2
|
|
409
|
+
),
|
|
410
|
+
...props,
|
|
411
|
+
children: [
|
|
412
|
+
children,
|
|
413
|
+
/* @__PURE__ */ jsx10(
|
|
414
|
+
"div",
|
|
415
|
+
{
|
|
416
|
+
className: "pointer-events-none absolute inset-0 transition-all",
|
|
417
|
+
style: {
|
|
418
|
+
backgroundImage: "radial-gradient(circle at 50% -20%, #ffffff00, #ffffff00)"
|
|
419
|
+
},
|
|
420
|
+
ref: inner
|
|
421
|
+
}
|
|
422
|
+
)
|
|
423
|
+
]
|
|
424
|
+
}
|
|
425
|
+
);
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
// src/CanvasThumbnailGridItem.tsx
|
|
429
|
+
import { jsx as jsx11, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
430
|
+
function CanvasThumbnailGridItem(props) {
|
|
431
|
+
return /* @__PURE__ */ jsx11(CanvasContext, { canvas: props.id, children: /* @__PURE__ */ jsxs7("div", { onMouseDown: props.onClick, className: "flex flex-col", "data-canvas-selected": props.selected, children: [
|
|
432
|
+
/* @__PURE__ */ jsx11("div", { className: "bg-me-gray-100 w-full aspect-square flex-1 overflow-hidden rounded", children: /* @__PURE__ */ jsx11(
|
|
433
|
+
Card3D,
|
|
434
|
+
{
|
|
435
|
+
className: cn(
|
|
436
|
+
"border-2 border-transparent p-1 w-full h-full rounded",
|
|
437
|
+
props.selected && "border-me-primary-500"
|
|
438
|
+
),
|
|
439
|
+
children: /* @__PURE__ */ jsx11(LazyThumbnail, {})
|
|
440
|
+
}
|
|
441
|
+
) }),
|
|
442
|
+
/* @__PURE__ */ jsx11(CanvasLabel, { className: "text-sm text-center truncate mt-1", as: "div" })
|
|
443
|
+
] }) });
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
// src/Modal.tsx
|
|
447
|
+
import { CloseButton, Description, Dialog, DialogPanel, DialogTitle } from "@headlessui/react";
|
|
448
|
+
import { Fragment as Fragment2, jsx as jsx12, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
449
|
+
function Modal({ id, title, open = true, onClose, actions, children }) {
|
|
450
|
+
return /* @__PURE__ */ jsx12(Fragment2, { children: /* @__PURE__ */ jsxs8(Dialog, { open, onClose, id, className: "relative z-[500]", children: [
|
|
451
|
+
/* @__PURE__ */ jsx12("div", { className: `fixed inset-0 bg-black/30 animate-fadeIn z-[501]`, "aria-hidden": "true" }),
|
|
452
|
+
/* @__PURE__ */ jsx12("div", { className: "fixed inset-0 flex w-screen items-center justify-center p-4 z-[502]", children: /* @__PURE__ */ jsx12("div", { className: "relative p-4 w-full max-w-3xl max-h-full", children: /* @__PURE__ */ jsxs8(DialogPanel, { className: "relative bg-white rounded-lg overflow-hidden shadow-2xl dark:bg-gray-700 max-h-[80vh] flex flex-col", children: [
|
|
453
|
+
/* @__PURE__ */ jsxs8("div", { className: "flex items-center justify-between p-4 md:p-5 rounded-t-lg dark:border-gray-600 sticky top-0 bg-white", children: [
|
|
454
|
+
/* @__PURE__ */ jsx12(DialogTitle, { className: "text-xl font-semibold text-gray-900 dark:text-white", children: title }),
|
|
455
|
+
/* @__PURE__ */ jsxs8(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 dark:hover:bg-gray-600 dark:hover:text-white", children: [
|
|
456
|
+
/* @__PURE__ */ jsx12(
|
|
457
|
+
"svg",
|
|
458
|
+
{
|
|
459
|
+
className: "w-3 h-3",
|
|
460
|
+
"aria-hidden": "true",
|
|
461
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
462
|
+
fill: "none",
|
|
463
|
+
viewBox: "0 0 14 14",
|
|
464
|
+
children: /* @__PURE__ */ jsx12(
|
|
465
|
+
"path",
|
|
466
|
+
{
|
|
467
|
+
stroke: "currentColor",
|
|
468
|
+
strokeLinecap: "round",
|
|
469
|
+
strokeLinejoin: "round",
|
|
470
|
+
strokeWidth: "2",
|
|
471
|
+
d: "m1 1 6 6m0 0 6 6M7 7l6-6M7 7l-6 6"
|
|
472
|
+
}
|
|
473
|
+
)
|
|
474
|
+
}
|
|
475
|
+
),
|
|
476
|
+
/* @__PURE__ */ jsx12("span", { className: "sr-only", children: "Close" })
|
|
477
|
+
] })
|
|
478
|
+
] }),
|
|
479
|
+
/* @__PURE__ */ jsx12(Description, { className: "flex-1 min-h-0 overflow-y-auto", children }),
|
|
480
|
+
actions ? /* @__PURE__ */ jsx12("div", { className: "flex items-center p-4 md:p-5 border-t border-gray-200 rounded-b dark:border-gray-600 justify-end", children: actions }) : null
|
|
481
|
+
] }) }) })
|
|
482
|
+
] }) });
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
// src/ControlButton.tsx
|
|
486
|
+
import { jsx as jsx13 } from "react/jsx-runtime";
|
|
487
|
+
function ControlButton({
|
|
488
|
+
children,
|
|
489
|
+
className: className2,
|
|
490
|
+
...props
|
|
491
|
+
}) {
|
|
492
|
+
return /* @__PURE__ */ jsx13(
|
|
493
|
+
"button",
|
|
494
|
+
{
|
|
495
|
+
className: cn(
|
|
496
|
+
"bg-white border border-me-primary-500 text-xs py-1 px-2 rounded text-me-primary-600 hover:bg-me-primary-50",
|
|
497
|
+
className2
|
|
498
|
+
),
|
|
499
|
+
...props,
|
|
500
|
+
children
|
|
501
|
+
}
|
|
502
|
+
);
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
// src/OpaqueControls.tsx
|
|
506
|
+
import { jsx as jsx14 } from "react/jsx-runtime";
|
|
507
|
+
function OpaqueControls(props) {
|
|
508
|
+
return /* @__PURE__ */ jsx14(
|
|
509
|
+
"div",
|
|
510
|
+
{
|
|
511
|
+
className: cn("flex w-full p-0.5 opacity-0 transition-opacity duration-300 gap-2", props.active && "opacity-1"),
|
|
512
|
+
children: props.children
|
|
513
|
+
}
|
|
514
|
+
);
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
// src/Tabs.tsx
|
|
518
|
+
import {
|
|
519
|
+
Tabs as BaseTabs,
|
|
520
|
+
TabList as BaseTabList,
|
|
521
|
+
Tab as BaseTab,
|
|
522
|
+
TabPanel as BaseTabPanel
|
|
523
|
+
} from "react-aria-components";
|
|
524
|
+
import { jsx as jsx15 } from "react/jsx-runtime";
|
|
525
|
+
function Tabs({ className: className2, children, ...props }) {
|
|
526
|
+
return /* @__PURE__ */ jsx15(
|
|
527
|
+
BaseTabs,
|
|
528
|
+
{
|
|
529
|
+
className: (state) => {
|
|
530
|
+
const cs = typeof className2 === "function" ? className2(state) : className2;
|
|
531
|
+
return cn("", cs);
|
|
532
|
+
},
|
|
533
|
+
...props,
|
|
534
|
+
children
|
|
535
|
+
}
|
|
536
|
+
);
|
|
537
|
+
}
|
|
538
|
+
function TabList({
|
|
539
|
+
className: className2,
|
|
540
|
+
children,
|
|
541
|
+
...props
|
|
542
|
+
}) {
|
|
543
|
+
return /* @__PURE__ */ jsx15(
|
|
544
|
+
BaseTabList,
|
|
545
|
+
{
|
|
546
|
+
className: (state) => {
|
|
547
|
+
const cs = typeof className2 === "function" ? className2(state) : className2;
|
|
548
|
+
return cn("flex gap-4", cs);
|
|
549
|
+
},
|
|
550
|
+
...props,
|
|
551
|
+
children
|
|
552
|
+
}
|
|
553
|
+
);
|
|
554
|
+
}
|
|
555
|
+
function Tab({ className: className2, children, ...props }) {
|
|
556
|
+
return /* @__PURE__ */ jsx15(
|
|
557
|
+
BaseTab,
|
|
558
|
+
{
|
|
559
|
+
className: (state) => {
|
|
560
|
+
const cs = typeof className2 === "function" ? className2(state) : className2;
|
|
561
|
+
return cn(
|
|
562
|
+
"cursor-default outline-none group py-1 font-semibold px-2 border-b-2 text-me-gray-700",
|
|
563
|
+
state.isSelected && "border-b-me-primary-600 text-black",
|
|
564
|
+
state.isFocusVisible && "focus-visible:bg-me-primary-100",
|
|
565
|
+
cs
|
|
566
|
+
);
|
|
567
|
+
},
|
|
568
|
+
...props,
|
|
569
|
+
children
|
|
570
|
+
}
|
|
571
|
+
);
|
|
572
|
+
}
|
|
573
|
+
function TabPanel({ className: className2, children, ...props }) {
|
|
574
|
+
return /* @__PURE__ */ jsx15(
|
|
575
|
+
BaseTabPanel,
|
|
576
|
+
{
|
|
577
|
+
className: (state) => {
|
|
578
|
+
const cs = typeof className2 === "function" ? className2(state) : className2;
|
|
579
|
+
return cn("", cs);
|
|
580
|
+
},
|
|
581
|
+
...props,
|
|
582
|
+
children
|
|
583
|
+
}
|
|
584
|
+
);
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
// src/CreatorGrid.tsx
|
|
588
|
+
import { ListBox, ListBoxItem } from "react-aria-components";
|
|
589
|
+
import { twMerge as twMerge3 } from "tailwind-merge";
|
|
590
|
+
import { jsx as jsx16, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
591
|
+
function CreatorGrid(props) {
|
|
592
|
+
return /* @__PURE__ */ jsx16(
|
|
593
|
+
ListBox,
|
|
594
|
+
{
|
|
595
|
+
orientation: "horizontal",
|
|
596
|
+
"aria-label": props.label,
|
|
597
|
+
selectionMode: "single",
|
|
598
|
+
items: props.items,
|
|
599
|
+
className: "grid grid-sm gap-4 p-4",
|
|
600
|
+
children: (item) => /* @__PURE__ */ jsx16(CreatorGridItem, { ...item })
|
|
601
|
+
}
|
|
602
|
+
);
|
|
603
|
+
}
|
|
604
|
+
function CreatorGridItem(props) {
|
|
605
|
+
return /* @__PURE__ */ jsxs9(
|
|
606
|
+
ListBoxItem,
|
|
607
|
+
{
|
|
608
|
+
id: props.id,
|
|
609
|
+
onAction: props.onClick,
|
|
610
|
+
className: ($s) => twMerge3(
|
|
611
|
+
"bg-white p-2 rounded-md border hover:border-me-primary-500",
|
|
612
|
+
$s.isFocused && "border-me-primary-500 outline-me-primary-500 outline-2"
|
|
613
|
+
),
|
|
614
|
+
children: [
|
|
615
|
+
/* @__PURE__ */ jsx16("div", { className: "rounded bg-me-gray-300 mb-2 flex items-center justify-center py-1", children: /* @__PURE__ */ jsx16("div", { className: "text-center [&>svg]:w-16 [&>svg]:h-16", children: props.icon }) }),
|
|
616
|
+
/* @__PURE__ */ jsx16("div", { className: "text-center font-semibold text-sm", children: props.title }),
|
|
617
|
+
/* @__PURE__ */ jsx16("div", { className: "text-sm text-center text-black/50", children: props.description })
|
|
618
|
+
]
|
|
619
|
+
}
|
|
620
|
+
);
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
// src/icons/DownloadIcon.tsx
|
|
624
|
+
import { jsx as jsx17 } from "react/jsx-runtime";
|
|
625
|
+
var DownloadIcon = (props) => /* @__PURE__ */ jsx17("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", fill: "#5f6368", viewBox: "0 -960 960 960", ...props, children: /* @__PURE__ */ jsx17(
|
|
626
|
+
"path",
|
|
627
|
+
{
|
|
628
|
+
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",
|
|
629
|
+
fill: "currentColor"
|
|
630
|
+
}
|
|
631
|
+
) });
|
|
632
|
+
|
|
633
|
+
// src/DownloadButton.tsx
|
|
634
|
+
import { useId } from "react-aria";
|
|
635
|
+
import { jsx as jsx18, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
636
|
+
function DownloadButton({ label, id: _id, getData, fileName, fileType }) {
|
|
637
|
+
const id = useId(_id);
|
|
638
|
+
return /* @__PURE__ */ jsx18(Tooltip, { placement: "bottom", children: /* @__PURE__ */ jsxs10(
|
|
639
|
+
TooltipTrigger,
|
|
640
|
+
{
|
|
641
|
+
className: "bg-me-gray-100 hover:bg-me-primary-500 hover:text-white p-1 rounded-md text-me-primary-500 text-2xl",
|
|
642
|
+
"aria-label": label,
|
|
643
|
+
id,
|
|
644
|
+
onPress: () => createDownload(getData(), fileName, fileType),
|
|
645
|
+
children: [
|
|
646
|
+
/* @__PURE__ */ jsx18(DownloadIcon, { "aria-labelledby": _id }),
|
|
647
|
+
/* @__PURE__ */ jsx18(DefaultTooltipContent, { children: label })
|
|
648
|
+
]
|
|
649
|
+
}
|
|
650
|
+
) });
|
|
651
|
+
}
|
|
652
|
+
function createDownload(data, fileName, fileType = "text/json") {
|
|
653
|
+
const blob = data instanceof Blob ? data : new Blob([data], { type: fileType });
|
|
654
|
+
const a = document.createElement("a");
|
|
655
|
+
a.download = fileName;
|
|
656
|
+
a.href = window.URL.createObjectURL(blob);
|
|
657
|
+
const clickEvt = new MouseEvent("click", {
|
|
658
|
+
view: window,
|
|
659
|
+
bubbles: true,
|
|
660
|
+
cancelable: true
|
|
661
|
+
});
|
|
662
|
+
a.dispatchEvent(clickEvt);
|
|
663
|
+
a.remove();
|
|
664
|
+
}
|
|
665
|
+
|
|
666
|
+
// src/AtlasBanner.tsx
|
|
667
|
+
import { jsx as jsx19, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
668
|
+
function AtlasBanner({ children, controlsId }) {
|
|
669
|
+
return /* @__PURE__ */ jsxs11("div", { className: "bg-me-gray-100 border-b text-black p-1 flex gap-4 items-center h-12", children: [
|
|
670
|
+
/* @__PURE__ */ jsx19("div", { className: "px-4", children }),
|
|
671
|
+
/* @__PURE__ */ jsx19("div", { id: controlsId || "atlas-controls", className: "flex gap-2" })
|
|
672
|
+
] });
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
// src/SvgControlBar.tsx
|
|
676
|
+
import { RenderSvgEditorControls } from "react-iiif-vault";
|
|
677
|
+
|
|
678
|
+
// src/icons/DrawIcon.tsx
|
|
679
|
+
import { jsx as jsx20, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
680
|
+
var DrawIcon = ({ title, titleId, ...props }) => /* @__PURE__ */ jsxs12(
|
|
681
|
+
"svg",
|
|
682
|
+
{
|
|
683
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
684
|
+
width: "1em",
|
|
685
|
+
height: "1em",
|
|
686
|
+
viewBox: "0 -960 960 960",
|
|
687
|
+
"aria-labelledby": titleId,
|
|
688
|
+
...props,
|
|
689
|
+
children: [
|
|
690
|
+
title ? /* @__PURE__ */ jsx20("title", { id: titleId, children: title }) : null,
|
|
691
|
+
/* @__PURE__ */ jsx20(
|
|
692
|
+
"path",
|
|
693
|
+
{
|
|
694
|
+
fill: "currentColor",
|
|
695
|
+
d: "M160-120v-170l527-526q12-12 27-18t30-6q16 0 30.5 6t25.5 18l56 56q12 11 18 25.5t6 30.5q0 15-6 30t-18 27L330-120H160Zm80-80h56l393-392-28-29-29-28-392 393v56Zm560-503-57-57 57 57Zm-139 82-29-28 57 57-28-29ZM560-120q74 0 137-37t63-103q0-36-19-62t-51-45l-59 59q23 10 36 22t13 26q0 23-36.5 41.5T560-200q-17 0-28.5 11.5T520-160q0 17 11.5 28.5T560-120ZM183-426l60-60q-20-8-31.5-16.5T200-520q0-12 18-24t76-37q88-38 117-69t29-70q0-55-44-87.5T280-840q-45 0-80.5 16T145-785q-11 13-9 29t15 26q13 11 29 9t27-13q14-14 31-20t42-6q41 0 60.5 12t19.5 28q0 14-17.5 25.5T262-654q-80 35-111 63.5T120-520q0 32 17 54.5t46 39.5Z"
|
|
696
|
+
}
|
|
697
|
+
)
|
|
698
|
+
]
|
|
699
|
+
}
|
|
700
|
+
);
|
|
701
|
+
|
|
702
|
+
// src/icons/PolygonIcon.tsx
|
|
703
|
+
import { jsx as jsx21, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
704
|
+
var PolygonIcon = ({ title, titleId, ...props }) => /* @__PURE__ */ jsxs13(
|
|
705
|
+
"svg",
|
|
706
|
+
{
|
|
707
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
708
|
+
width: "1em",
|
|
709
|
+
height: "1em",
|
|
710
|
+
viewBox: "0 -960 960 960",
|
|
711
|
+
"aria-labelledby": titleId,
|
|
712
|
+
...props,
|
|
713
|
+
children: [
|
|
714
|
+
title ? /* @__PURE__ */ jsx21("title", { id: titleId, children: title }) : null,
|
|
715
|
+
/* @__PURE__ */ jsx21(
|
|
716
|
+
"path",
|
|
717
|
+
{
|
|
718
|
+
fill: "currentColor",
|
|
719
|
+
d: "M600-80v-100L320-320H120v-240h172l108-124v-196h240v240H468L360-516v126l240 120v-50h240v240H600ZM480-720h80v-80h-80v80ZM200-400h80v-80h-80v80Zm480 240h80v-80h-80v80ZM520-760ZM240-440Zm480 240Z"
|
|
720
|
+
}
|
|
721
|
+
)
|
|
722
|
+
]
|
|
723
|
+
}
|
|
724
|
+
);
|
|
725
|
+
|
|
726
|
+
// src/icons/LineIcon.tsx
|
|
727
|
+
import { jsx as jsx22, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
728
|
+
function LineIcon({ title, titleId, ...props }) {
|
|
729
|
+
return /* @__PURE__ */ jsxs14("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", "aria-labelledby": titleId, ...props, children: [
|
|
730
|
+
title ? /* @__PURE__ */ jsx22("title", { id: titleId, children: title }) : null,
|
|
731
|
+
/* @__PURE__ */ jsxs14("g", { fill: "none", fillRule: "evenodd", children: [
|
|
732
|
+
/* @__PURE__ */ jsx22("circle", { cx: 4.5, cy: 4.5, r: 2.5, fill: "currentColor" }),
|
|
733
|
+
/* @__PURE__ */ jsx22("circle", { cx: 15.5, cy: 15.5, r: 2.5, fill: "currentColor" }),
|
|
734
|
+
/* @__PURE__ */ jsx22("path", { stroke: "currentColor", strokeLinecap: "square", strokeWidth: 2, d: "m13.5 13.5-9-9" })
|
|
735
|
+
] })
|
|
736
|
+
] });
|
|
737
|
+
}
|
|
738
|
+
|
|
739
|
+
// src/icons/LineBoxIcon.tsx
|
|
740
|
+
import { jsx as jsx23, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
741
|
+
function LineBoxIcon({ title, titleId, ...props }) {
|
|
742
|
+
return /* @__PURE__ */ jsxs15("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", "aria-labelledby": titleId, ...props, children: [
|
|
743
|
+
title ? /* @__PURE__ */ jsx23("title", { id: titleId, children: title }) : null,
|
|
744
|
+
/* @__PURE__ */ jsxs15("g", { fill: "none", fillRule: "evenodd", children: [
|
|
745
|
+
/* @__PURE__ */ jsx23("path", { d: "M0 0h20v20H0z" }),
|
|
746
|
+
/* @__PURE__ */ jsx23("path", { stroke: "currentColor", strokeLinecap: "square", strokeWidth: 2, d: "m8.5 11.5 6-6M16 4v3m0-3h-3m0 14L2 7" }),
|
|
747
|
+
/* @__PURE__ */ jsx23("path", { stroke: "currentColor", strokeOpacity: 0.407, strokeWidth: 2, d: "m2 7 5-5 11 11-5 5z" })
|
|
748
|
+
] })
|
|
749
|
+
] });
|
|
750
|
+
}
|
|
751
|
+
|
|
752
|
+
// src/icons/ShapesIcon.tsx
|
|
753
|
+
import { jsx as jsx24, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
754
|
+
var ShapesIcon = ({ title, titleId, ...props }) => /* @__PURE__ */ jsxs16(
|
|
755
|
+
"svg",
|
|
756
|
+
{
|
|
757
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
758
|
+
width: "1em",
|
|
759
|
+
height: "1em",
|
|
760
|
+
viewBox: "0 -960 960 960",
|
|
761
|
+
"aria-labelledby": titleId,
|
|
762
|
+
...props,
|
|
763
|
+
children: [
|
|
764
|
+
title ? /* @__PURE__ */ jsx24("title", { id: titleId, children: title }) : null,
|
|
765
|
+
/* @__PURE__ */ jsx24(
|
|
766
|
+
"path",
|
|
767
|
+
{
|
|
768
|
+
fill: "currentColor",
|
|
769
|
+
d: "M600-360ZM320-242q10 1 19.5 1.5t20.5.5q11 0 20.5-.5T400-242v82h400v-400h-82q1-10 1.5-19.5t.5-20.5q0-11-.5-20.5T718-640h82q33 0 56.5 23.5T880-560v400q0 33-23.5 56.5T800-80H400q-33 0-56.5-23.5T320-160v-82Zm40-78q-117 0-198.5-81.5T80-600q0-117 81.5-198.5T360-880q117 0 198.5 81.5T640-600q0 117-81.5 198.5T360-320Zm0-80q83 0 141.5-58.5T560-600q0-83-58.5-141.5T360-800q-83 0-141.5 58.5T160-600q0 83 58.5 141.5T360-400Zm0-200Z"
|
|
770
|
+
}
|
|
771
|
+
)
|
|
772
|
+
]
|
|
773
|
+
}
|
|
774
|
+
);
|
|
775
|
+
|
|
776
|
+
// src/icons/SquareIcon.tsx
|
|
777
|
+
import { jsx as jsx25, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
778
|
+
var SquareIcon = ({ title, titleId, ...props }) => /* @__PURE__ */ jsxs17(
|
|
779
|
+
"svg",
|
|
780
|
+
{
|
|
781
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
782
|
+
width: "1em",
|
|
783
|
+
height: "1em",
|
|
784
|
+
viewBox: "0 -960 960 960",
|
|
785
|
+
"aria-labelledby": titleId,
|
|
786
|
+
...props,
|
|
787
|
+
children: [
|
|
788
|
+
title ? /* @__PURE__ */ jsx25("title", { id: titleId, children: title }) : null,
|
|
789
|
+
/* @__PURE__ */ jsx25(
|
|
790
|
+
"path",
|
|
791
|
+
{
|
|
792
|
+
fill: "currentColor",
|
|
793
|
+
d: "M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560H200v560Zm0 0v-560 560Z"
|
|
794
|
+
}
|
|
795
|
+
)
|
|
796
|
+
]
|
|
797
|
+
}
|
|
798
|
+
);
|
|
799
|
+
|
|
800
|
+
// src/icons/TriangleIcon.tsx
|
|
801
|
+
import { jsx as jsx26, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
802
|
+
var TriangleIcon = ({ title, titleId, ...props }) => /* @__PURE__ */ jsxs18(
|
|
803
|
+
"svg",
|
|
804
|
+
{
|
|
805
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
806
|
+
width: "1em",
|
|
807
|
+
height: "1em",
|
|
808
|
+
viewBox: "0 -960 960 960",
|
|
809
|
+
"aria-labelledby": titleId,
|
|
810
|
+
...props,
|
|
811
|
+
children: [
|
|
812
|
+
title ? /* @__PURE__ */ jsx26("title", { id: titleId, children: title }) : null,
|
|
813
|
+
/* @__PURE__ */ jsx26("path", { d: "m80-160 400-640 400 640H80Zm144-80h512L480-650 224-240Zm256-205Z", fill: "currentColor" })
|
|
814
|
+
]
|
|
815
|
+
}
|
|
816
|
+
);
|
|
817
|
+
|
|
818
|
+
// src/icons/HexagonIcon.tsx
|
|
819
|
+
import { jsx as jsx27, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
820
|
+
var HexagonIcon = ({ title, titleId, ...props }) => /* @__PURE__ */ jsxs19(
|
|
821
|
+
"svg",
|
|
822
|
+
{
|
|
823
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
824
|
+
width: "1em",
|
|
825
|
+
height: "1em",
|
|
826
|
+
viewBox: "0 -960 960 960",
|
|
827
|
+
"aria-labelledby": titleId,
|
|
828
|
+
...props,
|
|
829
|
+
children: [
|
|
830
|
+
title ? /* @__PURE__ */ jsx27("title", { id: titleId, children: title }) : null,
|
|
831
|
+
/* @__PURE__ */ jsx27(
|
|
832
|
+
"path",
|
|
833
|
+
{
|
|
834
|
+
fill: "currentColor",
|
|
835
|
+
d: "M272-120 64-480l208-360h416l208 360-208 360H272Zm46-80h324l161-280-161-280H318L156-480l162 280Zm162-280Z"
|
|
836
|
+
}
|
|
837
|
+
)
|
|
838
|
+
]
|
|
839
|
+
}
|
|
840
|
+
);
|
|
841
|
+
|
|
842
|
+
// src/icons/DeleteForeverIcon.tsx
|
|
843
|
+
import { jsx as jsx28, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
844
|
+
function DeleteForeverIcon(props) {
|
|
845
|
+
return /* @__PURE__ */ jsxs20("svg", { height: "1em", width: "1em", viewBox: "0 0 24 24", ...props, children: [
|
|
846
|
+
/* @__PURE__ */ jsx28("path", { d: "M0 0h24v24H0z", fill: "none" }),
|
|
847
|
+
/* @__PURE__ */ jsx28("path", { d: "M0 0h24v24H0V0z", fill: "none" }),
|
|
848
|
+
/* @__PURE__ */ jsx28(
|
|
849
|
+
"path",
|
|
850
|
+
{
|
|
851
|
+
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",
|
|
852
|
+
fill: "currentColor"
|
|
853
|
+
}
|
|
854
|
+
)
|
|
855
|
+
] });
|
|
856
|
+
}
|
|
857
|
+
|
|
858
|
+
// src/SvgControlBar.tsx
|
|
859
|
+
import { useEffect as useEffect2 } from "react";
|
|
860
|
+
import { jsx as jsx29 } from "react/jsx-runtime";
|
|
861
|
+
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';
|
|
862
|
+
var icons = {
|
|
863
|
+
DrawIcon: /* @__PURE__ */ jsx29(DrawIcon, {}),
|
|
864
|
+
PolygonIcon: /* @__PURE__ */ jsx29(PolygonIcon, {}),
|
|
865
|
+
LineIcon: /* @__PURE__ */ jsx29(LineIcon, {}),
|
|
866
|
+
LineBoxIcon: /* @__PURE__ */ jsx29(LineBoxIcon, {}),
|
|
867
|
+
ShapesIcon: /* @__PURE__ */ jsx29(ShapesIcon, {}),
|
|
868
|
+
SquareIcon: /* @__PURE__ */ jsx29(SquareIcon, {}),
|
|
869
|
+
TriangleIcon: /* @__PURE__ */ jsx29(TriangleIcon, {}),
|
|
870
|
+
HexagonIcon: /* @__PURE__ */ jsx29(HexagonIcon, {}),
|
|
871
|
+
DeleteForeverIcon: /* @__PURE__ */ jsx29(DeleteForeverIcon, {})
|
|
872
|
+
};
|
|
873
|
+
function SvgControlBar({
|
|
874
|
+
helper,
|
|
875
|
+
state,
|
|
876
|
+
showShapes
|
|
877
|
+
}) {
|
|
878
|
+
useEffect2(() => {
|
|
879
|
+
helper.stamps.square();
|
|
880
|
+
}, []);
|
|
881
|
+
return /* @__PURE__ */ jsx29(
|
|
882
|
+
RenderSvgEditorControls,
|
|
883
|
+
{
|
|
884
|
+
icons,
|
|
885
|
+
helper,
|
|
886
|
+
state,
|
|
887
|
+
showShapes,
|
|
888
|
+
classNames: {
|
|
889
|
+
button: className
|
|
890
|
+
}
|
|
891
|
+
}
|
|
892
|
+
);
|
|
893
|
+
}
|
|
894
|
+
|
|
895
|
+
// src/ConfirmSelectionButton.tsx
|
|
896
|
+
import { Button as Button3 } from "react-aria-components";
|
|
897
|
+
import { jsx as jsx30 } from "react/jsx-runtime";
|
|
898
|
+
function ConfirmSelectionButton({ onPress, children }) {
|
|
899
|
+
return /* @__PURE__ */ jsx30(Button3, { className: "bg-me-primary-500 px-3 py-1 hover:bg-me-primary-600 text-white rounded", onPress, children });
|
|
900
|
+
}
|
|
901
|
+
|
|
902
|
+
// src/ManifestOverviewEmptyState.tsx
|
|
903
|
+
import { Button as Button4 } from "react-aria-components";
|
|
904
|
+
import { jsx as jsx31, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
905
|
+
function ManifestOverviewEmptyState({ onCreate, canCreate }) {
|
|
906
|
+
return /* @__PURE__ */ jsxs21("div", { className: "flex items-center flex-col gap-5 py-16", children: [
|
|
907
|
+
/* @__PURE__ */ jsx31(
|
|
908
|
+
Card3D,
|
|
909
|
+
{
|
|
910
|
+
shouldTranslate: true,
|
|
911
|
+
onClick: canCreate ? onCreate : void 0,
|
|
912
|
+
className: "border-2 border-dotted bg-black/5 aspect-[3/4] rounded w-32 border-black"
|
|
913
|
+
}
|
|
914
|
+
),
|
|
915
|
+
/* @__PURE__ */ jsx31("div", { className: "font-bold text-lg", children: "Good to go!" }),
|
|
916
|
+
/* @__PURE__ */ jsx31("div", { className: "max-w-xl px-5", children: "Add a title and top level information for this manifest using the editing panel, and then add some canvases and content." }),
|
|
917
|
+
canCreate ? /* @__PURE__ */ jsx31(
|
|
918
|
+
Button4,
|
|
919
|
+
{
|
|
920
|
+
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",
|
|
921
|
+
onPress: onCreate,
|
|
922
|
+
children: "Start adding content"
|
|
923
|
+
}
|
|
924
|
+
) : null
|
|
925
|
+
] });
|
|
926
|
+
}
|
|
927
|
+
|
|
928
|
+
// src/SidebarTabs.tsx
|
|
929
|
+
import { useLayoutEffect as useLayoutEffect3, useMemo as useMemo2, useRef as useRef3, useState as useState3 } from "react";
|
|
930
|
+
import { Button as Button5, Menu, MenuItem, MenuTrigger, Popover, Tab as Tab2, TabList as TabList2, TabPanel as TabPanel2, Tabs as Tabs2 } from "react-aria-components";
|
|
931
|
+
import { jsx as jsx32, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
932
|
+
function SidebarTabs({ menu, menuId, selectedKey, onSelectionChange }) {
|
|
933
|
+
const ref = useRef3(null);
|
|
934
|
+
const [hidden, setHidden] = useState3(0);
|
|
935
|
+
const widths = useRef3([]);
|
|
936
|
+
const itemsRef = useRef3([]);
|
|
937
|
+
const selectedIndex = useMemo2(() => menu.findIndex((item) => item.id === selectedKey), [menu, selectedKey]);
|
|
938
|
+
useLayoutEffect3(() => {
|
|
939
|
+
const cb = () => {
|
|
940
|
+
if (widths.current.length === 0) {
|
|
941
|
+
widths.current = [];
|
|
942
|
+
for (const item of itemsRef.current) {
|
|
943
|
+
if (item) {
|
|
944
|
+
widths.current.push(item.getBoundingClientRect().width);
|
|
945
|
+
}
|
|
946
|
+
}
|
|
947
|
+
}
|
|
948
|
+
const fullWidth = widths.current.reduce((a, b) => a + b, 0);
|
|
949
|
+
if (fullWidth && ref.current) {
|
|
950
|
+
const el = ref.current;
|
|
951
|
+
const width = el.getBoundingClientRect().width - 20;
|
|
952
|
+
let hidden2 = 0;
|
|
953
|
+
let total = 0;
|
|
954
|
+
for (let i = widths.current.length - 1; i >= 0; i--) {
|
|
955
|
+
total += widths.current[i];
|
|
956
|
+
if (total > width) {
|
|
957
|
+
hidden2 = i + 1;
|
|
958
|
+
break;
|
|
959
|
+
}
|
|
960
|
+
}
|
|
961
|
+
setHidden(hidden2);
|
|
962
|
+
}
|
|
963
|
+
};
|
|
964
|
+
cb();
|
|
965
|
+
const interval = setInterval(cb, 500);
|
|
966
|
+
return () => {
|
|
967
|
+
clearInterval(interval);
|
|
968
|
+
};
|
|
969
|
+
}, []);
|
|
970
|
+
return /* @__PURE__ */ jsxs22(
|
|
971
|
+
Tabs2,
|
|
972
|
+
{
|
|
973
|
+
className: "w-full flex-1 overflow-hidden flex flex-col",
|
|
974
|
+
selectedKey,
|
|
975
|
+
onSelectionChange,
|
|
976
|
+
children: [
|
|
977
|
+
/* @__PURE__ */ jsxs22("div", { className: "flex items-center w-full tab-shadow", children: [
|
|
978
|
+
/* @__PURE__ */ jsx32(TabList2, { ref, className: "flex-1 overflow-hidden w-full flex text-sm whitespace-nowrap", children: menu.map((item, idx) => {
|
|
979
|
+
const isHidden = hidden >= menu.length - idx;
|
|
980
|
+
return /* @__PURE__ */ jsx32(
|
|
981
|
+
Tab2,
|
|
982
|
+
{
|
|
983
|
+
ref: (el) => itemsRef.current[idx] = el,
|
|
984
|
+
id: item.id,
|
|
985
|
+
className: (state) => cn(
|
|
986
|
+
//
|
|
987
|
+
"border-b-2 px-2 py-1 text-sm text-gray-400 select-none hover:text-black focus:ring-0 focus:outline-none",
|
|
988
|
+
state.isSelected && "border-me-primary-500 text-black",
|
|
989
|
+
state.isFocusVisible && "ring-0 bg-me-gray-100",
|
|
990
|
+
isHidden && "hidden"
|
|
991
|
+
),
|
|
992
|
+
children: item.label
|
|
993
|
+
},
|
|
994
|
+
item.id
|
|
995
|
+
);
|
|
996
|
+
}) }),
|
|
997
|
+
hidden > 0 && /* @__PURE__ */ jsxs22(MenuTrigger, { children: [
|
|
998
|
+
/* @__PURE__ */ jsx32(
|
|
999
|
+
Button5,
|
|
1000
|
+
{
|
|
1001
|
+
className: cn(
|
|
1002
|
+
"rounded bg-gray-100 px-1.5 py-1 mr-2 mb-1 text-me-primary-500 semibold uppercase text-[10px]",
|
|
1003
|
+
selectedIndex > hidden && "bg-me-primary-500 text-white rounded"
|
|
1004
|
+
),
|
|
1005
|
+
children: "MORE"
|
|
1006
|
+
}
|
|
1007
|
+
),
|
|
1008
|
+
/* @__PURE__ */ jsx32(Popover, { children: /* @__PURE__ */ jsx32(Menu, { className: "bg-white rounded shadow-lg flex flex-col gap-0.5 p-0.5 min-w-28", children: menu.map((item, idx) => {
|
|
1009
|
+
if (idx < menu.length - hidden)
|
|
1010
|
+
return null;
|
|
1011
|
+
return /* @__PURE__ */ jsx32(
|
|
1012
|
+
MenuItem,
|
|
1013
|
+
{
|
|
1014
|
+
className: (state) => cn(
|
|
1015
|
+
"hover:bg-me-gray-100 p-1 rounded-sm text-sm",
|
|
1016
|
+
selectedKey === item.id && "ring ring-me-primary-500"
|
|
1017
|
+
),
|
|
1018
|
+
onAction: () => onSelectionChange?.(item.id),
|
|
1019
|
+
children: item.label
|
|
1020
|
+
},
|
|
1021
|
+
item.id
|
|
1022
|
+
);
|
|
1023
|
+
}) }) })
|
|
1024
|
+
] })
|
|
1025
|
+
] }),
|
|
1026
|
+
menu.map((item) => /* @__PURE__ */ jsx32(TabPanel2, { id: item.id, className: "flex-1 overflow-y-auto h-full", children: item.renderComponent }, item.id))
|
|
1027
|
+
]
|
|
1028
|
+
},
|
|
1029
|
+
menuId
|
|
1030
|
+
);
|
|
1031
|
+
}
|
|
1032
|
+
|
|
1033
|
+
// src/MetadataContainer.tsx
|
|
1034
|
+
import { LocaleString as LocaleString3 } from "react-iiif-vault";
|
|
1035
|
+
import { jsx as jsx33, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
1036
|
+
function MetadataContainer({
|
|
1037
|
+
className: className2,
|
|
1038
|
+
label,
|
|
1039
|
+
children,
|
|
1040
|
+
...props
|
|
1041
|
+
}) {
|
|
1042
|
+
return /* @__PURE__ */ jsxs23(
|
|
1043
|
+
"div",
|
|
1044
|
+
{
|
|
1045
|
+
className: cn(
|
|
1046
|
+
"hover:ring ring-gray-200 focus-within:ring-me-primary-500 focus-within:ring p-2 rounded mb-2",
|
|
1047
|
+
className2
|
|
1048
|
+
),
|
|
1049
|
+
...props,
|
|
1050
|
+
children: [
|
|
1051
|
+
/* @__PURE__ */ jsx33(LocaleString3, { className: "text-lg font-bold text-[#333] mb-2", as: "h3", children: label }),
|
|
1052
|
+
children
|
|
1053
|
+
]
|
|
1054
|
+
}
|
|
1055
|
+
);
|
|
1056
|
+
}
|
|
1057
|
+
|
|
1058
|
+
// src/EmptyState.tsx
|
|
1059
|
+
import { jsx as jsx34 } from "react/jsx-runtime";
|
|
1060
|
+
function EmptyState(props) {
|
|
1061
|
+
return /* @__PURE__ */ jsx34(
|
|
1062
|
+
"div",
|
|
1063
|
+
{
|
|
1064
|
+
className: cn(
|
|
1065
|
+
"flex items-center justify-center text-gray-400 text-md",
|
|
1066
|
+
props.$noMargin ? "" : "m-4",
|
|
1067
|
+
props.$box ? "p-4 border border-gray-200 rounded" : ""
|
|
1068
|
+
),
|
|
1069
|
+
children: props.children
|
|
1070
|
+
}
|
|
1071
|
+
);
|
|
1072
|
+
}
|
|
1073
|
+
|
|
1074
|
+
// src/ManifestEditorLogo.tsx
|
|
1075
|
+
import { jsx as jsx35, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
1076
|
+
function ManifestEditorLogo(props) {
|
|
1077
|
+
return /* @__PURE__ */ jsx35(
|
|
1078
|
+
"svg",
|
|
1079
|
+
{
|
|
1080
|
+
width: "1em",
|
|
1081
|
+
height: "1em",
|
|
1082
|
+
viewBox: "0 0 206 27",
|
|
1083
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
1084
|
+
className: "me-logo h-[23px] w-[176px]",
|
|
1085
|
+
...props,
|
|
1086
|
+
children: /* @__PURE__ */ jsxs24("g", { fill: "none", children: [
|
|
1087
|
+
/* @__PURE__ */ jsx35(
|
|
1088
|
+
"path",
|
|
1089
|
+
{
|
|
1090
|
+
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",
|
|
1091
|
+
fill: "#000"
|
|
1092
|
+
}
|
|
1093
|
+
),
|
|
1094
|
+
/* @__PURE__ */ jsx35("path", { fill: "#E94581", className: "me-logo-1", d: "M0 13.343 13.343 0l13.343 13.343-13.343 13.343z" }),
|
|
1095
|
+
/* @__PURE__ */ jsx35("path", { fill: "#E94581", className: "me-logo-2", d: "M12.137 13.346 25.48.003l13.343 13.343L25.48 26.69z" }),
|
|
1096
|
+
/* @__PURE__ */ jsx35("path", { fill: "#C63E75", className: "me-logo-3", d: "m12.104 13.348 7.311-7.311 7.312 7.311-7.312 7.312z" })
|
|
1097
|
+
] })
|
|
1098
|
+
}
|
|
1099
|
+
);
|
|
1100
|
+
}
|
|
1101
|
+
|
|
1102
|
+
// src/Forms.tsx
|
|
1103
|
+
import { Label, Form as RAForm, Input, RadioGroup, Radio } from "react-aria-components";
|
|
1104
|
+
import { jsx as jsx36 } from "react/jsx-runtime";
|
|
1105
|
+
function MeLabel({ className: className2, ...props }) {
|
|
1106
|
+
return /* @__PURE__ */ jsx36(
|
|
1107
|
+
Label,
|
|
1108
|
+
{
|
|
1109
|
+
className: cn(
|
|
1110
|
+
//
|
|
1111
|
+
"font-semibold text-sm",
|
|
1112
|
+
className2
|
|
1113
|
+
),
|
|
1114
|
+
...props
|
|
1115
|
+
}
|
|
1116
|
+
);
|
|
1117
|
+
}
|
|
1118
|
+
function MeRadioGroup({ className: className2, ...props }) {
|
|
1119
|
+
return /* @__PURE__ */ jsx36(
|
|
1120
|
+
RadioGroup,
|
|
1121
|
+
{
|
|
1122
|
+
className: cn(
|
|
1123
|
+
//
|
|
1124
|
+
"",
|
|
1125
|
+
className2
|
|
1126
|
+
),
|
|
1127
|
+
...props
|
|
1128
|
+
}
|
|
1129
|
+
);
|
|
1130
|
+
}
|
|
1131
|
+
function MeRadio({ className: className2, ...props }) {
|
|
1132
|
+
return /* @__PURE__ */ jsx36(
|
|
1133
|
+
Radio,
|
|
1134
|
+
{
|
|
1135
|
+
className: (state) => cn(
|
|
1136
|
+
//
|
|
1137
|
+
"outline outline-me-primary-500 outline-offset-2 w-5 h-5 rounded-full bg-white transition-all border-[7px] border-gray-700 group-pressed:border-gray-800 outline-0",
|
|
1138
|
+
className2
|
|
1139
|
+
),
|
|
1140
|
+
...props
|
|
1141
|
+
}
|
|
1142
|
+
);
|
|
1143
|
+
}
|
|
1144
|
+
function MeForm({ className: className2, ...props }) {
|
|
1145
|
+
return /* @__PURE__ */ jsx36(
|
|
1146
|
+
RAForm,
|
|
1147
|
+
{
|
|
1148
|
+
className: cn(
|
|
1149
|
+
//
|
|
1150
|
+
"",
|
|
1151
|
+
className2
|
|
1152
|
+
),
|
|
1153
|
+
...props
|
|
1154
|
+
}
|
|
1155
|
+
);
|
|
1156
|
+
}
|
|
1157
|
+
function MeInput({ className: className2, ...props }) {
|
|
1158
|
+
return /* @__PURE__ */ jsx36(
|
|
1159
|
+
Input,
|
|
1160
|
+
{
|
|
1161
|
+
className: cn(
|
|
1162
|
+
//
|
|
1163
|
+
"p-2 bg-me-gray-100 border-b border-b-me-gray-500",
|
|
1164
|
+
"focus:ring-0 outline-0 focus:border-me-primary-500 focus:bg-[#ECEEF5]",
|
|
1165
|
+
className2
|
|
1166
|
+
),
|
|
1167
|
+
...props
|
|
1168
|
+
}
|
|
1169
|
+
);
|
|
1170
|
+
}
|
|
1171
|
+
function MeInputContainer({
|
|
1172
|
+
horizontal,
|
|
1173
|
+
className: className2,
|
|
1174
|
+
...props
|
|
1175
|
+
}) {
|
|
1176
|
+
return /* @__PURE__ */ jsx36(
|
|
1177
|
+
"div",
|
|
1178
|
+
{
|
|
1179
|
+
className: cn(
|
|
1180
|
+
//
|
|
1181
|
+
"flex flex-col gap-2",
|
|
1182
|
+
horizontal && "flex-row",
|
|
1183
|
+
className2
|
|
1184
|
+
),
|
|
1185
|
+
...props
|
|
1186
|
+
}
|
|
1187
|
+
);
|
|
1188
|
+
}
|
|
1189
|
+
var Form = {
|
|
1190
|
+
Input: MeInput,
|
|
1191
|
+
Form: MeForm,
|
|
1192
|
+
Label: MeLabel,
|
|
1193
|
+
InputContainer: MeInputContainer,
|
|
1194
|
+
RadioGroup: MeRadioGroup,
|
|
1195
|
+
Radio: MeRadio
|
|
1196
|
+
};
|
|
1197
|
+
|
|
1198
|
+
// src/icons/CreateCanvasIcon.tsx
|
|
1199
|
+
import { jsx as jsx37, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
1200
|
+
function CreateCanvasIcon() {
|
|
1201
|
+
return /* @__PURE__ */ jsxs25("svg", { xmlns: "http://www.w3.org/2000/svg", height: "24", viewBox: "0 0 24 24", width: "24", children: [
|
|
1202
|
+
/* @__PURE__ */ jsx37("path", { d: "M0 0h24v24H0V0z", fill: "none" }),
|
|
1203
|
+
/* @__PURE__ */ jsx37(
|
|
1204
|
+
"path",
|
|
1205
|
+
{
|
|
1206
|
+
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",
|
|
1207
|
+
fill: "currentColor"
|
|
1208
|
+
}
|
|
1209
|
+
)
|
|
1210
|
+
] });
|
|
1211
|
+
}
|
|
1212
|
+
|
|
1213
|
+
// src/icons/AddImageIcon.tsx
|
|
1214
|
+
import { jsx as jsx38 } from "react/jsx-runtime";
|
|
1215
|
+
var AddImageIcon = (props) => /* @__PURE__ */ jsx38("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", fill: "#5f6368", viewBox: "0 -960 960 960", ...props, children: /* @__PURE__ */ jsx38(
|
|
1216
|
+
"path",
|
|
1217
|
+
{
|
|
1218
|
+
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",
|
|
1219
|
+
fill: "currentColor"
|
|
1220
|
+
}
|
|
1221
|
+
) });
|
|
1222
|
+
|
|
1223
|
+
// src/icons/IIIFLogo.tsx
|
|
1224
|
+
import { jsx as jsx39, jsxs as jsxs26 } from "react/jsx-runtime";
|
|
1225
|
+
var IIIFLogo = ({ mono = true, ...props }) => /* @__PURE__ */ jsxs26(
|
|
1226
|
+
"svg",
|
|
1227
|
+
{
|
|
1228
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
1229
|
+
xmlSpace: "preserve",
|
|
1230
|
+
width: "1em",
|
|
1231
|
+
height: "1em",
|
|
1232
|
+
...props,
|
|
1233
|
+
viewBox: "0 0 493.36 441.333",
|
|
1234
|
+
children: [
|
|
1235
|
+
/* @__PURE__ */ jsx39(
|
|
1236
|
+
"path",
|
|
1237
|
+
{
|
|
1238
|
+
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",
|
|
1239
|
+
style: {
|
|
1240
|
+
fill: mono ? "currentColor" : "#2873ab",
|
|
1241
|
+
fillOpacity: 1,
|
|
1242
|
+
fillRule: "nonzero",
|
|
1243
|
+
stroke: "none"
|
|
1244
|
+
},
|
|
1245
|
+
transform: "matrix(.13333 0 0 -.13333 0 441.333)"
|
|
1246
|
+
}
|
|
1247
|
+
),
|
|
1248
|
+
/* @__PURE__ */ jsx39(
|
|
1249
|
+
"path",
|
|
1250
|
+
{
|
|
1251
|
+
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",
|
|
1252
|
+
style: {
|
|
1253
|
+
fill: mono ? "currentColor" : "#ed1d33",
|
|
1254
|
+
fillOpacity: 1,
|
|
1255
|
+
fillRule: "nonzero",
|
|
1256
|
+
stroke: "none"
|
|
1257
|
+
},
|
|
1258
|
+
transform: "matrix(.13333 0 0 -.13333 0 441.333)"
|
|
1259
|
+
}
|
|
1260
|
+
),
|
|
1261
|
+
/* @__PURE__ */ jsx39(
|
|
1262
|
+
"path",
|
|
1263
|
+
{
|
|
1264
|
+
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",
|
|
1265
|
+
style: {
|
|
1266
|
+
fill: mono ? "currentColor" : "#2873ab",
|
|
1267
|
+
fillOpacity: 1,
|
|
1268
|
+
fillRule: "nonzero",
|
|
1269
|
+
stroke: "none"
|
|
1270
|
+
},
|
|
1271
|
+
transform: "matrix(.13333 0 0 -.13333 0 441.333)"
|
|
1272
|
+
}
|
|
1273
|
+
),
|
|
1274
|
+
/* @__PURE__ */ jsx39(
|
|
1275
|
+
"path",
|
|
1276
|
+
{
|
|
1277
|
+
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",
|
|
1278
|
+
style: {
|
|
1279
|
+
fill: mono ? "currentColor" : "#ed1d33",
|
|
1280
|
+
fillOpacity: 1,
|
|
1281
|
+
fillRule: "nonzero",
|
|
1282
|
+
stroke: "none"
|
|
1283
|
+
},
|
|
1284
|
+
transform: "matrix(.13333 0 0 -.13333 0 441.333)"
|
|
1285
|
+
}
|
|
1286
|
+
)
|
|
1287
|
+
]
|
|
1288
|
+
}
|
|
1289
|
+
);
|
|
1290
|
+
|
|
1291
|
+
// src/icons/HTMLIcon.tsx
|
|
1292
|
+
import { jsx as jsx40 } from "react/jsx-runtime";
|
|
1293
|
+
var HTMLIcon = (props) => /* @__PURE__ */ jsx40("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", fill: "#5f6368", viewBox: "0 -960 960 960", ...props, children: /* @__PURE__ */ jsx40(
|
|
1294
|
+
"path",
|
|
1295
|
+
{
|
|
1296
|
+
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",
|
|
1297
|
+
fill: "currentColor"
|
|
1298
|
+
}
|
|
1299
|
+
) });
|
|
1300
|
+
|
|
1301
|
+
// src/icons/IIIFBrowserIcon.tsx
|
|
1302
|
+
import { jsx as jsx41 } from "react/jsx-runtime";
|
|
1303
|
+
var IIIFBrowserIcon = (props) => /* @__PURE__ */ jsx41("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", fill: "#5f6368", viewBox: "0 -960 960 960", ...props, children: /* @__PURE__ */ jsx41(
|
|
1304
|
+
"path",
|
|
1305
|
+
{
|
|
1306
|
+
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",
|
|
1307
|
+
fill: "currentColor"
|
|
1308
|
+
}
|
|
1309
|
+
) });
|
|
1310
|
+
|
|
1311
|
+
// src/icons/YouTubeIcon.tsx
|
|
1312
|
+
import { jsx as jsx42 } from "react/jsx-runtime";
|
|
1313
|
+
var YouTubeIcon = (props) => /* @__PURE__ */ jsx42("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", fill: "#5f6368", viewBox: "0 -960 960 960", ...props, children: /* @__PURE__ */ jsx42(
|
|
1314
|
+
"path",
|
|
1315
|
+
{
|
|
1316
|
+
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",
|
|
1317
|
+
fill: "currentColor"
|
|
1318
|
+
}
|
|
1319
|
+
) });
|
|
1320
|
+
|
|
1321
|
+
// src/icons/VideoIcon.tsx
|
|
1322
|
+
import { jsx as jsx43 } from "react/jsx-runtime";
|
|
1323
|
+
var VideoIcon = (props) => /* @__PURE__ */ jsx43("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", fill: "#5f6368", viewBox: "0 -960 960 960", ...props, children: /* @__PURE__ */ jsx43(
|
|
1324
|
+
"path",
|
|
1325
|
+
{
|
|
1326
|
+
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",
|
|
1327
|
+
fill: "currentColor"
|
|
1328
|
+
}
|
|
1329
|
+
) });
|
|
1330
|
+
|
|
1331
|
+
// src/icons/AudioIcon.tsx
|
|
1332
|
+
import { jsx as jsx44 } from "react/jsx-runtime";
|
|
1333
|
+
var AudioIcon = (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(
|
|
1334
|
+
"path",
|
|
1335
|
+
{
|
|
1336
|
+
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",
|
|
1337
|
+
fill: "currentColor"
|
|
1338
|
+
}
|
|
1339
|
+
) });
|
|
1340
|
+
|
|
1341
|
+
// src/icons/EmptyCanvasIcon.tsx
|
|
1342
|
+
import { jsx as jsx45 } from "react/jsx-runtime";
|
|
1343
|
+
var EmptyCanvasIcon = (props) => /* @__PURE__ */ jsx45("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", fill: "#5f6368", viewBox: "0 -960 960 960", ...props, children: /* @__PURE__ */ jsx45(
|
|
1344
|
+
"path",
|
|
1345
|
+
{
|
|
1346
|
+
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",
|
|
1347
|
+
fill: "currentColor"
|
|
1348
|
+
}
|
|
1349
|
+
) });
|
|
1350
|
+
|
|
1351
|
+
// src/icons/AddIcon.tsx
|
|
1352
|
+
import { jsx as jsx46, jsxs as jsxs27 } from "react/jsx-runtime";
|
|
1353
|
+
function AddIcon({
|
|
1354
|
+
className: className2,
|
|
1355
|
+
inline,
|
|
1356
|
+
height = 16,
|
|
1357
|
+
color = "black"
|
|
1358
|
+
}) {
|
|
1359
|
+
return /* @__PURE__ */ jsxs27(
|
|
1360
|
+
"svg",
|
|
1361
|
+
{
|
|
1362
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
1363
|
+
height: `${height}px`,
|
|
1364
|
+
viewBox: "0 0 24 24",
|
|
1365
|
+
width: "24px",
|
|
1366
|
+
fill: color,
|
|
1367
|
+
style: { verticalAlign: inline ? "bottom" : void 0 },
|
|
1368
|
+
className: className2,
|
|
1369
|
+
children: [
|
|
1370
|
+
/* @__PURE__ */ jsx46("path", { d: "M0 0h24v24H0z", fill: "none" }),
|
|
1371
|
+
/* @__PURE__ */ jsx46("path", { d: "M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z", fill: "currentColor" })
|
|
1372
|
+
]
|
|
1373
|
+
}
|
|
1374
|
+
);
|
|
1375
|
+
}
|
|
1376
|
+
|
|
1377
|
+
// src/hooks.ts
|
|
1378
|
+
import { useLayoutEffect as useLayoutEffect4, useState as useState4 } from "react";
|
|
1379
|
+
function useFastList(list, firstRender = 24) {
|
|
1380
|
+
const [isMounted, setIsMounted] = useState4(false);
|
|
1381
|
+
useLayoutEffect4(() => {
|
|
1382
|
+
if (list) {
|
|
1383
|
+
setTimeout(() => {
|
|
1384
|
+
setIsMounted(true);
|
|
1385
|
+
}, 0);
|
|
1386
|
+
}
|
|
1387
|
+
}, [list]);
|
|
1388
|
+
if (!list) {
|
|
1389
|
+
return [];
|
|
1390
|
+
}
|
|
1391
|
+
if (isMounted) {
|
|
1392
|
+
return list;
|
|
1393
|
+
}
|
|
1394
|
+
return list.slice(0, firstRender);
|
|
1395
|
+
}
|
|
1396
|
+
export {
|
|
1397
|
+
ActionButton,
|
|
1398
|
+
AddIcon,
|
|
1399
|
+
AddImageIcon,
|
|
1400
|
+
AtlasBanner,
|
|
1401
|
+
AudioIcon,
|
|
1402
|
+
CanvasThumbnailGridItem,
|
|
1403
|
+
Card3D,
|
|
1404
|
+
ConfirmSelectionButton,
|
|
1405
|
+
ControlButton,
|
|
1406
|
+
CreateCanvasIcon,
|
|
1407
|
+
CreatorGrid,
|
|
1408
|
+
DefaultTooltipContent,
|
|
1409
|
+
DownloadButton,
|
|
1410
|
+
DownloadIcon,
|
|
1411
|
+
EmptyCanvasIcon,
|
|
1412
|
+
EmptyState,
|
|
1413
|
+
Form,
|
|
1414
|
+
HTMLIcon,
|
|
1415
|
+
IIIFBrowserIcon,
|
|
1416
|
+
IIIFLogo,
|
|
1417
|
+
LazyThumbnail,
|
|
1418
|
+
ManifestEditorLogo,
|
|
1419
|
+
ManifestOverviewEmptyState,
|
|
1420
|
+
MetadataContainer,
|
|
1421
|
+
Modal,
|
|
1422
|
+
OpaqueControls,
|
|
1423
|
+
PanelSideMenu,
|
|
1424
|
+
Sidebar,
|
|
1425
|
+
SidebarContent,
|
|
1426
|
+
SidebarHeader,
|
|
1427
|
+
SidebarTabs,
|
|
1428
|
+
SvgControlBar,
|
|
1429
|
+
Tab,
|
|
1430
|
+
TabList,
|
|
1431
|
+
TabPanel,
|
|
1432
|
+
Tabs,
|
|
1433
|
+
ThumbnailGridContainer,
|
|
1434
|
+
Tooltip,
|
|
1435
|
+
TooltipContent,
|
|
1436
|
+
TooltipTrigger,
|
|
1437
|
+
VideoIcon,
|
|
1438
|
+
YouTubeIcon,
|
|
1439
|
+
createDownload,
|
|
1440
|
+
useFastList,
|
|
1441
|
+
useTooltip,
|
|
1442
|
+
useTooltipContext
|
|
1443
|
+
};
|