@patternmode/aperto 0.1.1 → 0.1.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/dist/index.js +98 -50
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -440,11 +440,28 @@ function renderExpandedMedia(item, renderImage, renderVideo) {
|
|
|
440
440
|
};
|
|
441
441
|
return (renderVideo ?? renderDefaultVideo)(videoProps);
|
|
442
442
|
}
|
|
443
|
-
function renderTransitionMedia(item) {
|
|
443
|
+
function renderTransitionMedia(item, renderImage, renderVideo) {
|
|
444
444
|
if (item.type === "image") {
|
|
445
|
-
|
|
445
|
+
const imageProps = {
|
|
446
|
+
alt: item.alt,
|
|
447
|
+
height: item.height,
|
|
448
|
+
item,
|
|
449
|
+
src: item.src,
|
|
450
|
+
variant: "expanded",
|
|
451
|
+
width: item.width
|
|
452
|
+
};
|
|
453
|
+
return (renderImage ?? renderDefaultImage)(imageProps);
|
|
446
454
|
}
|
|
447
|
-
|
|
455
|
+
const videoProps = {
|
|
456
|
+
"aria-label": item.alt ?? item.title ?? "Video",
|
|
457
|
+
height: item.height,
|
|
458
|
+
item,
|
|
459
|
+
poster: item.poster,
|
|
460
|
+
src: item.src,
|
|
461
|
+
variant: "expanded",
|
|
462
|
+
width: item.width
|
|
463
|
+
};
|
|
464
|
+
return (renderVideo ?? renderDefaultVideo)(videoProps);
|
|
448
465
|
}
|
|
449
466
|
|
|
450
467
|
// src/expanded-media-stage.tsx
|
|
@@ -587,6 +604,8 @@ function transitionDurationMs(transition) {
|
|
|
587
604
|
}
|
|
588
605
|
function ApertoMediaTransitionClone({
|
|
589
606
|
onComplete,
|
|
607
|
+
renderImage,
|
|
608
|
+
renderVideo,
|
|
590
609
|
transition
|
|
591
610
|
}) {
|
|
592
611
|
const ctx = useApertoContext();
|
|
@@ -607,6 +626,7 @@ function ApertoMediaTransitionClone({
|
|
|
607
626
|
motion4.div,
|
|
608
627
|
{
|
|
609
628
|
animate: rectTarget(transition.to),
|
|
629
|
+
"aria-hidden": "true",
|
|
610
630
|
"data-slot": "aperto-transition-media",
|
|
611
631
|
initial: rectTarget(transition.from),
|
|
612
632
|
style: {
|
|
@@ -618,7 +638,7 @@ function ApertoMediaTransitionClone({
|
|
|
618
638
|
zIndex: 1002
|
|
619
639
|
},
|
|
620
640
|
transition: ctx.preset.transition,
|
|
621
|
-
children: renderTransitionMedia(transition.item)
|
|
641
|
+
children: renderTransitionMedia(transition.item, renderImage, renderVideo)
|
|
622
642
|
}
|
|
623
643
|
);
|
|
624
644
|
}
|
|
@@ -756,6 +776,13 @@ function ApertoGroup({
|
|
|
756
776
|
});
|
|
757
777
|
});
|
|
758
778
|
}, [activeMedia, closing, index, open]);
|
|
779
|
+
const handleCloseAutoFocus = useCallback3(
|
|
780
|
+
(event) => {
|
|
781
|
+
event.preventDefault();
|
|
782
|
+
thumbnailRefs.current.get(index)?.focus({ preventScroll: true });
|
|
783
|
+
},
|
|
784
|
+
[index]
|
|
785
|
+
);
|
|
759
786
|
const handleMediaTransitionComplete = useCallback3(() => {
|
|
760
787
|
if (mediaTransition?.phase === "closing") {
|
|
761
788
|
setOpen(false);
|
|
@@ -833,6 +860,16 @@ function ApertoGroup({
|
|
|
833
860
|
},
|
|
834
861
|
[goToNext, goToPrevious]
|
|
835
862
|
);
|
|
863
|
+
const expandedMediaStyle = useMemo2(() => {
|
|
864
|
+
if (!activeMedia?.width || !activeMedia.height) {
|
|
865
|
+
return void 0;
|
|
866
|
+
}
|
|
867
|
+
return {
|
|
868
|
+
"--aperto-expanded-aspect-ratio": `${activeMedia.width} / ${activeMedia.height}`,
|
|
869
|
+
"--aperto-expanded-aspect-ratio-height": activeMedia.height,
|
|
870
|
+
"--aperto-expanded-aspect-ratio-width": activeMedia.width
|
|
871
|
+
};
|
|
872
|
+
}, [activeMedia?.height, activeMedia?.width]);
|
|
836
873
|
return /* @__PURE__ */ jsx10(ApertoGroupContext.Provider, { value, children: /* @__PURE__ */ jsxs(
|
|
837
874
|
ApertoRoot,
|
|
838
875
|
{
|
|
@@ -849,61 +886,70 @@ function ApertoGroup({
|
|
|
849
886
|
{
|
|
850
887
|
className: classNames?.content,
|
|
851
888
|
"data-aperto-transition": mediaTransition?.phase,
|
|
889
|
+
onCloseAutoFocus: handleCloseAutoFocus,
|
|
852
890
|
onKeyDown: hasNavigation ? handleContentKeyDown : void 0,
|
|
853
891
|
sharedLayoutId: false,
|
|
854
892
|
...getDescriptionProps(activeMedia),
|
|
855
893
|
children: [
|
|
856
|
-
/* @__PURE__ */ jsxs(
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
children: /* @__PURE__ */ jsx10(
|
|
878
|
-
ChevronLeft,
|
|
894
|
+
/* @__PURE__ */ jsxs(
|
|
895
|
+
"div",
|
|
896
|
+
{
|
|
897
|
+
"data-slot": "aperto-media",
|
|
898
|
+
ref: setExpandedMediaNode,
|
|
899
|
+
style: expandedMediaStyle,
|
|
900
|
+
children: [
|
|
901
|
+
/* @__PURE__ */ jsx10(
|
|
902
|
+
ApertoExpandedMediaStage,
|
|
903
|
+
{
|
|
904
|
+
direction: navigationDirection,
|
|
905
|
+
index,
|
|
906
|
+
item: activeMedia,
|
|
907
|
+
navigationMotion,
|
|
908
|
+
renderImage,
|
|
909
|
+
renderVideo
|
|
910
|
+
}
|
|
911
|
+
),
|
|
912
|
+
hasNavigation ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
913
|
+
/* @__PURE__ */ jsx10(
|
|
914
|
+
"button",
|
|
879
915
|
{
|
|
880
|
-
"aria-
|
|
881
|
-
|
|
882
|
-
|
|
916
|
+
"aria-label": "Previous media",
|
|
917
|
+
className: classNames?.previousButton,
|
|
918
|
+
"data-slot": "aperto-previous-button",
|
|
919
|
+
onClick: goToPrevious,
|
|
920
|
+
type: "button",
|
|
921
|
+
children: /* @__PURE__ */ jsx10(
|
|
922
|
+
ChevronLeft,
|
|
923
|
+
{
|
|
924
|
+
"aria-hidden": "true",
|
|
925
|
+
size: 18,
|
|
926
|
+
strokeWidth: 2
|
|
927
|
+
}
|
|
928
|
+
)
|
|
883
929
|
}
|
|
884
|
-
)
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
/* @__PURE__ */ jsx10(
|
|
888
|
-
"button",
|
|
889
|
-
{
|
|
890
|
-
"aria-label": "Next media",
|
|
891
|
-
className: classNames?.nextButton,
|
|
892
|
-
"data-slot": "aperto-next-button",
|
|
893
|
-
onClick: goToNext,
|
|
894
|
-
type: "button",
|
|
895
|
-
children: /* @__PURE__ */ jsx10(
|
|
896
|
-
ChevronRight,
|
|
930
|
+
),
|
|
931
|
+
/* @__PURE__ */ jsx10(
|
|
932
|
+
"button",
|
|
897
933
|
{
|
|
898
|
-
"aria-
|
|
899
|
-
|
|
900
|
-
|
|
934
|
+
"aria-label": "Next media",
|
|
935
|
+
className: classNames?.nextButton,
|
|
936
|
+
"data-slot": "aperto-next-button",
|
|
937
|
+
onClick: goToNext,
|
|
938
|
+
type: "button",
|
|
939
|
+
children: /* @__PURE__ */ jsx10(
|
|
940
|
+
ChevronRight,
|
|
941
|
+
{
|
|
942
|
+
"aria-hidden": "true",
|
|
943
|
+
size: 18,
|
|
944
|
+
strokeWidth: 2
|
|
945
|
+
}
|
|
946
|
+
)
|
|
901
947
|
}
|
|
902
948
|
)
|
|
903
|
-
}
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
949
|
+
] }) : null
|
|
950
|
+
]
|
|
951
|
+
}
|
|
952
|
+
),
|
|
907
953
|
/* @__PURE__ */ jsx10(ApertoTitle, { children: activeMedia.title ?? getMediaLabel(activeMedia) }),
|
|
908
954
|
activeMedia.description ? /* @__PURE__ */ jsx10(ApertoDescription, { children: activeMedia.description }) : null,
|
|
909
955
|
hasNavigation ? /* @__PURE__ */ jsxs("div", { className: classNames?.counter, "data-slot": "aperto-counter", children: [
|
|
@@ -929,6 +975,8 @@ function ApertoGroup({
|
|
|
929
975
|
ApertoMediaTransitionClone,
|
|
930
976
|
{
|
|
931
977
|
onComplete: handleMediaTransitionComplete,
|
|
978
|
+
renderImage,
|
|
979
|
+
renderVideo,
|
|
932
980
|
transition: mediaTransition
|
|
933
981
|
}
|
|
934
982
|
)
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/Aperto/ApertoGroup.tsx","../src/aperto-content.tsx","../src/context.ts","../src/physics.ts","../src/motion-tokens.ts","../src/presets.ts","../src/aperto-description.tsx","../src/aperto-group-context.ts","../src/aperto-overlay.tsx","../src/aperto-portal.tsx","../src/aperto-root.tsx","../src/aperto-title.tsx","../src/expanded-media-stage.tsx","../src/media-rendering.tsx","../src/media-transition.tsx","../src/Aperto/ApertoKeyboard.ts","../src/aperto-close.tsx","../src/aperto-trigger.tsx","../src/Aperto/ApertoSingle.tsx","../src/Aperto/ApertoThumbnail.tsx","../src/index.ts"],"sourcesContent":["\"use client\";\n\nimport { ChevronLeft, ChevronRight, X } from \"lucide-react\";\nimport {\n\ttype KeyboardEvent,\n\tuseCallback,\n\tuseId,\n\tuseLayoutEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { flushSync } from \"react-dom\";\n\nimport { ApertoContent } from \"../aperto-content\";\nimport { ApertoDescription } from \"../aperto-description\";\nimport { ApertoGroupContext } from \"../aperto-group-context\";\nimport { ApertoOverlay } from \"../aperto-overlay\";\nimport { ApertoPortal } from \"../aperto-portal\";\nimport { ApertoRoot } from \"../aperto-root\";\nimport { ApertoTitle } from \"../aperto-title\";\nimport {\n\tApertoExpandedMediaStage,\n\ttype NavigationDirection,\n} from \"../expanded-media-stage\";\nimport { getDescriptionProps, getMediaLabel } from \"../media-rendering\";\nimport {\n\ttype ApertoMediaTransition,\n\tApertoMediaTransitionClone,\n\trectFromElement,\n} from \"../media-transition\";\nimport { shouldIgnoreKeyboardNavigationTarget } from \"./ApertoKeyboard\";\nimport type { ApertoGroupProps } from \"./ApertoTypes\";\n\nexport function ApertoGroup({\n\tchildren,\n\tclassNames,\n\tdismissible,\n\tindex: controlledIndex,\n\tinitialIndex = 0,\n\tmedia,\n\tmotion: motionProp,\n\tnavigationMotion = \"glide\",\n\tonIndexChange,\n\trenderImage,\n\trenderVideo,\n}: ApertoGroupProps) {\n\tconst generatedId = useId();\n\tconst [internalIndex, setInternalIndex] = useState(initialIndex);\n\tconst [open, setOpen] = useState(false);\n\tconst [closing, setClosing] = useState(false);\n\tconst [mediaTransition, setMediaTransition] =\n\t\tuseState<ApertoMediaTransition | null>(null);\n\tconst [navigationDirection, setNavigationDirection] =\n\t\tuseState<NavigationDirection>(0);\n\tconst isControlled = controlledIndex !== undefined;\n\tconst index = isControlled ? controlledIndex : internalIndex;\n\tconst activeMedia = media[index] ?? media[0];\n\tconst [layoutSourceIndex, setLayoutSourceIndex] = useState(index);\n\tconst expandedMediaRef = useRef<HTMLDivElement | null>(null);\n\tconst thumbnailRefs = useRef(new Map<number, HTMLButtonElement>());\n\tconst sharedLayoutIdForIndex = useCallback(\n\t\t(nextIndex: number) => `aperto-group-${generatedId}-${nextIndex}-shared`,\n\t\t[generatedId],\n\t);\n\tconst sharedLayoutId = sharedLayoutIdForIndex(layoutSourceIndex);\n\tconst measureOpeningTarget = useCallback((node: HTMLDivElement) => {\n\t\tconst targetRect = rectFromElement(node);\n\t\tif (!targetRect) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetMediaTransition((current) => {\n\t\t\tif (current?.phase !== \"opening\" || current.to) {\n\t\t\t\treturn current;\n\t\t\t}\n\t\t\treturn { ...current, to: targetRect };\n\t\t});\n\t}, []);\n\tconst setExpandedMediaNode = useCallback(\n\t\t(node: HTMLDivElement | null) => {\n\t\t\texpandedMediaRef.current = node;\n\t\t\tif (node) {\n\t\t\t\tmeasureOpeningTarget(node);\n\t\t\t}\n\t\t},\n\t\t[measureOpeningTarget],\n\t);\n\n\tconst registerThumbnail = useCallback(\n\t\t(thumbIndex: number, node: HTMLButtonElement | null) => {\n\t\t\tif (node) {\n\t\t\t\tthumbnailRefs.current.set(thumbIndex, node);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthumbnailRefs.current.delete(thumbIndex);\n\t\t},\n\t\t[],\n\t);\n\n\tuseLayoutEffect(() => {\n\t\tif (\n\t\t\tmediaTransition?.phase !== \"opening\" ||\n\t\t\tmediaTransition.to ||\n\t\t\t!expandedMediaRef.current\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tmeasureOpeningTarget(expandedMediaRef.current);\n\t}, [measureOpeningTarget, mediaTransition]);\n\n\tconst setIndex = useCallback(\n\t\t(nextIndex: number) => {\n\t\t\tif (!isControlled) {\n\t\t\t\tsetInternalIndex(nextIndex);\n\t\t\t}\n\t\t\tonIndexChange?.(nextIndex);\n\t\t},\n\t\t[isControlled, onIndexChange],\n\t);\n\n\tconst openAtIndex = useCallback(\n\t\t(thumbIndex: number) => {\n\t\t\tconst sourceRect = rectFromElement(\n\t\t\t\tthumbnailRefs.current.get(thumbIndex) ?? null,\n\t\t\t);\n\t\t\tconst item = media[thumbIndex];\n\n\t\t\tflushSync(() => {\n\t\t\t\tsetClosing(false);\n\t\t\t\tsetMediaTransition(\n\t\t\t\t\tsourceRect && item\n\t\t\t\t\t\t? { from: sourceRect, item, phase: \"opening\" }\n\t\t\t\t\t\t: null,\n\t\t\t\t);\n\t\t\t\tsetNavigationDirection(0);\n\t\t\t\tsetLayoutSourceIndex(thumbIndex);\n\t\t\t\tsetIndex(thumbIndex);\n\t\t\t\tsetOpen(true);\n\t\t\t});\n\t\t},\n\t\t[media, setIndex],\n\t);\n\n\tconst startClose = useCallback(() => {\n\t\tif (!open || closing) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst sourceRect = rectFromElement(expandedMediaRef.current);\n\t\tconst targetRect = rectFromElement(\n\t\t\tthumbnailRefs.current.get(index) ?? null,\n\t\t);\n\n\t\tif (!activeMedia || !sourceRect || !targetRect) {\n\t\t\tsetMediaTransition(null);\n\t\t\tsetClosing(false);\n\t\t\tsetOpen(false);\n\t\t\treturn;\n\t\t}\n\n\t\tflushSync(() => {\n\t\t\tsetClosing(true);\n\t\t\tsetMediaTransition({\n\t\t\t\tfrom: sourceRect,\n\t\t\t\titem: activeMedia,\n\t\t\t\tphase: \"closing\",\n\t\t\t\tto: targetRect,\n\t\t\t});\n\t\t});\n\t}, [activeMedia, closing, index, open]);\n\n\tconst handleMediaTransitionComplete = useCallback(() => {\n\t\tif (mediaTransition?.phase === \"closing\") {\n\t\t\tsetOpen(false);\n\t\t\tsetClosing(false);\n\t\t}\n\t\tsetMediaTransition(null);\n\t}, [mediaTransition?.phase]);\n\n\tconst handleOpenChange = useCallback(\n\t\t(nextOpen: boolean) => {\n\t\t\tif (nextOpen) {\n\t\t\t\tsetClosing(false);\n\t\t\t\tsetOpen(true);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tstartClose();\n\t\t},\n\t\t[startClose],\n\t);\n\n\tconst value = useMemo(\n\t\t() => ({\n\t\t\tclassNames,\n\t\t\tindex,\n\t\t\tmedia,\n\t\t\topen,\n\t\t\topenAtIndex,\n\t\t\tregisterThumbnail,\n\t\t\trenderImage,\n\t\t\trenderVideo,\n\t\t\tsetIndex,\n\t\t\tsharedLayoutId,\n\t\t\tsharedLayoutIdForIndex,\n\t\t}),\n\t\t[\n\t\t\tclassNames,\n\t\t\tindex,\n\t\t\tmedia,\n\t\t\topen,\n\t\t\topenAtIndex,\n\t\t\tregisterThumbnail,\n\t\t\trenderImage,\n\t\t\trenderVideo,\n\t\t\tsetIndex,\n\t\t\tsharedLayoutId,\n\t\t\tsharedLayoutIdForIndex,\n\t\t],\n\t);\n\tconst hasNavigation = media.length > 1;\n\tconst navigateToIndex = useCallback(\n\t\t(nextIndex: number, direction: NavigationDirection) => {\n\t\t\tsetNavigationDirection(direction);\n\t\t\tsetLayoutSourceIndex(nextIndex);\n\t\t\tsetIndex(nextIndex);\n\t\t},\n\t\t[setIndex],\n\t);\n\tconst goToPrevious = useCallback(() => {\n\t\tnavigateToIndex((index - 1 + media.length) % media.length, -1);\n\t}, [index, media.length, navigateToIndex]);\n\tconst goToNext = useCallback(() => {\n\t\tnavigateToIndex((index + 1) % media.length, 1);\n\t}, [index, media.length, navigateToIndex]);\n\tconst handleContentKeyDown = useCallback(\n\t\t(event: KeyboardEvent<HTMLDivElement>) => {\n\t\t\tif (\n\t\t\t\tevent.defaultPrevented ||\n\t\t\t\tevent.altKey ||\n\t\t\t\tevent.ctrlKey ||\n\t\t\t\tevent.metaKey ||\n\t\t\t\tshouldIgnoreKeyboardNavigationTarget(event.target)\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.key === \"ArrowLeft\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tgoToPrevious();\n\t\t\t}\n\n\t\t\tif (event.key === \"ArrowRight\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tgoToNext();\n\t\t\t}\n\t\t},\n\t\t[goToNext, goToPrevious],\n\t);\n\n\treturn (\n\t\t<ApertoGroupContext.Provider value={value}>\n\t\t\t<ApertoRoot\n\t\t\t\tdismissible={dismissible}\n\t\t\t\tmotion={motionProp}\n\t\t\t\tonOpenChange={handleOpenChange}\n\t\t\t\topen={open}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t\t{activeMedia ? (\n\t\t\t\t\t<ApertoPortal>\n\t\t\t\t\t\t<ApertoOverlay className={classNames?.overlay} fadeOut={closing} />\n\t\t\t\t\t\t<ApertoContent\n\t\t\t\t\t\t\tclassName={classNames?.content}\n\t\t\t\t\t\t\tdata-aperto-transition={mediaTransition?.phase}\n\t\t\t\t\t\t\tonKeyDown={hasNavigation ? handleContentKeyDown : undefined}\n\t\t\t\t\t\t\tsharedLayoutId={false}\n\t\t\t\t\t\t\t{...getDescriptionProps(activeMedia)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div data-slot=\"aperto-media\" ref={setExpandedMediaNode}>\n\t\t\t\t\t\t\t\t<ApertoExpandedMediaStage\n\t\t\t\t\t\t\t\t\tdirection={navigationDirection}\n\t\t\t\t\t\t\t\t\tindex={index}\n\t\t\t\t\t\t\t\t\titem={activeMedia}\n\t\t\t\t\t\t\t\t\tnavigationMotion={navigationMotion}\n\t\t\t\t\t\t\t\t\trenderImage={renderImage}\n\t\t\t\t\t\t\t\t\trenderVideo={renderVideo}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t{hasNavigation ? (\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\taria-label=\"Previous media\"\n\t\t\t\t\t\t\t\t\t\t\tclassName={classNames?.previousButton}\n\t\t\t\t\t\t\t\t\t\t\tdata-slot=\"aperto-previous-button\"\n\t\t\t\t\t\t\t\t\t\t\tonClick={goToPrevious}\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<ChevronLeft\n\t\t\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t\t\t\tsize={18}\n\t\t\t\t\t\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\taria-label=\"Next media\"\n\t\t\t\t\t\t\t\t\t\t\tclassName={classNames?.nextButton}\n\t\t\t\t\t\t\t\t\t\t\tdata-slot=\"aperto-next-button\"\n\t\t\t\t\t\t\t\t\t\t\tonClick={goToNext}\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<ChevronRight\n\t\t\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t\t\t\tsize={18}\n\t\t\t\t\t\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<ApertoTitle>\n\t\t\t\t\t\t\t\t{activeMedia.title ?? getMediaLabel(activeMedia)}\n\t\t\t\t\t\t\t</ApertoTitle>\n\t\t\t\t\t\t\t{activeMedia.description ? (\n\t\t\t\t\t\t\t\t<ApertoDescription>{activeMedia.description}</ApertoDescription>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t{hasNavigation ? (\n\t\t\t\t\t\t\t\t<div className={classNames?.counter} data-slot=\"aperto-counter\">\n\t\t\t\t\t\t\t\t\t{index + 1} / {media.length}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\taria-label=\"Close\"\n\t\t\t\t\t\t\t\tclassName={classNames?.closeButton}\n\t\t\t\t\t\t\t\tdata-slot=\"aperto-close\"\n\t\t\t\t\t\t\t\tonClick={startClose}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<X aria-hidden=\"true\" size={17} strokeWidth={2} />\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</ApertoContent>\n\t\t\t\t\t\t<ApertoMediaTransitionClone\n\t\t\t\t\t\t\tonComplete={handleMediaTransitionComplete}\n\t\t\t\t\t\t\ttransition={mediaTransition}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ApertoPortal>\n\t\t\t\t) : null}\n\t\t\t</ApertoRoot>\n\t\t</ApertoGroupContext.Provider>\n\t);\n}\n","\"use client\";\n\nimport * as Dialog from \"@radix-ui/react-dialog\";\nimport {\n\ttype MotionStyle,\n\tmotion,\n\ttype PanInfo,\n\tuseMotionValue,\n\tuseSpring,\n\tuseTransform,\n} from \"motion/react\";\nimport {\n\ttype ComponentPropsWithoutRef,\n\tforwardRef,\n\tuseCallback,\n\tuseMemo,\n\tuseState,\n} from \"react\";\n\nimport { useApertoContext } from \"./context\";\nimport {\n\tcalculateResistance,\n\tDEFAULT_DISTANCE_THRESHOLD,\n\tDEFAULT_VELOCITY_THRESHOLD,\n\tOPACITY_INPUT,\n\tOPACITY_OUTPUT,\n\tSCALE_INPUT,\n\tSCALE_OUTPUT,\n} from \"./physics\";\nimport { getDragSpring, resolvePreset } from \"./presets\";\nimport type { DismissibleConfig, MotionPresetName } from \"./types\";\n\nexport interface ApertoContentProps\n\textends Omit<\n\t\tComponentPropsWithoutRef<typeof Dialog.Content>,\n\t\t\"asChild\" | \"forceMount\"\n\t> {\n\t/** Motion preset override for this content panel, independent of the root preset. */\n\tmotion?: MotionPresetName;\n\t/** Built-in positioning strategy. Use \"none\" for custom primitive compositions. */\n\tplacement?: \"center\" | \"none\";\n\t/** Internal shared layout ID override for grouped media. */\n\tsharedLayoutId?: string | false;\n}\n\nconst ApertoContent = forwardRef<HTMLDivElement, ApertoContentProps>(\n\t(\n\t\t{\n\t\t\tchildren,\n\t\t\tclassName,\n\t\t\tmotion: motionOverride,\n\t\t\tplacement = \"center\",\n\t\t\tsharedLayoutId,\n\t\t\tstyle,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst ctx = useApertoContext();\n\t\tconst [isDragging, setIsDragging] = useState(false);\n\t\tconst resolved = resolvePreset(\n\t\t\t\"content\",\n\t\t\tmotionOverride,\n\t\t\tctx.presetName,\n\t\t\tctx.variants,\n\t\t\tctx.reduceMotion,\n\t\t);\n\n\t\tconst contentLayoutId =\n\t\t\tsharedLayoutId === false\n\t\t\t\t? undefined\n\t\t\t\t: (sharedLayoutId ?? `${ctx.layoutId}-shared`);\n\n\t\tconst dragSpring = getDragSpring(resolved);\n\t\tconst isDismissible = ctx.dismissible !== false;\n\n\t\tconst dismissConfig: DismissibleConfig =\n\t\t\ttypeof ctx.dismissible === \"object\" ? ctx.dismissible : {};\n\t\tconst distanceThreshold =\n\t\t\tdismissConfig.threshold ?? DEFAULT_DISTANCE_THRESHOLD;\n\t\tconst velocityThreshold =\n\t\t\tdismissConfig.velocity ?? DEFAULT_VELOCITY_THRESHOLD;\n\n\t\tconst dragX = useMotionValue(0);\n\t\tconst dragY = useMotionValue(0);\n\t\tconst springX = useSpring(dragX, dragSpring);\n\t\tconst springY = useSpring(dragY, dragSpring);\n\n\t\tconst distance = useTransform(() =>\n\t\t\tMath.hypot(springX.get(), springY.get()),\n\t\t);\n\t\tconst scaleMotion = useTransform(distance, SCALE_INPUT, SCALE_OUTPUT);\n\t\tconst opacityMotion = useTransform(distance, OPACITY_INPUT, OPACITY_OUTPUT);\n\t\tconst resistance = useTransform(distance, calculateResistance);\n\n\t\tconst handleDrag = useCallback(\n\t\t\t(_event: MouseEvent | TouchEvent | PointerEvent, info: PanInfo) => {\n\t\t\t\tif (!isDragging) {\n\t\t\t\t\tsetIsDragging(true);\n\t\t\t\t}\n\t\t\t\tconst r = resistance.get();\n\t\t\t\tdragX.set(info.offset.x * r);\n\t\t\t\tdragY.set(info.offset.y * r);\n\t\t\t},\n\t\t\t[dragX, dragY, isDragging, resistance],\n\t\t);\n\n\t\tconst handleDragEnd = useCallback(\n\t\t\t(_event: MouseEvent | TouchEvent | PointerEvent, info: PanInfo) => {\n\t\t\t\tsetIsDragging(false);\n\t\t\t\tconst speed = Math.hypot(info.velocity.x, info.velocity.y);\n\t\t\t\tconst dist = Math.hypot(info.offset.x, info.offset.y);\n\n\t\t\t\tif (speed > velocityThreshold || dist > distanceThreshold) {\n\t\t\t\t\tctx.onOpenChange(false);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tdragX.set(0);\n\t\t\t\tdragY.set(0);\n\t\t\t},\n\t\t\t[ctx.onOpenChange, distanceThreshold, dragX, dragY, velocityThreshold],\n\t\t);\n\n\t\tconst motionStyle = useMemo(\n\t\t\t(): MotionStyle => ({\n\t\t\t\tcursor: isDragging ? \"grabbing\" : isDismissible ? \"grab\" : undefined,\n\t\t\t\topacity: opacityMotion,\n\t\t\t\tscale: scaleMotion,\n\t\t\t\tx: springX,\n\t\t\t\ty: springY,\n\t\t\t\t...(placement === \"center\"\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tleft: \"50%\",\n\t\t\t\t\t\t\ttop: \"50%\",\n\t\t\t\t\t\t\ttranslate: \"-50% -50%\",\n\t\t\t\t\t\t}\n\t\t\t\t\t: {}),\n\t\t\t\t...style,\n\t\t\t}),\n\t\t\t[\n\t\t\t\tisDismissible,\n\t\t\t\tisDragging,\n\t\t\t\topacityMotion,\n\t\t\t\tplacement,\n\t\t\t\tscaleMotion,\n\t\t\t\tspringX,\n\t\t\t\tspringY,\n\t\t\t\tstyle,\n\t\t\t],\n\t\t);\n\n\t\treturn (\n\t\t\t<Dialog.Content asChild forceMount {...props}>\n\t\t\t\t<motion.div\n\t\t\t\t\tclassName={className}\n\t\t\t\t\tdata-slot=\"aperto-content\"\n\t\t\t\t\tdrag={isDismissible}\n\t\t\t\t\tdragConstraints={{ bottom: 0, left: 0, right: 0, top: 0 }}\n\t\t\t\t\tdragElastic={0}\n\t\t\t\t\tdragMomentum={false}\n\t\t\t\t\tdragSnapToOrigin\n\t\t\t\t\tlayout={contentLayoutId ? true : undefined}\n\t\t\t\t\tlayoutId={contentLayoutId}\n\t\t\t\t\tonDrag={isDismissible ? handleDrag : undefined}\n\t\t\t\t\tonDragEnd={isDismissible ? handleDragEnd : undefined}\n\t\t\t\t\tref={ref}\n\t\t\t\t\tstyle={motionStyle}\n\t\t\t\t\ttransition={resolved.transition}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</motion.div>\n\t\t\t</Dialog.Content>\n\t\t);\n\t},\n);\n\nApertoContent.displayName = \"ApertoContent\";\n\nexport { ApertoContent };\n","\"use client\";\n\nimport { createContext, useContext } from \"react\";\nimport type { ApertoContextValue } from \"./types\";\n\nexport const ApertoContext = createContext<ApertoContextValue | null>(null);\n\nexport function useApertoContext(): ApertoContextValue {\n\tconst ctx = useContext(ApertoContext);\n\tif (!ctx) {\n\t\tthrow new Error(\"Aperto components must be used within <Aperto.Root>\");\n\t}\n\treturn ctx;\n}\n","/**\n * Drag physics utilities.\n *\n * The logarithmic resistance function creates a rubber-band feel:\n * initial movement is free, but gets progressively harder the further\n * you drag. Combined with spring-smoothed motion values, this produces\n * a natural, elastic gesture.\n */\n\nconst RESISTANCE_DIVISOR = 20;\nconst RESISTANCE_SCALE = 4;\nconst RESISTANCE_MIN = 0.1;\n\n/**\n * Logarithmic resistance — decelerates drag progressively.\n * Returns a multiplier between RESISTANCE_MIN and 1.0.\n *\n * At distance 0: returns 1.0 (full movement)\n * At distance 50: returns ~0.77\n * At distance 100: returns ~0.58\n * At distance 200: returns ~0.42\n */\nexport function calculateResistance(distance: number): number {\n\treturn Math.max(\n\t\tRESISTANCE_MIN,\n\t\t1 - Math.log(distance / RESISTANCE_DIVISOR + 1) / RESISTANCE_SCALE,\n\t);\n}\n\n/** Scale mapping: distance → visual scale (1.0 → 0.95) */\nexport const SCALE_INPUT = [0, 50, 100];\nexport const SCALE_OUTPUT = [1, 0.98, 0.95];\n\n/** Opacity mapping: distance → visual opacity (1.0 → 0.96) */\nexport const OPACITY_INPUT = [0, 80];\nexport const OPACITY_OUTPUT = [1, 0.96];\n\n/** Default dismissal thresholds */\nexport const DEFAULT_DISTANCE_THRESHOLD = 100;\nexport const DEFAULT_VELOCITY_THRESHOLD = 500;\n","import type { Easing } from \"motion/react\";\n\nexport const durations = {\n\tsnappy: 0.22,\n\tmoderate: 0.4,\n} as const;\n\nexport const easings = {\n\tcustomGentle: [0.25, 0.1, 0.12, 1],\n\tsnappy: [0.22, 1, 0.36, 1],\n} satisfies Record<string, Easing>;\n\nexport const springs = {\n\tbouncy: { stiffness: 260, damping: 12, mass: 1 },\n\tnatural: { stiffness: 200, damping: 20, mass: 1 },\n\tsnappy: { stiffness: 400, damping: 28, mass: 0.8 },\n\tstiff: { stiffness: 500, damping: 30, mass: 1 },\n} as const;\n","import { durations, easings, springs } from \"./motion-tokens\";\nimport type {\n\tDragSpringConfig,\n\tMotionPreset,\n\tMotionPresetName,\n\tMotionVariants,\n} from \"./types\";\n\n/**\n * Motion presets — each bundles transition timing AND drag physics\n * so \"snappy\" feels snappy everywhere: open, close, and drag.\n *\n * Curves and springs are local copies of the Howells motion tokens so the\n * published package has no private workspace runtime dependencies.\n */\nexport const PRESETS: Record<MotionPresetName, MotionPreset> = {\n\tsnappy: {\n\t\ttransition: { ease: easings.snappy, duration: durations.snappy },\n\t\tdrag: {\n\t\t\tstiffness: springs.stiff.stiffness,\n\t\t\tdamping: springs.stiff.damping,\n\t\t\trestDelta: 0.01,\n\t\t},\n\t},\n\tsmooth: {\n\t\ttransition: { ease: easings.customGentle, duration: durations.moderate },\n\t\tdrag: {\n\t\t\tstiffness: springs.natural.stiffness,\n\t\t\tdamping: springs.natural.damping,\n\t\t\trestDelta: 0.01,\n\t\t},\n\t},\n\tbouncy: {\n\t\ttransition: {\n\t\t\ttype: \"spring\",\n\t\t\tstiffness: springs.bouncy.stiffness,\n\t\t\tdamping: springs.bouncy.damping,\n\t\t\tmass: springs.bouncy.mass,\n\t\t},\n\t\tdrag: {\n\t\t\tstiffness: springs.snappy.stiffness,\n\t\t\tdamping: springs.snappy.damping,\n\t\t\trestDelta: 0.01,\n\t\t},\n\t},\n\treduced: {\n\t\ttransition: { ease: \"linear\", duration: 0.01 },\n\t\tdrag: { stiffness: 1000, damping: 50, restDelta: 0.1 },\n\t},\n};\n\ntype ComponentType = \"trigger\" | \"content\" | \"backdrop\";\n\n/**\n * Three-level motion resolution:\n * 1. Component-level override (highest)\n * 2. Per-component variant from Root\n * 3. Global preset from Root (lowest)\n *\n * If `prefers-reduced-motion` is active, always returns \"reduced\".\n */\nexport function resolvePreset(\n\tcomponentType: ComponentType,\n\tcomponentMotion: MotionPresetName | undefined,\n\tglobalPreset: MotionPresetName,\n\tvariants: MotionVariants | undefined,\n\treduceMotion: boolean,\n): MotionPreset {\n\tif (reduceMotion) {\n\t\treturn PRESETS.reduced;\n\t}\n\n\t// 1. Component-level override\n\tif (componentMotion) {\n\t\treturn PRESETS[componentMotion];\n\t}\n\n\t// 2. Per-component variant\n\tif (variants?.[componentType]) {\n\t\treturn PRESETS[variants[componentType]];\n\t}\n\n\t// 3. Global preset\n\treturn PRESETS[globalPreset];\n}\n\n/** Extract the drag spring config from a preset */\nexport function getDragSpring(preset: MotionPreset): DragSpringConfig {\n\treturn preset.drag;\n}\n","\"use client\";\n\nimport * as Dialog from \"@radix-ui/react-dialog\";\nimport { type ComponentPropsWithoutRef, forwardRef } from \"react\";\n\nconst ApertoDescription = forwardRef<\n\tHTMLParagraphElement,\n\tComponentPropsWithoutRef<typeof Dialog.Description>\n>((props, ref) => {\n\treturn (\n\t\t<Dialog.Description data-slot=\"aperto-description\" ref={ref} {...props} />\n\t);\n});\n\nApertoDescription.displayName = \"ApertoDescription\";\n\nexport { ApertoDescription };\n","import { createContext, useContext } from \"react\";\nimport type {\n\tApertoClassNames,\n\tApertoMediaItem,\n\tRenderImage,\n\tRenderVideo,\n} from \"./types\";\n\nexport interface ApertoGroupContextValue {\n\tclassNames?: ApertoClassNames;\n\tindex: number;\n\tmedia: ApertoMediaItem[];\n\topen: boolean;\n\topenAtIndex: (index: number) => void;\n\tregisterThumbnail: (index: number, node: HTMLButtonElement | null) => void;\n\trenderImage?: RenderImage;\n\trenderVideo?: RenderVideo;\n\tsetIndex: (index: number) => void;\n\tsharedLayoutId: string;\n\tsharedLayoutIdForIndex: (index: number) => string;\n}\n\nexport const ApertoGroupContext = createContext<ApertoGroupContextValue | null>(\n\tnull,\n);\n\nexport function useApertoGroup(): ApertoGroupContextValue {\n\tconst ctx = useContext(ApertoGroupContext);\n\tif (!ctx) {\n\t\tthrow new Error(\"Aperto.Thumbnail must be used within <Aperto.Group>\");\n\t}\n\treturn ctx;\n}\n","\"use client\";\n\nimport * as Dialog from \"@radix-ui/react-dialog\";\nimport { motion, type Transition } from \"motion/react\";\nimport { forwardRef } from \"react\";\n\nimport { useApertoContext } from \"./context\";\nimport { easings } from \"./motion-tokens\";\n\nexport interface ApertoOverlayProps {\n\tclassName?: string;\n\t/** Internal flag used to fade the overlay during measured close transitions. */\n\tfadeOut?: boolean;\n\tstyle?: React.CSSProperties;\n}\n\n/** Overlay always fades gently regardless of the content's motion preset. */\nconst OVERLAY_TRANSITION: Transition = {\n\tduration: 0.3,\n\tease: easings.customGentle,\n};\n\nconst OVERLAY_TRANSITION_REDUCED: Transition = {\n\tduration: 0.01,\n\tease: \"linear\",\n};\n\nconst ApertoOverlay = forwardRef<HTMLDivElement, ApertoOverlayProps>(\n\t({ className, fadeOut, style }, ref) => {\n\t\tconst ctx = useApertoContext();\n\t\tconst transition = ctx.reduceMotion\n\t\t\t? OVERLAY_TRANSITION_REDUCED\n\t\t\t: OVERLAY_TRANSITION;\n\n\t\treturn (\n\t\t\t<Dialog.Overlay asChild forceMount>\n\t\t\t\t<motion.div\n\t\t\t\t\tanimate={{ opacity: fadeOut ? 0 : 1 }}\n\t\t\t\t\tclassName={className}\n\t\t\t\t\tdata-slot=\"aperto-overlay\"\n\t\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\tref={ref}\n\t\t\t\t\tstyle={style}\n\t\t\t\t\ttransition={transition}\n\t\t\t\t/>\n\t\t\t</Dialog.Overlay>\n\t\t);\n\t},\n);\n\nApertoOverlay.displayName = \"ApertoOverlay\";\n\nexport { ApertoOverlay };\n","\"use client\";\n\nimport * as Dialog from \"@radix-ui/react-dialog\";\nimport { AnimatePresence } from \"motion/react\";\nimport type { ReactNode } from \"react\";\n\nimport { useApertoContext } from \"./context\";\n\nexport interface ApertoPortalProps {\n\tchildren: ReactNode;\n\t/** Container element for the portal (default: document.body) */\n\tcontainer?: HTMLElement;\n}\n\nfunction ApertoPortal({ children, container }: ApertoPortalProps) {\n\tconst { open } = useApertoContext();\n\n\treturn (\n\t\t<AnimatePresence>\n\t\t\t{open && (\n\t\t\t\t<Dialog.Portal container={container} forceMount>\n\t\t\t\t\t{children}\n\t\t\t\t</Dialog.Portal>\n\t\t\t)}\n\t\t</AnimatePresence>\n\t);\n}\n\nexport { ApertoPortal };\n","\"use client\";\n\nimport * as Dialog from \"@radix-ui/react-dialog\";\nimport { LayoutGroup, useReducedMotion } from \"motion/react\";\nimport {\n\ttype ComponentPropsWithoutRef,\n\ttype ReactNode,\n\tuseCallback,\n\tuseId,\n\tuseState,\n} from \"react\";\n\nimport { ApertoContext } from \"./context\";\nimport { PRESETS } from \"./presets\";\nimport type {\n\tDismissibleConfig,\n\tMotionPresetName,\n\tMotionVariants,\n} from \"./types\";\n\nexport interface ApertoRootProps\n\textends Omit<\n\t\tComponentPropsWithoutRef<typeof Dialog.Root>,\n\t\t\"open\" | \"onOpenChange\"\n\t> {\n\tchildren: ReactNode;\n\t/** Whether dragging can dismiss the content (default: true) */\n\tdismissible?: boolean | DismissibleConfig;\n\t/** Layout ID for shared element transition (auto-generated if omitted) */\n\tlayoutId?: string;\n\t/** Motion preset or per-component variants */\n\tmotion?: MotionPresetName | MotionVariants;\n\t/** Controlled open state */\n\topen?: boolean;\n\t/** Callback when open state changes */\n\tonOpenChange?: (open: boolean) => void;\n\t/** Force reduced motion regardless of system preference */\n\treduceMotion?: boolean;\n}\n\nfunction ApertoRoot({\n\tchildren,\n\tdismissible = true,\n\tlayoutId: layoutIdProp,\n\tmotion: motionProp = \"smooth\",\n\topen: controlledOpen,\n\tonOpenChange: controlledOnOpenChange,\n\treduceMotion: reduceMotionProp,\n\t...dialogProps\n}: ApertoRootProps) {\n\tconst generatedId = useId();\n\tconst layoutId = layoutIdProp ?? `aperto-${generatedId}`;\n\tconst systemReducedMotion = useReducedMotion() ?? false;\n\tconst shouldReduce = reduceMotionProp ?? systemReducedMotion;\n\n\t// Uncontrolled state fallback\n\tconst [internalOpen, setInternalOpen] = useState(false);\n\tconst isControlled = controlledOpen !== undefined;\n\tconst open = isControlled ? controlledOpen : internalOpen;\n\n\tconst onOpenChange = useCallback(\n\t\t(nextOpen: boolean) => {\n\t\t\tif (!isControlled) {\n\t\t\t\tsetInternalOpen(nextOpen);\n\t\t\t}\n\t\t\tcontrolledOnOpenChange?.(nextOpen);\n\t\t},\n\t\t[isControlled, controlledOnOpenChange],\n\t);\n\n\t// Resolve global preset name\n\tconst globalPresetName: MotionPresetName =\n\t\ttypeof motionProp === \"string\" ? motionProp : \"smooth\";\n\tconst variants: MotionVariants | undefined =\n\t\ttypeof motionProp === \"object\" ? motionProp : undefined;\n\n\tconst presetName: MotionPresetName = shouldReduce\n\t\t? \"reduced\"\n\t\t: globalPresetName;\n\tconst preset = PRESETS[presetName];\n\n\treturn (\n\t\t<ApertoContext.Provider\n\t\t\tvalue={{\n\t\t\t\tdismissible,\n\t\t\t\tlayoutId,\n\t\t\t\tonOpenChange,\n\t\t\t\topen,\n\t\t\t\tpreset,\n\t\t\t\tpresetName,\n\t\t\t\treduceMotion: shouldReduce,\n\t\t\t\tvariants,\n\t\t\t}}\n\t\t>\n\t\t\t<Dialog.Root onOpenChange={onOpenChange} open={open} {...dialogProps}>\n\t\t\t\t<LayoutGroup id={layoutId}>{children}</LayoutGroup>\n\t\t\t</Dialog.Root>\n\t\t</ApertoContext.Provider>\n\t);\n}\n\nexport { ApertoRoot };\n","\"use client\";\n\nimport * as Dialog from \"@radix-ui/react-dialog\";\nimport { type ComponentPropsWithoutRef, forwardRef } from \"react\";\n\nconst ApertoTitle = forwardRef<\n\tHTMLHeadingElement,\n\tComponentPropsWithoutRef<typeof Dialog.Title>\n>((props, ref) => {\n\treturn <Dialog.Title data-slot=\"aperto-title\" ref={ref} {...props} />;\n});\n\nApertoTitle.displayName = \"ApertoTitle\";\n\nexport { ApertoTitle };\n","import {\n\tAnimatePresence,\n\tmotion,\n\ttype TargetAndTransition,\n\ttype Transition,\n} from \"motion/react\";\nimport { useApertoContext } from \"./context\";\nimport { getMediaKey, renderExpandedMedia } from \"./media-rendering\";\nimport type {\n\tApertoMediaItem,\n\tNavigationMotionPresetName,\n\tRenderImage,\n\tRenderVideo,\n} from \"./types\";\n\nexport type NavigationDirection = -1 | 0 | 1;\n\ninterface NavigationMotionPreset {\n\toffset: number;\n\tscale: number;\n\ttransition: Transition;\n}\n\ninterface NavigationAnimationCustom {\n\tdirection: NavigationDirection;\n\toffset: number;\n\tscale: number;\n}\n\nconst NAVIGATION_MOTION_PRESETS: Record<\n\tNavigationMotionPresetName,\n\tNavigationMotionPreset\n> = {\n\tfloat: {\n\t\toffset: 96,\n\t\tscale: 0.97,\n\t\ttransition: {\n\t\t\topacity: { duration: 0.34, ease: [0.45, 0, 0.2, 1] },\n\t\t\tscale: { damping: 26, mass: 1.15, stiffness: 80, type: \"spring\" },\n\t\t\tx: { damping: 26, mass: 1.15, stiffness: 80, type: \"spring\" },\n\t\t},\n\t},\n\tglide: {\n\t\toffset: 58,\n\t\tscale: 0.984,\n\t\ttransition: {\n\t\t\topacity: { duration: 0.24, ease: [0.4, 0, 0.2, 1] },\n\t\t\tscale: { damping: 28, mass: 0.95, stiffness: 150, type: \"spring\" },\n\t\t\tx: { damping: 28, mass: 0.95, stiffness: 150, type: \"spring\" },\n\t\t},\n\t},\n\tsnap: {\n\t\toffset: 38,\n\t\tscale: 0.996,\n\t\ttransition: {\n\t\t\topacity: { duration: 0.12, ease: [0.2, 0, 0, 1] },\n\t\t\tscale: { damping: 34, mass: 0.7, stiffness: 420, type: \"spring\" },\n\t\t\tx: { damping: 34, mass: 0.7, stiffness: 420, type: \"spring\" },\n\t\t},\n\t},\n};\n\nconst REDUCED_EXPANDED_MEDIA_TRANSITION: Transition = {\n\tduration: 0.12,\n\tease: \"linear\",\n};\n\nconst expandedMediaVariants = {\n\tcenter: {\n\t\topacity: 1,\n\t\tscale: 1,\n\t\tx: 0,\n\t},\n\tenter: ({\n\t\tdirection,\n\t\toffset,\n\t\tscale,\n\t}: NavigationAnimationCustom): TargetAndTransition => ({\n\t\topacity: 0,\n\t\tscale: direction === 0 ? 1 : scale,\n\t\tx: direction * offset,\n\t}),\n\texit: ({\n\t\tdirection,\n\t\toffset,\n\t\tscale,\n\t}: NavigationAnimationCustom): TargetAndTransition => ({\n\t\topacity: 0,\n\t\tscale: direction === 0 ? 1 : scale,\n\t\tx: direction * -offset,\n\t}),\n};\n\nconst reducedExpandedMediaVariants = {\n\tcenter: {\n\t\topacity: 1,\n\t\tx: 0,\n\t},\n\tenter: {\n\t\topacity: 0,\n\t\tx: 0,\n\t},\n\texit: {\n\t\topacity: 0,\n\t\tx: 0,\n\t},\n};\n\nexport function ApertoExpandedMediaStage({\n\tdirection,\n\tindex,\n\titem,\n\tnavigationMotion,\n\trenderImage,\n\trenderVideo,\n}: {\n\tdirection: NavigationDirection;\n\tindex: number;\n\titem: ApertoMediaItem;\n\tnavigationMotion: NavigationMotionPresetName;\n\trenderImage?: RenderImage;\n\trenderVideo?: RenderVideo;\n}) {\n\tconst ctx = useApertoContext();\n\tconst preset = NAVIGATION_MOTION_PRESETS[navigationMotion];\n\tconst transition = ctx.reduceMotion\n\t\t? REDUCED_EXPANDED_MEDIA_TRANSITION\n\t\t: preset.transition;\n\tconst variants = ctx.reduceMotion\n\t\t? reducedExpandedMediaVariants\n\t\t: expandedMediaVariants;\n\tconst animationCustom: NavigationAnimationCustom = {\n\t\tdirection,\n\t\toffset: preset.offset,\n\t\tscale: preset.scale,\n\t};\n\n\treturn (\n\t\t<AnimatePresence custom={animationCustom} initial={false} mode=\"sync\">\n\t\t\t<motion.div\n\t\t\t\tanimate=\"center\"\n\t\t\t\tcustom={animationCustom}\n\t\t\t\tdata-navigation-direction={direction}\n\t\t\t\tdata-navigation-motion={navigationMotion}\n\t\t\t\tdata-slot=\"aperto-media-stage\"\n\t\t\t\texit=\"exit\"\n\t\t\t\tinitial=\"enter\"\n\t\t\t\tkey={getMediaKey(item, index)}\n\t\t\t\ttransition={transition}\n\t\t\t\tvariants={variants}\n\t\t\t>\n\t\t\t\t{renderExpandedMedia(item, renderImage, renderVideo)}\n\t\t\t</motion.div>\n\t\t</AnimatePresence>\n\t);\n}\n","import type { ReactNode } from \"react\";\nimport type { ApertoMediaItem, RenderImage, RenderVideo } from \"./types\";\n\nexport function getMediaLabel(item: ApertoMediaItem): string {\n\treturn item.title ?? item.alt ?? \"media\";\n}\n\nexport function getMediaKey(item: ApertoMediaItem, index: number): string {\n\treturn item.id ?? `${item.type}:${item.src}:${index}`;\n}\n\nexport function getDescriptionProps(item: ApertoMediaItem): {\n\t\"aria-describedby\"?: undefined;\n} {\n\treturn item.description ? {} : { \"aria-describedby\": undefined };\n}\n\nfunction renderDefaultImage(props: Parameters<RenderImage>[0]): ReactNode {\n\tconst { item: _item, variant: _variant, ...imageProps } = props;\n\treturn <img {...imageProps} alt={imageProps.alt ?? \"\"} />;\n}\n\nfunction renderDefaultVideo(props: Parameters<RenderVideo>[0]): ReactNode {\n\tconst { item: _item, variant, ...videoProps } = props;\n\tif (variant === \"thumbnail\") {\n\t\treturn (\n\t\t\t<img alt={videoProps[\"aria-label\"] ?? \"\"} src={props.item.thumbnailSrc} />\n\t\t);\n\t}\n\treturn <video {...videoProps} />;\n}\n\nexport function renderThumbnail(\n\titem: ApertoMediaItem,\n\trenderImage?: RenderImage,\n\trenderVideo?: RenderVideo,\n): ReactNode {\n\tif (item.type === \"image\") {\n\t\tconst imageProps: Parameters<RenderImage>[0] = {\n\t\t\talt: \"\",\n\t\t\theight: item.height,\n\t\t\titem,\n\t\t\tsrc: item.thumbnailSrc ?? item.src,\n\t\t\tvariant: \"thumbnail\",\n\t\t\twidth: item.width,\n\t\t};\n\t\treturn (renderImage ?? renderDefaultImage)(imageProps);\n\t}\n\n\tconst videoProps: Parameters<RenderVideo>[0] = {\n\t\t\"aria-label\": item.alt ?? item.title ?? \"Video thumbnail\",\n\t\theight: item.height,\n\t\titem,\n\t\tposter: item.poster,\n\t\tsrc: item.thumbnailSrc,\n\t\tvariant: \"thumbnail\",\n\t\twidth: item.width,\n\t};\n\treturn (renderVideo ?? renderDefaultVideo)(videoProps);\n}\n\nexport function renderExpandedMedia(\n\titem: ApertoMediaItem,\n\trenderImage?: RenderImage,\n\trenderVideo?: RenderVideo,\n): ReactNode {\n\tif (item.type === \"image\") {\n\t\tconst imageProps: Parameters<RenderImage>[0] = {\n\t\t\talt: item.alt,\n\t\t\theight: item.height,\n\t\t\titem,\n\t\t\tsrc: item.src,\n\t\t\tvariant: \"expanded\",\n\t\t\twidth: item.width,\n\t\t};\n\t\treturn (renderImage ?? renderDefaultImage)(imageProps);\n\t}\n\n\tconst videoProps: Parameters<RenderVideo>[0] = {\n\t\t\"aria-label\": item.alt ?? item.title ?? \"Video\",\n\t\tcontrols: true,\n\t\theight: item.height,\n\t\titem,\n\t\tposter: item.poster,\n\t\tsrc: item.src,\n\t\tvariant: \"expanded\",\n\t\twidth: item.width,\n\t};\n\treturn (renderVideo ?? renderDefaultVideo)(videoProps);\n}\n\nexport function renderTransitionMedia(item: ApertoMediaItem): ReactNode {\n\tif (item.type === \"image\") {\n\t\treturn <img alt=\"\" src={item.src} />;\n\t}\n\n\treturn <img alt=\"\" src={item.poster ?? item.thumbnailSrc} />;\n}\n","import {\n\tmotion,\n\ttype TargetAndTransition,\n\ttype Transition,\n} from \"motion/react\";\nimport { useEffect } from \"react\";\nimport { useApertoContext } from \"./context\";\nimport { renderTransitionMedia } from \"./media-rendering\";\nimport type { ApertoMediaItem } from \"./types\";\n\nexport interface ApertoRect {\n\theight: number;\n\tleft: number;\n\ttop: number;\n\twidth: number;\n}\n\nexport interface ApertoMediaTransition {\n\tfrom: ApertoRect;\n\titem: ApertoMediaItem;\n\tphase: \"opening\" | \"closing\";\n\tto?: ApertoRect;\n}\n\nexport function rectFromElement(element: Element | null): ApertoRect | null {\n\tif (!element) {\n\t\treturn null;\n\t}\n\n\tconst rect = element.getBoundingClientRect();\n\treturn {\n\t\theight: rect.height,\n\t\tleft: rect.left,\n\t\ttop: rect.top,\n\t\twidth: rect.width,\n\t};\n}\n\nfunction rectTarget(rect: ApertoRect): TargetAndTransition {\n\treturn {\n\t\theight: rect.height,\n\t\tleft: rect.left,\n\t\ttop: rect.top,\n\t\twidth: rect.width,\n\t};\n}\n\nfunction transitionDurationMs(transition: Transition): number {\n\treturn typeof transition.duration === \"number\"\n\t\t? transition.duration * 1000\n\t\t: 450;\n}\n\nexport function ApertoMediaTransitionClone({\n\tonComplete,\n\ttransition,\n}: {\n\tonComplete: () => void;\n\ttransition: ApertoMediaTransition | null;\n}) {\n\tconst ctx = useApertoContext();\n\n\tuseEffect(() => {\n\t\tif (!transition?.to) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst timer = setTimeout(\n\t\t\tonComplete,\n\t\t\ttransitionDurationMs(ctx.preset.transition),\n\t\t);\n\t\treturn () => clearTimeout(timer);\n\t}, [ctx.preset.transition, onComplete, transition]);\n\n\tif (!transition?.to) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<motion.div\n\t\t\tanimate={rectTarget(transition.to)}\n\t\t\tdata-slot=\"aperto-transition-media\"\n\t\t\tinitial={rectTarget(transition.from)}\n\t\t\tstyle={{\n\t\t\t\tborderRadius: \"var(--aperto-radius, 0.5rem)\",\n\t\t\t\toverflow: \"hidden\",\n\t\t\t\tpointerEvents: \"none\",\n\t\t\t\tposition: \"fixed\",\n\t\t\t\twillChange: \"left, top, width, height\",\n\t\t\t\tzIndex: 1002,\n\t\t\t}}\n\t\t\ttransition={ctx.preset.transition}\n\t\t>\n\t\t\t{renderTransitionMedia(transition.item)}\n\t\t</motion.div>\n\t);\n}\n","export function shouldIgnoreKeyboardNavigationTarget(\n\ttarget: EventTarget | null,\n): boolean {\n\tif (!(target instanceof Element)) {\n\t\treturn false;\n\t}\n\n\treturn (\n\t\t(target as HTMLElement).isContentEditable ||\n\t\tBoolean(\n\t\t\ttarget.closest(\n\t\t\t\t'input, textarea, select, [contenteditable]:not([contenteditable=\"false\"]), [role=\"textbox\"], audio, video',\n\t\t\t),\n\t\t)\n\t);\n}\n","\"use client\";\n\nimport * as Dialog from \"@radix-ui/react-dialog\";\nimport { X } from \"lucide-react\";\nimport { type ComponentPropsWithoutRef, forwardRef } from \"react\";\n\nconst ApertoClose = forwardRef<\n\tHTMLButtonElement,\n\tComponentPropsWithoutRef<typeof Dialog.Close>\n>(({ children, ...props }, ref) => {\n\treturn (\n\t\t<Dialog.Close data-slot=\"aperto-close\" ref={ref} {...props}>\n\t\t\t{children ?? <X aria-hidden=\"true\" size={17} strokeWidth={2} />}\n\t\t</Dialog.Close>\n\t);\n});\n\nApertoClose.displayName = \"ApertoClose\";\n\nexport { ApertoClose };\n","\"use client\";\n\nimport * as Dialog from \"@radix-ui/react-dialog\";\nimport { motion } from \"motion/react\";\nimport {\n\ttype ComponentPropsWithoutRef,\n\tforwardRef,\n\tuseCallback,\n\tuseEffect,\n\tuseState,\n} from \"react\";\n\nimport { useApertoContext } from \"./context\";\nimport { resolvePreset } from \"./presets\";\nimport type { MotionPresetName } from \"./types\";\n\nconst TRIGGER_OPEN_Z_INDEX = 1000;\n\nexport interface ApertoTriggerProps\n\textends ComponentPropsWithoutRef<typeof Dialog.Trigger> {\n\t/** Internal flag used by grouped thumbnails to raise only the active trigger. */\n\tactive?: boolean;\n\t/** Override motion preset for this trigger */\n\tmotion?: MotionPresetName;\n\t/** Internal shared layout ID override for grouped thumbnails. */\n\tsharedLayoutId?: string | false;\n}\n\nconst ApertoTrigger = forwardRef<HTMLButtonElement, ApertoTriggerProps>(\n\t(\n\t\t{ active, children, motion: motionOverride, sharedLayoutId, ...props },\n\t\tref,\n\t) => {\n\t\tconst ctx = useApertoContext();\n\t\tconst shouldRaise = ctx.open && (active ?? true);\n\t\tconst [zIndex, setZIndex] = useState(\n\t\t\tshouldRaise ? TRIGGER_OPEN_Z_INDEX : 0,\n\t\t);\n\n\t\tuseEffect(() => {\n\t\t\tif (shouldRaise) {\n\t\t\t\tsetZIndex(TRIGGER_OPEN_Z_INDEX);\n\t\t\t} else if (ctx.open) {\n\t\t\t\tsetZIndex(0);\n\t\t\t}\n\t\t}, [ctx.open, shouldRaise]);\n\n\t\tconst handleLayoutAnimationComplete = useCallback(() => {\n\t\t\tif (!shouldRaise) {\n\t\t\t\tsetZIndex(0);\n\t\t\t}\n\t\t}, [shouldRaise]);\n\n\t\tconst resolved = resolvePreset(\n\t\t\t\"trigger\",\n\t\t\tmotionOverride,\n\t\t\tctx.presetName,\n\t\t\tctx.variants,\n\t\t\tctx.reduceMotion,\n\t\t);\n\t\tconst layoutId =\n\t\t\tsharedLayoutId === false\n\t\t\t\t? undefined\n\t\t\t\t: (sharedLayoutId ?? `${ctx.layoutId}-shared`);\n\n\t\treturn (\n\t\t\t<Dialog.Trigger asChild ref={ref} {...props}>\n\t\t\t\t<motion.button\n\t\t\t\t\tdata-aperto-active={shouldRaise ? \"\" : undefined}\n\t\t\t\t\tdata-slot=\"aperto-trigger\"\n\t\t\t\t\tkey={layoutId ?? \"unshared\"}\n\t\t\t\t\tlayout\n\t\t\t\t\tlayoutCrossfade={false}\n\t\t\t\t\tlayoutId={layoutId}\n\t\t\t\t\tonLayoutAnimationComplete={handleLayoutAnimationComplete}\n\t\t\t\t\tstyle={{ zIndex }}\n\t\t\t\t\ttransition={resolved.transition}\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</motion.button>\n\t\t\t</Dialog.Trigger>\n\t\t);\n\t},\n);\n\nApertoTrigger.displayName = \"ApertoTrigger\";\n\nexport { ApertoTrigger };\n","\"use client\";\n\nimport { ApertoClose } from \"../aperto-close\";\nimport { ApertoContent } from \"../aperto-content\";\nimport { ApertoDescription } from \"../aperto-description\";\nimport { ApertoOverlay } from \"../aperto-overlay\";\nimport { ApertoPortal } from \"../aperto-portal\";\nimport { ApertoRoot } from \"../aperto-root\";\nimport { ApertoTitle } from \"../aperto-title\";\nimport { ApertoTrigger } from \"../aperto-trigger\";\nimport {\n\tgetDescriptionProps,\n\tgetMediaLabel,\n\trenderExpandedMedia,\n\trenderThumbnail,\n} from \"../media-rendering\";\nimport type { ApertoProps } from \"./ApertoTypes\";\n\nexport function ApertoSingle({\n\tclassNames,\n\tdismissible,\n\tmedia,\n\trenderImage,\n\trenderVideo,\n}: ApertoProps) {\n\tconst label = getMediaLabel(media);\n\tconst title = media.title ?? label;\n\n\treturn (\n\t\t<ApertoRoot dismissible={dismissible}>\n\t\t\t<ApertoTrigger\n\t\t\t\taria-label={`Open ${label}`}\n\t\t\t\tclassName={classNames?.thumbnail}\n\t\t\t>\n\t\t\t\t{renderThumbnail(media, renderImage, renderVideo)}\n\t\t\t</ApertoTrigger>\n\t\t\t<ApertoPortal>\n\t\t\t\t<ApertoOverlay className={classNames?.overlay} />\n\t\t\t\t<ApertoContent\n\t\t\t\t\tclassName={classNames?.content}\n\t\t\t\t\t{...getDescriptionProps(media)}\n\t\t\t\t>\n\t\t\t\t\t{renderExpandedMedia(media, renderImage, renderVideo)}\n\t\t\t\t\t<ApertoTitle>{title}</ApertoTitle>\n\t\t\t\t\t{media.description ? (\n\t\t\t\t\t\t<ApertoDescription>{media.description}</ApertoDescription>\n\t\t\t\t\t) : null}\n\t\t\t\t\t<ApertoClose\n\t\t\t\t\t\taria-label=\"Close\"\n\t\t\t\t\t\tclassName={classNames?.closeButton}\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t/>\n\t\t\t\t</ApertoContent>\n\t\t\t</ApertoPortal>\n\t\t</ApertoRoot>\n\t);\n}\n","\"use client\";\n\nimport { useApertoGroup } from \"../aperto-group-context\";\nimport { ApertoTrigger } from \"../aperto-trigger\";\nimport { getMediaLabel, renderThumbnail } from \"../media-rendering\";\nimport type { ApertoThumbnailProps } from \"./ApertoTypes\";\n\nexport function ApertoThumbnail({\n\tchildren,\n\tclassName,\n\tindex,\n}: ApertoThumbnailProps) {\n\tconst group = useApertoGroup();\n\tconst media = group.media[index];\n\n\tif (!media) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<ApertoTrigger\n\t\t\tactive={group.index === index}\n\t\t\taria-label={`Open ${getMediaLabel(media)}`}\n\t\t\tclassName={className ?? group.classNames?.thumbnail}\n\t\t\tonClick={() => group.openAtIndex(index)}\n\t\t\tref={(node) => group.registerThumbnail(index, node)}\n\t\t\tsharedLayoutId={false}\n\t\t>\n\t\t\t{children ?? renderThumbnail(media, group.renderImage, group.renderVideo)}\n\t\t</ApertoTrigger>\n\t);\n}\n","\"use client\";\n\n/**\n * @patternmode/aperto\n *\n * Opinionated thumbnail-to-expanded media transitions.\n * Built on Radix Dialog + Motion.\n *\n * Inspired by Cambio (https://github.com/raphaelsalaja/cambio)\n * by Raphael Salaja.\n *\n * @example\n * ```tsx\n * import { Aperto } from \"@patternmode/aperto\";\n *\n * import { Aperto } from \"@patternmode/aperto\";\n * import \"@patternmode/aperto/styles.css\";\n *\n * <Aperto.Group media={media}>\n * {media.map((item, index) => (\n * <Aperto.Thumbnail key={item.id ?? item.src} index={index} />\n * ))}\n * </Aperto.Group>\n * ```\n */\n\nimport {\n\tApertoGroup,\n\ttype ApertoGroupProps,\n\ttype ApertoProps,\n\tApertoSingle,\n\tApertoThumbnail,\n\ttype ApertoThumbnailProps,\n} from \"./aperto\";\nimport { ApertoClose } from \"./aperto-close\";\nimport { ApertoContent, type ApertoContentProps } from \"./aperto-content\";\nimport { ApertoDescription } from \"./aperto-description\";\nimport { ApertoOverlay, type ApertoOverlayProps } from \"./aperto-overlay\";\nimport { ApertoPortal, type ApertoPortalProps } from \"./aperto-portal\";\nimport { ApertoRoot, type ApertoRootProps } from \"./aperto-root\";\nimport { ApertoTitle } from \"./aperto-title\";\nimport { ApertoTrigger, type ApertoTriggerProps } from \"./aperto-trigger\";\n\n/** Lower-level compound component namespace for advanced composition. */\nconst ApertoPrimitive = {\n\tClose: ApertoClose,\n\tContent: ApertoContent,\n\tDescription: ApertoDescription,\n\tOverlay: ApertoOverlay,\n\tPortal: ApertoPortal,\n\tRoot: ApertoRoot,\n\tTitle: ApertoTitle,\n\tTrigger: ApertoTrigger,\n};\n\n/** Primary media-first component namespace. */\nconst Aperto = Object.assign(ApertoSingle, {\n\tGroup: ApertoGroup,\n\tPrimitive: ApertoPrimitive,\n\tThumbnail: ApertoThumbnail,\n});\n\n// Preset system\nexport { PRESETS, resolvePreset } from \"./presets\";\n// Types\nexport type {\n\tApertoClassNames,\n\tApertoImageItem,\n\tApertoMediaItem,\n\tApertoVideoItem,\n\tDismissibleConfig,\n\tDragSpringConfig,\n\tMotionPreset,\n\tMotionPresetName,\n\tMotionProp,\n\tMotionVariants,\n\tNavigationMotionPresetName,\n\tRenderImage,\n\tRenderVideo,\n} from \"./types\";\n// Named exports for tree-shaking\nexport {\n\tAperto,\n\tApertoClose,\n\tApertoContent,\n\ttype ApertoContentProps,\n\tApertoDescription,\n\tApertoGroup,\n\ttype ApertoGroupProps,\n\tApertoOverlay,\n\ttype ApertoOverlayProps,\n\tApertoPortal,\n\ttype ApertoPortalProps,\n\tApertoPrimitive,\n\ttype ApertoProps,\n\tApertoRoot,\n\ttype ApertoRootProps,\n\tApertoThumbnail,\n\ttype ApertoThumbnailProps,\n\tApertoTitle,\n\tApertoTrigger,\n\ttype ApertoTriggerProps,\n};\n"],"mappings":"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","names":["useCallback","useId","useMemo","useState","Dialog","forwardRef","jsx","createContext","useContext","Dialog","motion","forwardRef","jsx","forwardRef","motion","Dialog","jsx","Dialog","useCallback","useState","jsx","useState","useCallback","Dialog","forwardRef","jsx","AnimatePresence","motion","jsx","jsx","AnimatePresence","motion","motion","jsx","motion","jsx","useId","useState","useCallback","useMemo","Dialog","X","forwardRef","jsx","Dialog","motion","forwardRef","useCallback","useEffect","useState","jsx","forwardRef","useState","useEffect","useCallback","motion","jsx","jsxs","jsx"]}
|
|
1
|
+
{"version":3,"sources":["../src/Aperto/ApertoGroup.tsx","../src/aperto-content.tsx","../src/context.ts","../src/physics.ts","../src/motion-tokens.ts","../src/presets.ts","../src/aperto-description.tsx","../src/aperto-group-context.ts","../src/aperto-overlay.tsx","../src/aperto-portal.tsx","../src/aperto-root.tsx","../src/aperto-title.tsx","../src/expanded-media-stage.tsx","../src/media-rendering.tsx","../src/media-transition.tsx","../src/Aperto/ApertoKeyboard.ts","../src/aperto-close.tsx","../src/aperto-trigger.tsx","../src/Aperto/ApertoSingle.tsx","../src/Aperto/ApertoThumbnail.tsx","../src/index.ts"],"sourcesContent":["\"use client\";\n\nimport { ChevronLeft, ChevronRight, X } from \"lucide-react\";\nimport {\n\ttype CSSProperties,\n\ttype KeyboardEvent,\n\tuseCallback,\n\tuseId,\n\tuseLayoutEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { flushSync } from \"react-dom\";\n\nimport { ApertoContent } from \"../aperto-content\";\nimport { ApertoDescription } from \"../aperto-description\";\nimport { ApertoGroupContext } from \"../aperto-group-context\";\nimport { ApertoOverlay } from \"../aperto-overlay\";\nimport { ApertoPortal } from \"../aperto-portal\";\nimport { ApertoRoot } from \"../aperto-root\";\nimport { ApertoTitle } from \"../aperto-title\";\nimport {\n\tApertoExpandedMediaStage,\n\ttype NavigationDirection,\n} from \"../expanded-media-stage\";\nimport { getDescriptionProps, getMediaLabel } from \"../media-rendering\";\nimport {\n\ttype ApertoMediaTransition,\n\tApertoMediaTransitionClone,\n\trectFromElement,\n} from \"../media-transition\";\nimport { shouldIgnoreKeyboardNavigationTarget } from \"./ApertoKeyboard\";\nimport type { ApertoGroupProps } from \"./ApertoTypes\";\n\nexport function ApertoGroup({\n\tchildren,\n\tclassNames,\n\tdismissible,\n\tindex: controlledIndex,\n\tinitialIndex = 0,\n\tmedia,\n\tmotion: motionProp,\n\tnavigationMotion = \"glide\",\n\tonIndexChange,\n\trenderImage,\n\trenderVideo,\n}: ApertoGroupProps) {\n\tconst generatedId = useId();\n\tconst [internalIndex, setInternalIndex] = useState(initialIndex);\n\tconst [open, setOpen] = useState(false);\n\tconst [closing, setClosing] = useState(false);\n\tconst [mediaTransition, setMediaTransition] =\n\t\tuseState<ApertoMediaTransition | null>(null);\n\tconst [navigationDirection, setNavigationDirection] =\n\t\tuseState<NavigationDirection>(0);\n\tconst isControlled = controlledIndex !== undefined;\n\tconst index = isControlled ? controlledIndex : internalIndex;\n\tconst activeMedia = media[index] ?? media[0];\n\tconst [layoutSourceIndex, setLayoutSourceIndex] = useState(index);\n\tconst expandedMediaRef = useRef<HTMLDivElement | null>(null);\n\tconst thumbnailRefs = useRef(new Map<number, HTMLButtonElement>());\n\tconst sharedLayoutIdForIndex = useCallback(\n\t\t(nextIndex: number) => `aperto-group-${generatedId}-${nextIndex}-shared`,\n\t\t[generatedId],\n\t);\n\tconst sharedLayoutId = sharedLayoutIdForIndex(layoutSourceIndex);\n\tconst measureOpeningTarget = useCallback((node: HTMLDivElement) => {\n\t\tconst targetRect = rectFromElement(node);\n\t\tif (!targetRect) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetMediaTransition((current) => {\n\t\t\tif (current?.phase !== \"opening\" || current.to) {\n\t\t\t\treturn current;\n\t\t\t}\n\t\t\treturn { ...current, to: targetRect };\n\t\t});\n\t}, []);\n\tconst setExpandedMediaNode = useCallback(\n\t\t(node: HTMLDivElement | null) => {\n\t\t\texpandedMediaRef.current = node;\n\t\t\tif (node) {\n\t\t\t\tmeasureOpeningTarget(node);\n\t\t\t}\n\t\t},\n\t\t[measureOpeningTarget],\n\t);\n\n\tconst registerThumbnail = useCallback(\n\t\t(thumbIndex: number, node: HTMLButtonElement | null) => {\n\t\t\tif (node) {\n\t\t\t\tthumbnailRefs.current.set(thumbIndex, node);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthumbnailRefs.current.delete(thumbIndex);\n\t\t},\n\t\t[],\n\t);\n\n\tuseLayoutEffect(() => {\n\t\tif (\n\t\t\tmediaTransition?.phase !== \"opening\" ||\n\t\t\tmediaTransition.to ||\n\t\t\t!expandedMediaRef.current\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tmeasureOpeningTarget(expandedMediaRef.current);\n\t}, [measureOpeningTarget, mediaTransition]);\n\n\tconst setIndex = useCallback(\n\t\t(nextIndex: number) => {\n\t\t\tif (!isControlled) {\n\t\t\t\tsetInternalIndex(nextIndex);\n\t\t\t}\n\t\t\tonIndexChange?.(nextIndex);\n\t\t},\n\t\t[isControlled, onIndexChange],\n\t);\n\n\tconst openAtIndex = useCallback(\n\t\t(thumbIndex: number) => {\n\t\t\tconst sourceRect = rectFromElement(\n\t\t\t\tthumbnailRefs.current.get(thumbIndex) ?? null,\n\t\t\t);\n\t\t\tconst item = media[thumbIndex];\n\n\t\t\tflushSync(() => {\n\t\t\t\tsetClosing(false);\n\t\t\t\tsetMediaTransition(\n\t\t\t\t\tsourceRect && item\n\t\t\t\t\t\t? { from: sourceRect, item, phase: \"opening\" }\n\t\t\t\t\t\t: null,\n\t\t\t\t);\n\t\t\t\tsetNavigationDirection(0);\n\t\t\t\tsetLayoutSourceIndex(thumbIndex);\n\t\t\t\tsetIndex(thumbIndex);\n\t\t\t\tsetOpen(true);\n\t\t\t});\n\t\t},\n\t\t[media, setIndex],\n\t);\n\n\tconst startClose = useCallback(() => {\n\t\tif (!open || closing) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst sourceRect = rectFromElement(expandedMediaRef.current);\n\t\tconst targetRect = rectFromElement(\n\t\t\tthumbnailRefs.current.get(index) ?? null,\n\t\t);\n\n\t\tif (!activeMedia || !sourceRect || !targetRect) {\n\t\t\tsetMediaTransition(null);\n\t\t\tsetClosing(false);\n\t\t\tsetOpen(false);\n\t\t\treturn;\n\t\t}\n\n\t\tflushSync(() => {\n\t\t\tsetClosing(true);\n\t\t\tsetMediaTransition({\n\t\t\t\tfrom: sourceRect,\n\t\t\t\titem: activeMedia,\n\t\t\t\tphase: \"closing\",\n\t\t\t\tto: targetRect,\n\t\t\t});\n\t\t});\n\t}, [activeMedia, closing, index, open]);\n\n\tconst handleCloseAutoFocus = useCallback(\n\t\t(event: Event) => {\n\t\t\tevent.preventDefault();\n\t\t\tthumbnailRefs.current.get(index)?.focus({ preventScroll: true });\n\t\t},\n\t\t[index],\n\t);\n\n\tconst handleMediaTransitionComplete = useCallback(() => {\n\t\tif (mediaTransition?.phase === \"closing\") {\n\t\t\tsetOpen(false);\n\t\t\tsetClosing(false);\n\t\t}\n\t\tsetMediaTransition(null);\n\t}, [mediaTransition?.phase]);\n\n\tconst handleOpenChange = useCallback(\n\t\t(nextOpen: boolean) => {\n\t\t\tif (nextOpen) {\n\t\t\t\tsetClosing(false);\n\t\t\t\tsetOpen(true);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tstartClose();\n\t\t},\n\t\t[startClose],\n\t);\n\n\tconst value = useMemo(\n\t\t() => ({\n\t\t\tclassNames,\n\t\t\tindex,\n\t\t\tmedia,\n\t\t\topen,\n\t\t\topenAtIndex,\n\t\t\tregisterThumbnail,\n\t\t\trenderImage,\n\t\t\trenderVideo,\n\t\t\tsetIndex,\n\t\t\tsharedLayoutId,\n\t\t\tsharedLayoutIdForIndex,\n\t\t}),\n\t\t[\n\t\t\tclassNames,\n\t\t\tindex,\n\t\t\tmedia,\n\t\t\topen,\n\t\t\topenAtIndex,\n\t\t\tregisterThumbnail,\n\t\t\trenderImage,\n\t\t\trenderVideo,\n\t\t\tsetIndex,\n\t\t\tsharedLayoutId,\n\t\t\tsharedLayoutIdForIndex,\n\t\t],\n\t);\n\tconst hasNavigation = media.length > 1;\n\tconst navigateToIndex = useCallback(\n\t\t(nextIndex: number, direction: NavigationDirection) => {\n\t\t\tsetNavigationDirection(direction);\n\t\t\tsetLayoutSourceIndex(nextIndex);\n\t\t\tsetIndex(nextIndex);\n\t\t},\n\t\t[setIndex],\n\t);\n\tconst goToPrevious = useCallback(() => {\n\t\tnavigateToIndex((index - 1 + media.length) % media.length, -1);\n\t}, [index, media.length, navigateToIndex]);\n\tconst goToNext = useCallback(() => {\n\t\tnavigateToIndex((index + 1) % media.length, 1);\n\t}, [index, media.length, navigateToIndex]);\n\tconst handleContentKeyDown = useCallback(\n\t\t(event: KeyboardEvent<HTMLDivElement>) => {\n\t\t\tif (\n\t\t\t\tevent.defaultPrevented ||\n\t\t\t\tevent.altKey ||\n\t\t\t\tevent.ctrlKey ||\n\t\t\t\tevent.metaKey ||\n\t\t\t\tshouldIgnoreKeyboardNavigationTarget(event.target)\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.key === \"ArrowLeft\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tgoToPrevious();\n\t\t\t}\n\n\t\t\tif (event.key === \"ArrowRight\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tgoToNext();\n\t\t\t}\n\t\t},\n\t\t[goToNext, goToPrevious],\n\t);\n\tconst expandedMediaStyle = useMemo((): CSSProperties | undefined => {\n\t\tif (!activeMedia?.width || !activeMedia.height) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn {\n\t\t\t\"--aperto-expanded-aspect-ratio\": `${activeMedia.width} / ${activeMedia.height}`,\n\t\t\t\"--aperto-expanded-aspect-ratio-height\": activeMedia.height,\n\t\t\t\"--aperto-expanded-aspect-ratio-width\": activeMedia.width,\n\t\t} as CSSProperties;\n\t}, [activeMedia?.height, activeMedia?.width]);\n\n\treturn (\n\t\t<ApertoGroupContext.Provider value={value}>\n\t\t\t<ApertoRoot\n\t\t\t\tdismissible={dismissible}\n\t\t\t\tmotion={motionProp}\n\t\t\t\tonOpenChange={handleOpenChange}\n\t\t\t\topen={open}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t\t{activeMedia ? (\n\t\t\t\t\t<ApertoPortal>\n\t\t\t\t\t\t<ApertoOverlay className={classNames?.overlay} fadeOut={closing} />\n\t\t\t\t\t\t<ApertoContent\n\t\t\t\t\t\t\tclassName={classNames?.content}\n\t\t\t\t\t\t\tdata-aperto-transition={mediaTransition?.phase}\n\t\t\t\t\t\t\tonCloseAutoFocus={handleCloseAutoFocus}\n\t\t\t\t\t\t\tonKeyDown={hasNavigation ? handleContentKeyDown : undefined}\n\t\t\t\t\t\t\tsharedLayoutId={false}\n\t\t\t\t\t\t\t{...getDescriptionProps(activeMedia)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tdata-slot=\"aperto-media\"\n\t\t\t\t\t\t\t\tref={setExpandedMediaNode}\n\t\t\t\t\t\t\t\tstyle={expandedMediaStyle}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<ApertoExpandedMediaStage\n\t\t\t\t\t\t\t\t\tdirection={navigationDirection}\n\t\t\t\t\t\t\t\t\tindex={index}\n\t\t\t\t\t\t\t\t\titem={activeMedia}\n\t\t\t\t\t\t\t\t\tnavigationMotion={navigationMotion}\n\t\t\t\t\t\t\t\t\trenderImage={renderImage}\n\t\t\t\t\t\t\t\t\trenderVideo={renderVideo}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t{hasNavigation ? (\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\taria-label=\"Previous media\"\n\t\t\t\t\t\t\t\t\t\t\tclassName={classNames?.previousButton}\n\t\t\t\t\t\t\t\t\t\t\tdata-slot=\"aperto-previous-button\"\n\t\t\t\t\t\t\t\t\t\t\tonClick={goToPrevious}\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<ChevronLeft\n\t\t\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t\t\t\tsize={18}\n\t\t\t\t\t\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\taria-label=\"Next media\"\n\t\t\t\t\t\t\t\t\t\t\tclassName={classNames?.nextButton}\n\t\t\t\t\t\t\t\t\t\t\tdata-slot=\"aperto-next-button\"\n\t\t\t\t\t\t\t\t\t\t\tonClick={goToNext}\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<ChevronRight\n\t\t\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t\t\t\tsize={18}\n\t\t\t\t\t\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<ApertoTitle>\n\t\t\t\t\t\t\t\t{activeMedia.title ?? getMediaLabel(activeMedia)}\n\t\t\t\t\t\t\t</ApertoTitle>\n\t\t\t\t\t\t\t{activeMedia.description ? (\n\t\t\t\t\t\t\t\t<ApertoDescription>{activeMedia.description}</ApertoDescription>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t{hasNavigation ? (\n\t\t\t\t\t\t\t\t<div className={classNames?.counter} data-slot=\"aperto-counter\">\n\t\t\t\t\t\t\t\t\t{index + 1} / {media.length}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\taria-label=\"Close\"\n\t\t\t\t\t\t\t\tclassName={classNames?.closeButton}\n\t\t\t\t\t\t\t\tdata-slot=\"aperto-close\"\n\t\t\t\t\t\t\t\tonClick={startClose}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<X aria-hidden=\"true\" size={17} strokeWidth={2} />\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</ApertoContent>\n\t\t\t\t\t\t<ApertoMediaTransitionClone\n\t\t\t\t\t\t\tonComplete={handleMediaTransitionComplete}\n\t\t\t\t\t\t\trenderImage={renderImage}\n\t\t\t\t\t\t\trenderVideo={renderVideo}\n\t\t\t\t\t\t\ttransition={mediaTransition}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ApertoPortal>\n\t\t\t\t) : null}\n\t\t\t</ApertoRoot>\n\t\t</ApertoGroupContext.Provider>\n\t);\n}\n","\"use client\";\n\nimport * as Dialog from \"@radix-ui/react-dialog\";\nimport {\n\ttype MotionStyle,\n\tmotion,\n\ttype PanInfo,\n\tuseMotionValue,\n\tuseSpring,\n\tuseTransform,\n} from \"motion/react\";\nimport {\n\ttype ComponentPropsWithoutRef,\n\tforwardRef,\n\tuseCallback,\n\tuseMemo,\n\tuseState,\n} from \"react\";\n\nimport { useApertoContext } from \"./context\";\nimport {\n\tcalculateResistance,\n\tDEFAULT_DISTANCE_THRESHOLD,\n\tDEFAULT_VELOCITY_THRESHOLD,\n\tOPACITY_INPUT,\n\tOPACITY_OUTPUT,\n\tSCALE_INPUT,\n\tSCALE_OUTPUT,\n} from \"./physics\";\nimport { getDragSpring, resolvePreset } from \"./presets\";\nimport type { DismissibleConfig, MotionPresetName } from \"./types\";\n\nexport interface ApertoContentProps\n\textends Omit<\n\t\tComponentPropsWithoutRef<typeof Dialog.Content>,\n\t\t\"asChild\" | \"forceMount\"\n\t> {\n\t/** Motion preset override for this content panel, independent of the root preset. */\n\tmotion?: MotionPresetName;\n\t/** Built-in positioning strategy. Use \"none\" for custom primitive compositions. */\n\tplacement?: \"center\" | \"none\";\n\t/** Internal shared layout ID override for grouped media. */\n\tsharedLayoutId?: string | false;\n}\n\nconst ApertoContent = forwardRef<HTMLDivElement, ApertoContentProps>(\n\t(\n\t\t{\n\t\t\tchildren,\n\t\t\tclassName,\n\t\t\tmotion: motionOverride,\n\t\t\tplacement = \"center\",\n\t\t\tsharedLayoutId,\n\t\t\tstyle,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst ctx = useApertoContext();\n\t\tconst [isDragging, setIsDragging] = useState(false);\n\t\tconst resolved = resolvePreset(\n\t\t\t\"content\",\n\t\t\tmotionOverride,\n\t\t\tctx.presetName,\n\t\t\tctx.variants,\n\t\t\tctx.reduceMotion,\n\t\t);\n\n\t\tconst contentLayoutId =\n\t\t\tsharedLayoutId === false\n\t\t\t\t? undefined\n\t\t\t\t: (sharedLayoutId ?? `${ctx.layoutId}-shared`);\n\n\t\tconst dragSpring = getDragSpring(resolved);\n\t\tconst isDismissible = ctx.dismissible !== false;\n\n\t\tconst dismissConfig: DismissibleConfig =\n\t\t\ttypeof ctx.dismissible === \"object\" ? ctx.dismissible : {};\n\t\tconst distanceThreshold =\n\t\t\tdismissConfig.threshold ?? DEFAULT_DISTANCE_THRESHOLD;\n\t\tconst velocityThreshold =\n\t\t\tdismissConfig.velocity ?? DEFAULT_VELOCITY_THRESHOLD;\n\n\t\tconst dragX = useMotionValue(0);\n\t\tconst dragY = useMotionValue(0);\n\t\tconst springX = useSpring(dragX, dragSpring);\n\t\tconst springY = useSpring(dragY, dragSpring);\n\n\t\tconst distance = useTransform(() =>\n\t\t\tMath.hypot(springX.get(), springY.get()),\n\t\t);\n\t\tconst scaleMotion = useTransform(distance, SCALE_INPUT, SCALE_OUTPUT);\n\t\tconst opacityMotion = useTransform(distance, OPACITY_INPUT, OPACITY_OUTPUT);\n\t\tconst resistance = useTransform(distance, calculateResistance);\n\n\t\tconst handleDrag = useCallback(\n\t\t\t(_event: MouseEvent | TouchEvent | PointerEvent, info: PanInfo) => {\n\t\t\t\tif (!isDragging) {\n\t\t\t\t\tsetIsDragging(true);\n\t\t\t\t}\n\t\t\t\tconst r = resistance.get();\n\t\t\t\tdragX.set(info.offset.x * r);\n\t\t\t\tdragY.set(info.offset.y * r);\n\t\t\t},\n\t\t\t[dragX, dragY, isDragging, resistance],\n\t\t);\n\n\t\tconst handleDragEnd = useCallback(\n\t\t\t(_event: MouseEvent | TouchEvent | PointerEvent, info: PanInfo) => {\n\t\t\t\tsetIsDragging(false);\n\t\t\t\tconst speed = Math.hypot(info.velocity.x, info.velocity.y);\n\t\t\t\tconst dist = Math.hypot(info.offset.x, info.offset.y);\n\n\t\t\t\tif (speed > velocityThreshold || dist > distanceThreshold) {\n\t\t\t\t\tctx.onOpenChange(false);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tdragX.set(0);\n\t\t\t\tdragY.set(0);\n\t\t\t},\n\t\t\t[ctx.onOpenChange, distanceThreshold, dragX, dragY, velocityThreshold],\n\t\t);\n\n\t\tconst motionStyle = useMemo(\n\t\t\t(): MotionStyle => ({\n\t\t\t\tcursor: isDragging ? \"grabbing\" : isDismissible ? \"grab\" : undefined,\n\t\t\t\topacity: opacityMotion,\n\t\t\t\tscale: scaleMotion,\n\t\t\t\tx: springX,\n\t\t\t\ty: springY,\n\t\t\t\t...(placement === \"center\"\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tleft: \"50%\",\n\t\t\t\t\t\t\ttop: \"50%\",\n\t\t\t\t\t\t\ttranslate: \"-50% -50%\",\n\t\t\t\t\t\t}\n\t\t\t\t\t: {}),\n\t\t\t\t...style,\n\t\t\t}),\n\t\t\t[\n\t\t\t\tisDismissible,\n\t\t\t\tisDragging,\n\t\t\t\topacityMotion,\n\t\t\t\tplacement,\n\t\t\t\tscaleMotion,\n\t\t\t\tspringX,\n\t\t\t\tspringY,\n\t\t\t\tstyle,\n\t\t\t],\n\t\t);\n\n\t\treturn (\n\t\t\t<Dialog.Content asChild forceMount {...props}>\n\t\t\t\t<motion.div\n\t\t\t\t\tclassName={className}\n\t\t\t\t\tdata-slot=\"aperto-content\"\n\t\t\t\t\tdrag={isDismissible}\n\t\t\t\t\tdragConstraints={{ bottom: 0, left: 0, right: 0, top: 0 }}\n\t\t\t\t\tdragElastic={0}\n\t\t\t\t\tdragMomentum={false}\n\t\t\t\t\tdragSnapToOrigin\n\t\t\t\t\tlayout={contentLayoutId ? true : undefined}\n\t\t\t\t\tlayoutId={contentLayoutId}\n\t\t\t\t\tonDrag={isDismissible ? handleDrag : undefined}\n\t\t\t\t\tonDragEnd={isDismissible ? handleDragEnd : undefined}\n\t\t\t\t\tref={ref}\n\t\t\t\t\tstyle={motionStyle}\n\t\t\t\t\ttransition={resolved.transition}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</motion.div>\n\t\t\t</Dialog.Content>\n\t\t);\n\t},\n);\n\nApertoContent.displayName = \"ApertoContent\";\n\nexport { ApertoContent };\n","\"use client\";\n\nimport { createContext, useContext } from \"react\";\nimport type { ApertoContextValue } from \"./types\";\n\nexport const ApertoContext = createContext<ApertoContextValue | null>(null);\n\nexport function useApertoContext(): ApertoContextValue {\n\tconst ctx = useContext(ApertoContext);\n\tif (!ctx) {\n\t\tthrow new Error(\"Aperto components must be used within <Aperto.Root>\");\n\t}\n\treturn ctx;\n}\n","/**\n * Drag physics utilities.\n *\n * The logarithmic resistance function creates a rubber-band feel:\n * initial movement is free, but gets progressively harder the further\n * you drag. Combined with spring-smoothed motion values, this produces\n * a natural, elastic gesture.\n */\n\nconst RESISTANCE_DIVISOR = 20;\nconst RESISTANCE_SCALE = 4;\nconst RESISTANCE_MIN = 0.1;\n\n/**\n * Logarithmic resistance — decelerates drag progressively.\n * Returns a multiplier between RESISTANCE_MIN and 1.0.\n *\n * At distance 0: returns 1.0 (full movement)\n * At distance 50: returns ~0.77\n * At distance 100: returns ~0.58\n * At distance 200: returns ~0.42\n */\nexport function calculateResistance(distance: number): number {\n\treturn Math.max(\n\t\tRESISTANCE_MIN,\n\t\t1 - Math.log(distance / RESISTANCE_DIVISOR + 1) / RESISTANCE_SCALE,\n\t);\n}\n\n/** Scale mapping: distance → visual scale (1.0 → 0.95) */\nexport const SCALE_INPUT = [0, 50, 100];\nexport const SCALE_OUTPUT = [1, 0.98, 0.95];\n\n/** Opacity mapping: distance → visual opacity (1.0 → 0.96) */\nexport const OPACITY_INPUT = [0, 80];\nexport const OPACITY_OUTPUT = [1, 0.96];\n\n/** Default dismissal thresholds */\nexport const DEFAULT_DISTANCE_THRESHOLD = 100;\nexport const DEFAULT_VELOCITY_THRESHOLD = 500;\n","import type { Easing } from \"motion/react\";\n\nexport const durations = {\n\tsnappy: 0.22,\n\tmoderate: 0.4,\n} as const;\n\nexport const easings = {\n\tcustomGentle: [0.25, 0.1, 0.12, 1],\n\tsnappy: [0.22, 1, 0.36, 1],\n} satisfies Record<string, Easing>;\n\nexport const springs = {\n\tbouncy: { stiffness: 260, damping: 12, mass: 1 },\n\tnatural: { stiffness: 200, damping: 20, mass: 1 },\n\tsnappy: { stiffness: 400, damping: 28, mass: 0.8 },\n\tstiff: { stiffness: 500, damping: 30, mass: 1 },\n} as const;\n","import { durations, easings, springs } from \"./motion-tokens\";\nimport type {\n\tDragSpringConfig,\n\tMotionPreset,\n\tMotionPresetName,\n\tMotionVariants,\n} from \"./types\";\n\n/**\n * Motion presets — each bundles transition timing AND drag physics\n * so \"snappy\" feels snappy everywhere: open, close, and drag.\n *\n * Curves and springs are local copies of the Howells motion tokens so the\n * published package has no private workspace runtime dependencies.\n */\nexport const PRESETS: Record<MotionPresetName, MotionPreset> = {\n\tsnappy: {\n\t\ttransition: { ease: easings.snappy, duration: durations.snappy },\n\t\tdrag: {\n\t\t\tstiffness: springs.stiff.stiffness,\n\t\t\tdamping: springs.stiff.damping,\n\t\t\trestDelta: 0.01,\n\t\t},\n\t},\n\tsmooth: {\n\t\ttransition: { ease: easings.customGentle, duration: durations.moderate },\n\t\tdrag: {\n\t\t\tstiffness: springs.natural.stiffness,\n\t\t\tdamping: springs.natural.damping,\n\t\t\trestDelta: 0.01,\n\t\t},\n\t},\n\tbouncy: {\n\t\ttransition: {\n\t\t\ttype: \"spring\",\n\t\t\tstiffness: springs.bouncy.stiffness,\n\t\t\tdamping: springs.bouncy.damping,\n\t\t\tmass: springs.bouncy.mass,\n\t\t},\n\t\tdrag: {\n\t\t\tstiffness: springs.snappy.stiffness,\n\t\t\tdamping: springs.snappy.damping,\n\t\t\trestDelta: 0.01,\n\t\t},\n\t},\n\treduced: {\n\t\ttransition: { ease: \"linear\", duration: 0.01 },\n\t\tdrag: { stiffness: 1000, damping: 50, restDelta: 0.1 },\n\t},\n};\n\ntype ComponentType = \"trigger\" | \"content\" | \"backdrop\";\n\n/**\n * Three-level motion resolution:\n * 1. Component-level override (highest)\n * 2. Per-component variant from Root\n * 3. Global preset from Root (lowest)\n *\n * If `prefers-reduced-motion` is active, always returns \"reduced\".\n */\nexport function resolvePreset(\n\tcomponentType: ComponentType,\n\tcomponentMotion: MotionPresetName | undefined,\n\tglobalPreset: MotionPresetName,\n\tvariants: MotionVariants | undefined,\n\treduceMotion: boolean,\n): MotionPreset {\n\tif (reduceMotion) {\n\t\treturn PRESETS.reduced;\n\t}\n\n\t// 1. Component-level override\n\tif (componentMotion) {\n\t\treturn PRESETS[componentMotion];\n\t}\n\n\t// 2. Per-component variant\n\tif (variants?.[componentType]) {\n\t\treturn PRESETS[variants[componentType]];\n\t}\n\n\t// 3. Global preset\n\treturn PRESETS[globalPreset];\n}\n\n/** Extract the drag spring config from a preset */\nexport function getDragSpring(preset: MotionPreset): DragSpringConfig {\n\treturn preset.drag;\n}\n","\"use client\";\n\nimport * as Dialog from \"@radix-ui/react-dialog\";\nimport { type ComponentPropsWithoutRef, forwardRef } from \"react\";\n\nconst ApertoDescription = forwardRef<\n\tHTMLParagraphElement,\n\tComponentPropsWithoutRef<typeof Dialog.Description>\n>((props, ref) => {\n\treturn (\n\t\t<Dialog.Description data-slot=\"aperto-description\" ref={ref} {...props} />\n\t);\n});\n\nApertoDescription.displayName = \"ApertoDescription\";\n\nexport { ApertoDescription };\n","import { createContext, useContext } from \"react\";\nimport type {\n\tApertoClassNames,\n\tApertoMediaItem,\n\tRenderImage,\n\tRenderVideo,\n} from \"./types\";\n\nexport interface ApertoGroupContextValue {\n\tclassNames?: ApertoClassNames;\n\tindex: number;\n\tmedia: ApertoMediaItem[];\n\topen: boolean;\n\topenAtIndex: (index: number) => void;\n\tregisterThumbnail: (index: number, node: HTMLButtonElement | null) => void;\n\trenderImage?: RenderImage;\n\trenderVideo?: RenderVideo;\n\tsetIndex: (index: number) => void;\n\tsharedLayoutId: string;\n\tsharedLayoutIdForIndex: (index: number) => string;\n}\n\nexport const ApertoGroupContext = createContext<ApertoGroupContextValue | null>(\n\tnull,\n);\n\nexport function useApertoGroup(): ApertoGroupContextValue {\n\tconst ctx = useContext(ApertoGroupContext);\n\tif (!ctx) {\n\t\tthrow new Error(\"Aperto.Thumbnail must be used within <Aperto.Group>\");\n\t}\n\treturn ctx;\n}\n","\"use client\";\n\nimport * as Dialog from \"@radix-ui/react-dialog\";\nimport { motion, type Transition } from \"motion/react\";\nimport { forwardRef } from \"react\";\n\nimport { useApertoContext } from \"./context\";\nimport { easings } from \"./motion-tokens\";\n\nexport interface ApertoOverlayProps {\n\tclassName?: string;\n\t/** Internal flag used to fade the overlay during measured close transitions. */\n\tfadeOut?: boolean;\n\tstyle?: React.CSSProperties;\n}\n\n/** Overlay always fades gently regardless of the content's motion preset. */\nconst OVERLAY_TRANSITION: Transition = {\n\tduration: 0.3,\n\tease: easings.customGentle,\n};\n\nconst OVERLAY_TRANSITION_REDUCED: Transition = {\n\tduration: 0.01,\n\tease: \"linear\",\n};\n\nconst ApertoOverlay = forwardRef<HTMLDivElement, ApertoOverlayProps>(\n\t({ className, fadeOut, style }, ref) => {\n\t\tconst ctx = useApertoContext();\n\t\tconst transition = ctx.reduceMotion\n\t\t\t? OVERLAY_TRANSITION_REDUCED\n\t\t\t: OVERLAY_TRANSITION;\n\n\t\treturn (\n\t\t\t<Dialog.Overlay asChild forceMount>\n\t\t\t\t<motion.div\n\t\t\t\t\tanimate={{ opacity: fadeOut ? 0 : 1 }}\n\t\t\t\t\tclassName={className}\n\t\t\t\t\tdata-slot=\"aperto-overlay\"\n\t\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\tref={ref}\n\t\t\t\t\tstyle={style}\n\t\t\t\t\ttransition={transition}\n\t\t\t\t/>\n\t\t\t</Dialog.Overlay>\n\t\t);\n\t},\n);\n\nApertoOverlay.displayName = \"ApertoOverlay\";\n\nexport { ApertoOverlay };\n","\"use client\";\n\nimport * as Dialog from \"@radix-ui/react-dialog\";\nimport { AnimatePresence } from \"motion/react\";\nimport type { ReactNode } from \"react\";\n\nimport { useApertoContext } from \"./context\";\n\nexport interface ApertoPortalProps {\n\tchildren: ReactNode;\n\t/** Container element for the portal (default: document.body) */\n\tcontainer?: HTMLElement;\n}\n\nfunction ApertoPortal({ children, container }: ApertoPortalProps) {\n\tconst { open } = useApertoContext();\n\n\treturn (\n\t\t<AnimatePresence>\n\t\t\t{open && (\n\t\t\t\t<Dialog.Portal container={container} forceMount>\n\t\t\t\t\t{children}\n\t\t\t\t</Dialog.Portal>\n\t\t\t)}\n\t\t</AnimatePresence>\n\t);\n}\n\nexport { ApertoPortal };\n","\"use client\";\n\nimport * as Dialog from \"@radix-ui/react-dialog\";\nimport { LayoutGroup, useReducedMotion } from \"motion/react\";\nimport {\n\ttype ComponentPropsWithoutRef,\n\ttype ReactNode,\n\tuseCallback,\n\tuseId,\n\tuseState,\n} from \"react\";\n\nimport { ApertoContext } from \"./context\";\nimport { PRESETS } from \"./presets\";\nimport type {\n\tDismissibleConfig,\n\tMotionPresetName,\n\tMotionVariants,\n} from \"./types\";\n\nexport interface ApertoRootProps\n\textends Omit<\n\t\tComponentPropsWithoutRef<typeof Dialog.Root>,\n\t\t\"open\" | \"onOpenChange\"\n\t> {\n\tchildren: ReactNode;\n\t/** Whether dragging can dismiss the content (default: true) */\n\tdismissible?: boolean | DismissibleConfig;\n\t/** Layout ID for shared element transition (auto-generated if omitted) */\n\tlayoutId?: string;\n\t/** Motion preset or per-component variants */\n\tmotion?: MotionPresetName | MotionVariants;\n\t/** Controlled open state */\n\topen?: boolean;\n\t/** Callback when open state changes */\n\tonOpenChange?: (open: boolean) => void;\n\t/** Force reduced motion regardless of system preference */\n\treduceMotion?: boolean;\n}\n\nfunction ApertoRoot({\n\tchildren,\n\tdismissible = true,\n\tlayoutId: layoutIdProp,\n\tmotion: motionProp = \"smooth\",\n\topen: controlledOpen,\n\tonOpenChange: controlledOnOpenChange,\n\treduceMotion: reduceMotionProp,\n\t...dialogProps\n}: ApertoRootProps) {\n\tconst generatedId = useId();\n\tconst layoutId = layoutIdProp ?? `aperto-${generatedId}`;\n\tconst systemReducedMotion = useReducedMotion() ?? false;\n\tconst shouldReduce = reduceMotionProp ?? systemReducedMotion;\n\n\t// Uncontrolled state fallback\n\tconst [internalOpen, setInternalOpen] = useState(false);\n\tconst isControlled = controlledOpen !== undefined;\n\tconst open = isControlled ? controlledOpen : internalOpen;\n\n\tconst onOpenChange = useCallback(\n\t\t(nextOpen: boolean) => {\n\t\t\tif (!isControlled) {\n\t\t\t\tsetInternalOpen(nextOpen);\n\t\t\t}\n\t\t\tcontrolledOnOpenChange?.(nextOpen);\n\t\t},\n\t\t[isControlled, controlledOnOpenChange],\n\t);\n\n\t// Resolve global preset name\n\tconst globalPresetName: MotionPresetName =\n\t\ttypeof motionProp === \"string\" ? motionProp : \"smooth\";\n\tconst variants: MotionVariants | undefined =\n\t\ttypeof motionProp === \"object\" ? motionProp : undefined;\n\n\tconst presetName: MotionPresetName = shouldReduce\n\t\t? \"reduced\"\n\t\t: globalPresetName;\n\tconst preset = PRESETS[presetName];\n\n\treturn (\n\t\t<ApertoContext.Provider\n\t\t\tvalue={{\n\t\t\t\tdismissible,\n\t\t\t\tlayoutId,\n\t\t\t\tonOpenChange,\n\t\t\t\topen,\n\t\t\t\tpreset,\n\t\t\t\tpresetName,\n\t\t\t\treduceMotion: shouldReduce,\n\t\t\t\tvariants,\n\t\t\t}}\n\t\t>\n\t\t\t<Dialog.Root onOpenChange={onOpenChange} open={open} {...dialogProps}>\n\t\t\t\t<LayoutGroup id={layoutId}>{children}</LayoutGroup>\n\t\t\t</Dialog.Root>\n\t\t</ApertoContext.Provider>\n\t);\n}\n\nexport { ApertoRoot };\n","\"use client\";\n\nimport * as Dialog from \"@radix-ui/react-dialog\";\nimport { type ComponentPropsWithoutRef, forwardRef } from \"react\";\n\nconst ApertoTitle = forwardRef<\n\tHTMLHeadingElement,\n\tComponentPropsWithoutRef<typeof Dialog.Title>\n>((props, ref) => {\n\treturn <Dialog.Title data-slot=\"aperto-title\" ref={ref} {...props} />;\n});\n\nApertoTitle.displayName = \"ApertoTitle\";\n\nexport { ApertoTitle };\n","import {\n\tAnimatePresence,\n\tmotion,\n\ttype TargetAndTransition,\n\ttype Transition,\n} from \"motion/react\";\nimport { useApertoContext } from \"./context\";\nimport { getMediaKey, renderExpandedMedia } from \"./media-rendering\";\nimport type {\n\tApertoMediaItem,\n\tNavigationMotionPresetName,\n\tRenderImage,\n\tRenderVideo,\n} from \"./types\";\n\nexport type NavigationDirection = -1 | 0 | 1;\n\ninterface NavigationMotionPreset {\n\toffset: number;\n\tscale: number;\n\ttransition: Transition;\n}\n\ninterface NavigationAnimationCustom {\n\tdirection: NavigationDirection;\n\toffset: number;\n\tscale: number;\n}\n\nconst NAVIGATION_MOTION_PRESETS: Record<\n\tNavigationMotionPresetName,\n\tNavigationMotionPreset\n> = {\n\tfloat: {\n\t\toffset: 96,\n\t\tscale: 0.97,\n\t\ttransition: {\n\t\t\topacity: { duration: 0.34, ease: [0.45, 0, 0.2, 1] },\n\t\t\tscale: { damping: 26, mass: 1.15, stiffness: 80, type: \"spring\" },\n\t\t\tx: { damping: 26, mass: 1.15, stiffness: 80, type: \"spring\" },\n\t\t},\n\t},\n\tglide: {\n\t\toffset: 58,\n\t\tscale: 0.984,\n\t\ttransition: {\n\t\t\topacity: { duration: 0.24, ease: [0.4, 0, 0.2, 1] },\n\t\t\tscale: { damping: 28, mass: 0.95, stiffness: 150, type: \"spring\" },\n\t\t\tx: { damping: 28, mass: 0.95, stiffness: 150, type: \"spring\" },\n\t\t},\n\t},\n\tsnap: {\n\t\toffset: 38,\n\t\tscale: 0.996,\n\t\ttransition: {\n\t\t\topacity: { duration: 0.12, ease: [0.2, 0, 0, 1] },\n\t\t\tscale: { damping: 34, mass: 0.7, stiffness: 420, type: \"spring\" },\n\t\t\tx: { damping: 34, mass: 0.7, stiffness: 420, type: \"spring\" },\n\t\t},\n\t},\n};\n\nconst REDUCED_EXPANDED_MEDIA_TRANSITION: Transition = {\n\tduration: 0.12,\n\tease: \"linear\",\n};\n\nconst expandedMediaVariants = {\n\tcenter: {\n\t\topacity: 1,\n\t\tscale: 1,\n\t\tx: 0,\n\t},\n\tenter: ({\n\t\tdirection,\n\t\toffset,\n\t\tscale,\n\t}: NavigationAnimationCustom): TargetAndTransition => ({\n\t\topacity: 0,\n\t\tscale: direction === 0 ? 1 : scale,\n\t\tx: direction * offset,\n\t}),\n\texit: ({\n\t\tdirection,\n\t\toffset,\n\t\tscale,\n\t}: NavigationAnimationCustom): TargetAndTransition => ({\n\t\topacity: 0,\n\t\tscale: direction === 0 ? 1 : scale,\n\t\tx: direction * -offset,\n\t}),\n};\n\nconst reducedExpandedMediaVariants = {\n\tcenter: {\n\t\topacity: 1,\n\t\tx: 0,\n\t},\n\tenter: {\n\t\topacity: 0,\n\t\tx: 0,\n\t},\n\texit: {\n\t\topacity: 0,\n\t\tx: 0,\n\t},\n};\n\nexport function ApertoExpandedMediaStage({\n\tdirection,\n\tindex,\n\titem,\n\tnavigationMotion,\n\trenderImage,\n\trenderVideo,\n}: {\n\tdirection: NavigationDirection;\n\tindex: number;\n\titem: ApertoMediaItem;\n\tnavigationMotion: NavigationMotionPresetName;\n\trenderImage?: RenderImage;\n\trenderVideo?: RenderVideo;\n}) {\n\tconst ctx = useApertoContext();\n\tconst preset = NAVIGATION_MOTION_PRESETS[navigationMotion];\n\tconst transition = ctx.reduceMotion\n\t\t? REDUCED_EXPANDED_MEDIA_TRANSITION\n\t\t: preset.transition;\n\tconst variants = ctx.reduceMotion\n\t\t? reducedExpandedMediaVariants\n\t\t: expandedMediaVariants;\n\tconst animationCustom: NavigationAnimationCustom = {\n\t\tdirection,\n\t\toffset: preset.offset,\n\t\tscale: preset.scale,\n\t};\n\n\treturn (\n\t\t<AnimatePresence custom={animationCustom} initial={false} mode=\"sync\">\n\t\t\t<motion.div\n\t\t\t\tanimate=\"center\"\n\t\t\t\tcustom={animationCustom}\n\t\t\t\tdata-navigation-direction={direction}\n\t\t\t\tdata-navigation-motion={navigationMotion}\n\t\t\t\tdata-slot=\"aperto-media-stage\"\n\t\t\t\texit=\"exit\"\n\t\t\t\tinitial=\"enter\"\n\t\t\t\tkey={getMediaKey(item, index)}\n\t\t\t\ttransition={transition}\n\t\t\t\tvariants={variants}\n\t\t\t>\n\t\t\t\t{renderExpandedMedia(item, renderImage, renderVideo)}\n\t\t\t</motion.div>\n\t\t</AnimatePresence>\n\t);\n}\n","import type { ReactNode } from \"react\";\nimport type { ApertoMediaItem, RenderImage, RenderVideo } from \"./types\";\n\nexport function getMediaLabel(item: ApertoMediaItem): string {\n\treturn item.title ?? item.alt ?? \"media\";\n}\n\nexport function getMediaKey(item: ApertoMediaItem, index: number): string {\n\treturn item.id ?? `${item.type}:${item.src}:${index}`;\n}\n\nexport function getDescriptionProps(item: ApertoMediaItem): {\n\t\"aria-describedby\"?: undefined;\n} {\n\treturn item.description ? {} : { \"aria-describedby\": undefined };\n}\n\nfunction renderDefaultImage(props: Parameters<RenderImage>[0]): ReactNode {\n\tconst { item: _item, variant: _variant, ...imageProps } = props;\n\treturn <img {...imageProps} alt={imageProps.alt ?? \"\"} />;\n}\n\nfunction renderDefaultVideo(props: Parameters<RenderVideo>[0]): ReactNode {\n\tconst { item: _item, variant, ...videoProps } = props;\n\tif (variant === \"thumbnail\") {\n\t\treturn (\n\t\t\t<img alt={videoProps[\"aria-label\"] ?? \"\"} src={props.item.thumbnailSrc} />\n\t\t);\n\t}\n\treturn <video {...videoProps} />;\n}\n\nexport function renderThumbnail(\n\titem: ApertoMediaItem,\n\trenderImage?: RenderImage,\n\trenderVideo?: RenderVideo,\n): ReactNode {\n\tif (item.type === \"image\") {\n\t\tconst imageProps: Parameters<RenderImage>[0] = {\n\t\t\talt: \"\",\n\t\t\theight: item.height,\n\t\t\titem,\n\t\t\tsrc: item.thumbnailSrc ?? item.src,\n\t\t\tvariant: \"thumbnail\",\n\t\t\twidth: item.width,\n\t\t};\n\t\treturn (renderImage ?? renderDefaultImage)(imageProps);\n\t}\n\n\tconst videoProps: Parameters<RenderVideo>[0] = {\n\t\t\"aria-label\": item.alt ?? item.title ?? \"Video thumbnail\",\n\t\theight: item.height,\n\t\titem,\n\t\tposter: item.poster,\n\t\tsrc: item.thumbnailSrc,\n\t\tvariant: \"thumbnail\",\n\t\twidth: item.width,\n\t};\n\treturn (renderVideo ?? renderDefaultVideo)(videoProps);\n}\n\nexport function renderExpandedMedia(\n\titem: ApertoMediaItem,\n\trenderImage?: RenderImage,\n\trenderVideo?: RenderVideo,\n): ReactNode {\n\tif (item.type === \"image\") {\n\t\tconst imageProps: Parameters<RenderImage>[0] = {\n\t\t\talt: item.alt,\n\t\t\theight: item.height,\n\t\t\titem,\n\t\t\tsrc: item.src,\n\t\t\tvariant: \"expanded\",\n\t\t\twidth: item.width,\n\t\t};\n\t\treturn (renderImage ?? renderDefaultImage)(imageProps);\n\t}\n\n\tconst videoProps: Parameters<RenderVideo>[0] = {\n\t\t\"aria-label\": item.alt ?? item.title ?? \"Video\",\n\t\tcontrols: true,\n\t\theight: item.height,\n\t\titem,\n\t\tposter: item.poster,\n\t\tsrc: item.src,\n\t\tvariant: \"expanded\",\n\t\twidth: item.width,\n\t};\n\treturn (renderVideo ?? renderDefaultVideo)(videoProps);\n}\n\nexport function renderTransitionMedia(\n\titem: ApertoMediaItem,\n\trenderImage?: RenderImage,\n\trenderVideo?: RenderVideo,\n): ReactNode {\n\tif (item.type === \"image\") {\n\t\tconst imageProps: Parameters<RenderImage>[0] = {\n\t\t\talt: item.alt,\n\t\t\theight: item.height,\n\t\t\titem,\n\t\t\tsrc: item.src,\n\t\t\tvariant: \"expanded\",\n\t\t\twidth: item.width,\n\t\t};\n\t\treturn (renderImage ?? renderDefaultImage)(imageProps);\n\t}\n\n\tconst videoProps: Parameters<RenderVideo>[0] = {\n\t\t\"aria-label\": item.alt ?? item.title ?? \"Video\",\n\t\theight: item.height,\n\t\titem,\n\t\tposter: item.poster,\n\t\tsrc: item.src,\n\t\tvariant: \"expanded\",\n\t\twidth: item.width,\n\t};\n\treturn (renderVideo ?? renderDefaultVideo)(videoProps);\n}\n","import {\n\tmotion,\n\ttype TargetAndTransition,\n\ttype Transition,\n} from \"motion/react\";\nimport { useEffect } from \"react\";\nimport { useApertoContext } from \"./context\";\nimport { renderTransitionMedia } from \"./media-rendering\";\nimport type { ApertoMediaItem, RenderImage, RenderVideo } from \"./types\";\n\nexport interface ApertoRect {\n\theight: number;\n\tleft: number;\n\ttop: number;\n\twidth: number;\n}\n\nexport interface ApertoMediaTransition {\n\tfrom: ApertoRect;\n\titem: ApertoMediaItem;\n\tphase: \"opening\" | \"closing\";\n\tto?: ApertoRect;\n}\n\nexport function rectFromElement(element: Element | null): ApertoRect | null {\n\tif (!element) {\n\t\treturn null;\n\t}\n\n\tconst rect = element.getBoundingClientRect();\n\treturn {\n\t\theight: rect.height,\n\t\tleft: rect.left,\n\t\ttop: rect.top,\n\t\twidth: rect.width,\n\t};\n}\n\nfunction rectTarget(rect: ApertoRect): TargetAndTransition {\n\treturn {\n\t\theight: rect.height,\n\t\tleft: rect.left,\n\t\ttop: rect.top,\n\t\twidth: rect.width,\n\t};\n}\n\nfunction transitionDurationMs(transition: Transition): number {\n\treturn typeof transition.duration === \"number\"\n\t\t? transition.duration * 1000\n\t\t: 450;\n}\n\nexport function ApertoMediaTransitionClone({\n\tonComplete,\n\trenderImage,\n\trenderVideo,\n\ttransition,\n}: {\n\tonComplete: () => void;\n\trenderImage?: RenderImage;\n\trenderVideo?: RenderVideo;\n\ttransition: ApertoMediaTransition | null;\n}) {\n\tconst ctx = useApertoContext();\n\n\tuseEffect(() => {\n\t\tif (!transition?.to) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst timer = setTimeout(\n\t\t\tonComplete,\n\t\t\ttransitionDurationMs(ctx.preset.transition),\n\t\t);\n\t\treturn () => clearTimeout(timer);\n\t}, [ctx.preset.transition, onComplete, transition]);\n\n\tif (!transition?.to) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<motion.div\n\t\t\tanimate={rectTarget(transition.to)}\n\t\t\taria-hidden=\"true\"\n\t\t\tdata-slot=\"aperto-transition-media\"\n\t\t\tinitial={rectTarget(transition.from)}\n\t\t\tstyle={{\n\t\t\t\tborderRadius: \"var(--aperto-radius, 0.5rem)\",\n\t\t\t\toverflow: \"hidden\",\n\t\t\t\tpointerEvents: \"none\",\n\t\t\t\tposition: \"fixed\",\n\t\t\t\twillChange: \"left, top, width, height\",\n\t\t\t\tzIndex: 1002,\n\t\t\t}}\n\t\t\ttransition={ctx.preset.transition}\n\t\t>\n\t\t\t{renderTransitionMedia(transition.item, renderImage, renderVideo)}\n\t\t</motion.div>\n\t);\n}\n","export function shouldIgnoreKeyboardNavigationTarget(\n\ttarget: EventTarget | null,\n): boolean {\n\tif (!(target instanceof Element)) {\n\t\treturn false;\n\t}\n\n\treturn (\n\t\t(target as HTMLElement).isContentEditable ||\n\t\tBoolean(\n\t\t\ttarget.closest(\n\t\t\t\t'input, textarea, select, [contenteditable]:not([contenteditable=\"false\"]), [role=\"textbox\"], audio, video',\n\t\t\t),\n\t\t)\n\t);\n}\n","\"use client\";\n\nimport * as Dialog from \"@radix-ui/react-dialog\";\nimport { X } from \"lucide-react\";\nimport { type ComponentPropsWithoutRef, forwardRef } from \"react\";\n\nconst ApertoClose = forwardRef<\n\tHTMLButtonElement,\n\tComponentPropsWithoutRef<typeof Dialog.Close>\n>(({ children, ...props }, ref) => {\n\treturn (\n\t\t<Dialog.Close data-slot=\"aperto-close\" ref={ref} {...props}>\n\t\t\t{children ?? <X aria-hidden=\"true\" size={17} strokeWidth={2} />}\n\t\t</Dialog.Close>\n\t);\n});\n\nApertoClose.displayName = \"ApertoClose\";\n\nexport { ApertoClose };\n","\"use client\";\n\nimport * as Dialog from \"@radix-ui/react-dialog\";\nimport { motion } from \"motion/react\";\nimport {\n\ttype ComponentPropsWithoutRef,\n\tforwardRef,\n\tuseCallback,\n\tuseEffect,\n\tuseState,\n} from \"react\";\n\nimport { useApertoContext } from \"./context\";\nimport { resolvePreset } from \"./presets\";\nimport type { MotionPresetName } from \"./types\";\n\nconst TRIGGER_OPEN_Z_INDEX = 1000;\n\nexport interface ApertoTriggerProps\n\textends ComponentPropsWithoutRef<typeof Dialog.Trigger> {\n\t/** Internal flag used by grouped thumbnails to raise only the active trigger. */\n\tactive?: boolean;\n\t/** Override motion preset for this trigger */\n\tmotion?: MotionPresetName;\n\t/** Internal shared layout ID override for grouped thumbnails. */\n\tsharedLayoutId?: string | false;\n}\n\nconst ApertoTrigger = forwardRef<HTMLButtonElement, ApertoTriggerProps>(\n\t(\n\t\t{ active, children, motion: motionOverride, sharedLayoutId, ...props },\n\t\tref,\n\t) => {\n\t\tconst ctx = useApertoContext();\n\t\tconst shouldRaise = ctx.open && (active ?? true);\n\t\tconst [zIndex, setZIndex] = useState(\n\t\t\tshouldRaise ? TRIGGER_OPEN_Z_INDEX : 0,\n\t\t);\n\n\t\tuseEffect(() => {\n\t\t\tif (shouldRaise) {\n\t\t\t\tsetZIndex(TRIGGER_OPEN_Z_INDEX);\n\t\t\t} else if (ctx.open) {\n\t\t\t\tsetZIndex(0);\n\t\t\t}\n\t\t}, [ctx.open, shouldRaise]);\n\n\t\tconst handleLayoutAnimationComplete = useCallback(() => {\n\t\t\tif (!shouldRaise) {\n\t\t\t\tsetZIndex(0);\n\t\t\t}\n\t\t}, [shouldRaise]);\n\n\t\tconst resolved = resolvePreset(\n\t\t\t\"trigger\",\n\t\t\tmotionOverride,\n\t\t\tctx.presetName,\n\t\t\tctx.variants,\n\t\t\tctx.reduceMotion,\n\t\t);\n\t\tconst layoutId =\n\t\t\tsharedLayoutId === false\n\t\t\t\t? undefined\n\t\t\t\t: (sharedLayoutId ?? `${ctx.layoutId}-shared`);\n\n\t\treturn (\n\t\t\t<Dialog.Trigger asChild ref={ref} {...props}>\n\t\t\t\t<motion.button\n\t\t\t\t\tdata-aperto-active={shouldRaise ? \"\" : undefined}\n\t\t\t\t\tdata-slot=\"aperto-trigger\"\n\t\t\t\t\tkey={layoutId ?? \"unshared\"}\n\t\t\t\t\tlayout\n\t\t\t\t\tlayoutCrossfade={false}\n\t\t\t\t\tlayoutId={layoutId}\n\t\t\t\t\tonLayoutAnimationComplete={handleLayoutAnimationComplete}\n\t\t\t\t\tstyle={{ zIndex }}\n\t\t\t\t\ttransition={resolved.transition}\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</motion.button>\n\t\t\t</Dialog.Trigger>\n\t\t);\n\t},\n);\n\nApertoTrigger.displayName = \"ApertoTrigger\";\n\nexport { ApertoTrigger };\n","\"use client\";\n\nimport { ApertoClose } from \"../aperto-close\";\nimport { ApertoContent } from \"../aperto-content\";\nimport { ApertoDescription } from \"../aperto-description\";\nimport { ApertoOverlay } from \"../aperto-overlay\";\nimport { ApertoPortal } from \"../aperto-portal\";\nimport { ApertoRoot } from \"../aperto-root\";\nimport { ApertoTitle } from \"../aperto-title\";\nimport { ApertoTrigger } from \"../aperto-trigger\";\nimport {\n\tgetDescriptionProps,\n\tgetMediaLabel,\n\trenderExpandedMedia,\n\trenderThumbnail,\n} from \"../media-rendering\";\nimport type { ApertoProps } from \"./ApertoTypes\";\n\nexport function ApertoSingle({\n\tclassNames,\n\tdismissible,\n\tmedia,\n\trenderImage,\n\trenderVideo,\n}: ApertoProps) {\n\tconst label = getMediaLabel(media);\n\tconst title = media.title ?? label;\n\n\treturn (\n\t\t<ApertoRoot dismissible={dismissible}>\n\t\t\t<ApertoTrigger\n\t\t\t\taria-label={`Open ${label}`}\n\t\t\t\tclassName={classNames?.thumbnail}\n\t\t\t>\n\t\t\t\t{renderThumbnail(media, renderImage, renderVideo)}\n\t\t\t</ApertoTrigger>\n\t\t\t<ApertoPortal>\n\t\t\t\t<ApertoOverlay className={classNames?.overlay} />\n\t\t\t\t<ApertoContent\n\t\t\t\t\tclassName={classNames?.content}\n\t\t\t\t\t{...getDescriptionProps(media)}\n\t\t\t\t>\n\t\t\t\t\t{renderExpandedMedia(media, renderImage, renderVideo)}\n\t\t\t\t\t<ApertoTitle>{title}</ApertoTitle>\n\t\t\t\t\t{media.description ? (\n\t\t\t\t\t\t<ApertoDescription>{media.description}</ApertoDescription>\n\t\t\t\t\t) : null}\n\t\t\t\t\t<ApertoClose\n\t\t\t\t\t\taria-label=\"Close\"\n\t\t\t\t\t\tclassName={classNames?.closeButton}\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t/>\n\t\t\t\t</ApertoContent>\n\t\t\t</ApertoPortal>\n\t\t</ApertoRoot>\n\t);\n}\n","\"use client\";\n\nimport { useApertoGroup } from \"../aperto-group-context\";\nimport { ApertoTrigger } from \"../aperto-trigger\";\nimport { getMediaLabel, renderThumbnail } from \"../media-rendering\";\nimport type { ApertoThumbnailProps } from \"./ApertoTypes\";\n\nexport function ApertoThumbnail({\n\tchildren,\n\tclassName,\n\tindex,\n}: ApertoThumbnailProps) {\n\tconst group = useApertoGroup();\n\tconst media = group.media[index];\n\n\tif (!media) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<ApertoTrigger\n\t\t\tactive={group.index === index}\n\t\t\taria-label={`Open ${getMediaLabel(media)}`}\n\t\t\tclassName={className ?? group.classNames?.thumbnail}\n\t\t\tonClick={() => group.openAtIndex(index)}\n\t\t\tref={(node) => group.registerThumbnail(index, node)}\n\t\t\tsharedLayoutId={false}\n\t\t>\n\t\t\t{children ?? renderThumbnail(media, group.renderImage, group.renderVideo)}\n\t\t</ApertoTrigger>\n\t);\n}\n","\"use client\";\n\n/**\n * @patternmode/aperto\n *\n * Opinionated thumbnail-to-expanded media transitions.\n * Built on Radix Dialog + Motion.\n *\n * Inspired by Cambio (https://github.com/raphaelsalaja/cambio)\n * by Raphael Salaja.\n *\n * @example\n * ```tsx\n * import { Aperto } from \"@patternmode/aperto\";\n *\n * import { Aperto } from \"@patternmode/aperto\";\n * import \"@patternmode/aperto/styles.css\";\n *\n * <Aperto.Group media={media}>\n * {media.map((item, index) => (\n * <Aperto.Thumbnail key={item.id ?? item.src} index={index} />\n * ))}\n * </Aperto.Group>\n * ```\n */\n\nimport {\n\tApertoGroup,\n\ttype ApertoGroupProps,\n\ttype ApertoProps,\n\tApertoSingle,\n\tApertoThumbnail,\n\ttype ApertoThumbnailProps,\n} from \"./aperto\";\nimport { ApertoClose } from \"./aperto-close\";\nimport { ApertoContent, type ApertoContentProps } from \"./aperto-content\";\nimport { ApertoDescription } from \"./aperto-description\";\nimport { ApertoOverlay, type ApertoOverlayProps } from \"./aperto-overlay\";\nimport { ApertoPortal, type ApertoPortalProps } from \"./aperto-portal\";\nimport { ApertoRoot, type ApertoRootProps } from \"./aperto-root\";\nimport { ApertoTitle } from \"./aperto-title\";\nimport { ApertoTrigger, type ApertoTriggerProps } from \"./aperto-trigger\";\n\n/** Lower-level compound component namespace for advanced composition. */\nconst ApertoPrimitive = {\n\tClose: ApertoClose,\n\tContent: ApertoContent,\n\tDescription: ApertoDescription,\n\tOverlay: ApertoOverlay,\n\tPortal: ApertoPortal,\n\tRoot: ApertoRoot,\n\tTitle: ApertoTitle,\n\tTrigger: ApertoTrigger,\n};\n\n/** Primary media-first component namespace. */\nconst Aperto = Object.assign(ApertoSingle, {\n\tGroup: ApertoGroup,\n\tPrimitive: ApertoPrimitive,\n\tThumbnail: ApertoThumbnail,\n});\n\n// Preset system\nexport { PRESETS, resolvePreset } from \"./presets\";\n// Types\nexport type {\n\tApertoClassNames,\n\tApertoImageItem,\n\tApertoMediaItem,\n\tApertoVideoItem,\n\tDismissibleConfig,\n\tDragSpringConfig,\n\tMotionPreset,\n\tMotionPresetName,\n\tMotionProp,\n\tMotionVariants,\n\tNavigationMotionPresetName,\n\tRenderImage,\n\tRenderVideo,\n} from \"./types\";\n// Named exports for tree-shaking\nexport {\n\tAperto,\n\tApertoClose,\n\tApertoContent,\n\ttype ApertoContentProps,\n\tApertoDescription,\n\tApertoGroup,\n\ttype ApertoGroupProps,\n\tApertoOverlay,\n\ttype ApertoOverlayProps,\n\tApertoPortal,\n\ttype ApertoPortalProps,\n\tApertoPrimitive,\n\ttype ApertoProps,\n\tApertoRoot,\n\ttype ApertoRootProps,\n\tApertoThumbnail,\n\ttype ApertoThumbnailProps,\n\tApertoTitle,\n\tApertoTrigger,\n\ttype ApertoTriggerProps,\n};\n"],"mappings":";;;AAEA,SAAS,aAAa,cAAc,SAAS;AAC7C;AAAA,EAGC,eAAAA;AAAA,EACA,SAAAC;AAAA,EACA;AAAA,EACA,WAAAC;AAAA,EACA;AAAA,EACA,YAAAC;AAAA,OACM;AACP,SAAS,iBAAiB;;;ACX1B,YAAY,YAAY;AACxB;AAAA,EAEC;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,OACM;AACP;AAAA,EAEC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACM;;;ACfP,SAAS,eAAe,kBAAkB;AAGnC,IAAM,gBAAgB,cAAyC,IAAI;AAEnE,SAAS,mBAAuC;AACtD,QAAM,MAAM,WAAW,aAAa;AACpC,MAAI,CAAC,KAAK;AACT,UAAM,IAAI,MAAM,qDAAqD;AAAA,EACtE;AACA,SAAO;AACR;;;ACJA,IAAM,qBAAqB;AAC3B,IAAM,mBAAmB;AACzB,IAAM,iBAAiB;AAWhB,SAAS,oBAAoB,UAA0B;AAC7D,SAAO,KAAK;AAAA,IACX;AAAA,IACA,IAAI,KAAK,IAAI,WAAW,qBAAqB,CAAC,IAAI;AAAA,EACnD;AACD;AAGO,IAAM,cAAc,CAAC,GAAG,IAAI,GAAG;AAC/B,IAAM,eAAe,CAAC,GAAG,MAAM,IAAI;AAGnC,IAAM,gBAAgB,CAAC,GAAG,EAAE;AAC5B,IAAM,iBAAiB,CAAC,GAAG,IAAI;AAG/B,IAAM,6BAA6B;AACnC,IAAM,6BAA6B;;;ACrCnC,IAAM,YAAY;AAAA,EACxB,QAAQ;AAAA,EACR,UAAU;AACX;AAEO,IAAM,UAAU;AAAA,EACtB,cAAc,CAAC,MAAM,KAAK,MAAM,CAAC;AAAA,EACjC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC;AAC1B;AAEO,IAAM,UAAU;AAAA,EACtB,QAAQ,EAAE,WAAW,KAAK,SAAS,IAAI,MAAM,EAAE;AAAA,EAC/C,SAAS,EAAE,WAAW,KAAK,SAAS,IAAI,MAAM,EAAE;AAAA,EAChD,QAAQ,EAAE,WAAW,KAAK,SAAS,IAAI,MAAM,IAAI;AAAA,EACjD,OAAO,EAAE,WAAW,KAAK,SAAS,IAAI,MAAM,EAAE;AAC/C;;;ACFO,IAAM,UAAkD;AAAA,EAC9D,QAAQ;AAAA,IACP,YAAY,EAAE,MAAM,QAAQ,QAAQ,UAAU,UAAU,OAAO;AAAA,IAC/D,MAAM;AAAA,MACL,WAAW,QAAQ,MAAM;AAAA,MACzB,SAAS,QAAQ,MAAM;AAAA,MACvB,WAAW;AAAA,IACZ;AAAA,EACD;AAAA,EACA,QAAQ;AAAA,IACP,YAAY,EAAE,MAAM,QAAQ,cAAc,UAAU,UAAU,SAAS;AAAA,IACvE,MAAM;AAAA,MACL,WAAW,QAAQ,QAAQ;AAAA,MAC3B,SAAS,QAAQ,QAAQ;AAAA,MACzB,WAAW;AAAA,IACZ;AAAA,EACD;AAAA,EACA,QAAQ;AAAA,IACP,YAAY;AAAA,MACX,MAAM;AAAA,MACN,WAAW,QAAQ,OAAO;AAAA,MAC1B,SAAS,QAAQ,OAAO;AAAA,MACxB,MAAM,QAAQ,OAAO;AAAA,IACtB;AAAA,IACA,MAAM;AAAA,MACL,WAAW,QAAQ,OAAO;AAAA,MAC1B,SAAS,QAAQ,OAAO;AAAA,MACxB,WAAW;AAAA,IACZ;AAAA,EACD;AAAA,EACA,SAAS;AAAA,IACR,YAAY,EAAE,MAAM,UAAU,UAAU,KAAK;AAAA,IAC7C,MAAM,EAAE,WAAW,KAAM,SAAS,IAAI,WAAW,IAAI;AAAA,EACtD;AACD;AAYO,SAAS,cACf,eACA,iBACA,cACA,UACA,cACe;AACf,MAAI,cAAc;AACjB,WAAO,QAAQ;AAAA,EAChB;AAGA,MAAI,iBAAiB;AACpB,WAAO,QAAQ,eAAe;AAAA,EAC/B;AAGA,MAAI,WAAW,aAAa,GAAG;AAC9B,WAAO,QAAQ,SAAS,aAAa,CAAC;AAAA,EACvC;AAGA,SAAO,QAAQ,YAAY;AAC5B;AAGO,SAAS,cAAc,QAAwC;AACrE,SAAO,OAAO;AACf;;;AJiEI;AA7GJ,IAAM,gBAAgB;AAAA,EACrB,CACC;AAAA,IACC;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACJ,GACA,QACI;AACJ,UAAM,MAAM,iBAAiB;AAC7B,UAAM,CAAC,YAAY,aAAa,IAAI,SAAS,KAAK;AAClD,UAAM,WAAW;AAAA,MAChB;AAAA,MACA;AAAA,MACA,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IACL;AAEA,UAAM,kBACL,mBAAmB,QAChB,SACC,kBAAkB,GAAG,IAAI,QAAQ;AAEtC,UAAM,aAAa,cAAc,QAAQ;AACzC,UAAM,gBAAgB,IAAI,gBAAgB;AAE1C,UAAM,gBACL,OAAO,IAAI,gBAAgB,WAAW,IAAI,cAAc,CAAC;AAC1D,UAAM,oBACL,cAAc,aAAa;AAC5B,UAAM,oBACL,cAAc,YAAY;AAE3B,UAAM,QAAQ,eAAe,CAAC;AAC9B,UAAM,QAAQ,eAAe,CAAC;AAC9B,UAAM,UAAU,UAAU,OAAO,UAAU;AAC3C,UAAM,UAAU,UAAU,OAAO,UAAU;AAE3C,UAAM,WAAW;AAAA,MAAa,MAC7B,KAAK,MAAM,QAAQ,IAAI,GAAG,QAAQ,IAAI,CAAC;AAAA,IACxC;AACA,UAAM,cAAc,aAAa,UAAU,aAAa,YAAY;AACpE,UAAM,gBAAgB,aAAa,UAAU,eAAe,cAAc;AAC1E,UAAM,aAAa,aAAa,UAAU,mBAAmB;AAE7D,UAAM,aAAa;AAAA,MAClB,CAAC,QAAgD,SAAkB;AAClE,YAAI,CAAC,YAAY;AAChB,wBAAc,IAAI;AAAA,QACnB;AACA,cAAM,IAAI,WAAW,IAAI;AACzB,cAAM,IAAI,KAAK,OAAO,IAAI,CAAC;AAC3B,cAAM,IAAI,KAAK,OAAO,IAAI,CAAC;AAAA,MAC5B;AAAA,MACA,CAAC,OAAO,OAAO,YAAY,UAAU;AAAA,IACtC;AAEA,UAAM,gBAAgB;AAAA,MACrB,CAAC,QAAgD,SAAkB;AAClE,sBAAc,KAAK;AACnB,cAAM,QAAQ,KAAK,MAAM,KAAK,SAAS,GAAG,KAAK,SAAS,CAAC;AACzD,cAAM,OAAO,KAAK,MAAM,KAAK,OAAO,GAAG,KAAK,OAAO,CAAC;AAEpD,YAAI,QAAQ,qBAAqB,OAAO,mBAAmB;AAC1D,cAAI,aAAa,KAAK;AACtB;AAAA,QACD;AAEA,cAAM,IAAI,CAAC;AACX,cAAM,IAAI,CAAC;AAAA,MACZ;AAAA,MACA,CAAC,IAAI,cAAc,mBAAmB,OAAO,OAAO,iBAAiB;AAAA,IACtE;AAEA,UAAM,cAAc;AAAA,MACnB,OAAoB;AAAA,QACnB,QAAQ,aAAa,aAAa,gBAAgB,SAAS;AAAA,QAC3D,SAAS;AAAA,QACT,OAAO;AAAA,QACP,GAAG;AAAA,QACH,GAAG;AAAA,QACH,GAAI,cAAc,WACf;AAAA,UACA,MAAM;AAAA,UACN,KAAK;AAAA,UACL,WAAW;AAAA,QACZ,IACC,CAAC;AAAA,QACJ,GAAG;AAAA,MACJ;AAAA,MACA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,IACD;AAEA,WACC,oBAAQ,gBAAP,EAAe,SAAO,MAAC,YAAU,MAAE,GAAG,OACtC;AAAA,MAAC,OAAO;AAAA,MAAP;AAAA,QACA;AAAA,QACA,aAAU;AAAA,QACV,MAAM;AAAA,QACN,iBAAiB,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,EAAE;AAAA,QACxD,aAAa;AAAA,QACb,cAAc;AAAA,QACd,kBAAgB;AAAA,QAChB,QAAQ,kBAAkB,OAAO;AAAA,QACjC,UAAU;AAAA,QACV,QAAQ,gBAAgB,aAAa;AAAA,QACrC,WAAW,gBAAgB,gBAAgB;AAAA,QAC3C;AAAA,QACA,OAAO;AAAA,QACP,YAAY,SAAS;AAAA,QAEpB;AAAA;AAAA,IACF,GACD;AAAA,EAEF;AACD;AAEA,cAAc,cAAc;;;AK/K5B,YAAYC,aAAY;AACxB,SAAwC,cAAAC,mBAAkB;AAOxD,gBAAAC,YAAA;AALF,IAAM,oBAAoBD,YAGxB,CAAC,OAAO,QAAQ;AACjB,SACC,gBAAAC,KAAQ,qBAAP,EAAmB,aAAU,sBAAqB,KAAW,GAAG,OAAO;AAE1E,CAAC;AAED,kBAAkB,cAAc;;;ACdhC,SAAS,iBAAAC,gBAAe,cAAAC,mBAAkB;AAsBnC,IAAM,qBAAqBD;AAAA,EACjC;AACD;AAEO,SAAS,iBAA0C;AACzD,QAAM,MAAMC,YAAW,kBAAkB;AACzC,MAAI,CAAC,KAAK;AACT,UAAM,IAAI,MAAM,qDAAqD;AAAA,EACtE;AACA,SAAO;AACR;;;AC9BA,YAAYC,aAAY;AACxB,SAAS,UAAAC,eAA+B;AACxC,SAAS,cAAAC,mBAAkB;AAgCvB,gBAAAC,YAAA;AAnBJ,IAAM,qBAAiC;AAAA,EACtC,UAAU;AAAA,EACV,MAAM,QAAQ;AACf;AAEA,IAAM,6BAAyC;AAAA,EAC9C,UAAU;AAAA,EACV,MAAM;AACP;AAEA,IAAM,gBAAgBC;AAAA,EACrB,CAAC,EAAE,WAAW,SAAS,MAAM,GAAG,QAAQ;AACvC,UAAM,MAAM,iBAAiB;AAC7B,UAAM,aAAa,IAAI,eACpB,6BACA;AAEH,WACC,gBAAAD,KAAQ,iBAAP,EAAe,SAAO,MAAC,YAAU,MACjC,0BAAAA;AAAA,MAACE,QAAO;AAAA,MAAP;AAAA,QACA,SAAS,EAAE,SAAS,UAAU,IAAI,EAAE;AAAA,QACpC;AAAA,QACA,aAAU;AAAA,QACV,MAAM,EAAE,SAAS,EAAE;AAAA,QACnB,SAAS,EAAE,SAAS,EAAE;AAAA,QACtB;AAAA,QACA;AAAA,QACA;AAAA;AAAA,IACD,GACD;AAAA,EAEF;AACD;AAEA,cAAc,cAAc;;;ACjD5B,YAAYC,aAAY;AACxB,SAAS,uBAAuB;AAiB5B,gBAAAC,YAAA;AANJ,SAAS,aAAa,EAAE,UAAU,UAAU,GAAsB;AACjE,QAAM,EAAE,KAAK,IAAI,iBAAiB;AAElC,SACC,gBAAAA,KAAC,mBACC,kBACA,gBAAAA,KAAQ,gBAAP,EAAc,WAAsB,YAAU,MAC7C,UACF,GAEF;AAEF;;;ACxBA,YAAYC,aAAY;AACxB,SAAS,aAAa,wBAAwB;AAC9C;AAAA,EAGC,eAAAC;AAAA,EACA;AAAA,EACA,YAAAC;AAAA,OACM;AAqFH,gBAAAC,YAAA;AAvDJ,SAAS,WAAW;AAAA,EACnB;AAAA,EACA,cAAc;AAAA,EACd,UAAU;AAAA,EACV,QAAQ,aAAa;AAAA,EACrB,MAAM;AAAA,EACN,cAAc;AAAA,EACd,cAAc;AAAA,EACd,GAAG;AACJ,GAAoB;AACnB,QAAM,cAAc,MAAM;AAC1B,QAAM,WAAW,gBAAgB,UAAU,WAAW;AACtD,QAAM,sBAAsB,iBAAiB,KAAK;AAClD,QAAM,eAAe,oBAAoB;AAGzC,QAAM,CAAC,cAAc,eAAe,IAAIC,UAAS,KAAK;AACtD,QAAM,eAAe,mBAAmB;AACxC,QAAM,OAAO,eAAe,iBAAiB;AAE7C,QAAM,eAAeC;AAAA,IACpB,CAAC,aAAsB;AACtB,UAAI,CAAC,cAAc;AAClB,wBAAgB,QAAQ;AAAA,MACzB;AACA,+BAAyB,QAAQ;AAAA,IAClC;AAAA,IACA,CAAC,cAAc,sBAAsB;AAAA,EACtC;AAGA,QAAM,mBACL,OAAO,eAAe,WAAW,aAAa;AAC/C,QAAM,WACL,OAAO,eAAe,WAAW,aAAa;AAE/C,QAAM,aAA+B,eAClC,YACA;AACH,QAAM,SAAS,QAAQ,UAAU;AAEjC,SACC,gBAAAF;AAAA,IAAC,cAAc;AAAA,IAAd;AAAA,MACA,OAAO;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,cAAc;AAAA,QACd;AAAA,MACD;AAAA,MAEA,0BAAAA,KAAQ,cAAP,EAAY,cAA4B,MAAa,GAAG,aACxD,0BAAAA,KAAC,eAAY,IAAI,UAAW,UAAS,GACtC;AAAA;AAAA,EACD;AAEF;;;ACjGA,YAAYG,aAAY;AACxB,SAAwC,cAAAC,mBAAkB;AAMlD,gBAAAC,YAAA;AAJR,IAAM,cAAcD,YAGlB,CAAC,OAAO,QAAQ;AACjB,SAAO,gBAAAC,KAAQ,eAAP,EAAa,aAAU,gBAAe,KAAW,GAAG,OAAO;AACpE,CAAC;AAED,YAAY,cAAc;;;ACZ1B;AAAA,EACC,mBAAAC;AAAA,EACA,UAAAC;AAAA,OAGM;;;ACcC,gBAAAC,YAAA;AAhBD,SAAS,cAAc,MAA+B;AAC5D,SAAO,KAAK,SAAS,KAAK,OAAO;AAClC;AAEO,SAAS,YAAY,MAAuB,OAAuB;AACzE,SAAO,KAAK,MAAM,GAAG,KAAK,IAAI,IAAI,KAAK,GAAG,IAAI,KAAK;AACpD;AAEO,SAAS,oBAAoB,MAElC;AACD,SAAO,KAAK,cAAc,CAAC,IAAI,EAAE,oBAAoB,OAAU;AAChE;AAEA,SAAS,mBAAmB,OAA8C;AACzE,QAAM,EAAE,MAAM,OAAO,SAAS,UAAU,GAAG,WAAW,IAAI;AAC1D,SAAO,gBAAAA,KAAC,SAAK,GAAG,YAAY,KAAK,WAAW,OAAO,IAAI;AACxD;AAEA,SAAS,mBAAmB,OAA8C;AACzE,QAAM,EAAE,MAAM,OAAO,SAAS,GAAG,WAAW,IAAI;AAChD,MAAI,YAAY,aAAa;AAC5B,WACC,gBAAAA,KAAC,SAAI,KAAK,WAAW,YAAY,KAAK,IAAI,KAAK,MAAM,KAAK,cAAc;AAAA,EAE1E;AACA,SAAO,gBAAAA,KAAC,WAAO,GAAG,YAAY;AAC/B;AAEO,SAAS,gBACf,MACA,aACA,aACY;AACZ,MAAI,KAAK,SAAS,SAAS;AAC1B,UAAM,aAAyC;AAAA,MAC9C,KAAK;AAAA,MACL,QAAQ,KAAK;AAAA,MACb;AAAA,MACA,KAAK,KAAK,gBAAgB,KAAK;AAAA,MAC/B,SAAS;AAAA,MACT,OAAO,KAAK;AAAA,IACb;AACA,YAAQ,eAAe,oBAAoB,UAAU;AAAA,EACtD;AAEA,QAAM,aAAyC;AAAA,IAC9C,cAAc,KAAK,OAAO,KAAK,SAAS;AAAA,IACxC,QAAQ,KAAK;AAAA,IACb;AAAA,IACA,QAAQ,KAAK;AAAA,IACb,KAAK,KAAK;AAAA,IACV,SAAS;AAAA,IACT,OAAO,KAAK;AAAA,EACb;AACA,UAAQ,eAAe,oBAAoB,UAAU;AACtD;AAEO,SAAS,oBACf,MACA,aACA,aACY;AACZ,MAAI,KAAK,SAAS,SAAS;AAC1B,UAAM,aAAyC;AAAA,MAC9C,KAAK,KAAK;AAAA,MACV,QAAQ,KAAK;AAAA,MACb;AAAA,MACA,KAAK,KAAK;AAAA,MACV,SAAS;AAAA,MACT,OAAO,KAAK;AAAA,IACb;AACA,YAAQ,eAAe,oBAAoB,UAAU;AAAA,EACtD;AAEA,QAAM,aAAyC;AAAA,IAC9C,cAAc,KAAK,OAAO,KAAK,SAAS;AAAA,IACxC,UAAU;AAAA,IACV,QAAQ,KAAK;AAAA,IACb;AAAA,IACA,QAAQ,KAAK;AAAA,IACb,KAAK,KAAK;AAAA,IACV,SAAS;AAAA,IACT,OAAO,KAAK;AAAA,EACb;AACA,UAAQ,eAAe,oBAAoB,UAAU;AACtD;AAEO,SAAS,sBACf,MACA,aACA,aACY;AACZ,MAAI,KAAK,SAAS,SAAS;AAC1B,UAAM,aAAyC;AAAA,MAC9C,KAAK,KAAK;AAAA,MACV,QAAQ,KAAK;AAAA,MACb;AAAA,MACA,KAAK,KAAK;AAAA,MACV,SAAS;AAAA,MACT,OAAO,KAAK;AAAA,IACb;AACA,YAAQ,eAAe,oBAAoB,UAAU;AAAA,EACtD;AAEA,QAAM,aAAyC;AAAA,IAC9C,cAAc,KAAK,OAAO,KAAK,SAAS;AAAA,IACxC,QAAQ,KAAK;AAAA,IACb;AAAA,IACA,QAAQ,KAAK;AAAA,IACb,KAAK,KAAK;AAAA,IACV,SAAS;AAAA,IACT,OAAO,KAAK;AAAA,EACb;AACA,UAAQ,eAAe,oBAAoB,UAAU;AACtD;;;ADqBG,gBAAAC,YAAA;AA9GH,IAAM,4BAGF;AAAA,EACH,OAAO;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,YAAY;AAAA,MACX,SAAS,EAAE,UAAU,MAAM,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE;AAAA,MACnD,OAAO,EAAE,SAAS,IAAI,MAAM,MAAM,WAAW,IAAI,MAAM,SAAS;AAAA,MAChE,GAAG,EAAE,SAAS,IAAI,MAAM,MAAM,WAAW,IAAI,MAAM,SAAS;AAAA,IAC7D;AAAA,EACD;AAAA,EACA,OAAO;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,YAAY;AAAA,MACX,SAAS,EAAE,UAAU,MAAM,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,EAAE;AAAA,MAClD,OAAO,EAAE,SAAS,IAAI,MAAM,MAAM,WAAW,KAAK,MAAM,SAAS;AAAA,MACjE,GAAG,EAAE,SAAS,IAAI,MAAM,MAAM,WAAW,KAAK,MAAM,SAAS;AAAA,IAC9D;AAAA,EACD;AAAA,EACA,MAAM;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,YAAY;AAAA,MACX,SAAS,EAAE,UAAU,MAAM,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,EAAE;AAAA,MAChD,OAAO,EAAE,SAAS,IAAI,MAAM,KAAK,WAAW,KAAK,MAAM,SAAS;AAAA,MAChE,GAAG,EAAE,SAAS,IAAI,MAAM,KAAK,WAAW,KAAK,MAAM,SAAS;AAAA,IAC7D;AAAA,EACD;AACD;AAEA,IAAM,oCAAgD;AAAA,EACrD,UAAU;AAAA,EACV,MAAM;AACP;AAEA,IAAM,wBAAwB;AAAA,EAC7B,QAAQ;AAAA,IACP,SAAS;AAAA,IACT,OAAO;AAAA,IACP,GAAG;AAAA,EACJ;AAAA,EACA,OAAO,CAAC;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,EACD,OAAuD;AAAA,IACtD,SAAS;AAAA,IACT,OAAO,cAAc,IAAI,IAAI;AAAA,IAC7B,GAAG,YAAY;AAAA,EAChB;AAAA,EACA,MAAM,CAAC;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,EACD,OAAuD;AAAA,IACtD,SAAS;AAAA,IACT,OAAO,cAAc,IAAI,IAAI;AAAA,IAC7B,GAAG,YAAY,CAAC;AAAA,EACjB;AACD;AAEA,IAAM,+BAA+B;AAAA,EACpC,QAAQ;AAAA,IACP,SAAS;AAAA,IACT,GAAG;AAAA,EACJ;AAAA,EACA,OAAO;AAAA,IACN,SAAS;AAAA,IACT,GAAG;AAAA,EACJ;AAAA,EACA,MAAM;AAAA,IACL,SAAS;AAAA,IACT,GAAG;AAAA,EACJ;AACD;AAEO,SAAS,yBAAyB;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAOG;AACF,QAAM,MAAM,iBAAiB;AAC7B,QAAM,SAAS,0BAA0B,gBAAgB;AACzD,QAAM,aAAa,IAAI,eACpB,oCACA,OAAO;AACV,QAAM,WAAW,IAAI,eAClB,+BACA;AACH,QAAM,kBAA6C;AAAA,IAClD;AAAA,IACA,QAAQ,OAAO;AAAA,IACf,OAAO,OAAO;AAAA,EACf;AAEA,SACC,gBAAAA,KAACC,kBAAA,EAAgB,QAAQ,iBAAiB,SAAS,OAAO,MAAK,QAC9D,0BAAAD;AAAA,IAACE,QAAO;AAAA,IAAP;AAAA,MACA,SAAQ;AAAA,MACR,QAAQ;AAAA,MACR,6BAA2B;AAAA,MAC3B,0BAAwB;AAAA,MACxB,aAAU;AAAA,MACV,MAAK;AAAA,MACL,SAAQ;AAAA,MAER;AAAA,MACA;AAAA,MAEC,8BAAoB,MAAM,aAAa,WAAW;AAAA;AAAA,IAJ9C,YAAY,MAAM,KAAK;AAAA,EAK7B,GACD;AAEF;;;AE3JA;AAAA,EACC,UAAAC;AAAA,OAGM;AACP,SAAS,iBAAiB;AA8ExB,gBAAAC,YAAA;AA3DK,SAAS,gBAAgB,SAA4C;AAC3E,MAAI,CAAC,SAAS;AACb,WAAO;AAAA,EACR;AAEA,QAAM,OAAO,QAAQ,sBAAsB;AAC3C,SAAO;AAAA,IACN,QAAQ,KAAK;AAAA,IACb,MAAM,KAAK;AAAA,IACX,KAAK,KAAK;AAAA,IACV,OAAO,KAAK;AAAA,EACb;AACD;AAEA,SAAS,WAAW,MAAuC;AAC1D,SAAO;AAAA,IACN,QAAQ,KAAK;AAAA,IACb,MAAM,KAAK;AAAA,IACX,KAAK,KAAK;AAAA,IACV,OAAO,KAAK;AAAA,EACb;AACD;AAEA,SAAS,qBAAqB,YAAgC;AAC7D,SAAO,OAAO,WAAW,aAAa,WACnC,WAAW,WAAW,MACtB;AACJ;AAEO,SAAS,2BAA2B;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAKG;AACF,QAAM,MAAM,iBAAiB;AAE7B,YAAU,MAAM;AACf,QAAI,CAAC,YAAY,IAAI;AACpB;AAAA,IACD;AAEA,UAAM,QAAQ;AAAA,MACb;AAAA,MACA,qBAAqB,IAAI,OAAO,UAAU;AAAA,IAC3C;AACA,WAAO,MAAM,aAAa,KAAK;AAAA,EAChC,GAAG,CAAC,IAAI,OAAO,YAAY,YAAY,UAAU,CAAC;AAElD,MAAI,CAAC,YAAY,IAAI;AACpB,WAAO;AAAA,EACR;AAEA,SACC,gBAAAA;AAAA,IAACC,QAAO;AAAA,IAAP;AAAA,MACA,SAAS,WAAW,WAAW,EAAE;AAAA,MACjC,eAAY;AAAA,MACZ,aAAU;AAAA,MACV,SAAS,WAAW,WAAW,IAAI;AAAA,MACnC,OAAO;AAAA,QACN,cAAc;AAAA,QACd,UAAU;AAAA,QACV,eAAe;AAAA,QACf,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,QAAQ;AAAA,MACT;AAAA,MACA,YAAY,IAAI,OAAO;AAAA,MAEtB,gCAAsB,WAAW,MAAM,aAAa,WAAW;AAAA;AAAA,EACjE;AAEF;;;ACrGO,SAAS,qCACf,QACU;AACV,MAAI,EAAE,kBAAkB,UAAU;AACjC,WAAO;AAAA,EACR;AAEA,SACE,OAAuB,qBACxB;AAAA,IACC,OAAO;AAAA,MACN;AAAA,IACD;AAAA,EACD;AAEF;;;AfsRM,SAuBG,UAvBH,OAAAC,OAuBG,YAvBH;AAlQC,SAAS,YAAY;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,eAAe;AAAA,EACf;AAAA,EACA,QAAQ;AAAA,EACR,mBAAmB;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AACD,GAAqB;AACpB,QAAM,cAAcC,OAAM;AAC1B,QAAM,CAAC,eAAe,gBAAgB,IAAIC,UAAS,YAAY;AAC/D,QAAM,CAAC,MAAM,OAAO,IAAIA,UAAS,KAAK;AACtC,QAAM,CAAC,SAAS,UAAU,IAAIA,UAAS,KAAK;AAC5C,QAAM,CAAC,iBAAiB,kBAAkB,IACzCA,UAAuC,IAAI;AAC5C,QAAM,CAAC,qBAAqB,sBAAsB,IACjDA,UAA8B,CAAC;AAChC,QAAM,eAAe,oBAAoB;AACzC,QAAM,QAAQ,eAAe,kBAAkB;AAC/C,QAAM,cAAc,MAAM,KAAK,KAAK,MAAM,CAAC;AAC3C,QAAM,CAAC,mBAAmB,oBAAoB,IAAIA,UAAS,KAAK;AAChE,QAAM,mBAAmB,OAA8B,IAAI;AAC3D,QAAM,gBAAgB,OAAO,oBAAI,IAA+B,CAAC;AACjE,QAAM,yBAAyBC;AAAA,IAC9B,CAAC,cAAsB,gBAAgB,WAAW,IAAI,SAAS;AAAA,IAC/D,CAAC,WAAW;AAAA,EACb;AACA,QAAM,iBAAiB,uBAAuB,iBAAiB;AAC/D,QAAM,uBAAuBA,aAAY,CAAC,SAAyB;AAClE,UAAM,aAAa,gBAAgB,IAAI;AACvC,QAAI,CAAC,YAAY;AAChB;AAAA,IACD;AAEA,uBAAmB,CAAC,YAAY;AAC/B,UAAI,SAAS,UAAU,aAAa,QAAQ,IAAI;AAC/C,eAAO;AAAA,MACR;AACA,aAAO,EAAE,GAAG,SAAS,IAAI,WAAW;AAAA,IACrC,CAAC;AAAA,EACF,GAAG,CAAC,CAAC;AACL,QAAM,uBAAuBA;AAAA,IAC5B,CAAC,SAAgC;AAChC,uBAAiB,UAAU;AAC3B,UAAI,MAAM;AACT,6BAAqB,IAAI;AAAA,MAC1B;AAAA,IACD;AAAA,IACA,CAAC,oBAAoB;AAAA,EACtB;AAEA,QAAM,oBAAoBA;AAAA,IACzB,CAAC,YAAoB,SAAmC;AACvD,UAAI,MAAM;AACT,sBAAc,QAAQ,IAAI,YAAY,IAAI;AAC1C;AAAA,MACD;AACA,oBAAc,QAAQ,OAAO,UAAU;AAAA,IACxC;AAAA,IACA,CAAC;AAAA,EACF;AAEA,kBAAgB,MAAM;AACrB,QACC,iBAAiB,UAAU,aAC3B,gBAAgB,MAChB,CAAC,iBAAiB,SACjB;AACD;AAAA,IACD;AAEA,yBAAqB,iBAAiB,OAAO;AAAA,EAC9C,GAAG,CAAC,sBAAsB,eAAe,CAAC;AAE1C,QAAM,WAAWA;AAAA,IAChB,CAAC,cAAsB;AACtB,UAAI,CAAC,cAAc;AAClB,yBAAiB,SAAS;AAAA,MAC3B;AACA,sBAAgB,SAAS;AAAA,IAC1B;AAAA,IACA,CAAC,cAAc,aAAa;AAAA,EAC7B;AAEA,QAAM,cAAcA;AAAA,IACnB,CAAC,eAAuB;AACvB,YAAM,aAAa;AAAA,QAClB,cAAc,QAAQ,IAAI,UAAU,KAAK;AAAA,MAC1C;AACA,YAAM,OAAO,MAAM,UAAU;AAE7B,gBAAU,MAAM;AACf,mBAAW,KAAK;AAChB;AAAA,UACC,cAAc,OACX,EAAE,MAAM,YAAY,MAAM,OAAO,UAAU,IAC3C;AAAA,QACJ;AACA,+BAAuB,CAAC;AACxB,6BAAqB,UAAU;AAC/B,iBAAS,UAAU;AACnB,gBAAQ,IAAI;AAAA,MACb,CAAC;AAAA,IACF;AAAA,IACA,CAAC,OAAO,QAAQ;AAAA,EACjB;AAEA,QAAM,aAAaA,aAAY,MAAM;AACpC,QAAI,CAAC,QAAQ,SAAS;AACrB;AAAA,IACD;AAEA,UAAM,aAAa,gBAAgB,iBAAiB,OAAO;AAC3D,UAAM,aAAa;AAAA,MAClB,cAAc,QAAQ,IAAI,KAAK,KAAK;AAAA,IACrC;AAEA,QAAI,CAAC,eAAe,CAAC,cAAc,CAAC,YAAY;AAC/C,yBAAmB,IAAI;AACvB,iBAAW,KAAK;AAChB,cAAQ,KAAK;AACb;AAAA,IACD;AAEA,cAAU,MAAM;AACf,iBAAW,IAAI;AACf,yBAAmB;AAAA,QAClB,MAAM;AAAA,QACN,MAAM;AAAA,QACN,OAAO;AAAA,QACP,IAAI;AAAA,MACL,CAAC;AAAA,IACF,CAAC;AAAA,EACF,GAAG,CAAC,aAAa,SAAS,OAAO,IAAI,CAAC;AAEtC,QAAM,uBAAuBA;AAAA,IAC5B,CAAC,UAAiB;AACjB,YAAM,eAAe;AACrB,oBAAc,QAAQ,IAAI,KAAK,GAAG,MAAM,EAAE,eAAe,KAAK,CAAC;AAAA,IAChE;AAAA,IACA,CAAC,KAAK;AAAA,EACP;AAEA,QAAM,gCAAgCA,aAAY,MAAM;AACvD,QAAI,iBAAiB,UAAU,WAAW;AACzC,cAAQ,KAAK;AACb,iBAAW,KAAK;AAAA,IACjB;AACA,uBAAmB,IAAI;AAAA,EACxB,GAAG,CAAC,iBAAiB,KAAK,CAAC;AAE3B,QAAM,mBAAmBA;AAAA,IACxB,CAAC,aAAsB;AACtB,UAAI,UAAU;AACb,mBAAW,KAAK;AAChB,gBAAQ,IAAI;AACZ;AAAA,MACD;AAEA,iBAAW;AAAA,IACZ;AAAA,IACA,CAAC,UAAU;AAAA,EACZ;AAEA,QAAM,QAAQC;AAAA,IACb,OAAO;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,IACA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACD;AACA,QAAM,gBAAgB,MAAM,SAAS;AACrC,QAAM,kBAAkBD;AAAA,IACvB,CAAC,WAAmB,cAAmC;AACtD,6BAAuB,SAAS;AAChC,2BAAqB,SAAS;AAC9B,eAAS,SAAS;AAAA,IACnB;AAAA,IACA,CAAC,QAAQ;AAAA,EACV;AACA,QAAM,eAAeA,aAAY,MAAM;AACtC,qBAAiB,QAAQ,IAAI,MAAM,UAAU,MAAM,QAAQ,EAAE;AAAA,EAC9D,GAAG,CAAC,OAAO,MAAM,QAAQ,eAAe,CAAC;AACzC,QAAM,WAAWA,aAAY,MAAM;AAClC,qBAAiB,QAAQ,KAAK,MAAM,QAAQ,CAAC;AAAA,EAC9C,GAAG,CAAC,OAAO,MAAM,QAAQ,eAAe,CAAC;AACzC,QAAM,uBAAuBA;AAAA,IAC5B,CAAC,UAAyC;AACzC,UACC,MAAM,oBACN,MAAM,UACN,MAAM,WACN,MAAM,WACN,qCAAqC,MAAM,MAAM,GAChD;AACD;AAAA,MACD;AAEA,UAAI,MAAM,QAAQ,aAAa;AAC9B,cAAM,eAAe;AACrB,qBAAa;AAAA,MACd;AAEA,UAAI,MAAM,QAAQ,cAAc;AAC/B,cAAM,eAAe;AACrB,iBAAS;AAAA,MACV;AAAA,IACD;AAAA,IACA,CAAC,UAAU,YAAY;AAAA,EACxB;AACA,QAAM,qBAAqBC,SAAQ,MAAiC;AACnE,QAAI,CAAC,aAAa,SAAS,CAAC,YAAY,QAAQ;AAC/C,aAAO;AAAA,IACR;AAEA,WAAO;AAAA,MACN,kCAAkC,GAAG,YAAY,KAAK,MAAM,YAAY,MAAM;AAAA,MAC9E,yCAAyC,YAAY;AAAA,MACrD,wCAAwC,YAAY;AAAA,IACrD;AAAA,EACD,GAAG,CAAC,aAAa,QAAQ,aAAa,KAAK,CAAC;AAE5C,SACC,gBAAAJ,MAAC,mBAAmB,UAAnB,EAA4B,OAC5B;AAAA,IAAC;AAAA;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,MACR,cAAc;AAAA,MACd;AAAA,MAEC;AAAA;AAAA,QACA,cACA,qBAAC,gBACA;AAAA,0BAAAA,MAAC,iBAAc,WAAW,YAAY,SAAS,SAAS,SAAS;AAAA,UACjE;AAAA,YAAC;AAAA;AAAA,cACA,WAAW,YAAY;AAAA,cACvB,0BAAwB,iBAAiB;AAAA,cACzC,kBAAkB;AAAA,cAClB,WAAW,gBAAgB,uBAAuB;AAAA,cAClD,gBAAgB;AAAA,cACf,GAAG,oBAAoB,WAAW;AAAA,cAEnC;AAAA;AAAA,kBAAC;AAAA;AAAA,oBACA,aAAU;AAAA,oBACV,KAAK;AAAA,oBACL,OAAO;AAAA,oBAEP;AAAA,sCAAAA;AAAA,wBAAC;AAAA;AAAA,0BACA,WAAW;AAAA,0BACX;AAAA,0BACA,MAAM;AAAA,0BACN;AAAA,0BACA;AAAA,0BACA;AAAA;AAAA,sBACD;AAAA,sBACC,gBACA,iCACC;AAAA,wCAAAA;AAAA,0BAAC;AAAA;AAAA,4BACA,cAAW;AAAA,4BACX,WAAW,YAAY;AAAA,4BACvB,aAAU;AAAA,4BACV,SAAS;AAAA,4BACT,MAAK;AAAA,4BAEL,0BAAAA;AAAA,8BAAC;AAAA;AAAA,gCACA,eAAY;AAAA,gCACZ,MAAM;AAAA,gCACN,aAAa;AAAA;AAAA,4BACd;AAAA;AAAA,wBACD;AAAA,wBACA,gBAAAA;AAAA,0BAAC;AAAA;AAAA,4BACA,cAAW;AAAA,4BACX,WAAW,YAAY;AAAA,4BACvB,aAAU;AAAA,4BACV,SAAS;AAAA,4BACT,MAAK;AAAA,4BAEL,0BAAAA;AAAA,8BAAC;AAAA;AAAA,gCACA,eAAY;AAAA,gCACZ,MAAM;AAAA,gCACN,aAAa;AAAA;AAAA,4BACd;AAAA;AAAA,wBACD;AAAA,yBACD,IACG;AAAA;AAAA;AAAA,gBACL;AAAA,gBACA,gBAAAA,MAAC,eACC,sBAAY,SAAS,cAAc,WAAW,GAChD;AAAA,gBACC,YAAY,cACZ,gBAAAA,MAAC,qBAAmB,sBAAY,aAAY,IACzC;AAAA,gBACH,gBACA,qBAAC,SAAI,WAAW,YAAY,SAAS,aAAU,kBAC7C;AAAA,0BAAQ;AAAA,kBAAE;AAAA,kBAAI,MAAM;AAAA,mBACtB,IACG;AAAA,gBACJ,gBAAAA;AAAA,kBAAC;AAAA;AAAA,oBACA,cAAW;AAAA,oBACX,WAAW,YAAY;AAAA,oBACvB,aAAU;AAAA,oBACV,SAAS;AAAA,oBACT,MAAK;AAAA,oBAEL,0BAAAA,MAAC,KAAE,eAAY,QAAO,MAAM,IAAI,aAAa,GAAG;AAAA;AAAA,gBACjD;AAAA;AAAA;AAAA,UACD;AAAA,UACA,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACA,YAAY;AAAA,cACZ;AAAA,cACA;AAAA,cACA,YAAY;AAAA;AAAA,UACb;AAAA,WACD,IACG;AAAA;AAAA;AAAA,EACL,GACD;AAEF;;;AgBxXA,YAAYK,aAAY;AACxB,SAAS,KAAAC,UAAS;AAClB,SAAwC,cAAAC,mBAAkB;AAQ1C,gBAAAC,aAAA;AANhB,IAAM,cAAcD,YAGlB,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ;AAClC,SACC,gBAAAC,MAAQ,eAAP,EAAa,aAAU,gBAAe,KAAW,GAAG,OACnD,sBAAY,gBAAAA,MAACF,IAAA,EAAE,eAAY,QAAO,MAAM,IAAI,aAAa,GAAG,GAC9D;AAEF,CAAC;AAED,YAAY,cAAc;;;ACf1B,YAAYG,aAAY;AACxB,SAAS,UAAAC,eAAc;AACvB;AAAA,EAEC,cAAAC;AAAA,EACA,eAAAC;AAAA,EACA,aAAAC;AAAA,EACA,YAAAC;AAAA,OACM;AAyDH,gBAAAC,aAAA;AAnDJ,IAAM,uBAAuB;AAY7B,IAAM,gBAAgBC;AAAA,EACrB,CACC,EAAE,QAAQ,UAAU,QAAQ,gBAAgB,gBAAgB,GAAG,MAAM,GACrE,QACI;AACJ,UAAM,MAAM,iBAAiB;AAC7B,UAAM,cAAc,IAAI,SAAS,UAAU;AAC3C,UAAM,CAAC,QAAQ,SAAS,IAAIC;AAAA,MAC3B,cAAc,uBAAuB;AAAA,IACtC;AAEA,IAAAC,WAAU,MAAM;AACf,UAAI,aAAa;AAChB,kBAAU,oBAAoB;AAAA,MAC/B,WAAW,IAAI,MAAM;AACpB,kBAAU,CAAC;AAAA,MACZ;AAAA,IACD,GAAG,CAAC,IAAI,MAAM,WAAW,CAAC;AAE1B,UAAM,gCAAgCC,aAAY,MAAM;AACvD,UAAI,CAAC,aAAa;AACjB,kBAAU,CAAC;AAAA,MACZ;AAAA,IACD,GAAG,CAAC,WAAW,CAAC;AAEhB,UAAM,WAAW;AAAA,MAChB;AAAA,MACA;AAAA,MACA,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IACL;AACA,UAAM,WACL,mBAAmB,QAChB,SACC,kBAAkB,GAAG,IAAI,QAAQ;AAEtC,WACC,gBAAAJ,MAAQ,iBAAP,EAAe,SAAO,MAAC,KAAW,GAAG,OACrC,0BAAAA;AAAA,MAACK,QAAO;AAAA,MAAP;AAAA,QACA,sBAAoB,cAAc,KAAK;AAAA,QACvC,aAAU;AAAA,QAEV,QAAM;AAAA,QACN,iBAAiB;AAAA,QACjB;AAAA,QACA,2BAA2B;AAAA,QAC3B,OAAO,EAAE,OAAO;AAAA,QAChB,YAAY,SAAS;AAAA,QACrB,MAAK;AAAA,QAEJ;AAAA;AAAA,MATI,YAAY;AAAA,IAUlB,GACD;AAAA,EAEF;AACD;AAEA,cAAc,cAAc;;;ACxDzB,gBAAAC,OAQC,QAAAC,aARD;AAZI,SAAS,aAAa;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAAgB;AACf,QAAM,QAAQ,cAAc,KAAK;AACjC,QAAM,QAAQ,MAAM,SAAS;AAE7B,SACC,gBAAAA,MAAC,cAAW,aACX;AAAA,oBAAAD;AAAA,MAAC;AAAA;AAAA,QACA,cAAY,QAAQ,KAAK;AAAA,QACzB,WAAW,YAAY;AAAA,QAEtB,0BAAgB,OAAO,aAAa,WAAW;AAAA;AAAA,IACjD;AAAA,IACA,gBAAAC,MAAC,gBACA;AAAA,sBAAAD,MAAC,iBAAc,WAAW,YAAY,SAAS;AAAA,MAC/C,gBAAAC;AAAA,QAAC;AAAA;AAAA,UACA,WAAW,YAAY;AAAA,UACtB,GAAG,oBAAoB,KAAK;AAAA,UAE5B;AAAA,gCAAoB,OAAO,aAAa,WAAW;AAAA,YACpD,gBAAAD,MAAC,eAAa,iBAAM;AAAA,YACnB,MAAM,cACN,gBAAAA,MAAC,qBAAmB,gBAAM,aAAY,IACnC;AAAA,YACJ,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBACA,cAAW;AAAA,gBACX,WAAW,YAAY;AAAA,gBACvB,MAAK;AAAA;AAAA,YACN;AAAA;AAAA;AAAA,MACD;AAAA,OACD;AAAA,KACD;AAEF;;;ACpCE,gBAAAE,aAAA;AAbK,SAAS,gBAAgB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AACD,GAAyB;AACxB,QAAM,QAAQ,eAAe;AAC7B,QAAM,QAAQ,MAAM,MAAM,KAAK;AAE/B,MAAI,CAAC,OAAO;AACX,WAAO;AAAA,EACR;AAEA,SACC,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACA,QAAQ,MAAM,UAAU;AAAA,MACxB,cAAY,QAAQ,cAAc,KAAK,CAAC;AAAA,MACxC,WAAW,aAAa,MAAM,YAAY;AAAA,MAC1C,SAAS,MAAM,MAAM,YAAY,KAAK;AAAA,MACtC,KAAK,CAAC,SAAS,MAAM,kBAAkB,OAAO,IAAI;AAAA,MAClD,gBAAgB;AAAA,MAEf,sBAAY,gBAAgB,OAAO,MAAM,aAAa,MAAM,WAAW;AAAA;AAAA,EACzE;AAEF;;;ACaA,IAAM,kBAAkB;AAAA,EACvB,OAAO;AAAA,EACP,SAAS;AAAA,EACT,aAAa;AAAA,EACb,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,OAAO;AAAA,EACP,SAAS;AACV;AAGA,IAAM,SAAS,OAAO,OAAO,cAAc;AAAA,EAC1C,OAAO;AAAA,EACP,WAAW;AAAA,EACX,WAAW;AACZ,CAAC;","names":["useCallback","useId","useMemo","useState","Dialog","forwardRef","jsx","createContext","useContext","Dialog","motion","forwardRef","jsx","forwardRef","motion","Dialog","jsx","Dialog","useCallback","useState","jsx","useState","useCallback","Dialog","forwardRef","jsx","AnimatePresence","motion","jsx","jsx","AnimatePresence","motion","motion","jsx","motion","jsx","useId","useState","useCallback","useMemo","Dialog","X","forwardRef","jsx","Dialog","motion","forwardRef","useCallback","useEffect","useState","jsx","forwardRef","useState","useEffect","useCallback","motion","jsx","jsxs","jsx"]}
|
package/dist/styles.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */
|
|
2
|
-
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-ease:initial;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-leading:initial;--tw-font-weight:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}}[data-slot=aperto-trigger]{border-radius:var(--aperto-radius,.5rem);border-style:var(--tw-border-style);padding:calc(var(--spacing,.25rem) * 0);text-align:left;--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);--tw-outline-style:none;cursor:zoom-in;transition-property:filter,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));background-color:#0000;border-width:0;outline-style:none;display:block;position:relative;overflow:hidden}[data-slot=aperto-trigger]:hover{--tw-brightness:brightness(.96);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}[data-slot=aperto-trigger]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);--tw-ring-color:#fffc}@supports (color:color-mix(in lab, red, red)){[data-slot=aperto-trigger]:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-white,#fff) 80%, transparent)}}[data-slot=aperto-trigger]:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--color-black,#000)}[data-slot=aperto-trigger]>img,[data-slot=aperto-trigger]>video{object-fit:cover;width:100%;height:100%;display:block}[data-slot=aperto-trigger][data-aperto-active]>img,[data-slot=aperto-trigger][data-aperto-active]>video{visibility:hidden}[data-slot=aperto-overlay]{inset:calc(var(--spacing,.25rem) * 0);z-index:1000;background-color:#000c;position:fixed}@supports (color:color-mix(in lab, red, red)){[data-slot=aperto-overlay]{background-color:color-mix(in oklab, var(--color-black,#000) 80%, transparent)}}[data-slot=aperto-content]{z-index:1001;justify-content:center;align-items:center;gap:calc(var(--spacing,.25rem) * 3);border-radius:var(--aperto-radius,.5rem);width:fit-content;max-width:min(92vw,1200px);height:fit-content;max-height:min(90vh,920px);padding:calc(var(--spacing,.25rem) * 0);color:var(--color-white,#fff);--tw-outline-style:none;overscroll-behavior:contain;outline-style:none;flex-direction:column;display:flex;position:fixed;overflow:visible}[data-slot=aperto-content]>img,[data-slot=aperto-content]>video,[data-slot=aperto-content]>[data-slot=aperto-media]{border-radius:var(--aperto-radius,.5rem);object-fit:cover;aspect-ratio:var(--aperto-expanded-aspect-ratio,3 / 2);max-width:90vw;height:auto;max-height:calc(100dvh - 8rem);width:min(var(--aperto-expanded-width,76vw), calc((100dvh - 8rem) * 1.5), 1000px, 90vw);display:block}[data-slot=aperto-media]{position:relative;overflow:hidden}[data-slot=aperto-media]>img,[data-slot=aperto-media]>video,[data-slot=aperto-media-stage]>img,[data-slot=aperto-media-stage]>video,[data-slot=aperto-transition-media]>img,[data-slot=aperto-transition-media]>video{object-fit:cover;width:100%;height:100%;display:block}[data-slot=aperto-media-stage]{inset:calc(var(--spacing,.25rem) * 0);position:absolute}[data-slot=aperto-content][data-aperto-transition] [data-slot=aperto-media-stage],[data-slot=aperto-transition-media]{will-change:opacity, transform}[data-slot=aperto-content][data-aperto-transition]>*{opacity:0}@keyframes aperto-control-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}[data-slot=aperto-content]:not([data-aperto-transition])>[data-slot=aperto-close],[data-slot=aperto-content]:not([data-aperto-transition])>[data-slot=aperto-media]>[data-slot=aperto-previous-button],[data-slot=aperto-content]:not([data-aperto-transition])>[data-slot=aperto-media]>[data-slot=aperto-next-button]{animation:.35s cubic-bezier(.25,.1,.12,1) 80ms both aperto-control-in}[data-slot=aperto-content]:not([data-aperto-transition])>[data-slot=aperto-title],[data-slot=aperto-content]:not([data-aperto-transition])>[data-slot=aperto-description],[data-slot=aperto-content]:not([data-aperto-transition])>[data-slot=aperto-counter]{animation:.4s cubic-bezier(.25,.1,.12,1) .18s both aperto-control-in}[data-slot=aperto-title]{text-align:center;--tw-leading:var(--leading-snug,1.375);max-width:60ch;font-size:13px;line-height:var(--leading-snug,1.375);--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);color:#ffffffe6}@supports (color:color-mix(in lab, red, red)){[data-slot=aperto-title]{color:color-mix(in oklab, var(--color-white,#fff) 90%, transparent)}}[data-slot=aperto-description]{margin-top:calc(var(--spacing,.25rem) * -1.5);text-align:center;--tw-leading:var(--leading-snug,1.375);max-width:60ch;font-size:13px;line-height:var(--leading-snug,1.375);color:#fff9}@supports (color:color-mix(in lab, red, red)){[data-slot=aperto-description]{color:color-mix(in oklab, var(--color-white,#fff) 60%, transparent)}}[data-slot=aperto-close],[data-slot=aperto-previous-button],[data-slot=aperto-next-button]{z-index:10;width:calc(var(--spacing,.25rem) * 8);height:calc(var(--spacing,.25rem) * 8);border-style:var(--tw-border-style);background-color:#ffffff1a;border-width:0;border-radius:3.40282e38px;place-items:center;display:grid;position:absolute}@supports (color:color-mix(in lab, red, red)){[data-slot=aperto-close],[data-slot=aperto-previous-button],[data-slot=aperto-next-button]{background-color:color-mix(in oklab, var(--color-white,#fff) 10%, transparent)}}[data-slot=aperto-close],[data-slot=aperto-previous-button],[data-slot=aperto-next-button]{color:#ffffffb3}@supports (color:color-mix(in lab, red, red)){[data-slot=aperto-close],[data-slot=aperto-previous-button],[data-slot=aperto-next-button]{color:color-mix(in oklab, var(--color-white,#fff) 70%, transparent)}}[data-slot=aperto-close],[data-slot=aperto-previous-button],[data-slot=aperto-next-button]{transition-property:background,color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}@media (hover:hover) and (pointer:fine){[data-slot=aperto-close]:hover,[data-slot=aperto-previous-button]:hover,[data-slot=aperto-next-button]:hover{background-color:#fff3}@supports (color:color-mix(in lab, red, red)){[data-slot=aperto-close]:hover,[data-slot=aperto-previous-button]:hover,[data-slot=aperto-next-button]:hover{background-color:color-mix(in oklab, var(--color-white,#fff) 20%, transparent)}}[data-slot=aperto-close]:hover,[data-slot=aperto-previous-button]:hover,[data-slot=aperto-next-button]:hover{color:var(--color-white,#fff)}}[data-slot=aperto-close]:focus-visible,[data-slot=aperto-previous-button]:focus-visible,[data-slot=aperto-next-button]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);--tw-ring-color:#fff9}@supports (color:color-mix(in lab, red, red)){[data-slot=aperto-close]:focus-visible,[data-slot=aperto-previous-button]:focus-visible,[data-slot=aperto-next-button]:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-white,#fff) 60%, transparent)}}[data-slot=aperto-close]:focus-visible,[data-slot=aperto-previous-button]:focus-visible,[data-slot=aperto-next-button]:focus-visible{--tw-outline-style:none;outline-style:none}[data-slot=aperto-close]{top:calc(var(--spacing,.25rem) * 3);right:calc(var(--spacing,.25rem) * 3)}[data-slot=aperto-previous-button]{top:50%;left:calc(var(--spacing,.25rem) * 3);--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}[data-slot=aperto-next-button]{top:50%;right:calc(var(--spacing,.25rem) * 3);--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}[data-slot=aperto-close]>svg,[data-slot=aperto-previous-button]>svg,[data-slot=aperto-next-button]>svg{pointer-events:none;width:calc(var(--spacing,.25rem) * 4);height:calc(var(--spacing,.25rem) * 4)}[data-slot=aperto-counter]{background-color:#ffffff1a;border-radius:3.40282e38px}@supports (color:color-mix(in lab, red, red)){[data-slot=aperto-counter]{background-color:color-mix(in oklab, var(--color-white,#fff) 10%, transparent)}}[data-slot=aperto-counter]{padding-inline:calc(var(--spacing,.25rem) * 2.5);padding-block:calc(var(--spacing,.25rem) * .5);--tw-font-weight:var(--font-weight-medium,500);font-size:11px;font-weight:var(--font-weight-medium,500);color:#ffffff80}@supports (color:color-mix(in lab, red, red)){[data-slot=aperto-counter]{color:color-mix(in oklab, var(--color-white,#fff) 50%, transparent)}}@media (max-width:560px){[data-slot=aperto-content]{gap:calc(var(--spacing,.25rem) * 2);max-width:calc(100vw - 1rem)}[data-slot=aperto-content]>img,[data-slot=aperto-content]>video,[data-slot=aperto-content]>[data-slot=aperto-media]{width:min(100vw - 2rem,150dvh - 18rem);max-width:calc(100vw - 2rem);max-height:calc(100dvh - 12rem)}[data-slot=aperto-title],[data-slot=aperto-description]{max-width:calc(100vw - 2rem)}[data-slot=aperto-close],[data-slot=aperto-previous-button],[data-slot=aperto-next-button]{width:calc(var(--spacing,.25rem) * 11);height:calc(var(--spacing,.25rem) * 11);touch-action:manipulation}[data-slot=aperto-close]{top:calc(var(--spacing,.25rem) * 2);right:calc(var(--spacing,.25rem) * 2)}[data-slot=aperto-previous-button]{left:calc(var(--spacing,.25rem) * 2)}[data-slot=aperto-next-button]{right:calc(var(--spacing,.25rem) * 2)}}@media (prefers-reduced-motion:reduce){[data-slot=aperto-content]:not([data-aperto-transition])>*{animation:none!important}}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}
|
|
2
|
+
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-ease:initial;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-leading:initial;--tw-font-weight:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}}[data-slot=aperto-trigger]{border-radius:var(--aperto-radius,.5rem);border-style:var(--tw-border-style);padding:calc(var(--spacing,.25rem) * 0);text-align:left;--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);--tw-outline-style:none;cursor:zoom-in;transition-property:filter,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));background-color:#0000;border-width:0;outline-style:none;display:block;position:relative;overflow:hidden}[data-slot=aperto-trigger]:hover{--tw-brightness:brightness(.96);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}[data-slot=aperto-trigger]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);--tw-ring-color:#fffc}@supports (color:color-mix(in lab, red, red)){[data-slot=aperto-trigger]:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-white,#fff) 80%, transparent)}}[data-slot=aperto-trigger]:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--color-black,#000)}[data-slot=aperto-trigger]>img,[data-slot=aperto-trigger]>video{object-fit:cover;width:100%;height:100%;display:block}[data-slot=aperto-trigger][data-aperto-active]>img,[data-slot=aperto-trigger][data-aperto-active]>video{visibility:hidden}[data-slot=aperto-overlay]{inset:calc(var(--spacing,.25rem) * 0);z-index:1000;background-color:#000c;position:fixed}@supports (color:color-mix(in lab, red, red)){[data-slot=aperto-overlay]{background-color:color-mix(in oklab, var(--color-black,#000) 80%, transparent)}}[data-slot=aperto-content]{z-index:1001;justify-content:center;align-items:center;gap:calc(var(--spacing,.25rem) * 3);border-radius:var(--aperto-radius,.5rem);width:fit-content;max-width:min(92vw,1200px);height:fit-content;max-height:min(90vh,920px);padding:calc(var(--spacing,.25rem) * 0);color:var(--color-white,#fff);--tw-outline-style:none;overscroll-behavior:contain;outline-style:none;flex-direction:column;display:flex;position:fixed;overflow:visible}[data-slot=aperto-content]>img,[data-slot=aperto-content]>video,[data-slot=aperto-content]>[data-slot=aperto-media]{border-radius:var(--aperto-radius,.5rem);aspect-ratio:var(--aperto-expanded-aspect-ratio,3 / 2);max-width:90vw;height:auto;max-height:calc(100dvh - 8rem);width:min(var(--aperto-expanded-width,76vw), calc((100dvh - 8rem) * (var(--aperto-expanded-aspect-ratio-width,3) / var(--aperto-expanded-aspect-ratio-height,2))), 1000px, 90vw);display:block}[data-slot=aperto-media]{position:relative;overflow:hidden}[data-slot=aperto-media]>img,[data-slot=aperto-media]>video,[data-slot=aperto-media-stage]>img,[data-slot=aperto-media-stage]>video,[data-slot=aperto-transition-media]>img,[data-slot=aperto-transition-media]>video{width:100%;height:100%;display:block}[data-slot=aperto-media-stage]{inset:calc(var(--spacing,.25rem) * 0);position:absolute}[data-slot=aperto-content][data-aperto-transition] [data-slot=aperto-media-stage],[data-slot=aperto-transition-media]{will-change:opacity, transform}[data-slot=aperto-content][data-aperto-transition]>*{opacity:0}@keyframes aperto-control-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}[data-slot=aperto-content]:not([data-aperto-transition])>[data-slot=aperto-close],[data-slot=aperto-content]:not([data-aperto-transition])>[data-slot=aperto-media]>[data-slot=aperto-previous-button],[data-slot=aperto-content]:not([data-aperto-transition])>[data-slot=aperto-media]>[data-slot=aperto-next-button]{animation:.35s cubic-bezier(.25,.1,.12,1) 80ms both aperto-control-in}[data-slot=aperto-content]:not([data-aperto-transition])>[data-slot=aperto-title],[data-slot=aperto-content]:not([data-aperto-transition])>[data-slot=aperto-description],[data-slot=aperto-content]:not([data-aperto-transition])>[data-slot=aperto-counter]{animation:.4s cubic-bezier(.25,.1,.12,1) .18s both aperto-control-in}[data-slot=aperto-title]{text-align:center;--tw-leading:var(--leading-snug,1.375);max-width:60ch;font-size:13px;line-height:var(--leading-snug,1.375);--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);color:#ffffffe6}@supports (color:color-mix(in lab, red, red)){[data-slot=aperto-title]{color:color-mix(in oklab, var(--color-white,#fff) 90%, transparent)}}[data-slot=aperto-description]{margin-top:calc(var(--spacing,.25rem) * -1.5);text-align:center;--tw-leading:var(--leading-snug,1.375);max-width:60ch;font-size:13px;line-height:var(--leading-snug,1.375);color:#fff9}@supports (color:color-mix(in lab, red, red)){[data-slot=aperto-description]{color:color-mix(in oklab, var(--color-white,#fff) 60%, transparent)}}[data-slot=aperto-close],[data-slot=aperto-previous-button],[data-slot=aperto-next-button]{z-index:10;width:calc(var(--spacing,.25rem) * 8);height:calc(var(--spacing,.25rem) * 8);border-style:var(--tw-border-style);background-color:#ffffff1a;border-width:0;border-radius:3.40282e38px;place-items:center;display:grid;position:absolute}@supports (color:color-mix(in lab, red, red)){[data-slot=aperto-close],[data-slot=aperto-previous-button],[data-slot=aperto-next-button]{background-color:color-mix(in oklab, var(--color-white,#fff) 10%, transparent)}}[data-slot=aperto-close],[data-slot=aperto-previous-button],[data-slot=aperto-next-button]{color:#ffffffb3}@supports (color:color-mix(in lab, red, red)){[data-slot=aperto-close],[data-slot=aperto-previous-button],[data-slot=aperto-next-button]{color:color-mix(in oklab, var(--color-white,#fff) 70%, transparent)}}[data-slot=aperto-close],[data-slot=aperto-previous-button],[data-slot=aperto-next-button]{transition-property:background,color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}@media (hover:hover) and (pointer:fine){[data-slot=aperto-close]:hover,[data-slot=aperto-previous-button]:hover,[data-slot=aperto-next-button]:hover{background-color:#fff3}@supports (color:color-mix(in lab, red, red)){[data-slot=aperto-close]:hover,[data-slot=aperto-previous-button]:hover,[data-slot=aperto-next-button]:hover{background-color:color-mix(in oklab, var(--color-white,#fff) 20%, transparent)}}[data-slot=aperto-close]:hover,[data-slot=aperto-previous-button]:hover,[data-slot=aperto-next-button]:hover{color:var(--color-white,#fff)}}[data-slot=aperto-close]:focus-visible,[data-slot=aperto-previous-button]:focus-visible,[data-slot=aperto-next-button]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);--tw-ring-color:#fff9}@supports (color:color-mix(in lab, red, red)){[data-slot=aperto-close]:focus-visible,[data-slot=aperto-previous-button]:focus-visible,[data-slot=aperto-next-button]:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-white,#fff) 60%, transparent)}}[data-slot=aperto-close]:focus-visible,[data-slot=aperto-previous-button]:focus-visible,[data-slot=aperto-next-button]:focus-visible{--tw-outline-style:none;outline-style:none}[data-slot=aperto-close]{top:calc(var(--spacing,.25rem) * 3);right:calc(var(--spacing,.25rem) * 3)}[data-slot=aperto-previous-button]{top:50%;left:calc(var(--spacing,.25rem) * 3);--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}[data-slot=aperto-next-button]{top:50%;right:calc(var(--spacing,.25rem) * 3);--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}[data-slot=aperto-close]>svg,[data-slot=aperto-previous-button]>svg,[data-slot=aperto-next-button]>svg{pointer-events:none;width:calc(var(--spacing,.25rem) * 4);height:calc(var(--spacing,.25rem) * 4)}[data-slot=aperto-counter]{background-color:#ffffff1a;border-radius:3.40282e38px}@supports (color:color-mix(in lab, red, red)){[data-slot=aperto-counter]{background-color:color-mix(in oklab, var(--color-white,#fff) 10%, transparent)}}[data-slot=aperto-counter]{padding-inline:calc(var(--spacing,.25rem) * 2.5);padding-block:calc(var(--spacing,.25rem) * .5);--tw-font-weight:var(--font-weight-medium,500);font-size:11px;font-weight:var(--font-weight-medium,500);color:#ffffff80}@supports (color:color-mix(in lab, red, red)){[data-slot=aperto-counter]{color:color-mix(in oklab, var(--color-white,#fff) 50%, transparent)}}@media (max-width:560px){[data-slot=aperto-content]{gap:calc(var(--spacing,.25rem) * 2);max-width:calc(100vw - 1rem)}[data-slot=aperto-content]>img,[data-slot=aperto-content]>video,[data-slot=aperto-content]>[data-slot=aperto-media]{width:min(100vw - 2rem,150dvh - 18rem);max-width:calc(100vw - 2rem);max-height:calc(100dvh - 12rem)}[data-slot=aperto-title],[data-slot=aperto-description]{max-width:calc(100vw - 2rem)}[data-slot=aperto-close],[data-slot=aperto-previous-button],[data-slot=aperto-next-button]{width:calc(var(--spacing,.25rem) * 11);height:calc(var(--spacing,.25rem) * 11);touch-action:manipulation}[data-slot=aperto-close]{top:calc(var(--spacing,.25rem) * 2);right:calc(var(--spacing,.25rem) * 2)}[data-slot=aperto-previous-button]{left:calc(var(--spacing,.25rem) * 2)}[data-slot=aperto-next-button]{right:calc(var(--spacing,.25rem) * 2)}}@media (prefers-reduced-motion:reduce){[data-slot=aperto-content]:not([data-aperto-transition])>*{animation:none!important}}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}
|