@particle-academy/react-fancy 5.57.0 → 5.59.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/CHANGELOG.md +48 -0
- package/dist/{PdfViewer.types-DyoUBa2g.d.cts → PdfViewer.types-BRtcZt-X.d.cts} +28 -2
- package/dist/{PdfViewer.types-BEk2Jq6p.d.ts → PdfViewer.types-sM52m3OI.d.ts} +28 -2
- package/dist/{chunk-MTTRPPHH.js → chunk-5PHPJL7Z.js} +3 -3
- package/dist/{chunk-MTTRPPHH.js.map → chunk-5PHPJL7Z.js.map} +1 -1
- package/dist/{chunk-7MDHCYEB.cjs → chunk-5QKQXM5V.cjs} +52 -5
- package/dist/chunk-5QKQXM5V.cjs.map +1 -0
- package/dist/{chunk-SLCR7A6W.cjs → chunk-AQ4DZT4Y.cjs} +4 -4
- package/dist/{chunk-SLCR7A6W.cjs.map → chunk-AQ4DZT4Y.cjs.map} +1 -1
- package/dist/{chunk-MORXQ5UM.js → chunk-CS2ZYMYP.js} +54 -7
- package/dist/chunk-CS2ZYMYP.js.map +1 -0
- package/dist/{chunk-WUG646R4.cjs → chunk-IB673TEG.cjs} +39 -5
- package/dist/chunk-IB673TEG.cjs.map +1 -0
- package/dist/{chunk-KUJ5XRBD.js → chunk-YUNOVQQJ.js} +39 -5
- package/dist/chunk-YUNOVQQJ.js.map +1 -0
- package/dist/{index-Bwrc9ktU.d.ts → index-BiyyxWtb.d.ts} +1 -1
- package/dist/{index-Bd4br4sF.d.cts → index-WG8UdfiE.d.cts} +1 -1
- package/dist/index.cjs +7 -7
- package/dist/index.d.cts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +3 -3
- package/dist/inputs.cjs +2 -2
- package/dist/inputs.d.cts +1 -1
- package/dist/inputs.d.ts +1 -1
- package/dist/inputs.js +1 -1
- package/dist/media-viewer.cjs +3 -3
- package/dist/media-viewer.d.cts +2 -2
- package/dist/media-viewer.d.ts +2 -2
- package/dist/media-viewer.js +2 -2
- package/dist/multi-switch.cjs +2 -2
- package/dist/multi-switch.d.cts +15 -3
- package/dist/multi-switch.d.ts +15 -3
- package/dist/multi-switch.js +1 -1
- package/dist/pdf-viewer.cjs +2 -2
- package/dist/pdf-viewer.d.cts +2 -2
- package/dist/pdf-viewer.d.ts +2 -2
- package/dist/pdf-viewer.js +1 -1
- package/dist/time-grid.d.cts +3 -2
- package/dist/time-grid.d.ts +3 -2
- package/package.json +1 -1
- package/dist/chunk-7MDHCYEB.cjs.map +0 -1
- package/dist/chunk-KUJ5XRBD.js.map +0 -1
- package/dist/chunk-MORXQ5UM.js.map +0 -1
- package/dist/chunk-WUG646R4.cjs.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { FauxClient } from './chunk-GVMWJ4NI.js';
|
|
2
2
|
import { useControllableState } from './chunk-EDYAXGUM.js';
|
|
3
3
|
import { cn } from './chunk-MMW2JGKZ.js';
|
|
4
|
-
import { forwardRef, useRef, useState,
|
|
5
|
-
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
|
+
import { forwardRef, useRef, useState, useCallback, useEffect, useLayoutEffect, useId } from 'react';
|
|
5
|
+
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
6
6
|
|
|
7
7
|
var ZOOM_STEP = 1.25;
|
|
8
8
|
var MIN_ZOOM = 0.25;
|
|
@@ -28,6 +28,8 @@ var PdfPages = forwardRef(
|
|
|
28
28
|
onZoomChange,
|
|
29
29
|
policy,
|
|
30
30
|
watermark,
|
|
31
|
+
onPageError,
|
|
32
|
+
renderPageError,
|
|
31
33
|
title,
|
|
32
34
|
className,
|
|
33
35
|
style
|
|
@@ -43,6 +45,17 @@ var PdfPages = forwardRef(
|
|
|
43
45
|
const scale = scaleBucket(zoom);
|
|
44
46
|
const scrollerRef = useRef(null);
|
|
45
47
|
const [ratios, setRatios] = useState({});
|
|
48
|
+
const [failed, setFailed] = useState({});
|
|
49
|
+
const [attempts, setAttempts] = useState({});
|
|
50
|
+
const retryPage = useCallback((n) => {
|
|
51
|
+
setFailed((prev) => {
|
|
52
|
+
if (!(n in prev)) return prev;
|
|
53
|
+
const next = { ...prev };
|
|
54
|
+
delete next[n];
|
|
55
|
+
return next;
|
|
56
|
+
});
|
|
57
|
+
setAttempts((prev) => ({ ...prev, [n]: (prev[n] ?? 0) + 1 }));
|
|
58
|
+
}, []);
|
|
46
59
|
const ratioOf = (n) => ratios[n] ?? pages.aspectRatio ?? 1 / Math.SQRT2;
|
|
47
60
|
const observable = typeof IntersectionObserver !== "undefined";
|
|
48
61
|
const [near, setNear] = useState(() => /* @__PURE__ */ new Set([page, page + 1]));
|
|
@@ -222,19 +235,48 @@ var PdfPages = forwardRef(
|
|
|
222
235
|
style: { padding: GAP, filter: obscured ? "blur(24px)" : void 0 },
|
|
223
236
|
children: /* @__PURE__ */ jsx("div", { className: "mx-auto flex flex-col", style: { width: `${zoom * 100}%`, gap: GAP }, children: Array.from({ length: count }, (_, i) => {
|
|
224
237
|
const n = i + 1;
|
|
238
|
+
const near2 = isNear(n);
|
|
239
|
+
const src = near2 ? pages.url(n, scale) : "";
|
|
240
|
+
const isFailed = near2 && failed[n] === src;
|
|
225
241
|
return /* @__PURE__ */ jsxs(
|
|
226
242
|
"div",
|
|
227
243
|
{
|
|
228
244
|
"data-react-fancy-pdf-viewer-page": "",
|
|
229
245
|
"data-page": n,
|
|
246
|
+
"data-state": isFailed ? "error" : void 0,
|
|
230
247
|
className: "relative w-full overflow-hidden bg-white shadow-sm",
|
|
231
248
|
style: { aspectRatio: String(ratioOf(n)) },
|
|
232
249
|
children: [
|
|
233
|
-
|
|
250
|
+
isFailed && /* @__PURE__ */ jsx(
|
|
251
|
+
"div",
|
|
252
|
+
{
|
|
253
|
+
"data-react-fancy-pdf-viewer-page-error": "",
|
|
254
|
+
role: "alert",
|
|
255
|
+
className: "absolute inset-0 flex flex-col items-center justify-center gap-2 bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] p-4 text-center text-sm text-[color:var(--fancy-text-subtle,var(--color-zinc-600))] dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))] dark:text-[color:var(--fancy-text-subtle-dark,var(--color-zinc-400))]",
|
|
256
|
+
children: renderPageError ? renderPageError({ page: n, scale, url: src, retry: () => retryPage(n) }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
257
|
+
/* @__PURE__ */ jsx("span", { children: `Page ${n} couldn't be shown.` }),
|
|
258
|
+
/* @__PURE__ */ jsx(
|
|
259
|
+
"button",
|
|
260
|
+
{
|
|
261
|
+
type: "button",
|
|
262
|
+
"data-react-fancy-pdf-viewer-page-retry": "",
|
|
263
|
+
onClick: () => retryPage(n),
|
|
264
|
+
className: "rounded-md border border-[color:var(--fancy-border-strong,var(--color-zinc-300))] bg-[color:var(--fancy-surface,var(--color-white))] px-2.5 py-1 text-xs font-medium text-[color:var(--fancy-text,var(--color-zinc-900))] hover:bg-[color:var(--fancy-surface-hover,var(--color-zinc-50))] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[color:var(--fancy-focus,var(--color-blue-500))]/50 dark:border-[color:var(--fancy-border-strong-dark,var(--color-zinc-700))] dark:bg-[color:var(--fancy-surface-dark,var(--color-zinc-900))] dark:text-[color:var(--fancy-text-dark,var(--color-zinc-100))] dark:hover:bg-[color:var(--fancy-surface-hover-dark,color-mix(in_oklab,var(--color-zinc-800)_50%,transparent))]",
|
|
265
|
+
children: "Retry"
|
|
266
|
+
}
|
|
267
|
+
)
|
|
268
|
+
] })
|
|
269
|
+
}
|
|
270
|
+
),
|
|
271
|
+
near2 && !isFailed && /* @__PURE__ */ jsx(
|
|
234
272
|
"img",
|
|
235
273
|
{
|
|
236
274
|
"data-react-fancy-pdf-viewer-image": "",
|
|
237
|
-
src
|
|
275
|
+
src,
|
|
276
|
+
onError: () => {
|
|
277
|
+
setFailed((prev) => prev[n] === src ? prev : { ...prev, [n]: src });
|
|
278
|
+
onPageError?.(n, { scale, url: src });
|
|
279
|
+
},
|
|
238
280
|
alt: `Page ${n}`,
|
|
239
281
|
decoding: "async",
|
|
240
282
|
draggable: download ? void 0 : false,
|
|
@@ -246,7 +288,8 @@ var PdfPages = forwardRef(
|
|
|
246
288
|
setRatios((prev) => prev[n] === r ? prev : { ...prev, [n]: r });
|
|
247
289
|
}
|
|
248
290
|
}
|
|
249
|
-
}
|
|
291
|
+
},
|
|
292
|
+
attempts[n] ?? 0
|
|
250
293
|
),
|
|
251
294
|
watermark?.text && /* @__PURE__ */ jsx(Watermark, { id: `${markId}-${n}`, ...watermark })
|
|
252
295
|
]
|
|
@@ -333,6 +376,8 @@ var PdfViewer = forwardRef(
|
|
|
333
376
|
onZoomChange,
|
|
334
377
|
policy,
|
|
335
378
|
watermark,
|
|
379
|
+
onPageError,
|
|
380
|
+
renderPageError,
|
|
336
381
|
title = "PDF document",
|
|
337
382
|
className,
|
|
338
383
|
style,
|
|
@@ -353,6 +398,8 @@ var PdfViewer = forwardRef(
|
|
|
353
398
|
onZoomChange,
|
|
354
399
|
policy,
|
|
355
400
|
watermark,
|
|
401
|
+
onPageError,
|
|
402
|
+
renderPageError,
|
|
356
403
|
title,
|
|
357
404
|
className: cn(frame && "rounded-none", className),
|
|
358
405
|
style
|
|
@@ -408,5 +455,5 @@ var PdfViewer = forwardRef(
|
|
|
408
455
|
PdfViewer.displayName = "PdfViewer";
|
|
409
456
|
|
|
410
457
|
export { PdfViewer };
|
|
411
|
-
//# sourceMappingURL=chunk-
|
|
412
|
-
//# sourceMappingURL=chunk-
|
|
458
|
+
//# sourceMappingURL=chunk-CS2ZYMYP.js.map
|
|
459
|
+
//# sourceMappingURL=chunk-CS2ZYMYP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/PdfViewer/PdfPages.tsx","../src/components/PdfViewer/PdfViewer.tsx"],"names":["near","forwardRef","jsx","jsxs"],"mappings":";;;;;;AAOA,IAAM,SAAA,GAAY,IAAA;AAClB,IAAM,QAAA,GAAW,IAAA;AACjB,IAAM,QAAA,GAAW,CAAA;AAEjB,IAAM,gBAAgB,CAAC,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,GAAG,CAAC,CAAA;AAEtC,IAAM,eAAA,GAAkB,IAAA;AAExB,IAAM,GAAA,GAAM,EAAA;AAEZ,IAAM,KAAA,GAAQ,CAAC,CAAA,EAAW,GAAA,EAAa,GAAA,KAAgB,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,CAAC,CAAC,CAAA;AAErF,SAAS,YAAY,IAAA,EAAsB;AACzC,EAAA,MAAM,GAAA,GAAM,OAAO,MAAA,KAAW,WAAA,IAAe,OAAO,gBAAA,GAAmB,CAAA,GAAI,OAAO,gBAAA,GAAmB,CAAA;AACrG,EAAA,MAAM,OAAO,IAAA,GAAO,GAAA;AACpB,EAAA,OAAO,aAAA,CAAc,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,IAAK,IAAA,GAAO,IAAI,CAAA,IAAK,aAAA,CAAc,aAAA,CAAc,MAAA,GAAS,CAAC,CAAA;AAC9F;AAOA,IAAM,eAAA,GACJ,gKAAA;AAuBK,IAAM,QAAA,GAAW,UAAA;AAAA,EACtB,CACE;AAAA,IACE,KAAA;AAAA,IACA,IAAA,EAAM,cAAA;AAAA,IACN,WAAA,GAAc,CAAA;AAAA,IACd,YAAA;AAAA,IACA,IAAA,EAAM,cAAA;AAAA,IACN,WAAA,GAAc,CAAA;AAAA,IACd,YAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAA;AAAA,IACA,WAAA;AAAA,IACA,eAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,KAEF,GAAA,KACG;AACH,IAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,KAAA,CAAM,KAAA,CAAM,KAAK,CAAC,CAAA;AACjD,IAAA,MAAM,QAAA,GAAW,QAAQ,QAAA,KAAa,KAAA;AACtC,IAAA,MAAM,KAAA,GAAQ,QAAQ,KAAA,KAAU,KAAA;AAChC,IAAA,MAAM,IAAA,GAAO,QAAQ,IAAA,KAAS,KAAA;AAC9B,IAAA,MAAM,KAAA,GAAQ,QAAQ,UAAA,KAAe,OAAA;AAErC,IAAA,MAAM,CAAC,OAAA,EAAS,OAAO,IAAI,oBAAA,CAAqB,cAAA,EAAgB,aAAa,YAAY,CAAA;AACzF,IAAA,MAAM,IAAA,GAAO,MAAM,OAAA,EAAS,CAAA,EAAG,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,CAAC,CAAA;AACjD,IAAA,MAAM,CAAC,IAAA,EAAM,OAAO,IAAI,oBAAA,CAAqB,cAAA,EAAgB,aAAa,YAAY,CAAA;AACtF,IAAA,MAAM,KAAA,GAAQ,YAAY,IAAI,CAAA;AAE9B,IAAA,MAAM,WAAA,GAAc,OAAuB,IAAI,CAAA;AAC/C,IAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,QAAA,CAAiC,EAAE,CAAA;AAG/D,IAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,QAAA,CAAiC,EAAE,CAAA;AAG/D,IAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,QAAA,CAAiC,EAAE,CAAA;AACnE,IAAA,MAAM,SAAA,GAAY,WAAA,CAAY,CAAC,CAAA,KAAc;AAC3C,MAAA,SAAA,CAAU,CAAC,IAAA,KAAS;AAClB,QAAA,IAAI,EAAE,CAAA,IAAK,IAAA,CAAA,EAAO,OAAO,IAAA;AACzB,QAAA,MAAM,IAAA,GAAO,EAAE,GAAG,IAAA,EAAK;AACvB,QAAA,OAAO,KAAK,CAAC,CAAA;AACb,QAAA,OAAO,IAAA;AAAA,MACT,CAAC,CAAA;AACD,MAAA,WAAA,CAAY,CAAC,IAAA,MAAU,EAAE,GAAG,IAAA,EAAM,CAAC,CAAC,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,IAAK,CAAA,IAAK,GAAE,CAAE,CAAA;AAAA,IAC9D,CAAA,EAAG,EAAE,CAAA;AACL,IAAA,MAAM,OAAA,GAAU,CAAC,CAAA,KAAc,MAAA,CAAO,CAAC,CAAA,IAAK,KAAA,CAAM,WAAA,IAAe,CAAA,GAAI,IAAA,CAAK,KAAA;AAK1E,IAAA,MAAM,UAAA,GAAa,OAAO,oBAAA,KAAyB,WAAA;AACnD,IAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,QAAA,CAAsB,sBAAM,IAAI,GAAA,CAAI,CAAC,IAAA,EAAM,IAAA,GAAO,CAAC,CAAC,CAAC,CAAA;AAC7E,IAAA,MAAM,MAAA,GAAS,CAAC,CAAA,KAAc,CAAC,cAAc,CAAA,KAAM,IAAA,IAAQ,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA;AAErE,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,MAAM,WAAW,WAAA,CAAY,OAAA;AAC7B,MAAA,IAAI,CAAC,UAAA,IAAc,CAAC,QAAA,EAAU;AAC9B,MAAA,MAAM,KAAK,IAAI,oBAAA;AAAA,QACb,CAAC,OAAA,KAAY;AACX,UAAA,OAAA,CAAQ,CAAC,IAAA,KAAS;AAChB,YAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,IAAI,CAAA;AACzB,YAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,cAAA,MAAM,CAAA,GAAI,MAAA,CAAQ,CAAA,CAAE,MAAA,CAAuB,QAAQ,IAAI,CAAA;AACvD,cAAA,IAAI,CAAA,CAAE,cAAA,EAAgB,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA;AAAA,mBAC3B,IAAA,CAAK,OAAO,CAAC,CAAA;AAAA,YACpB;AACA,YAAA,OAAO,IAAA;AAAA,UACT,CAAC,CAAA;AAAA,QACH,CAAA;AAAA;AAAA,QAEA,EAAE,IAAA,EAAM,QAAA,EAAU,UAAA,EAAY,UAAA;AAAW,OAC3C;AACA,MAAA,QAAA,CAAS,gBAAA,CAAiB,oCAAoC,CAAA,CAAE,OAAA,CAAQ,CAAC,EAAA,KAAO,EAAA,CAAG,OAAA,CAAQ,EAAE,CAAC,CAAA;AAC9F,MAAA,OAAO,MAAM,GAAG,UAAA,EAAW;AAAA,IAC7B,CAAA,EAAG,CAAC,UAAA,EAAY,KAAK,CAAC,CAAA;AAGtB,IAAA,MAAM,UAAA,GAAa,OAAsB,IAAI,CAAA;AAC7C,IAAA,MAAM,YAAA,GAAe,WAAA,CAAY,CAAC,CAAA,KAAc;AAC9C,MAAA,MAAM,WAAW,WAAA,CAAY,OAAA;AAC7B,MAAA,MAAM,IAAA,GAAO,QAAA,EAAU,aAAA,CAA2B,CAAA,8CAAA,EAAiD,CAAC,CAAA,EAAA,CAAI,CAAA;AACxG,MAAA,IAAI,QAAA,IAAY,MAAM,QAAA,CAAS,SAAA,GAAY,KAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,SAAA,GAAY,GAAG,CAAA;AAAA,IAC7E,CAAA,EAAG,EAAE,CAAA;AAEL,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,IAAI,UAAA,CAAW,YAAY,IAAA,EAAM;AAC/B,QAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AACrB,QAAA;AAAA,MACF;AACA,MAAA,YAAA,CAAa,IAAI,CAAA;AAAA,IACnB,CAAA,EAAG,CAAC,IAAA,EAAM,YAAY,CAAC,CAAA;AAGvB,IAAA,MAAM,SAAA,GAAY,OAAO,IAAI,CAAA;AAC7B,IAAA,eAAA,CAAgB,MAAM;AACpB,MAAA,IAAI,UAAU,OAAA,EAAS;AACrB,QAAA,SAAA,CAAU,OAAA,GAAU,KAAA;AACpB,QAAA;AAAA,MACF;AACA,MAAA,YAAA,CAAa,IAAI,CAAA;AAAA,IAGnB,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAKT,IAAA,MAAM,OAAA,GAAU,OAAO,IAAI,CAAA;AAC3B,IAAA,OAAA,CAAQ,OAAA,GAAU,IAAA;AAClB,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,MAAM,WAAW,WAAA,CAAY,OAAA;AAC7B,MAAA,IAAI,CAAC,QAAA,IAAY,OAAO,cAAA,KAAmB,WAAA,EAAa;AACxD,MAAA,IAAI,KAAA,GAAuB,IAAA;AAC3B,MAAA,MAAM,EAAA,GAAK,IAAI,cAAA,CAAe,MAAM;AAClC,QAAA,MAAM,IAAI,QAAA,CAAS,WAAA;AACnB,QAAA,IAAI,UAAU,IAAA,IAAQ,CAAA,KAAM,KAAA,EAAO,YAAA,CAAa,QAAQ,OAAO,CAAA;AAC/D,QAAA,KAAA,GAAQ,CAAA;AAAA,MACV,CAAC,CAAA;AACD,MAAA,EAAA,CAAG,QAAQ,QAAQ,CAAA;AACnB,MAAA,OAAO,MAAM,GAAG,UAAA,EAAW;AAAA,IAC7B,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AAEjB,IAAA,MAAM,KAAA,GAAQ,OAAO,CAAC,CAAA;AACtB,IAAA,MAAM,WAAW,MAAM;AACrB,MAAA,IAAI,KAAA,CAAM,OAAA,IAAW,OAAO,qBAAA,KAA0B,WAAA,EAAa;AACnE,MAAA,KAAA,CAAM,OAAA,GAAU,sBAAsB,MAAM;AAC1C,QAAA,KAAA,CAAM,OAAA,GAAU,CAAA;AAChB,QAAA,MAAM,WAAW,WAAA,CAAY,OAAA;AAC7B,QAAA,IAAI,CAAC,QAAA,EAAU;AAEf,QAAA,MAAM,OAAO,QAAA,CAAS,qBAAA,EAAsB,CAAE,GAAA,GAAM,SAAS,YAAA,GAAe,CAAA;AAC5E,QAAA,IAAI,OAAA,GAAU,CAAA;AACd,QAAA,QAAA,CAAS,gBAAA,CAA8B,oCAAoC,CAAA,CAAE,OAAA,CAAQ,CAAC,EAAA,KAAO;AAC3F,UAAA,IAAI,EAAA,CAAG,uBAAsB,CAAE,GAAA,IAAO,MAAM,OAAA,GAAU,MAAA,CAAO,EAAA,CAAG,OAAA,CAAQ,IAAI,CAAA;AAAA,QAC9E,CAAC,CAAA;AACD,QAAA,IAAI,YAAY,IAAA,EAAM;AACpB,UAAA,UAAA,CAAW,OAAA,GAAU,OAAA;AACrB,UAAA,OAAA,CAAQ,OAAO,CAAA;AAAA,QACjB;AAAA,MACF,CAAC,CAAA;AAAA,IACH,CAAA;AACA,IAAA,SAAA,CAAU,MAAM,MAAM;AACpB,MAAA,IAAI,KAAA,CAAM,OAAA,EAAS,oBAAA,CAAqB,KAAA,CAAM,OAAO,CAAA;AAAA,IACvD,CAAA,EAAG,EAAE,CAAA;AAEL,IAAA,MAAM,MAAA,GAAS,CAAC,CAAA,KAAc,OAAA,CAAQ,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,CAAA,GAAI,GAAG,CAAA,GAAI,GAAA,EAAK,QAAA,EAAU,QAAQ,CAAC,CAAA;AAC1F,IAAA,MAAM,UAAU,MAAM;AACpB,MAAA,MAAM,WAAW,WAAA,CAAY,OAAA;AAC7B,MAAA,IAAI,CAAC,QAAA,IAAY,QAAA,CAAS,WAAA,IAAe,MAAM,CAAA,EAAG;AAClD,MAAA,MAAM,mBAAmB,QAAA,CAAS,WAAA,GAAc,GAAA,GAAM,CAAA,IAAK,QAAQ,IAAI,CAAA;AACvE,MAAA,MAAA,CAAA,CAAQ,QAAA,CAAS,YAAA,GAAe,GAAA,GAAM,CAAA,IAAK,eAAe,CAAA;AAAA,IAC5D,CAAA;AAGA,IAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,SAAS,KAAK,CAAA;AAC1C,IAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAS,KAAK,CAAA;AAC5C,IAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAS,KAAK,CAAA;AAC5C,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,IAAI,CAAC,KAAA,IAAS,OAAO,MAAA,KAAW,WAAA,EAAa;AAC7C,MAAA,IAAI,KAAA;AACJ,MAAA,MAAM,YAAA,GAAe,MAAM,SAAA,CAAU,QAAA,CAAS,oBAAoB,QAAQ,CAAA;AAC1E,MAAA,MAAM,MAAA,GAAS,MAAM,UAAA,CAAW,IAAI,CAAA;AACpC,MAAA,MAAM,OAAA,GAAU,MAAM,UAAA,CAAW,KAAK,CAAA;AACtC,MAAA,MAAM,OAAA,GAAU,CAAC,CAAA,KAAgC;AAC/C,QAAA,IAAI,CAAA,CAAE,QAAQ,aAAA,EAAe;AAI7B,QAAA,UAAA,CAAW,IAAI,CAAA;AACf,QAAA,YAAA,CAAa,KAAK,CAAA;AAClB,QAAA,KAAA,GAAQ,UAAA,CAAW,MAAM,UAAA,CAAW,KAAK,GAAG,eAAe,CAAA;AAC3D,QAAA,KAAK,UAAU,SAAA,EAAW,SAAA,GAAY,EAAE,CAAA,CAAE,MAAM,MAAM;AAAA,QAAC,CAAC,CAAA;AAAA,MAC1D,CAAA;AACA,MAAA,QAAA,CAAS,gBAAA,CAAiB,oBAAoB,YAAY,CAAA;AAC1D,MAAA,MAAA,CAAO,gBAAA,CAAiB,QAAQ,MAAM,CAAA;AACtC,MAAA,MAAA,CAAO,gBAAA,CAAiB,SAAS,OAAO,CAAA;AACxC,MAAA,MAAA,CAAO,gBAAA,CAAiB,SAAS,OAAO,CAAA;AACxC,MAAA,OAAO,MAAM;AACX,QAAA,YAAA,CAAa,KAAK,CAAA;AAClB,QAAA,QAAA,CAAS,mBAAA,CAAoB,oBAAoB,YAAY,CAAA;AAC7D,QAAA,MAAA,CAAO,mBAAA,CAAoB,QAAQ,MAAM,CAAA;AACzC,QAAA,MAAA,CAAO,mBAAA,CAAoB,SAAS,OAAO,CAAA;AAC3C,QAAA,MAAA,CAAO,mBAAA,CAAoB,SAAS,OAAO,CAAA;AAAA,MAC7C,CAAA;AAAA,IACF,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AACV,IAAA,MAAM,QAAA,GAAW,KAAA,KAAU,MAAA,IAAU,OAAA,IAAW,OAAA,CAAA;AAEhD,IAAA,MAAM,SAAA,GAAY,CAAC,CAAA,KAAqC;AACtD,MAAA,IAAI,CAAC,KAAA,KAAU,CAAA,CAAE,OAAA,IAAW,CAAA,CAAE,OAAA,CAAA,IAAY,CAAA,CAAE,GAAA,CAAI,WAAA,EAAY,KAAM,GAAA,EAAK,CAAA,CAAE,cAAA,EAAe;AAAA,IAC1F,CAAA;AACA,IAAA,MAAM,KAAA,GAAQ,CAAC,CAAA,KAAsB,CAAA,CAAE,cAAA,EAAe;AAEtD,IAAA,MAAM,MAAA,GAAS,KAAA,EAAM,CAAE,OAAA,CAAQ,mBAAmB,EAAE,CAAA;AAEpD,IAAA,uBACE,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,6BAAA,EAA4B,EAAA;AAAA,QAC5B,WAAA,EAAU,OAAA;AAAA,QACV,oBAAA,EAAoB,QAAQ,MAAA,GAAY,MAAA;AAAA,QACxC,eAAA,EAAe,OAAO,QAAQ,CAAA;AAAA,QAC9B,YAAA,EAAY,KAAA;AAAA,QACZ,IAAA,EAAK,UAAA;AAAA,QACL,SAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,4GAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,KAAA,EAAO,OAAO,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,UAAA,EAAY,MAAA,EAAQ,gBAAA,EAAkB,MAAA,EAAO;AAAA,QAE9E,QAAA,EAAA;AAAA,UAAA,CAAC,KAAA,oBAAS,GAAA,CAAC,OAAA,EAAA,EAAO,QAAA,EAAA,eAAA,EAAgB,CAAA;AAAA,0BAEnC,IAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,qCAAA,EAAoC,EAAA;AAAA,cACpC,SAAA,EAAU,qVAAA;AAAA,cAEV,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,cAAW,IAAA,EAAK,MAAA,EAAO,OAAM,eAAA,EAAgB,QAAA,EAAU,QAAQ,CAAA,EAAG,OAAA,EAAS,MAAM,OAAA,CAAQ,OAAO,CAAC,CAAA,EAChG,8BAAC,OAAA,EAAA,EAAQ,GAAA,EAAI,MAAK,CAAA,EACpB,CAAA;AAAA,qCACC,MAAA,EAAA,EAAK,wCAAA,EAAuC,IAAG,SAAA,EAAU,yCAAA,EAA0C,aAAU,QAAA,EAC3G,QAAA,EAAA;AAAA,kBAAA,IAAA;AAAA,kBAAK,KAAA;AAAA,kBAAI;AAAA,iBAAA,EACZ,CAAA;AAAA,oCACC,UAAA,EAAA,EAAW,IAAA,EAAK,QAAO,KAAA,EAAM,WAAA,EAAY,UAAU,IAAA,IAAQ,KAAA,EAAO,SAAS,MAAM,OAAA,CAAQ,OAAO,CAAC,CAAA,EAChG,8BAAC,OAAA,EAAA,EAAQ,GAAA,EAAI,QAAO,CAAA,EACtB,CAAA;AAAA,gCACA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4CAAA,EAA6C,eAAY,MAAA,EAAO,CAAA;AAAA,gCAChF,GAAA,CAAC,cAAW,IAAA,EAAK,UAAA,EAAW,OAAM,UAAA,EAAW,QAAA,EAAU,QAAQ,QAAA,EAAU,OAAA,EAAS,MAAM,MAAA,CAAO,IAAA,GAAO,SAAS,CAAA,EAC7G,QAAA,kBAAA,GAAA,CAAC,UAAK,aAAA,EAAY,MAAA,EAAO,oBAAC,CAAA,EAC5B,CAAA;AAAA,gCACA,IAAA,CAAC,UAAA,EAAA,EAAW,IAAA,EAAK,YAAA,EAAa,KAAA,EAAM,YAAA,EAAa,IAAA,EAAI,IAAA,EAAC,OAAA,EAAS,MAAM,MAAA,CAAO,CAAC,CAAA,EAC1E,QAAA,EAAA;AAAA,kBAAA,IAAA,CAAK,KAAA,CAAM,OAAO,GAAG,CAAA;AAAA,kBAAE;AAAA,iBAAA,EAC1B,CAAA;AAAA,gCACA,GAAA,CAAC,cAAW,IAAA,EAAK,SAAA,EAAU,OAAM,SAAA,EAAU,QAAA,EAAU,QAAQ,QAAA,EAAU,OAAA,EAAS,MAAM,MAAA,CAAO,IAAA,GAAO,SAAS,CAAA,EAC3G,QAAA,kBAAA,GAAA,CAAC,UAAK,aAAA,EAAY,MAAA,EAAO,eAAC,CAAA,EAC5B,CAAA;AAAA,gCACA,GAAA,CAAC,UAAA,EAAA,EAAW,IAAA,EAAK,WAAA,EAAY,KAAA,EAAM,WAAA,EAAY,IAAA,EAAI,IAAA,EAAC,OAAA,EAAS,MAAM,MAAA,CAAO,CAAC,GAAG,QAAA,EAAA,OAAA,EAE9E,CAAA;AAAA,gCACA,GAAA,CAAC,UAAA,EAAA,EAAW,IAAA,EAAK,UAAA,EAAW,KAAA,EAAM,YAAW,IAAA,EAAI,IAAA,EAAC,OAAA,EAAS,OAAA,EAAS,QAAA,EAAA,MAAA,EAEpE;AAAA;AAAA;AAAA,WACF;AAAA,0BAEA,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,GAAA,EAAK,WAAA;AAAA,cACL,mCAAA,EAAkC,EAAA;AAAA,cAClC,QAAA,EAAU,CAAA;AAAA,cACV,QAAA;AAAA,cACA,aAAA,EAAe,WAAW,MAAA,GAAY,KAAA;AAAA,cACtC,WAAA,EAAa,WAAW,MAAA,GAAY,KAAA;AAAA,cACpC,SAAA,EAAU,qFAAA;AAAA,cACV,OAAO,EAAE,OAAA,EAAS,KAAK,MAAA,EAAQ,QAAA,GAAW,eAAe,MAAA,EAAU;AAAA,cAEnE,QAAA,kBAAA,GAAA,CAAC,SAAI,SAAA,EAAU,uBAAA,EAAwB,OAAO,EAAE,KAAA,EAAO,CAAA,EAAG,IAAA,GAAO,GAAG,CAAA,CAAA,CAAA,EAAK,KAAK,GAAA,EAAI,EAC/E,gBAAM,IAAA,CAAK,EAAE,QAAQ,KAAA,EAAM,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM;AACvC,gBAAA,MAAM,IAAI,CAAA,GAAI,CAAA;AACd,gBAAA,MAAMA,KAAAA,GAAO,OAAO,CAAC,CAAA;AACrB,gBAAA,MAAM,MAAMA,KAAAA,GAAO,KAAA,CAAM,GAAA,CAAI,CAAA,EAAG,KAAK,CAAA,GAAI,EAAA;AACzC,gBAAA,MAAM,QAAA,GAAWA,KAAAA,IAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,GAAA;AACvC,gBAAA,uBACE,IAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBAEC,kCAAA,EAAiC,EAAA;AAAA,oBACjC,WAAA,EAAW,CAAA;AAAA,oBACX,YAAA,EAAY,WAAW,OAAA,GAAU,MAAA;AAAA,oBACjC,SAAA,EAAU,oDAAA;AAAA,oBACV,OAAO,EAAE,WAAA,EAAa,OAAO,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAE;AAAA,oBAExC,QAAA,EAAA;AAAA,sBAAA,QAAA,oBACC,GAAA;AAAA,wBAAC,KAAA;AAAA,wBAAA;AAAA,0BACC,wCAAA,EAAuC,EAAA;AAAA,0BACvC,IAAA,EAAK,OAAA;AAAA,0BACL,SAAA,EAAU,8VAAA;AAAA,0BAET,QAAA,EAAA,eAAA,GACC,eAAA,CAAgB,EAAE,IAAA,EAAM,GAAG,KAAA,EAAO,GAAA,EAAK,GAAA,EAAK,KAAA,EAAO,MAAM,SAAA,CAAU,CAAC,CAAA,EAAG,oBAEvE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,4CAAA,GAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,CAAA,KAAA,EAAQ,CAAC,CAAA,mBAAA,CAAA,EAAsB,CAAA;AAAA,4CACtC,GAAA;AAAA,8BAAC,QAAA;AAAA,8BAAA;AAAA,gCACC,IAAA,EAAK,QAAA;AAAA,gCACL,wCAAA,EAAuC,EAAA;AAAA,gCACvC,OAAA,EAAS,MAAM,SAAA,CAAU,CAAC,CAAA;AAAA,gCAC1B,SAAA,EAAU,4sBAAA;AAAA,gCACX,QAAA,EAAA;AAAA;AAAA;AAED,2BAAA,EACF;AAAA;AAAA,uBAEJ;AAAA,sBAEDA,KAAAA,IAAQ,CAAC,QAAA,oBACR,GAAA;AAAA,wBAAC,KAAA;AAAA,wBAAA;AAAA,0BAEC,mCAAA,EAAkC,EAAA;AAAA,0BAClC,GAAA;AAAA,0BACA,SAAS,MAAM;AACb,4BAAA,SAAA,CAAU,CAAC,IAAA,KAAU,IAAA,CAAK,CAAC,MAAM,GAAA,GAAM,IAAA,GAAO,EAAE,GAAG,IAAA,EAAM,CAAC,CAAC,GAAG,KAAM,CAAA;AACpE,4BAAA,WAAA,GAAc,CAAA,EAAG,EAAE,KAAA,EAAO,GAAA,EAAK,KAAK,CAAA;AAAA,0BACtC,CAAA;AAAA,0BACA,GAAA,EAAK,QAAQ,CAAC,CAAA,CAAA;AAAA,0BACd,QAAA,EAAS,OAAA;AAAA,0BACT,SAAA,EAAW,WAAW,MAAA,GAAY,KAAA;AAAA,0BAClC,SAAA,EAAU,qBAAA;AAAA,0BACV,MAAA,EAAQ,CAAC,CAAA,KAAM;AACb,4BAAA,MAAM,MAAM,CAAA,CAAE,aAAA;AACd,4BAAA,IAAI,GAAA,CAAI,YAAA,GAAe,CAAA,IAAK,GAAA,CAAI,gBAAgB,CAAA,EAAG;AACjD,8BAAA,MAAM,CAAA,GAAI,GAAA,CAAI,YAAA,GAAe,GAAA,CAAI,aAAA;AACjC,8BAAA,SAAA,CAAU,CAAC,IAAA,KAAU,IAAA,CAAK,CAAC,MAAM,CAAA,GAAI,IAAA,GAAO,EAAE,GAAG,IAAA,EAAM,CAAC,CAAC,GAAG,GAAI,CAAA;AAAA,4BAClE;AAAA,0BACF;AAAA,yBAAA;AAAA,wBAjBK,QAAA,CAAS,CAAC,CAAA,IAAK;AAAA,uBAkBtB;AAAA,sBAED,SAAA,EAAW,IAAA,oBAAQ,GAAA,CAAC,SAAA,EAAA,EAAU,EAAA,EAAI,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,EAAK,GAAG,SAAA,EAAW;AAAA;AAAA,mBAAA;AAAA,kBApD/D;AAAA,iBAqDP;AAAA,cAEJ,CAAC,CAAA,EACH;AAAA;AAAA;AACF;AAAA;AAAA,KACF;AAAA,EAEJ;AACF,CAAA;AAEA,QAAA,CAAS,WAAA,GAAc,UAAA;AAGvB,SAAS,SAAA,CAAU,EAAE,EAAA,EAAI,IAAA,EAAM,OAAA,GAAU,MAAM,KAAA,GAAQ,GAAA,EAAK,OAAA,GAAU,CAAA,EAAE,EAAwC;AAC9G,EAAA,MAAM,QAAA,GAAW,EAAA;AACjB,EAAA,MAAM,GAAA,GAAM,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,KAAK,OAAO,CAAA;AACtC,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,MAAA,GAAS,QAAA,GAAW,IAAA,GAAO,GAAA;AAC1C,EAAA,MAAM,IAAI,QAAA,GAAW,GAAA;AACrB,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,uCAAA,EAAsC,EAAA;AAAA,MACtC,aAAA,EAAY,MAAA;AAAA,MACZ,SAAA,EAAU,4CAAA;AAAA,MACV,KAAA,EAAO,EAAE,aAAA,EAAe,MAAA,EAAO;AAAA,MAE/B,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,MAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,SAAA,EAAA,EAAQ,EAAA,EAAQ,KAAA,EAAO,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAG,YAAA,EAAa,gBAAA,EAAiB,gBAAA,EAAkB,CAAA,OAAA,EAAU,KAAK,CAAA,CAAA,CAAA,EACnG,QAAA,kBAAA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YAAK,GAAG,GAAA,GAAM,CAAA;AAAA,YAAG,GAAG,CAAA,GAAI,CAAA;AAAA,YAAG,QAAA;AAAA,YAAoB,UAAA,EAAW,sCAAA;AAAA,YAAuC,WAAA,EAAa,KAAA,CAAM,OAAA,EAAS,CAAA,EAAG,CAAC,CAAA;AAAA,YAEhI,KAAA,EAAO,EAAE,IAAA,EAAM,0CAAA,EAA2C;AAAA,YAEzD,QAAA,EAAA;AAAA;AAAA,WAEL,CAAA,EACF,CAAA;AAAA,wBACA,GAAA,CAAC,UAAK,KAAA,EAAM,MAAA,EAAO,QAAO,MAAA,EAAO,IAAA,EAAM,CAAA,KAAA,EAAQ,EAAE,CAAA,CAAA,CAAA,EAAK;AAAA;AAAA;AAAA,GACxD;AAEJ;AAEA,SAAS,UAAA,CAAW;AAAA,EAClB,IAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAOG;AACD,EAAA,uBACE,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACJ,GAAG,EAAE,CAAC,+BAA+B,IAAI,CAAA,CAAE,GAAG,EAAA,EAAG;AAAA,MAClD,YAAA,EAAY,KAAA;AAAA,MACZ,KAAA,EAAO,KAAA;AAAA,MACP,QAAA;AAAA,MACA,OAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,mIAAA;AAAA,QACA,wKAAA;AAAA,QACA,OAAO,wBAAA,GAA2B;AAAA,OACpC;AAAA,MAEC;AAAA;AAAA,GACH;AAEJ;AAEA,SAAS,OAAA,CAAQ,EAAE,GAAA,EAAI,EAA2B;AAChD,EAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,GAAA,EAAI,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,aAAA,EAAY,MAAA,EACzJ,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAG,GAAA,KAAQ,IAAA,GAAO,gBAAA,GAAmB,cAAA,EAAgB,CAAA,EAC7D,CAAA;AAEJ;ACxaO,IAAM,SAAA,GAAYC,UAAAA;AAAA,EACvB,CACE;AAAA,IACE,GAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,IAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAA;AAAA,IACA,WAAA;AAAA,IACA,eAAA;AAAA,IACA,KAAA,GAAQ,cAAA;AAAA,IACR,SAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA,GAAQ,KAAA;AAAA,IACR;AAAA,KAEF,GAAA,KACG;AACH,IAAA,IAAI,KAAA,EAAO;AAGT,MAAA,MAAM,6BACJC,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,GAAA;AAAA,UACA,KAAA;AAAA,UACA,IAAA;AAAA,UACA,WAAA;AAAA,UACA,YAAA;AAAA,UACA,IAAA;AAAA,UACA,WAAA;AAAA,UACA,YAAA;AAAA,UACA,MAAA;AAAA,UACA,SAAA;AAAA,UACA,WAAA;AAAA,UACA,eAAA;AAAA,UACA,KAAA;AAAA,UACA,SAAA,EAAW,EAAA,CAAG,KAAA,IAAS,cAAA,EAAgB,SAAS,CAAA;AAAA,UAChD;AAAA;AAAA,OACF;AAEF,MAAA,IAAI,CAAC,OAAO,OAAO,UAAA;AAGnB,MAAA,uBACEA,GAAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,SAAA,EAAU,KAAK,KAAA,EAAO,QAAA,EAAU,EAAE,IAAA,EAAM,OAAM,EAAG,IAAA,EAAI,IAAA,EAAE,GAAG,YAC3E,QAAA,EAAA,UAAA,EACH,CAAA;AAAA,IAEJ;AAEA,IAAA,MAAM,yBACJA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,6BAAA,EAA4B,EAAA;AAAA,QAC5B,SAAA,EAAW,EAAA;AAAA,UACT,8FAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,KAAA;AAAA,QAEA,QAAA,kBAAAC,KAAC,QAAA,EAAA,EAAO,IAAA,EAAM,KAAK,IAAA,EAAK,iBAAA,EAAkB,WAAU,eAAA,EAClD,QAAA,EAAA;AAAA,0BAAAD,GAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,GAAA;AAAA,cACA,KAAA;AAAA,cACA,SAAA,EAAU;AAAA;AAAA,WACZ;AAAA,0BACAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gNAAA,EACb,QAAA,EAAA;AAAA,4BAAAD,GAAAA,CAAC,UAAK,QAAA,EAAA,4CAAA,EAA+C,CAAA;AAAA,4BACrDA,GAAAA;AAAA,cAAC,GAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAM,GAAA;AAAA,gBACN,QAAA,EAAQ,IAAA;AAAA,gBACR,SAAA,EAAU,8DAAA;AAAA,gBACX,QAAA,EAAA;AAAA;AAAA;AAED,WAAA,EACF;AAAA,SAAA,EACF;AAAA;AAAA,KACF;AAGF,IAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AAMnB,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAKEA,GAAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,SAAA,EAAU,KAAK,KAAA,EAAO,QAAA,EAAU,EAAE,IAAA,EAAM,OAAM,EAAG,IAAA,EAAI,IAAA,EAAE,GAAG,YAC3E,QAAA,EAAA,MAAA,EACH;AAAA;AAAA,EAEJ;AACF;AAEA,SAAA,CAAU,WAAA,GAAc,WAAA","file":"chunk-CS2ZYMYP.js","sourcesContent":["import { forwardRef, useCallback, useEffect, useId, useLayoutEffect, useRef, useState } from \"react\";\nimport type { CSSProperties, KeyboardEvent, ReactNode, SyntheticEvent } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { useControllableState } from \"../../hooks/use-controllable-state\";\nimport type { PdfPageErrorContext, PdfPageSource, PdfViewerPolicy, PdfViewerWatermark } from \"./PdfViewer.types\";\n\n/** One click of the zoom bar. Matches `FauxClient` and `ImageViewer`. */\nconst ZOOM_STEP = 1.25;\nconst MIN_ZOOM = 0.25;\nconst MAX_ZOOM = 4;\n/** The resolutions a page is requested at, so zooming refetches rarely. */\nconst SCALE_BUCKETS = [1, 1.5, 2, 3, 4];\n/** How long PrintScreen keeps the pages obscured. */\nconst PRINT_SCREEN_MS = 1500;\n/** Gap around and between pages, px. */\nconst GAP = 16;\n\nconst clamp = (n: number, min: number, max: number) => Math.min(max, Math.max(min, n));\n\nfunction scaleBucket(zoom: number): number {\n const dpr = typeof window !== \"undefined\" && window.devicePixelRatio > 0 ? window.devicePixelRatio : 1;\n const want = zoom * dpr;\n return SCALE_BUCKETS.find((b) => b >= want - 1e-9) ?? SCALE_BUCKETS[SCALE_BUCKETS.length - 1];\n}\n\n/*\n * Print is blanked from CSS, because a page can print without our key handler\n * ever seeing it (the browser menu, window.print()). `*` as well as the root, so\n * no descendant can set itself visible again.\n */\nconst PRINT_BLOCK_CSS =\n '@media print{[data-react-fancy-pdf-viewer][data-print-blocked=\"true\"],[data-react-fancy-pdf-viewer][data-print-blocked=\"true\"] *{visibility:hidden!important}}';\n\nexport interface PdfPagesProps {\n pages: PdfPageSource;\n page?: number;\n defaultPage?: number;\n onPageChange?: (page: number) => void;\n zoom?: number;\n defaultZoom?: number;\n onZoomChange?: (zoom: number) => void;\n policy?: PdfViewerPolicy;\n watermark?: PdfViewerWatermark;\n onPageError?: (page: number, info: { scale: number; url: string }) => void;\n renderPageError?: (ctx: PdfPageErrorContext) => ReactNode;\n title: string;\n className?: string;\n style?: CSSProperties;\n}\n\n/**\n * Page-image mode of `PdfViewer`: images the app rendered, shown under a policy.\n * It never sees the PDF, so it has nothing to search and nothing to download.\n */\nexport const PdfPages = forwardRef<HTMLDivElement, PdfPagesProps>(\n (\n {\n pages,\n page: controlledPage,\n defaultPage = 1,\n onPageChange,\n zoom: controlledZoom,\n defaultZoom = 1,\n onZoomChange,\n policy,\n watermark,\n onPageError,\n renderPageError,\n title,\n className,\n style,\n },\n ref,\n ) => {\n const count = Math.max(0, Math.floor(pages.count));\n const download = policy?.download !== false;\n const print = policy?.print !== false;\n const copy = policy?.copy !== false;\n const deter = policy?.screenshot === \"deter\";\n\n const [rawPage, setPage] = useControllableState(controlledPage, defaultPage, onPageChange);\n const page = clamp(rawPage, 1, Math.max(1, count));\n const [zoom, setZoom] = useControllableState(controlledZoom, defaultZoom, onZoomChange);\n const scale = scaleBucket(zoom);\n\n const scrollerRef = useRef<HTMLDivElement>(null);\n const [ratios, setRatios] = useState<Record<number, number>>({});\n // Per page: the URL whose image failed. Keyed on the URL, so a new one (a\n // sharper zoom bucket, a refreshed signature) tries again by itself.\n const [failed, setFailed] = useState<Record<number, string>>({});\n // Per page: bumped by Retry to remount the <img> on the SAME url. The url\n // is never altered, so a signed URL stays valid.\n const [attempts, setAttempts] = useState<Record<number, number>>({});\n const retryPage = useCallback((n: number) => {\n setFailed((prev) => {\n if (!(n in prev)) return prev;\n const next = { ...prev };\n delete next[n];\n return next;\n });\n setAttempts((prev) => ({ ...prev, [n]: (prev[n] ?? 0) + 1 }));\n }, []);\n const ratioOf = (n: number) => ratios[n] ?? pages.aspectRatio ?? 1 / Math.SQRT2;\n\n // ---- Which pages have an image: those near the viewport ---------------\n // Without IntersectionObserver there is no way to know what is near, so\n // every page renders (SSR markup, very old browsers).\n const observable = typeof IntersectionObserver !== \"undefined\";\n const [near, setNear] = useState<Set<number>>(() => new Set([page, page + 1]));\n const isNear = (n: number) => !observable || n === page || near.has(n);\n\n useEffect(() => {\n const scroller = scrollerRef.current;\n if (!observable || !scroller) return;\n const io = new IntersectionObserver(\n (entries) => {\n setNear((prev) => {\n const next = new Set(prev);\n for (const e of entries) {\n const n = Number((e.target as HTMLElement).dataset.page);\n if (e.isIntersecting) next.add(n);\n else next.delete(n);\n }\n return next;\n });\n },\n // A viewport's worth above and below, so a page is there before it scrolls in.\n { root: scroller, rootMargin: \"100% 0px\" },\n );\n scroller.querySelectorAll(\"[data-react-fancy-pdf-viewer-page]\").forEach((el) => io.observe(el));\n return () => io.disconnect();\n }, [observable, count]);\n\n // ---- The current page follows scrolling; a set page scrolls to it ------\n const fromScroll = useRef<number | null>(null);\n const scrollToPage = useCallback((n: number) => {\n const scroller = scrollerRef.current;\n const slot = scroller?.querySelector<HTMLElement>(`[data-react-fancy-pdf-viewer-page][data-page=\"${n}\"]`);\n if (scroller && slot) scroller.scrollTop = Math.max(0, slot.offsetTop - GAP);\n }, []);\n\n useEffect(() => {\n if (fromScroll.current === page) {\n fromScroll.current = null;\n return;\n }\n scrollToPage(page);\n }, [page, scrollToPage]);\n\n // Zooming changes every page's height: keep the current page in place.\n const firstZoom = useRef(true);\n useLayoutEffect(() => {\n if (firstZoom.current) {\n firstZoom.current = false;\n return;\n }\n scrollToPage(page);\n // Only on zoom; the page effect handles page changes.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [zoom]);\n\n // A width change (full screen, a resized panel) re-flows every page's\n // height, so the scroll offset no longer points at the same page: put the\n // current one back.\n const pageRef = useRef(page);\n pageRef.current = page;\n useEffect(() => {\n const scroller = scrollerRef.current;\n if (!scroller || typeof ResizeObserver === \"undefined\") return;\n let width: number | null = null;\n const ro = new ResizeObserver(() => {\n const w = scroller.clientWidth;\n if (width !== null && w !== width) scrollToPage(pageRef.current);\n width = w;\n });\n ro.observe(scroller);\n return () => ro.disconnect();\n }, [scrollToPage]);\n\n const frame = useRef(0);\n const onScroll = () => {\n if (frame.current || typeof requestAnimationFrame === \"undefined\") return;\n frame.current = requestAnimationFrame(() => {\n frame.current = 0;\n const scroller = scrollerRef.current;\n if (!scroller) return;\n // The page under a line a third of the way down the viewport.\n const line = scroller.getBoundingClientRect().top + scroller.clientHeight / 3;\n let current = 1;\n scroller.querySelectorAll<HTMLElement>(\"[data-react-fancy-pdf-viewer-page]\").forEach((el) => {\n if (el.getBoundingClientRect().top <= line) current = Number(el.dataset.page);\n });\n if (current !== page) {\n fromScroll.current = current;\n setPage(current);\n }\n });\n };\n useEffect(() => () => {\n if (frame.current) cancelAnimationFrame(frame.current);\n }, []);\n\n const zoomTo = (z: number) => setZoom(clamp(Math.round(z * 100) / 100, MIN_ZOOM, MAX_ZOOM));\n const fitPage = () => {\n const scroller = scrollerRef.current;\n if (!scroller || scroller.clientWidth <= GAP * 2) return;\n const pageHeightAtFit = (scroller.clientWidth - GAP * 2) / ratioOf(page);\n zoomTo((scroller.clientHeight - GAP * 2) / pageHeightAtFit);\n };\n\n // ---- screenshot: \"deter\" ---------------------------------------------\n const [hidden, setHidden] = useState(false);\n const [blurred, setBlurred] = useState(false);\n const [snapped, setSnapped] = useState(false);\n useEffect(() => {\n if (!deter || typeof window === \"undefined\") return;\n let timer: ReturnType<typeof setTimeout> | undefined;\n const onVisibility = () => setHidden(document.visibilityState === \"hidden\");\n const onBlur = () => setBlurred(true);\n const onFocus = () => setBlurred(false);\n const onKeyUp = (e: globalThis.KeyboardEvent) => {\n if (e.key !== \"PrintScreen\") return;\n // Best effort. The OS has usually taken the shot before this fires;\n // what is left is to obscure, and to clear a capture that went to the\n // clipboard (which fails quietly where the page may not write it).\n setSnapped(true);\n clearTimeout(timer);\n timer = setTimeout(() => setSnapped(false), PRINT_SCREEN_MS);\n void navigator.clipboard?.writeText?.(\"\").catch(() => {});\n };\n document.addEventListener(\"visibilitychange\", onVisibility);\n window.addEventListener(\"blur\", onBlur);\n window.addEventListener(\"focus\", onFocus);\n window.addEventListener(\"keyup\", onKeyUp);\n return () => {\n clearTimeout(timer);\n document.removeEventListener(\"visibilitychange\", onVisibility);\n window.removeEventListener(\"blur\", onBlur);\n window.removeEventListener(\"focus\", onFocus);\n window.removeEventListener(\"keyup\", onKeyUp);\n };\n }, [deter]);\n const obscured = deter && (hidden || blurred || snapped);\n\n const onKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n if (!print && (e.ctrlKey || e.metaKey) && e.key.toLowerCase() === \"p\") e.preventDefault();\n };\n const block = (e: SyntheticEvent) => e.preventDefault();\n\n const markId = useId().replace(/[^a-zA-Z0-9_-]/g, \"\");\n\n return (\n <div\n ref={ref}\n data-react-fancy-pdf-viewer=\"\"\n data-mode=\"pages\"\n data-print-blocked={print ? undefined : \"true\"}\n data-obscured={String(obscured)}\n aria-label={title}\n role=\"document\"\n onKeyDown={onKeyDown}\n className={cn(\n \"relative flex h-full min-h-[20rem] w-full flex-col overflow-hidden rounded-md bg-zinc-100 dark:bg-zinc-900\",\n className,\n )}\n style={copy ? style : { ...style, userSelect: \"none\", WebkitUserSelect: \"none\" }}\n >\n {!print && <style>{PRINT_BLOCK_CSS}</style>}\n\n <div\n data-react-fancy-pdf-viewer-toolbar=\"\"\n className=\"flex shrink-0 items-center gap-1 border-b border-zinc-200 bg-[color:var(--fancy-surface,var(--color-white))] px-2 py-1 text-xs text-[color:var(--fancy-text-muted,var(--color-zinc-500))] dark:border-zinc-800 dark:bg-[color:var(--fancy-surface-dark,var(--color-zinc-900))] dark:text-[color:var(--fancy-text-muted-dark,var(--color-zinc-400))]\"\n >\n <ToolButton attr=\"prev\" label=\"Previous page\" disabled={page <= 1} onClick={() => setPage(page - 1)}>\n <Chevron dir=\"up\" />\n </ToolButton>\n <span data-react-fancy-pdf-viewer-page-label=\"\" className=\"min-w-[3.5rem] text-center tabular-nums\" aria-live=\"polite\">\n {page} / {count}\n </span>\n <ToolButton attr=\"next\" label=\"Next page\" disabled={page >= count} onClick={() => setPage(page + 1)}>\n <Chevron dir=\"down\" />\n </ToolButton>\n <span className=\"mx-1 h-4 w-px bg-zinc-200 dark:bg-zinc-700\" aria-hidden=\"true\" />\n <ToolButton attr=\"zoom-out\" label=\"Zoom out\" disabled={zoom <= MIN_ZOOM} onClick={() => zoomTo(zoom / ZOOM_STEP)}>\n <span aria-hidden=\"true\">−</span>\n </ToolButton>\n <ToolButton attr=\"zoom-reset\" label=\"Reset zoom\" wide onClick={() => zoomTo(1)}>\n {Math.round(zoom * 100)}%\n </ToolButton>\n <ToolButton attr=\"zoom-in\" label=\"Zoom in\" disabled={zoom >= MAX_ZOOM} onClick={() => zoomTo(zoom * ZOOM_STEP)}>\n <span aria-hidden=\"true\">+</span>\n </ToolButton>\n <ToolButton attr=\"fit-width\" label=\"Fit width\" wide onClick={() => zoomTo(1)}>\n Width\n </ToolButton>\n <ToolButton attr=\"fit-page\" label=\"Fit page\" wide onClick={fitPage}>\n Page\n </ToolButton>\n </div>\n\n <div\n ref={scrollerRef}\n data-react-fancy-pdf-viewer-pages=\"\"\n tabIndex={0}\n onScroll={onScroll}\n onContextMenu={download ? undefined : block}\n onDragStart={download ? undefined : block}\n className=\"relative min-h-0 flex-1 overflow-auto outline-none transition-[filter] duration-150\"\n style={{ padding: GAP, filter: obscured ? \"blur(24px)\" : undefined }}\n >\n <div className=\"mx-auto flex flex-col\" style={{ width: `${zoom * 100}%`, gap: GAP }}>\n {Array.from({ length: count }, (_, i) => {\n const n = i + 1;\n const near = isNear(n);\n const src = near ? pages.url(n, scale) : \"\";\n const isFailed = near && failed[n] === src;\n return (\n <div\n key={n}\n data-react-fancy-pdf-viewer-page=\"\"\n data-page={n}\n data-state={isFailed ? \"error\" : undefined}\n className=\"relative w-full overflow-hidden bg-white shadow-sm\"\n style={{ aspectRatio: String(ratioOf(n)) }}\n >\n {isFailed && (\n <div\n data-react-fancy-pdf-viewer-page-error=\"\"\n role=\"alert\"\n className=\"absolute inset-0 flex flex-col items-center justify-center gap-2 bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] p-4 text-center text-sm text-[color:var(--fancy-text-subtle,var(--color-zinc-600))] dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))] dark:text-[color:var(--fancy-text-subtle-dark,var(--color-zinc-400))]\"\n >\n {renderPageError ? (\n renderPageError({ page: n, scale, url: src, retry: () => retryPage(n) })\n ) : (\n <>\n <span>{`Page ${n} couldn't be shown.`}</span>\n <button\n type=\"button\"\n data-react-fancy-pdf-viewer-page-retry=\"\"\n onClick={() => retryPage(n)}\n className=\"rounded-md border border-[color:var(--fancy-border-strong,var(--color-zinc-300))] bg-[color:var(--fancy-surface,var(--color-white))] px-2.5 py-1 text-xs font-medium text-[color:var(--fancy-text,var(--color-zinc-900))] hover:bg-[color:var(--fancy-surface-hover,var(--color-zinc-50))] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[color:var(--fancy-focus,var(--color-blue-500))]/50 dark:border-[color:var(--fancy-border-strong-dark,var(--color-zinc-700))] dark:bg-[color:var(--fancy-surface-dark,var(--color-zinc-900))] dark:text-[color:var(--fancy-text-dark,var(--color-zinc-100))] dark:hover:bg-[color:var(--fancy-surface-hover-dark,color-mix(in_oklab,var(--color-zinc-800)_50%,transparent))]\"\n >\n Retry\n </button>\n </>\n )}\n </div>\n )}\n {near && !isFailed && (\n <img\n key={attempts[n] ?? 0}\n data-react-fancy-pdf-viewer-image=\"\"\n src={src}\n onError={() => {\n setFailed((prev) => (prev[n] === src ? prev : { ...prev, [n]: src }));\n onPageError?.(n, { scale, url: src });\n }}\n alt={`Page ${n}`}\n decoding=\"async\"\n draggable={download ? undefined : false}\n className=\"block h-full w-full\"\n onLoad={(e) => {\n const img = e.currentTarget;\n if (img.naturalWidth > 0 && img.naturalHeight > 0) {\n const r = img.naturalWidth / img.naturalHeight;\n setRatios((prev) => (prev[n] === r ? prev : { ...prev, [n]: r }));\n }\n }}\n />\n )}\n {watermark?.text && <Watermark id={`${markId}-${n}`} {...watermark} />}\n </div>\n );\n })}\n </div>\n </div>\n </div>\n );\n },\n);\n\nPdfPages.displayName = \"PdfPages\";\n\n/** A tiled SVG pattern, so the text repeats at a constant size whatever the zoom. */\nfunction Watermark({ id, text, opacity = 0.15, angle = -30, density = 1 }: PdfViewerWatermark & { id: string }) {\n const fontSize = 14;\n const gap = 80 / Math.max(0.1, density);\n const w = text.length * fontSize * 0.55 + gap;\n const h = fontSize + gap;\n return (\n <svg\n data-react-fancy-pdf-viewer-watermark=\"\"\n aria-hidden=\"true\"\n className=\"absolute inset-0 h-full w-full select-none\"\n style={{ pointerEvents: \"none\" }}\n >\n <defs>\n <pattern id={id} width={w} height={h} patternUnits=\"userSpaceOnUse\" patternTransform={`rotate(${angle})`}>\n <text x={gap / 2} y={h / 2} fontSize={fontSize} fontFamily=\"ui-sans-serif, system-ui, sans-serif\" fillOpacity={clamp(opacity, 0, 1)}\n // The light-mode text role in both modes: page images are paper.\n style={{ fill: \"var(--fancy-text, var(--color-zinc-700))\" }}\n >\n {text}\n </text>\n </pattern>\n </defs>\n <rect width=\"100%\" height=\"100%\" fill={`url(#${id})`} />\n </svg>\n );\n}\n\nfunction ToolButton({\n attr,\n label,\n disabled,\n wide,\n onClick,\n children,\n}: {\n attr: string;\n label: string;\n disabled?: boolean;\n wide?: boolean;\n onClick: () => void;\n children: ReactNode;\n}) {\n return (\n <button\n type=\"button\"\n {...{ [`data-react-fancy-pdf-viewer-${attr}`]: \"\" }}\n aria-label={label}\n title={label}\n disabled={disabled}\n onClick={onClick}\n className={cn(\n \"flex h-6 items-center justify-center rounded-full tabular-nums transition-colors disabled:pointer-events-none disabled:opacity-30\",\n \"hover:bg-zinc-900/5 hover:text-zinc-700 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500/50 dark:hover:bg-white/10 dark:hover:text-zinc-200\",\n wide ? \"min-w-[2.25rem] px-1.5\" : \"w-6\",\n )}\n >\n {children}\n </button>\n );\n}\n\nfunction Chevron({ dir }: { dir: \"up\" | \"down\" }) {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d={dir === \"up\" ? \"m18 15-6-6-6 6\" : \"m6 9 6 6 6-6\"} />\n </svg>\n );\n}\n","import { forwardRef } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { FauxClient } from \"../FauxClient\";\nimport { PdfPages } from \"./PdfPages\";\nimport type { PdfViewerProps } from \"./PdfViewer.types\";\n\n/**\n * A standalone PDF viewer — embeds the document via the browser's native PDF\n * plugin (`<object>`), falling back to an `<iframe>`, then to a download link.\n * Fills its container, so give it a height (a `min-h` floor is built in).\n * Renders for PDF sources inside `<MediaViewer>`.\n *\n * ```tsx\n * <PdfViewer src=\"/report.pdf\" title=\"report.pdf\" style={{ height: 600 }} />\n * ```\n *\n * With `pages` it shows page images the app rendered instead, and never\n * fetches or references the PDF; `policy` and `watermark` apply there.\n *\n * ```tsx\n * <PdfViewer\n * pages={{ count: 12, url: (n, scale) => `/docs/7/pages/${n}.png?scale=${scale}` }}\n * policy={{ download: false, print: false, copy: false, screenshot: \"deter\" }}\n * watermark={{ text: \"jane@example.com\" }}\n * />\n * ```\n */\nexport const PdfViewer = forwardRef<HTMLDivElement, PdfViewerProps>(\n (\n {\n src,\n pages,\n page,\n defaultPage,\n onPageChange,\n zoom,\n defaultZoom,\n onZoomChange,\n policy,\n watermark,\n onPageError,\n renderPageError,\n title = \"PDF document\",\n className,\n style,\n frame = false,\n frameProps,\n },\n ref,\n ) => {\n if (pages) {\n // `src` is deliberately not passed on: in this mode the PDF is never\n // referenced, so it cannot leak through an attribute or a fallback link.\n const pageViewer = (\n <PdfPages\n ref={ref}\n pages={pages}\n page={page}\n defaultPage={defaultPage}\n onPageChange={onPageChange}\n zoom={zoom}\n defaultZoom={defaultZoom}\n onZoomChange={onZoomChange}\n policy={policy}\n watermark={watermark}\n onPageError={onPageError}\n renderPageError={renderPageError}\n title={title}\n className={cn(frame && \"rounded-none\", className)}\n style={style}\n />\n );\n if (!frame) return pageViewer;\n // Zoom lives on the viewer's own toolbar, which knows the page size; the\n // frame adds full screen.\n return (\n <FauxClient variant=\"browser\" url={title} controls={{ zoom: false }} fill {...frameProps}>\n {pageViewer}\n </FauxClient>\n );\n }\n\n const viewer = (\n <div\n ref={ref}\n data-react-fancy-pdf-viewer=\"\"\n className={cn(\n \"relative h-full min-h-[20rem] w-full overflow-hidden rounded-md bg-zinc-100 dark:bg-zinc-900\",\n className,\n )}\n style={style}\n >\n <object data={src} type=\"application/pdf\" className=\"h-full w-full\">\n <iframe\n src={src}\n title={title}\n className=\"h-full w-full border-0\"\n />\n <div className=\"flex h-full flex-col items-center justify-center gap-2 p-4 text-center text-sm text-[color:var(--fancy-text-muted,var(--color-zinc-500))] dark:text-[color:var(--fancy-text-muted-dark,var(--color-zinc-400))]\">\n <span>This browser can't display the PDF inline.</span>\n <a\n href={src}\n download\n className=\"font-medium text-blue-600 hover:underline dark:text-blue-400\"\n >\n Download PDF\n </a>\n </div>\n </object>\n </div>\n );\n\n if (!frame) return viewer;\n\n // Full screen from the frame; zoom stays on the browser's PDF toolbar. A\n // plugin fits the page to its box, so scaling the box only re-fits it, and\n // the `#zoom=` open parameter is relative to the page's real size, which a\n // frame cannot know -- its bar would jump by uneven steps.\n return (\n // The browser variant, because the plugin swallows the pointer: hover over\n // the PDF never reaches the frame, so controls over it could not be\n // revealed, and its top-right corner is the PDF toolbar's. In the address\n // bar they are reachable and collide with nothing.\n <FauxClient variant=\"browser\" url={title} controls={{ zoom: false }} fill {...frameProps}>\n {viewer}\n </FauxClient>\n );\n },\n);\n\nPdfViewer.displayName = \"PdfViewer\";\n"]}
|
|
@@ -11,6 +11,35 @@ var chunkZU5Q77OT_cjs = require('./chunk-ZU5Q77OT.cjs');
|
|
|
11
11
|
var react = require('react');
|
|
12
12
|
var jsxRuntime = require('react/jsx-runtime');
|
|
13
13
|
|
|
14
|
+
// src/components/inputs/MultiSwitch/MultiSwitch.colors.ts
|
|
15
|
+
var multiSwitchColorClasses = {
|
|
16
|
+
// The host's colour, from CSS variables -- no dark: variant, because a
|
|
17
|
+
// host that themes per mode scopes the variables themselves.
|
|
18
|
+
brand: { thumb: "bg-brand", text: "text-brand-contrast", border: "border-brand" },
|
|
19
|
+
slate: { thumb: "bg-slate-600 dark:bg-slate-500", text: "text-white", border: "border-slate-500 dark:border-slate-400" },
|
|
20
|
+
gray: { thumb: "bg-gray-600 dark:bg-gray-500", text: "text-white", border: "border-gray-500 dark:border-gray-400" },
|
|
21
|
+
zinc: { thumb: "bg-zinc-600 dark:bg-zinc-500", text: "text-white", border: "border-zinc-500 dark:border-zinc-400" },
|
|
22
|
+
neutral: { thumb: "bg-neutral-600 dark:bg-neutral-500", text: "text-white", border: "border-neutral-500 dark:border-neutral-400" },
|
|
23
|
+
stone: { thumb: "bg-stone-600 dark:bg-stone-500", text: "text-white", border: "border-stone-500 dark:border-stone-400" },
|
|
24
|
+
red: { thumb: "bg-red-600 dark:bg-red-500", text: "text-white", border: "border-red-500 dark:border-red-400" },
|
|
25
|
+
orange: { thumb: "bg-orange-600 dark:bg-orange-500", text: "text-white", border: "border-orange-500 dark:border-orange-400" },
|
|
26
|
+
amber: { thumb: "bg-amber-400 dark:bg-amber-300", text: "text-amber-950", border: "border-amber-500 dark:border-amber-400" },
|
|
27
|
+
yellow: { thumb: "bg-yellow-400 dark:bg-yellow-300", text: "text-yellow-950", border: "border-yellow-500 dark:border-yellow-400" },
|
|
28
|
+
lime: { thumb: "bg-lime-400 dark:bg-lime-300", text: "text-lime-950", border: "border-lime-500 dark:border-lime-400" },
|
|
29
|
+
green: { thumb: "bg-green-600 dark:bg-green-500", text: "text-white", border: "border-green-500 dark:border-green-400" },
|
|
30
|
+
emerald: { thumb: "bg-emerald-600 dark:bg-emerald-500", text: "text-white", border: "border-emerald-500 dark:border-emerald-400" },
|
|
31
|
+
teal: { thumb: "bg-teal-600 dark:bg-teal-500", text: "text-white", border: "border-teal-500 dark:border-teal-400" },
|
|
32
|
+
cyan: { thumb: "bg-cyan-600 dark:bg-cyan-500", text: "text-white", border: "border-cyan-500 dark:border-cyan-400" },
|
|
33
|
+
sky: { thumb: "bg-sky-600 dark:bg-sky-500", text: "text-white", border: "border-sky-500 dark:border-sky-400" },
|
|
34
|
+
blue: { thumb: "bg-blue-600 dark:bg-blue-500", text: "text-white", border: "border-blue-500 dark:border-blue-400" },
|
|
35
|
+
indigo: { thumb: "bg-indigo-600 dark:bg-indigo-500", text: "text-white", border: "border-indigo-500 dark:border-indigo-400" },
|
|
36
|
+
violet: { thumb: "bg-violet-600 dark:bg-violet-500", text: "text-white", border: "border-violet-500 dark:border-violet-400" },
|
|
37
|
+
purple: { thumb: "bg-purple-600 dark:bg-purple-500", text: "text-white", border: "border-purple-500 dark:border-purple-400" },
|
|
38
|
+
fuchsia: { thumb: "bg-fuchsia-600 dark:bg-fuchsia-500", text: "text-white", border: "border-fuchsia-500 dark:border-fuchsia-400" },
|
|
39
|
+
pink: { thumb: "bg-pink-600 dark:bg-pink-500", text: "text-white", border: "border-pink-500 dark:border-pink-400" },
|
|
40
|
+
rose: { thumb: "bg-rose-600 dark:bg-rose-500", text: "text-white", border: "border-rose-500 dark:border-rose-400" }
|
|
41
|
+
};
|
|
42
|
+
var BORDER_DEFAULT = "border-[color:var(--fancy-border-strong,var(--color-zinc-300))] dark:border-[color:var(--fancy-border-strong-dark,var(--color-zinc-700))]";
|
|
14
43
|
var sizeClasses = {
|
|
15
44
|
xs: "px-2 py-1 text-xs",
|
|
16
45
|
sm: "px-2.5 py-1.5 text-sm",
|
|
@@ -53,6 +82,8 @@ function MultiSwitch({
|
|
|
53
82
|
const selectedIndex = resolvedOptions.findIndex(
|
|
54
83
|
(o) => o.value === value
|
|
55
84
|
);
|
|
85
|
+
const selectedColor = resolvedOptions[selectedIndex]?.color;
|
|
86
|
+
const colorClasses = selectedColor ? multiSwitchColorClasses[selectedColor] : void 0;
|
|
56
87
|
const updateIndicator = react.useCallback(() => {
|
|
57
88
|
const container = containerRef.current;
|
|
58
89
|
const activeItem = itemRefs.current[selectedIndex];
|
|
@@ -83,7 +114,8 @@ function MultiSwitch({
|
|
|
83
114
|
if (interactive && !e.currentTarget.contains(e.relatedTarget)) exitEdit();
|
|
84
115
|
},
|
|
85
116
|
className: chunkZU5Q77OT_cjs.cn(
|
|
86
|
-
"relative inline-flex rounded-lg border
|
|
117
|
+
"relative inline-flex rounded-lg border bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]",
|
|
118
|
+
colorClasses ? colorClasses.border : BORDER_DEFAULT,
|
|
87
119
|
dirty && "ring-2 ring-amber-400/50",
|
|
88
120
|
error && "ring-2 ring-red-500/50",
|
|
89
121
|
disabled && "opacity-50 cursor-not-allowed",
|
|
@@ -93,7 +125,9 @@ function MultiSwitch({
|
|
|
93
125
|
indicator && /* @__PURE__ */ jsxRuntime.jsx(
|
|
94
126
|
"span",
|
|
95
127
|
{
|
|
96
|
-
|
|
128
|
+
"data-react-fancy-multi-switch-thumb": "",
|
|
129
|
+
"data-color": selectedColor,
|
|
130
|
+
className: colorClasses ? `absolute top-0 bottom-0 rounded-lg ${colorClasses.thumb} transition-all duration-200 ease-out` : "absolute top-0 bottom-0 rounded-lg bg-blue-600 transition-all duration-200 ease-out",
|
|
97
131
|
style: { left: indicator.left, width: indicator.width }
|
|
98
132
|
}
|
|
99
133
|
),
|
|
@@ -121,7 +155,7 @@ function MultiSwitch({
|
|
|
121
155
|
className: chunkZU5Q77OT_cjs.cn(
|
|
122
156
|
"relative z-10 font-medium transition-colors duration-200",
|
|
123
157
|
sizeClasses[size],
|
|
124
|
-
isSelected ? "text-white" : "text-[color:var(--fancy-text-subtle,var(--color-zinc-600))] hover:text-[color:var(--fancy-text,var(--color-zinc-900))] dark:text-[color:var(--fancy-text-subtle-dark,var(--color-zinc-400))] dark:hover:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]",
|
|
158
|
+
isSelected ? colorClasses?.text ?? "text-white" : "text-[color:var(--fancy-text-subtle,var(--color-zinc-600))] hover:text-[color:var(--fancy-text,var(--color-zinc-900))] dark:text-[color:var(--fancy-text-subtle-dark,var(--color-zinc-400))] dark:hover:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]",
|
|
125
159
|
(disabled || option.disabled) && "cursor-not-allowed"
|
|
126
160
|
),
|
|
127
161
|
children: option.label
|
|
@@ -154,5 +188,5 @@ function MultiSwitch({
|
|
|
154
188
|
MultiSwitch.displayName = "MultiSwitch";
|
|
155
189
|
|
|
156
190
|
exports.MultiSwitch = MultiSwitch;
|
|
157
|
-
//# sourceMappingURL=chunk-
|
|
158
|
-
//# sourceMappingURL=chunk-
|
|
191
|
+
//# sourceMappingURL=chunk-IB673TEG.cjs.map
|
|
192
|
+
//# sourceMappingURL=chunk-IB673TEG.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/inputs/MultiSwitch/MultiSwitch.colors.ts","../src/components/inputs/MultiSwitch/MultiSwitch.tsx"],"names":["useId","resolveOption","useFieldMode","useInlineEdit","useControllableState","useRef","useMemo","composeRefs","useState","useCallback","useEffect","DisplayValue","jsxs","cn","jsx","Field"],"mappings":"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","file":"chunk-IB673TEG.cjs","sourcesContent":["// Literal Tailwind class strings for every color in the v4 palette so the\n// scanner can detect them in the published dist (template-built names are\n// invisible to Tailwind's JIT). Shades follow badgeSolid: 600 / dark 500 for\n// the thumb, with dark label text on the light hues (amber, yellow, lime).\nimport type { Color } from \"../../../utils/types\";\n\nexport type MultiSwitchColorClasses = {\n /** The selected thumb's fill. */\n thumb: string;\n /** The selected option's label, readable on the thumb. */\n text: string;\n /** The container border while this option is selected. */\n border: string;\n};\n\nexport const multiSwitchColorClasses: Record<Color, MultiSwitchColorClasses> = {\n // The host's colour, from CSS variables -- no dark: variant, because a\n // host that themes per mode scopes the variables themselves.\n brand: { thumb: \"bg-brand\", text: \"text-brand-contrast\", border: \"border-brand\" },\n slate: { thumb: \"bg-slate-600 dark:bg-slate-500\", text: \"text-white\", border: \"border-slate-500 dark:border-slate-400\" },\n gray: { thumb: \"bg-gray-600 dark:bg-gray-500\", text: \"text-white\", border: \"border-gray-500 dark:border-gray-400\" },\n zinc: { thumb: \"bg-zinc-600 dark:bg-zinc-500\", text: \"text-white\", border: \"border-zinc-500 dark:border-zinc-400\" },\n neutral: { thumb: \"bg-neutral-600 dark:bg-neutral-500\", text: \"text-white\", border: \"border-neutral-500 dark:border-neutral-400\" },\n stone: { thumb: \"bg-stone-600 dark:bg-stone-500\", text: \"text-white\", border: \"border-stone-500 dark:border-stone-400\" },\n red: { thumb: \"bg-red-600 dark:bg-red-500\", text: \"text-white\", border: \"border-red-500 dark:border-red-400\" },\n orange: { thumb: \"bg-orange-600 dark:bg-orange-500\", text: \"text-white\", border: \"border-orange-500 dark:border-orange-400\" },\n amber: { thumb: \"bg-amber-400 dark:bg-amber-300\", text: \"text-amber-950\", border: \"border-amber-500 dark:border-amber-400\" },\n yellow: { thumb: \"bg-yellow-400 dark:bg-yellow-300\", text: \"text-yellow-950\", border: \"border-yellow-500 dark:border-yellow-400\" },\n lime: { thumb: \"bg-lime-400 dark:bg-lime-300\", text: \"text-lime-950\", border: \"border-lime-500 dark:border-lime-400\" },\n green: { thumb: \"bg-green-600 dark:bg-green-500\", text: \"text-white\", border: \"border-green-500 dark:border-green-400\" },\n emerald: { thumb: \"bg-emerald-600 dark:bg-emerald-500\", text: \"text-white\", border: \"border-emerald-500 dark:border-emerald-400\" },\n teal: { thumb: \"bg-teal-600 dark:bg-teal-500\", text: \"text-white\", border: \"border-teal-500 dark:border-teal-400\" },\n cyan: { thumb: \"bg-cyan-600 dark:bg-cyan-500\", text: \"text-white\", border: \"border-cyan-500 dark:border-cyan-400\" },\n sky: { thumb: \"bg-sky-600 dark:bg-sky-500\", text: \"text-white\", border: \"border-sky-500 dark:border-sky-400\" },\n blue: { thumb: \"bg-blue-600 dark:bg-blue-500\", text: \"text-white\", border: \"border-blue-500 dark:border-blue-400\" },\n indigo: { thumb: \"bg-indigo-600 dark:bg-indigo-500\", text: \"text-white\", border: \"border-indigo-500 dark:border-indigo-400\" },\n violet: { thumb: \"bg-violet-600 dark:bg-violet-500\", text: \"text-white\", border: \"border-violet-500 dark:border-violet-400\" },\n purple: { thumb: \"bg-purple-600 dark:bg-purple-500\", text: \"text-white\", border: \"border-purple-500 dark:border-purple-400\" },\n fuchsia: { thumb: \"bg-fuchsia-600 dark:bg-fuchsia-500\", text: \"text-white\", border: \"border-fuchsia-500 dark:border-fuchsia-400\" },\n pink: { thumb: \"bg-pink-600 dark:bg-pink-500\", text: \"text-white\", border: \"border-pink-500 dark:border-pink-400\" },\n rose: { thumb: \"bg-rose-600 dark:bg-rose-500\", text: \"text-white\", border: \"border-rose-500 dark:border-rose-400\" },\n};\n","import { useRef, useState, useEffect, useCallback, useId, useMemo, type Ref } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { composeRefs } from \"../../../utils/compose-refs\";\nimport { useControllableState } from \"../../../hooks/use-controllable-state\";\nimport { Field } from \"../Field\";\nimport { useFieldMode } from \"../mode/FieldMode.context\";\nimport { DisplayValue } from \"../mode/DisplayValue\";\nimport { useInlineEdit } from \"../mode/useInlineEdit\";\nimport { resolveOption } from \"../inputs.utils\";\nimport type { Color, Size } from \"../../../utils/types\";\nimport type { MultiSwitchProps } from \"./MultiSwitch.types\";\nimport { multiSwitchColorClasses } from \"./MultiSwitch.colors\";\n\nconst BORDER_DEFAULT =\n \"border-[color:var(--fancy-border-strong,var(--color-zinc-300))] dark:border-[color:var(--fancy-border-strong-dark,var(--color-zinc-700))]\";\n\nconst sizeClasses: Record<Size, string> = {\n xs: \"px-2 py-1 text-xs\",\n sm: \"px-2.5 py-1.5 text-sm\",\n md: \"px-3 py-2 text-sm\",\n lg: \"px-4 py-2.5 text-base\",\n xl: \"px-5 py-3 text-lg\",\n};\n\nexport function MultiSwitch<V = string>({\n size = \"md\",\n dirty,\n error,\n label,\n labelHidden,\n description,\n required,\n disabled,\n className,\n id,\n name,\n list,\n value: controlledValue,\n defaultValue,\n onValueChange,\n linear,\n mode,\n ...rest\n}: MultiSwitchProps<V>) {\n const reactId = useId();\n // A `<label for>` cannot name a div[role=\"radiogroup\"], so the group points at\n // the label instead. Needs an id the label and the group both agree on.\n const labelId = label ? `${id ?? reactId}-label` : undefined;\n\n // resolveOption hands an object option back as-is, so `color` survives it.\n const resolvedOptions = list.map(resolveOption) as Array<\n ReturnType<typeof resolveOption<V>> & { color?: Color }\n >;\n const fallback = defaultValue ?? resolvedOptions[0]?.value;\n const resolvedMode = useFieldMode(mode);\n const { showControl, interactive, enterEdit, exitEdit } = useInlineEdit(resolvedMode, disabled);\n const [value, setValue] = useControllableState(controlledValue, fallback as V, onValueChange);\n\n const containerRef = useRef<HTMLDivElement>(null);\n const externalRef = (rest as { ref?: Ref<HTMLDivElement> }).ref;\n const containerSetRef = useMemo(() => composeRefs(externalRef, containerRef), [externalRef]);\n const itemRefs = useRef<(HTMLButtonElement | null)[]>([]);\n const [indicator, setIndicator] = useState<{ left: number; width: number } | null>(null);\n\n const selectedIndex = resolvedOptions.findIndex(\n (o) => o.value === value,\n );\n const selectedColor = resolvedOptions[selectedIndex]?.color;\n const colorClasses = selectedColor ? multiSwitchColorClasses[selectedColor] : undefined;\n\n const updateIndicator = useCallback(() => {\n const container = containerRef.current;\n const activeItem = itemRefs.current[selectedIndex];\n if (!container || !activeItem) {\n setIndicator(null);\n return;\n }\n const containerRect = container.getBoundingClientRect();\n const itemRect = activeItem.getBoundingClientRect();\n setIndicator({\n left: itemRect.left - containerRect.left,\n width: itemRect.width,\n });\n }, [selectedIndex]);\n\n useEffect(() => {\n updateIndicator();\n }, [updateIndicator]);\n\n const control = !showControl ? (\n <DisplayValue size={size} interactive={interactive} onActivate={enterEdit}>\n {resolvedOptions.find((o) => o.value === value)?.label}\n </DisplayValue>\n ) : (\n <div\n {...rest}\n // React 19 passes `ref` to a function component as a plain prop, so a\n // caller's ref (Tooltip's anchor, or anyone's) arrives in `rest`. Spread\n // after `ref={containerRef}` it REPLACED the ref the thumb is measured\n // from, and the selected thumb never rendered. Feed both instead.\n ref={containerSetRef}\n data-react-fancy-multi-switch=\"\"\n role=\"radiogroup\"\n id={id}\n aria-labelledby={labelId}\n onBlur={(e) => {\n if (interactive && !e.currentTarget.contains(e.relatedTarget as Node)) exitEdit();\n }}\n className={cn(\n \"relative inline-flex rounded-lg border bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]\",\n colorClasses ? colorClasses.border : BORDER_DEFAULT,\n dirty && \"ring-2 ring-amber-400/50\",\n error && \"ring-2 ring-red-500/50\",\n disabled && \"opacity-50 cursor-not-allowed\",\n className,\n )}\n >\n {indicator && (\n <span\n data-react-fancy-multi-switch-thumb=\"\"\n data-color={selectedColor}\n className={\n colorClasses\n ? `absolute top-0 bottom-0 rounded-lg ${colorClasses.thumb} transition-all duration-200 ease-out`\n : \"absolute top-0 bottom-0 rounded-lg bg-blue-600 transition-all duration-200 ease-out\"\n }\n style={{ left: indicator.left, width: indicator.width }}\n />\n )}\n {resolvedOptions.map((option, index) => {\n const isSelected = option.value === value;\n return (\n <button\n key={String(option.value)}\n ref={(el) => { itemRefs.current[index] = el; }}\n type=\"button\"\n role=\"radio\"\n aria-checked={isSelected}\n disabled={disabled || option.disabled}\n autoFocus={interactive && (selectedIndex === -1 ? index === 0 : isSelected)}\n onClick={() => {\n if (linear) {\n const nextIndex = (selectedIndex + 1) % resolvedOptions.length;\n setValue(resolvedOptions[nextIndex].value as V);\n } else {\n setValue(option.value as V);\n }\n }}\n className={cn(\n \"relative z-10 font-medium transition-colors duration-200\",\n sizeClasses[size],\n isSelected\n ? (colorClasses?.text ?? \"text-white\")\n : \"text-[color:var(--fancy-text-subtle,var(--color-zinc-600))] hover:text-[color:var(--fancy-text,var(--color-zinc-900))] dark:text-[color:var(--fancy-text-subtle-dark,var(--color-zinc-400))] dark:hover:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]\",\n (disabled || option.disabled) && \"cursor-not-allowed\",\n )}\n >\n {option.label}\n </button>\n );\n })}\n {name && <input type=\"hidden\" name={name} value={String(value)} />}\n </div>\n );\n\n if (label || error || description) {\n return (\n <Field\n label={label}\n labelHidden={labelHidden}\n labelId={labelId}\n description={description}\n error={error}\n required={required}\n htmlFor={id}\n size={size}\n >\n {control}\n </Field>\n );\n }\n\n return control;\n}\n\nMultiSwitch.displayName = \"MultiSwitch\";\n"]}
|
|
@@ -9,6 +9,35 @@ import { cn } from './chunk-MMW2JGKZ.js';
|
|
|
9
9
|
import { useId, useRef, useMemo, useState, useCallback, useEffect } from 'react';
|
|
10
10
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
11
11
|
|
|
12
|
+
// src/components/inputs/MultiSwitch/MultiSwitch.colors.ts
|
|
13
|
+
var multiSwitchColorClasses = {
|
|
14
|
+
// The host's colour, from CSS variables -- no dark: variant, because a
|
|
15
|
+
// host that themes per mode scopes the variables themselves.
|
|
16
|
+
brand: { thumb: "bg-brand", text: "text-brand-contrast", border: "border-brand" },
|
|
17
|
+
slate: { thumb: "bg-slate-600 dark:bg-slate-500", text: "text-white", border: "border-slate-500 dark:border-slate-400" },
|
|
18
|
+
gray: { thumb: "bg-gray-600 dark:bg-gray-500", text: "text-white", border: "border-gray-500 dark:border-gray-400" },
|
|
19
|
+
zinc: { thumb: "bg-zinc-600 dark:bg-zinc-500", text: "text-white", border: "border-zinc-500 dark:border-zinc-400" },
|
|
20
|
+
neutral: { thumb: "bg-neutral-600 dark:bg-neutral-500", text: "text-white", border: "border-neutral-500 dark:border-neutral-400" },
|
|
21
|
+
stone: { thumb: "bg-stone-600 dark:bg-stone-500", text: "text-white", border: "border-stone-500 dark:border-stone-400" },
|
|
22
|
+
red: { thumb: "bg-red-600 dark:bg-red-500", text: "text-white", border: "border-red-500 dark:border-red-400" },
|
|
23
|
+
orange: { thumb: "bg-orange-600 dark:bg-orange-500", text: "text-white", border: "border-orange-500 dark:border-orange-400" },
|
|
24
|
+
amber: { thumb: "bg-amber-400 dark:bg-amber-300", text: "text-amber-950", border: "border-amber-500 dark:border-amber-400" },
|
|
25
|
+
yellow: { thumb: "bg-yellow-400 dark:bg-yellow-300", text: "text-yellow-950", border: "border-yellow-500 dark:border-yellow-400" },
|
|
26
|
+
lime: { thumb: "bg-lime-400 dark:bg-lime-300", text: "text-lime-950", border: "border-lime-500 dark:border-lime-400" },
|
|
27
|
+
green: { thumb: "bg-green-600 dark:bg-green-500", text: "text-white", border: "border-green-500 dark:border-green-400" },
|
|
28
|
+
emerald: { thumb: "bg-emerald-600 dark:bg-emerald-500", text: "text-white", border: "border-emerald-500 dark:border-emerald-400" },
|
|
29
|
+
teal: { thumb: "bg-teal-600 dark:bg-teal-500", text: "text-white", border: "border-teal-500 dark:border-teal-400" },
|
|
30
|
+
cyan: { thumb: "bg-cyan-600 dark:bg-cyan-500", text: "text-white", border: "border-cyan-500 dark:border-cyan-400" },
|
|
31
|
+
sky: { thumb: "bg-sky-600 dark:bg-sky-500", text: "text-white", border: "border-sky-500 dark:border-sky-400" },
|
|
32
|
+
blue: { thumb: "bg-blue-600 dark:bg-blue-500", text: "text-white", border: "border-blue-500 dark:border-blue-400" },
|
|
33
|
+
indigo: { thumb: "bg-indigo-600 dark:bg-indigo-500", text: "text-white", border: "border-indigo-500 dark:border-indigo-400" },
|
|
34
|
+
violet: { thumb: "bg-violet-600 dark:bg-violet-500", text: "text-white", border: "border-violet-500 dark:border-violet-400" },
|
|
35
|
+
purple: { thumb: "bg-purple-600 dark:bg-purple-500", text: "text-white", border: "border-purple-500 dark:border-purple-400" },
|
|
36
|
+
fuchsia: { thumb: "bg-fuchsia-600 dark:bg-fuchsia-500", text: "text-white", border: "border-fuchsia-500 dark:border-fuchsia-400" },
|
|
37
|
+
pink: { thumb: "bg-pink-600 dark:bg-pink-500", text: "text-white", border: "border-pink-500 dark:border-pink-400" },
|
|
38
|
+
rose: { thumb: "bg-rose-600 dark:bg-rose-500", text: "text-white", border: "border-rose-500 dark:border-rose-400" }
|
|
39
|
+
};
|
|
40
|
+
var BORDER_DEFAULT = "border-[color:var(--fancy-border-strong,var(--color-zinc-300))] dark:border-[color:var(--fancy-border-strong-dark,var(--color-zinc-700))]";
|
|
12
41
|
var sizeClasses = {
|
|
13
42
|
xs: "px-2 py-1 text-xs",
|
|
14
43
|
sm: "px-2.5 py-1.5 text-sm",
|
|
@@ -51,6 +80,8 @@ function MultiSwitch({
|
|
|
51
80
|
const selectedIndex = resolvedOptions.findIndex(
|
|
52
81
|
(o) => o.value === value
|
|
53
82
|
);
|
|
83
|
+
const selectedColor = resolvedOptions[selectedIndex]?.color;
|
|
84
|
+
const colorClasses = selectedColor ? multiSwitchColorClasses[selectedColor] : void 0;
|
|
54
85
|
const updateIndicator = useCallback(() => {
|
|
55
86
|
const container = containerRef.current;
|
|
56
87
|
const activeItem = itemRefs.current[selectedIndex];
|
|
@@ -81,7 +112,8 @@ function MultiSwitch({
|
|
|
81
112
|
if (interactive && !e.currentTarget.contains(e.relatedTarget)) exitEdit();
|
|
82
113
|
},
|
|
83
114
|
className: cn(
|
|
84
|
-
"relative inline-flex rounded-lg border
|
|
115
|
+
"relative inline-flex rounded-lg border bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]",
|
|
116
|
+
colorClasses ? colorClasses.border : BORDER_DEFAULT,
|
|
85
117
|
dirty && "ring-2 ring-amber-400/50",
|
|
86
118
|
error && "ring-2 ring-red-500/50",
|
|
87
119
|
disabled && "opacity-50 cursor-not-allowed",
|
|
@@ -91,7 +123,9 @@ function MultiSwitch({
|
|
|
91
123
|
indicator && /* @__PURE__ */ jsx(
|
|
92
124
|
"span",
|
|
93
125
|
{
|
|
94
|
-
|
|
126
|
+
"data-react-fancy-multi-switch-thumb": "",
|
|
127
|
+
"data-color": selectedColor,
|
|
128
|
+
className: colorClasses ? `absolute top-0 bottom-0 rounded-lg ${colorClasses.thumb} transition-all duration-200 ease-out` : "absolute top-0 bottom-0 rounded-lg bg-blue-600 transition-all duration-200 ease-out",
|
|
95
129
|
style: { left: indicator.left, width: indicator.width }
|
|
96
130
|
}
|
|
97
131
|
),
|
|
@@ -119,7 +153,7 @@ function MultiSwitch({
|
|
|
119
153
|
className: cn(
|
|
120
154
|
"relative z-10 font-medium transition-colors duration-200",
|
|
121
155
|
sizeClasses[size],
|
|
122
|
-
isSelected ? "text-white" : "text-[color:var(--fancy-text-subtle,var(--color-zinc-600))] hover:text-[color:var(--fancy-text,var(--color-zinc-900))] dark:text-[color:var(--fancy-text-subtle-dark,var(--color-zinc-400))] dark:hover:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]",
|
|
156
|
+
isSelected ? colorClasses?.text ?? "text-white" : "text-[color:var(--fancy-text-subtle,var(--color-zinc-600))] hover:text-[color:var(--fancy-text,var(--color-zinc-900))] dark:text-[color:var(--fancy-text-subtle-dark,var(--color-zinc-400))] dark:hover:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]",
|
|
123
157
|
(disabled || option.disabled) && "cursor-not-allowed"
|
|
124
158
|
),
|
|
125
159
|
children: option.label
|
|
@@ -152,5 +186,5 @@ function MultiSwitch({
|
|
|
152
186
|
MultiSwitch.displayName = "MultiSwitch";
|
|
153
187
|
|
|
154
188
|
export { MultiSwitch };
|
|
155
|
-
//# sourceMappingURL=chunk-
|
|
156
|
-
//# sourceMappingURL=chunk-
|
|
189
|
+
//# sourceMappingURL=chunk-YUNOVQQJ.js.map
|
|
190
|
+
//# sourceMappingURL=chunk-YUNOVQQJ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/inputs/MultiSwitch/MultiSwitch.colors.ts","../src/components/inputs/MultiSwitch/MultiSwitch.tsx"],"names":[],"mappings":"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","file":"chunk-YUNOVQQJ.js","sourcesContent":["// Literal Tailwind class strings for every color in the v4 palette so the\n// scanner can detect them in the published dist (template-built names are\n// invisible to Tailwind's JIT). Shades follow badgeSolid: 600 / dark 500 for\n// the thumb, with dark label text on the light hues (amber, yellow, lime).\nimport type { Color } from \"../../../utils/types\";\n\nexport type MultiSwitchColorClasses = {\n /** The selected thumb's fill. */\n thumb: string;\n /** The selected option's label, readable on the thumb. */\n text: string;\n /** The container border while this option is selected. */\n border: string;\n};\n\nexport const multiSwitchColorClasses: Record<Color, MultiSwitchColorClasses> = {\n // The host's colour, from CSS variables -- no dark: variant, because a\n // host that themes per mode scopes the variables themselves.\n brand: { thumb: \"bg-brand\", text: \"text-brand-contrast\", border: \"border-brand\" },\n slate: { thumb: \"bg-slate-600 dark:bg-slate-500\", text: \"text-white\", border: \"border-slate-500 dark:border-slate-400\" },\n gray: { thumb: \"bg-gray-600 dark:bg-gray-500\", text: \"text-white\", border: \"border-gray-500 dark:border-gray-400\" },\n zinc: { thumb: \"bg-zinc-600 dark:bg-zinc-500\", text: \"text-white\", border: \"border-zinc-500 dark:border-zinc-400\" },\n neutral: { thumb: \"bg-neutral-600 dark:bg-neutral-500\", text: \"text-white\", border: \"border-neutral-500 dark:border-neutral-400\" },\n stone: { thumb: \"bg-stone-600 dark:bg-stone-500\", text: \"text-white\", border: \"border-stone-500 dark:border-stone-400\" },\n red: { thumb: \"bg-red-600 dark:bg-red-500\", text: \"text-white\", border: \"border-red-500 dark:border-red-400\" },\n orange: { thumb: \"bg-orange-600 dark:bg-orange-500\", text: \"text-white\", border: \"border-orange-500 dark:border-orange-400\" },\n amber: { thumb: \"bg-amber-400 dark:bg-amber-300\", text: \"text-amber-950\", border: \"border-amber-500 dark:border-amber-400\" },\n yellow: { thumb: \"bg-yellow-400 dark:bg-yellow-300\", text: \"text-yellow-950\", border: \"border-yellow-500 dark:border-yellow-400\" },\n lime: { thumb: \"bg-lime-400 dark:bg-lime-300\", text: \"text-lime-950\", border: \"border-lime-500 dark:border-lime-400\" },\n green: { thumb: \"bg-green-600 dark:bg-green-500\", text: \"text-white\", border: \"border-green-500 dark:border-green-400\" },\n emerald: { thumb: \"bg-emerald-600 dark:bg-emerald-500\", text: \"text-white\", border: \"border-emerald-500 dark:border-emerald-400\" },\n teal: { thumb: \"bg-teal-600 dark:bg-teal-500\", text: \"text-white\", border: \"border-teal-500 dark:border-teal-400\" },\n cyan: { thumb: \"bg-cyan-600 dark:bg-cyan-500\", text: \"text-white\", border: \"border-cyan-500 dark:border-cyan-400\" },\n sky: { thumb: \"bg-sky-600 dark:bg-sky-500\", text: \"text-white\", border: \"border-sky-500 dark:border-sky-400\" },\n blue: { thumb: \"bg-blue-600 dark:bg-blue-500\", text: \"text-white\", border: \"border-blue-500 dark:border-blue-400\" },\n indigo: { thumb: \"bg-indigo-600 dark:bg-indigo-500\", text: \"text-white\", border: \"border-indigo-500 dark:border-indigo-400\" },\n violet: { thumb: \"bg-violet-600 dark:bg-violet-500\", text: \"text-white\", border: \"border-violet-500 dark:border-violet-400\" },\n purple: { thumb: \"bg-purple-600 dark:bg-purple-500\", text: \"text-white\", border: \"border-purple-500 dark:border-purple-400\" },\n fuchsia: { thumb: \"bg-fuchsia-600 dark:bg-fuchsia-500\", text: \"text-white\", border: \"border-fuchsia-500 dark:border-fuchsia-400\" },\n pink: { thumb: \"bg-pink-600 dark:bg-pink-500\", text: \"text-white\", border: \"border-pink-500 dark:border-pink-400\" },\n rose: { thumb: \"bg-rose-600 dark:bg-rose-500\", text: \"text-white\", border: \"border-rose-500 dark:border-rose-400\" },\n};\n","import { useRef, useState, useEffect, useCallback, useId, useMemo, type Ref } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { composeRefs } from \"../../../utils/compose-refs\";\nimport { useControllableState } from \"../../../hooks/use-controllable-state\";\nimport { Field } from \"../Field\";\nimport { useFieldMode } from \"../mode/FieldMode.context\";\nimport { DisplayValue } from \"../mode/DisplayValue\";\nimport { useInlineEdit } from \"../mode/useInlineEdit\";\nimport { resolveOption } from \"../inputs.utils\";\nimport type { Color, Size } from \"../../../utils/types\";\nimport type { MultiSwitchProps } from \"./MultiSwitch.types\";\nimport { multiSwitchColorClasses } from \"./MultiSwitch.colors\";\n\nconst BORDER_DEFAULT =\n \"border-[color:var(--fancy-border-strong,var(--color-zinc-300))] dark:border-[color:var(--fancy-border-strong-dark,var(--color-zinc-700))]\";\n\nconst sizeClasses: Record<Size, string> = {\n xs: \"px-2 py-1 text-xs\",\n sm: \"px-2.5 py-1.5 text-sm\",\n md: \"px-3 py-2 text-sm\",\n lg: \"px-4 py-2.5 text-base\",\n xl: \"px-5 py-3 text-lg\",\n};\n\nexport function MultiSwitch<V = string>({\n size = \"md\",\n dirty,\n error,\n label,\n labelHidden,\n description,\n required,\n disabled,\n className,\n id,\n name,\n list,\n value: controlledValue,\n defaultValue,\n onValueChange,\n linear,\n mode,\n ...rest\n}: MultiSwitchProps<V>) {\n const reactId = useId();\n // A `<label for>` cannot name a div[role=\"radiogroup\"], so the group points at\n // the label instead. Needs an id the label and the group both agree on.\n const labelId = label ? `${id ?? reactId}-label` : undefined;\n\n // resolveOption hands an object option back as-is, so `color` survives it.\n const resolvedOptions = list.map(resolveOption) as Array<\n ReturnType<typeof resolveOption<V>> & { color?: Color }\n >;\n const fallback = defaultValue ?? resolvedOptions[0]?.value;\n const resolvedMode = useFieldMode(mode);\n const { showControl, interactive, enterEdit, exitEdit } = useInlineEdit(resolvedMode, disabled);\n const [value, setValue] = useControllableState(controlledValue, fallback as V, onValueChange);\n\n const containerRef = useRef<HTMLDivElement>(null);\n const externalRef = (rest as { ref?: Ref<HTMLDivElement> }).ref;\n const containerSetRef = useMemo(() => composeRefs(externalRef, containerRef), [externalRef]);\n const itemRefs = useRef<(HTMLButtonElement | null)[]>([]);\n const [indicator, setIndicator] = useState<{ left: number; width: number } | null>(null);\n\n const selectedIndex = resolvedOptions.findIndex(\n (o) => o.value === value,\n );\n const selectedColor = resolvedOptions[selectedIndex]?.color;\n const colorClasses = selectedColor ? multiSwitchColorClasses[selectedColor] : undefined;\n\n const updateIndicator = useCallback(() => {\n const container = containerRef.current;\n const activeItem = itemRefs.current[selectedIndex];\n if (!container || !activeItem) {\n setIndicator(null);\n return;\n }\n const containerRect = container.getBoundingClientRect();\n const itemRect = activeItem.getBoundingClientRect();\n setIndicator({\n left: itemRect.left - containerRect.left,\n width: itemRect.width,\n });\n }, [selectedIndex]);\n\n useEffect(() => {\n updateIndicator();\n }, [updateIndicator]);\n\n const control = !showControl ? (\n <DisplayValue size={size} interactive={interactive} onActivate={enterEdit}>\n {resolvedOptions.find((o) => o.value === value)?.label}\n </DisplayValue>\n ) : (\n <div\n {...rest}\n // React 19 passes `ref` to a function component as a plain prop, so a\n // caller's ref (Tooltip's anchor, or anyone's) arrives in `rest`. Spread\n // after `ref={containerRef}` it REPLACED the ref the thumb is measured\n // from, and the selected thumb never rendered. Feed both instead.\n ref={containerSetRef}\n data-react-fancy-multi-switch=\"\"\n role=\"radiogroup\"\n id={id}\n aria-labelledby={labelId}\n onBlur={(e) => {\n if (interactive && !e.currentTarget.contains(e.relatedTarget as Node)) exitEdit();\n }}\n className={cn(\n \"relative inline-flex rounded-lg border bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]\",\n colorClasses ? colorClasses.border : BORDER_DEFAULT,\n dirty && \"ring-2 ring-amber-400/50\",\n error && \"ring-2 ring-red-500/50\",\n disabled && \"opacity-50 cursor-not-allowed\",\n className,\n )}\n >\n {indicator && (\n <span\n data-react-fancy-multi-switch-thumb=\"\"\n data-color={selectedColor}\n className={\n colorClasses\n ? `absolute top-0 bottom-0 rounded-lg ${colorClasses.thumb} transition-all duration-200 ease-out`\n : \"absolute top-0 bottom-0 rounded-lg bg-blue-600 transition-all duration-200 ease-out\"\n }\n style={{ left: indicator.left, width: indicator.width }}\n />\n )}\n {resolvedOptions.map((option, index) => {\n const isSelected = option.value === value;\n return (\n <button\n key={String(option.value)}\n ref={(el) => { itemRefs.current[index] = el; }}\n type=\"button\"\n role=\"radio\"\n aria-checked={isSelected}\n disabled={disabled || option.disabled}\n autoFocus={interactive && (selectedIndex === -1 ? index === 0 : isSelected)}\n onClick={() => {\n if (linear) {\n const nextIndex = (selectedIndex + 1) % resolvedOptions.length;\n setValue(resolvedOptions[nextIndex].value as V);\n } else {\n setValue(option.value as V);\n }\n }}\n className={cn(\n \"relative z-10 font-medium transition-colors duration-200\",\n sizeClasses[size],\n isSelected\n ? (colorClasses?.text ?? \"text-white\")\n : \"text-[color:var(--fancy-text-subtle,var(--color-zinc-600))] hover:text-[color:var(--fancy-text,var(--color-zinc-900))] dark:text-[color:var(--fancy-text-subtle-dark,var(--color-zinc-400))] dark:hover:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]\",\n (disabled || option.disabled) && \"cursor-not-allowed\",\n )}\n >\n {option.label}\n </button>\n );\n })}\n {name && <input type=\"hidden\" name={name} value={String(value)} />}\n </div>\n );\n\n if (label || error || description) {\n return (\n <Field\n label={label}\n labelHidden={labelHidden}\n labelId={labelId}\n description={description}\n error={error}\n required={required}\n htmlFor={id}\n size={size}\n >\n {control}\n </Field>\n );\n }\n\n return control;\n}\n\nMultiSwitch.displayName = \"MultiSwitch\";\n"]}
|
|
@@ -3,7 +3,7 @@ import { ReactNode, CSSProperties } from 'react';
|
|
|
3
3
|
import { I as ImageViewerProps } from './ImageViewer.types-BDTxBYEN.js';
|
|
4
4
|
import { V as VideoViewerProps } from './VideoViewer.types-_AwQ8DQr.js';
|
|
5
5
|
import { A as AudioViewerProps } from './AudioViewer.types-CyhmQVQd.js';
|
|
6
|
-
import {
|
|
6
|
+
import { c as PdfViewerProps } from './PdfViewer.types-sM52m3OI.js';
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* Resolve what kind of media a source is, from its MIME type (preferred) or its
|
|
@@ -3,7 +3,7 @@ import { ReactNode, CSSProperties } from 'react';
|
|
|
3
3
|
import { I as ImageViewerProps } from './ImageViewer.types-CtqaA6KV.cjs';
|
|
4
4
|
import { V as VideoViewerProps } from './VideoViewer.types-_AwQ8DQr.cjs';
|
|
5
5
|
import { A as AudioViewerProps } from './AudioViewer.types-CyhmQVQd.cjs';
|
|
6
|
-
import {
|
|
6
|
+
import { c as PdfViewerProps } from './PdfViewer.types-BRtcZt-X.cjs';
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* Resolve what kind of media a source is, from its MIME type (preferred) or its
|
package/dist/index.cjs
CHANGED
|
@@ -5,7 +5,7 @@ var chunkIR6JSQ4O_cjs = require('./chunk-IR6JSQ4O.cjs');
|
|
|
5
5
|
require('./chunk-O5IO7TCO.cjs');
|
|
6
6
|
var chunk6MDZQIMZ_cjs = require('./chunk-6MDZQIMZ.cjs');
|
|
7
7
|
require('./chunk-QGPMVFZJ.cjs');
|
|
8
|
-
var
|
|
8
|
+
var chunkIB673TEG_cjs = require('./chunk-IB673TEG.cjs');
|
|
9
9
|
var chunkH7ELUIF6_cjs = require('./chunk-H7ELUIF6.cjs');
|
|
10
10
|
require('./chunk-HXLSEBAL.cjs');
|
|
11
11
|
var chunkZ4UXLQSK_cjs = require('./chunk-Z4UXLQSK.cjs');
|
|
@@ -60,9 +60,9 @@ var chunkP53432AK_cjs = require('./chunk-P53432AK.cjs');
|
|
|
60
60
|
var chunkQF7CD4JH_cjs = require('./chunk-QF7CD4JH.cjs');
|
|
61
61
|
require('./chunk-O3F6DYWR.cjs');
|
|
62
62
|
var chunkZVDW2VX5_cjs = require('./chunk-ZVDW2VX5.cjs');
|
|
63
|
-
var
|
|
63
|
+
var chunkAQ4DZT4Y_cjs = require('./chunk-AQ4DZT4Y.cjs');
|
|
64
64
|
var chunkTH7VP4CL_cjs = require('./chunk-TH7VP4CL.cjs');
|
|
65
|
-
var
|
|
65
|
+
var chunk5QKQXM5V_cjs = require('./chunk-5QKQXM5V.cjs');
|
|
66
66
|
var chunkLIVC3WUU_cjs = require('./chunk-LIVC3WUU.cjs');
|
|
67
67
|
var chunkG5DMYAWL_cjs = require('./chunk-G5DMYAWL.cjs');
|
|
68
68
|
var chunk2GFM5WD4_cjs = require('./chunk-2GFM5WD4.cjs');
|
|
@@ -235,7 +235,7 @@ Object.defineProperty(exports, "FormProvider", {
|
|
|
235
235
|
});
|
|
236
236
|
Object.defineProperty(exports, "MultiSwitch", {
|
|
237
237
|
enumerable: true,
|
|
238
|
-
get: function () { return
|
|
238
|
+
get: function () { return chunkIB673TEG_cjs.MultiSwitch; }
|
|
239
239
|
});
|
|
240
240
|
Object.defineProperty(exports, "RadioGroup", {
|
|
241
241
|
enumerable: true,
|
|
@@ -539,11 +539,11 @@ Object.defineProperty(exports, "Marquee", {
|
|
|
539
539
|
});
|
|
540
540
|
Object.defineProperty(exports, "MediaViewer", {
|
|
541
541
|
enumerable: true,
|
|
542
|
-
get: function () { return
|
|
542
|
+
get: function () { return chunkAQ4DZT4Y_cjs.MediaViewer; }
|
|
543
543
|
});
|
|
544
544
|
Object.defineProperty(exports, "resolveMediaType", {
|
|
545
545
|
enumerable: true,
|
|
546
|
-
get: function () { return
|
|
546
|
+
get: function () { return chunkAQ4DZT4Y_cjs.resolveMediaType; }
|
|
547
547
|
});
|
|
548
548
|
Object.defineProperty(exports, "VideoViewer", {
|
|
549
549
|
enumerable: true,
|
|
@@ -551,7 +551,7 @@ Object.defineProperty(exports, "VideoViewer", {
|
|
|
551
551
|
});
|
|
552
552
|
Object.defineProperty(exports, "PdfViewer", {
|
|
553
553
|
enumerable: true,
|
|
554
|
-
get: function () { return
|
|
554
|
+
get: function () { return chunk5QKQXM5V_cjs.PdfViewer; }
|
|
555
555
|
});
|
|
556
556
|
Object.defineProperty(exports, "Eyebrow", {
|
|
557
557
|
enumerable: true,
|
package/dist/index.d.cts
CHANGED
|
@@ -9,7 +9,7 @@ export { CheckboxGroup, CheckboxGroupProps } from './checkbox-group.cjs';
|
|
|
9
9
|
export { RadioGroup, RadioGroupProps } from './radio-group.cjs';
|
|
10
10
|
export { Switch, SwitchProps } from './switch.cjs';
|
|
11
11
|
export { Slider, SliderProps } from './slider.cjs';
|
|
12
|
-
export { MultiSwitch, MultiSwitchProps } from './multi-switch.cjs';
|
|
12
|
+
export { MultiSwitch, MultiSwitchOption, MultiSwitchProps } from './multi-switch.cjs';
|
|
13
13
|
export { DatePicker, DatePickerProps } from './date-picker.cjs';
|
|
14
14
|
export { A as AffixPosition, F as FieldMode, I as InputAffixProps, a as InputBaseProps, b as InputOption, c as InputOptionGroup } from './inputs.types-duxPKadC.cjs';
|
|
15
15
|
export { D as DisplayValue, a as DisplayValueProps, F as FieldModeContext, b as FieldModeContextValue, c as Form, d as FormProps, e as FormProvider, f as FormProviderProps, u as useFieldMode } from './FieldMode.context-CU5h1CyF.cjs';
|
|
@@ -82,7 +82,7 @@ export { MobileMenu, MobileMenuBottomBarProps, MobileMenuContextValue, MobileMen
|
|
|
82
82
|
export { Kanban, KanbanCardMoveHandler, KanbanCardProps, KanbanColumnHandleProps, KanbanColumnMoveHandler, KanbanColumnProps, KanbanContextValue, KanbanProps, useKanban } from './kanban.cjs';
|
|
83
83
|
export { DropPosition, TreeNav, TreeNavContextValue, TreeNavProps, TreeNodeData, TreeNodeProps, useTreeNav } from './tree-nav.cjs';
|
|
84
84
|
export { FileBrowser, FileBrowserContextValue, FileBrowserNewFolder, FileBrowserNodeProps, FileBrowserPathBarProps, FileBrowserProps, FileBrowserProvider, FileBrowserRow, FileBrowserToolbarProps, FileBrowserTreeProps, FileEntry, FileKind, FileLoadStatus, FileSelectMode, FileSnapshotNode, FileSort, FileSortDirection, FileSortField, useFileBrowser, validateFolderName } from './file-browser.cjs';
|
|
85
|
-
export { M as MediaKind, a as MediaViewer, b as MediaViewerProps, R as ResolveMediaTypeInput, r as resolveMediaType } from './index-
|
|
85
|
+
export { M as MediaKind, a as MediaViewer, b as MediaViewerProps, R as ResolveMediaTypeInput, r as resolveMediaType } from './index-WG8UdfiE.cjs';
|
|
86
86
|
export { F as FancyPlatform, P as PlatformHints, a as PromptAttachment, b as PromptCmd, c as PromptInput, d as PromptInputProps, e as PromptMention, f as browserPlatformHints, g as detectPlatform, m as modifierKeyLabel } from './index-BF5qsQur.cjs';
|
|
87
87
|
import { P as Placement } from './types-DJI492iY.cjs';
|
|
88
88
|
export { A as ActionColor, B as ButtonColor, C as Color, S as Size, V as Variant } from './types-DJI492iY.cjs';
|
|
@@ -99,7 +99,7 @@ export { V as VideoViewerProps } from './VideoViewer.types-_AwQ8DQr.cjs';
|
|
|
99
99
|
export { AudioViewer } from './audio-viewer.cjs';
|
|
100
100
|
export { A as AudioViewerProps } from './AudioViewer.types-CyhmQVQd.cjs';
|
|
101
101
|
export { PdfViewer } from './pdf-viewer.cjs';
|
|
102
|
-
export { P as
|
|
102
|
+
export { P as PdfPageErrorContext, a as PdfPageSource, b as PdfViewerPolicy, c as PdfViewerProps, d as PdfViewerWatermark } from './PdfViewer.types-BRtcZt-X.cjs';
|
|
103
103
|
export { J as JSON_FIELD_TYPES, a as JsonArray, b as JsonEditor, c as JsonEditorActivity, d as JsonEditorEdit, e as JsonEditorIssue, f as JsonEditorNode, g as JsonEditorPendingEdit, h as JsonEditorProps, i as JsonFieldType, j as JsonKeyMapEntry, k as JsonKeyRule, l as JsonObject, m as JsonPath, n as JsonPrimitive, o as JsonValue, P as ParsedKeyMap, p as applyJsonEdit, q as describeEdit, r as findJsonConflicts, s as getAtPath, t as inferType, u as parseKeyMap, v as parsePath, w as pathToString, x as resolveKeyRule, y as typeMatches } from './index-CEb-loCl.cjs';
|
|
104
104
|
|
|
105
105
|
/**
|