thread-ui 0.12.0 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -1
- package/dist/components/content-display/carousel/carousel-context.d.ts +48 -0
- package/dist/components/content-display/carousel/carousel-context.js +5 -0
- package/dist/components/content-display/carousel/carousel-context.js.map +1 -0
- package/dist/components/content-display/carousel/carousel.d.ts +18 -0
- package/dist/components/content-display/carousel/carousel.js +71 -0
- package/dist/components/content-display/carousel/carousel.js.map +1 -0
- package/dist/components/content-display/carousel/carousel.types.d.ts +47 -0
- package/dist/components/content-display/carousel/carousel.types.js +2 -0
- package/dist/components/content-display/carousel/carousel.types.js.map +1 -0
- package/dist/components/content-display/carousel/components/carousel-content.d.ts +1 -0
- package/dist/components/content-display/carousel/components/carousel-content.js +33 -0
- package/dist/components/content-display/carousel/components/carousel-content.js.map +1 -0
- package/dist/components/content-display/carousel/components/carousel-controls.d.ts +3 -0
- package/dist/components/content-display/carousel/components/carousel-controls.js +27 -0
- package/dist/components/content-display/carousel/components/carousel-controls.js.map +1 -0
- package/dist/components/content-display/carousel/components/carousel-header.d.ts +1 -0
- package/dist/components/content-display/carousel/components/carousel-header.js +24 -0
- package/dist/components/content-display/carousel/components/carousel-header.js.map +1 -0
- package/dist/components/content-display/carousel/components/carousel-item.d.ts +6 -0
- package/dist/components/content-display/carousel/components/carousel-item.js +43 -0
- package/dist/components/content-display/carousel/components/carousel-item.js.map +1 -0
- package/dist/components/content-display/carousel/components/carousel-items-display.d.ts +1 -0
- package/dist/components/content-display/carousel/components/carousel-items-display.js +19 -0
- package/dist/components/content-display/carousel/components/carousel-items-display.js.map +1 -0
- package/dist/components/content-display/carousel/index.d.ts +2 -0
- package/dist/components/content-display/carousel/index.js +2 -0
- package/dist/components/content-display/carousel/index.js.map +1 -0
- package/dist/components/content-display/gallery/components/gallery-content.d.ts +1 -0
- package/dist/components/content-display/gallery/components/gallery-content.js +64 -0
- package/dist/components/content-display/gallery/components/gallery-content.js.map +1 -0
- package/dist/components/content-display/gallery/components/gallery-header.d.ts +1 -0
- package/dist/components/content-display/gallery/components/gallery-header.js +19 -0
- package/dist/components/content-display/gallery/components/gallery-header.js.map +1 -0
- package/dist/components/content-display/gallery/components/item-display/gallery-item.d.ts +6 -0
- package/dist/components/content-display/gallery/components/item-display/gallery-item.js +59 -0
- package/dist/components/content-display/gallery/components/item-display/gallery-item.js.map +1 -0
- package/dist/components/content-display/gallery/components/item-display/gallery-items-display.d.ts +1 -0
- package/dist/components/content-display/gallery/components/item-display/gallery-items-display.js +23 -0
- package/dist/components/content-display/gallery/components/item-display/gallery-items-display.js.map +1 -0
- package/dist/components/content-display/gallery/components/item-track/item-track.d.ts +1 -0
- package/dist/components/content-display/gallery/components/item-track/item-track.js +21 -0
- package/dist/components/content-display/gallery/components/item-track/item-track.js.map +1 -0
- package/dist/components/content-display/gallery/components/item-track/track-item.d.ts +6 -0
- package/dist/components/content-display/gallery/components/item-track/track-item.js +60 -0
- package/dist/components/content-display/gallery/components/item-track/track-item.js.map +1 -0
- package/dist/components/content-display/gallery/gallery-context.d.ts +45 -0
- package/dist/components/content-display/gallery/gallery-context.js +5 -0
- package/dist/components/content-display/gallery/gallery-context.js.map +1 -0
- package/dist/components/content-display/gallery/gallery-display-constants.d.ts +9 -0
- package/dist/components/content-display/gallery/gallery-display-constants.js +15 -0
- package/dist/components/content-display/gallery/gallery-display-constants.js.map +1 -0
- package/dist/components/content-display/gallery/gallery.d.ts +18 -0
- package/dist/components/content-display/gallery/gallery.js +83 -0
- package/dist/components/content-display/gallery/gallery.js.map +1 -0
- package/dist/components/content-display/gallery/gallery.types.d.ts +47 -0
- package/dist/components/content-display/gallery/gallery.types.js +2 -0
- package/dist/components/content-display/gallery/gallery.types.js.map +1 -0
- package/dist/components/content-display/gallery/index.d.ts +2 -0
- package/dist/components/content-display/gallery/index.js +2 -0
- package/dist/components/content-display/gallery/index.js.map +1 -0
- package/dist/components/content-display/index.d.ts +4 -0
- package/dist/components/content-display/index.js +5 -0
- package/dist/components/content-display/index.js.map +1 -0
- package/dist/components/content-display/lightbox/components/lightbox-content.d.ts +1 -0
- package/dist/components/content-display/lightbox/components/lightbox-content.js +19 -0
- package/dist/components/content-display/lightbox/components/lightbox-content.js.map +1 -0
- package/dist/components/content-display/lightbox/components/lightbox-title.d.ts +1 -0
- package/dist/components/content-display/lightbox/components/lightbox-title.js +22 -0
- package/dist/components/content-display/lightbox/components/lightbox-title.js.map +1 -0
- package/dist/components/content-display/lightbox/index.d.ts +2 -0
- package/dist/components/content-display/lightbox/index.js +2 -0
- package/dist/components/content-display/lightbox/index.js.map +1 -0
- package/dist/components/content-display/lightbox/lightbox-context.d.ts +19 -0
- package/dist/components/content-display/lightbox/lightbox-context.js +3 -0
- package/dist/components/content-display/lightbox/lightbox-context.js.map +1 -0
- package/dist/components/content-display/lightbox/lightbox.d.ts +17 -0
- package/dist/components/content-display/lightbox/lightbox.js +46 -0
- package/dist/components/content-display/lightbox/lightbox.js.map +1 -0
- package/dist/components/content-display/lightbox/lightbox.types.d.ts +11 -0
- package/dist/components/content-display/lightbox/lightbox.types.js +2 -0
- package/dist/components/content-display/lightbox/lightbox.types.js.map +1 -0
- package/dist/components/{ui → content-display}/tab-view/components/tab-item-content.d.ts +2 -1
- package/dist/components/{ui → content-display}/tab-view/components/tab-item-content.js +2 -1
- package/dist/components/content-display/tab-view/components/tab-item-content.js.map +1 -0
- package/dist/components/{ui → content-display}/tab-view/components/tab-view-content.js +1 -0
- package/dist/components/content-display/tab-view/components/tab-view-content.js.map +1 -0
- package/dist/components/{ui → content-display}/tab-view/components/tab-view-controls.js +1 -0
- package/dist/components/content-display/tab-view/components/tab-view-controls.js.map +1 -0
- package/dist/components/content-display/tab-view/index.js.map +1 -0
- package/dist/components/content-display/tab-view/tab-view-context.d.ts +40 -0
- package/dist/components/content-display/tab-view/tab-view-context.js.map +1 -0
- package/dist/components/{ui → content-display}/tab-view/tab-view.d.ts +1 -2
- package/dist/components/{ui → content-display}/tab-view/tab-view.js +3 -4
- package/dist/components/content-display/tab-view/tab-view.js.map +1 -0
- package/dist/components/{ui → content-display}/tab-view/tab-view.types.d.ts +7 -11
- package/dist/components/content-display/tab-view/tab-view.types.js.map +1 -0
- package/dist/components/form-elements/dropdowns/dropdown-base/dropdown-base.js +1 -1
- package/dist/components/form-elements/dropdowns/dropdown-base/dropdown-base.js.map +1 -1
- package/dist/components/index.d.ts +2 -1
- package/dist/components/index.js +2 -1
- package/dist/components/index.js.map +1 -1
- package/dist/components/layouts/column-layout/column-layout.types.d.ts +4 -2
- package/dist/components/layouts/column-layout/column-skeleton/column-skeleton.types.d.ts +3 -2
- package/dist/components/layouts/column-layout/index.d.ts +1 -1
- package/dist/components/layouts/column-layout/index.js.map +1 -1
- package/dist/components/media-display/image-panel/image-panel.js.map +1 -0
- package/dist/components/media-display/image-panel/image-panel.types.js.map +1 -0
- package/dist/components/media-display/image-panel/index.js.map +1 -0
- package/dist/components/media-display/index.js.map +1 -0
- package/dist/components/media-display/info-card/index.js.map +1 -0
- package/dist/components/media-display/info-card/info-card.js.map +1 -0
- package/dist/components/media-display/info-card/info-card.types.js.map +1 -0
- package/dist/components/media-display/media-card/index.js.map +1 -0
- package/dist/components/media-display/media-card/media-card.js.map +1 -0
- package/dist/components/media-display/media-card/media-card.types.js.map +1 -0
- package/dist/components/ui/card/card.js +2 -2
- package/dist/components/ui/card/card.js.map +1 -1
- package/dist/components/ui/index.d.ts +0 -1
- package/dist/components/ui/index.js +0 -1
- package/dist/components/ui/index.js.map +1 -1
- package/dist/components/ui/modal/components/modal-content.js +3 -8
- package/dist/components/ui/modal/components/modal-content.js.map +1 -1
- package/dist/components/ui/modal/modal-context.d.ts +13 -2
- package/dist/components/ui/modal/modal.d.ts +2 -2
- package/dist/components/ui/modal/modal.js +4 -22
- package/dist/components/ui/modal/modal.js.map +1 -1
- package/dist/components/ui/modal/modal.types.d.ts +5 -17
- package/dist/hooks/use-click-outside/use-click-outside.d.ts +9 -2
- package/dist/hooks/use-click-outside/use-click-outside.js +2 -2
- package/dist/hooks/use-click-outside/use-click-outside.js.map +1 -1
- package/dist/hooks/use-dismiss/use-dismiss.d.ts +12 -4
- package/dist/hooks/use-dismiss/use-dismiss.js +8 -8
- package/dist/hooks/use-dismiss/use-dismiss.js.map +1 -1
- package/dist/internal-components/index.d.ts +1 -0
- package/dist/internal-components/index.js +1 -0
- package/dist/internal-components/index.js.map +1 -1
- package/dist/internal-components/modal-primitive/index.d.ts +2 -0
- package/dist/internal-components/modal-primitive/index.js +2 -0
- package/dist/internal-components/modal-primitive/index.js.map +1 -0
- package/dist/internal-components/modal-primitive/modal-primitive.d.ts +2 -0
- package/dist/internal-components/modal-primitive/modal-primitive.js +34 -0
- package/dist/internal-components/modal-primitive/modal-primitive.js.map +1 -0
- package/dist/internal-components/modal-primitive/modal-primitive.types.d.ts +19 -0
- package/dist/internal-components/modal-primitive/modal-primitive.types.js +2 -0
- package/dist/internal-components/modal-primitive/modal-primitive.types.js.map +1 -0
- package/dist/styled-system/patterns/divider.d.ts +1 -1
- package/dist/styled-system/patterns/float.d.ts +1 -1
- package/dist/styled-system/patterns/spacer.js +6 -2
- package/dist/styled-system/styles.css +1 -1
- package/dist/styles/panda.css +1 -1
- package/dist/styles/theme.css +1 -1
- package/dist/theme/default-theme.js +1 -1
- package/dist/utils/theme-utilities/get-utility-size-value/get-utility-size-value.d.ts +1 -1
- package/package.json +8 -3
- package/dist/components/media/image-panel/image-panel.js.map +0 -1
- package/dist/components/media/image-panel/image-panel.types.js.map +0 -1
- package/dist/components/media/image-panel/index.js.map +0 -1
- package/dist/components/media/index.js.map +0 -1
- package/dist/components/media/info-card/index.js.map +0 -1
- package/dist/components/media/info-card/info-card.js.map +0 -1
- package/dist/components/media/info-card/info-card.types.js.map +0 -1
- package/dist/components/media/media-card/index.js.map +0 -1
- package/dist/components/media/media-card/media-card.js.map +0 -1
- package/dist/components/media/media-card/media-card.types.js.map +0 -1
- package/dist/components/ui/tab-view/components/tab-item-content.js.map +0 -1
- package/dist/components/ui/tab-view/components/tab-view-content.js.map +0 -1
- package/dist/components/ui/tab-view/components/tab-view-controls.js.map +0 -1
- package/dist/components/ui/tab-view/index.js.map +0 -1
- package/dist/components/ui/tab-view/tab-view-context.d.ts +0 -34
- package/dist/components/ui/tab-view/tab-view-context.js.map +0 -1
- package/dist/components/ui/tab-view/tab-view.js.map +0 -1
- package/dist/components/ui/tab-view/tab-view.types.js.map +0 -1
- /package/dist/components/{ui → content-display}/tab-view/components/tab-view-content.d.ts +0 -0
- /package/dist/components/{ui → content-display}/tab-view/components/tab-view-controls.d.ts +0 -0
- /package/dist/components/{ui → content-display}/tab-view/index.d.ts +0 -0
- /package/dist/components/{ui → content-display}/tab-view/index.js +0 -0
- /package/dist/components/{ui → content-display}/tab-view/tab-view-context.js +0 -0
- /package/dist/components/{ui → content-display}/tab-view/tab-view.types.js +0 -0
- /package/dist/components/{media → media-display}/image-panel/image-panel.d.ts +0 -0
- /package/dist/components/{media → media-display}/image-panel/image-panel.js +0 -0
- /package/dist/components/{media → media-display}/image-panel/image-panel.types.d.ts +0 -0
- /package/dist/components/{media → media-display}/image-panel/image-panel.types.js +0 -0
- /package/dist/components/{media → media-display}/image-panel/index.d.ts +0 -0
- /package/dist/components/{media → media-display}/image-panel/index.js +0 -0
- /package/dist/components/{media → media-display}/index.d.ts +0 -0
- /package/dist/components/{media → media-display}/index.js +0 -0
- /package/dist/components/{media → media-display}/info-card/index.d.ts +0 -0
- /package/dist/components/{media → media-display}/info-card/index.js +0 -0
- /package/dist/components/{media → media-display}/info-card/info-card.d.ts +0 -0
- /package/dist/components/{media → media-display}/info-card/info-card.js +0 -0
- /package/dist/components/{media → media-display}/info-card/info-card.types.d.ts +0 -0
- /package/dist/components/{media → media-display}/info-card/info-card.types.js +0 -0
- /package/dist/components/{media → media-display}/media-card/index.d.ts +0 -0
- /package/dist/components/{media → media-display}/media-card/index.js +0 -0
- /package/dist/components/{media → media-display}/media-card/media-card.d.ts +0 -0
- /package/dist/components/{media → media-display}/media-card/media-card.js +0 -0
- /package/dist/components/{media → media-display}/media-card/media-card.types.d.ts +0 -0
- /package/dist/components/{media → media-display}/media-card/media-card.types.js +0 -0
package/dist/components/content-display/gallery/components/item-display/gallery-items-display.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { css } from '../../../../../styled-system/css';
|
|
4
|
+
import { useGalleryContext, useGalleryEmblaContext } from '../../gallery-context';
|
|
5
|
+
import { GalleryItem } from './gallery-item';
|
|
6
|
+
const styles = {
|
|
7
|
+
viewport: css({
|
|
8
|
+
height: '100%',
|
|
9
|
+
overflow: 'hidden',
|
|
10
|
+
}),
|
|
11
|
+
window: css({
|
|
12
|
+
height: '100%',
|
|
13
|
+
display: 'flex',
|
|
14
|
+
touchAction: 'pan-y pinch-zoom',
|
|
15
|
+
marginLeft: 'calc(var(--thread-gallery-display-item-spacing) * -1)', // Tracks with GALLERY_DISPLAY_CONSTANT_NAMES
|
|
16
|
+
}),
|
|
17
|
+
};
|
|
18
|
+
export const GalleryItemsDisplay = () => {
|
|
19
|
+
const { value: { itemOrder }, } = useGalleryContext();
|
|
20
|
+
const { emblaDisplayRef } = useGalleryEmblaContext();
|
|
21
|
+
return (_jsx("div", { ref: emblaDisplayRef, className: styles.viewport, children: _jsx("div", { className: styles.window, children: itemOrder.map((itemId) => (_jsx(GalleryItem, { itemId: itemId }, itemId))) }) }));
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=gallery-items-display.js.map
|
package/dist/components/content-display/gallery/components/item-display/gallery-items-display.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gallery-items-display.js","sourceRoot":"","sources":["../../../../../../src/components/content-display/gallery/components/item-display/gallery-items-display.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AACb,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,MAAM,GAAG;IACd,QAAQ,EAAE,GAAG,CAAC;QACb,MAAM,EAAE,MAAM;QACd,QAAQ,EAAE,QAAQ;KAClB,CAAC;IACF,MAAM,EAAE,GAAG,CAAC;QACX,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,MAAM;QACf,WAAW,EAAE,kBAAkB;QAC/B,UAAU,EAAE,uDAAuD,EAAE,6CAA6C;KAClH,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,EAAE;IACvC,MAAM,EACL,KAAK,EAAE,EAAE,SAAS,EAAE,GACpB,GAAG,iBAAiB,EAAE,CAAC;IACxB,MAAM,EAAE,eAAe,EAAE,GAAG,sBAAsB,EAAE,CAAC;IAErD,OAAO,CACN,cAAK,GAAG,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,CAAC,QAAQ,YACpD,cAAK,SAAS,EAAE,MAAM,CAAC,MAAM,YAC3B,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAC1B,KAAC,WAAW,IAAc,MAAM,EAAE,MAAM,IAAtB,MAAM,CAAoB,CAC5C,CAAC,GACG,GACD,CACN,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const ItemTrack: () => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { css } from '../../../../../styled-system/css';
|
|
4
|
+
import { useGalleryContext, useGalleryEmblaContext } from '../../gallery-context';
|
|
5
|
+
import { TrackItem } from './track-item';
|
|
6
|
+
const styles = {
|
|
7
|
+
viewport: css({
|
|
8
|
+
overflow: 'hidden',
|
|
9
|
+
}),
|
|
10
|
+
window: css({
|
|
11
|
+
display: 'flex',
|
|
12
|
+
flexDirection: 'row',
|
|
13
|
+
marginLeft: 'calc(var(--thread-gallery-item-track-spacing) * -1)', // Tracks with GALLERY_DISPLAY_CONSTANT_NAMES
|
|
14
|
+
}),
|
|
15
|
+
};
|
|
16
|
+
export const ItemTrack = () => {
|
|
17
|
+
const { value: { itemOrder }, } = useGalleryContext();
|
|
18
|
+
const { emblaItemTrackRef } = useGalleryEmblaContext();
|
|
19
|
+
return (_jsx("div", { ref: emblaItemTrackRef, className: styles.viewport, children: _jsx("div", { className: styles.window, children: itemOrder.map((itemId) => (_jsx(TrackItem, { itemId: itemId }, itemId))) }) }));
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=item-track.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"item-track.js","sourceRoot":"","sources":["../../../../../../src/components/content-display/gallery/components/item-track/item-track.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AACb,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,MAAM,GAAG;IACd,QAAQ,EAAE,GAAG,CAAC;QACb,QAAQ,EAAE,QAAQ;KAClB,CAAC;IACF,MAAM,EAAE,GAAG,CAAC;QACX,OAAO,EAAE,MAAM;QACf,aAAa,EAAE,KAAK;QACpB,UAAU,EAAE,qDAAqD,EAAE,6CAA6C;KAChH,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,EAAE;IAC7B,MAAM,EACL,KAAK,EAAE,EAAE,SAAS,EAAE,GACpB,GAAG,iBAAiB,EAAE,CAAC;IAExB,MAAM,EAAE,iBAAiB,EAAE,GAAG,sBAAsB,EAAE,CAAC;IAEvD,OAAO,CACN,cAAK,GAAG,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,CAAC,QAAQ,YACtD,cAAK,SAAS,EAAE,MAAM,CAAC,MAAM,YAC3B,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAC1B,KAAC,SAAS,IAAc,MAAM,EAAE,MAAM,IAAtB,MAAM,CAAoB,CAC1C,CAAC,GACG,GACD,CACN,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { cva } from '../../../../../styled-system/css';
|
|
4
|
+
import { useGalleryContext, useGalleryEmblaContext } from '../../gallery-context';
|
|
5
|
+
const styles = {
|
|
6
|
+
container: cva({
|
|
7
|
+
base: {
|
|
8
|
+
cursor: 'pointer',
|
|
9
|
+
flex: ' 0 0 auto',
|
|
10
|
+
minWidth: '0',
|
|
11
|
+
paddingLeft: 'var(--thread-gallery-item-track-spacing)', // Tracks with GALLERY_DISPLAY_CONSTANT_NAMES
|
|
12
|
+
borderColor: 'transparent',
|
|
13
|
+
borderWidth: 'lg',
|
|
14
|
+
borderStyle: 'solid',
|
|
15
|
+
},
|
|
16
|
+
variants: {
|
|
17
|
+
variableWidths: {
|
|
18
|
+
true: { flex: ' 0 0 auto' },
|
|
19
|
+
false: { flex: ' 0 0 22%' },
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
}),
|
|
23
|
+
internalContent: cva({
|
|
24
|
+
base: {
|
|
25
|
+
borderRadius: 'sm',
|
|
26
|
+
display: 'flex',
|
|
27
|
+
alignItems: 'center',
|
|
28
|
+
justifyContent: 'center',
|
|
29
|
+
height: { base: '3rem', md: 'var(--thread-gallery-track-item-height)' },
|
|
30
|
+
overflow: 'hidden',
|
|
31
|
+
position: 'relative',
|
|
32
|
+
'& img': {
|
|
33
|
+
width: 'auto',
|
|
34
|
+
height: '100%',
|
|
35
|
+
objectFit: 'contain',
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
variants: {
|
|
39
|
+
appearance: {
|
|
40
|
+
framed: {
|
|
41
|
+
backgroundColor: 'surface',
|
|
42
|
+
borderColor: 'structure.subtle',
|
|
43
|
+
borderWidth: 'sm',
|
|
44
|
+
borderStyle: 'solid',
|
|
45
|
+
},
|
|
46
|
+
bare: {},
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
defaultVariants: {
|
|
50
|
+
appearance: 'framed',
|
|
51
|
+
},
|
|
52
|
+
}),
|
|
53
|
+
};
|
|
54
|
+
export const TrackItem = ({ itemId }) => {
|
|
55
|
+
const { value: { items, appearance, variableWidths }, } = useGalleryContext();
|
|
56
|
+
const { onTrackItemClick } = useGalleryEmblaContext();
|
|
57
|
+
const item = items[itemId];
|
|
58
|
+
return (_jsx("button", { className: styles.container({ variableWidths }), onClick: () => onTrackItemClick(itemId), children: _jsx("div", { className: styles.internalContent({ appearance }), children: item.content }) }));
|
|
59
|
+
};
|
|
60
|
+
//# sourceMappingURL=track-item.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"track-item.js","sourceRoot":"","sources":["../../../../../../src/components/content-display/gallery/components/item-track/track-item.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AACb,OAAO,EAAO,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAOlF,MAAM,MAAM,GAAG;IACd,SAAS,EAAE,GAAG,CAAC;QACd,IAAI,EAAE;YACL,MAAM,EAAE,SAAS;YACjB,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE,GAAG;YACb,WAAW,EAAE,0CAA0C,EAAE,6CAA6C;YACtG,WAAW,EAAE,aAAa;YAC1B,WAAW,EAAE,IAAI;YACjB,WAAW,EAAE,OAAO;SACpB;QACD,QAAQ,EAAE;YACT,cAAc,EAAE;gBACf,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;gBAC3B,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;aAC3B;SACD;KACD,CAAC;IACF,eAAe,EAAE,GAAG,CAAC;QACpB,IAAI,EAAE;YACL,YAAY,EAAE,IAAI;YAClB,OAAO,EAAE,MAAM;YACf,UAAU,EAAE,QAAQ;YACpB,cAAc,EAAE,QAAQ;YACxB,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,yCAAyC,EAAE;YACvE,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE,UAAU;YACpB,OAAO,EAAE;gBACR,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,MAAM;gBACd,SAAS,EAAE,SAAS;aACpB;SACD;QACD,QAAQ,EAAE;YACT,UAAU,EAAE;gBACX,MAAM,EAAE;oBACP,eAAe,EAAE,SAAS;oBAC1B,WAAW,EAAE,kBAAkB;oBAC/B,WAAW,EAAE,IAAI;oBACjB,WAAW,EAAE,OAAO;iBACpB;gBACD,IAAI,EAAE,EAAE;aACR;SACD;QACD,eAAe,EAAE;YAChB,UAAU,EAAE,QAAQ;SACpB;KACD,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,EAAE,MAAM,EAAkB,EAAE,EAAE;IACvD,MAAM,EACL,KAAK,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,GAC5C,GAAG,iBAAiB,EAAE,CAAC;IACxB,MAAM,EAAE,gBAAgB,EAAE,GAAG,sBAAsB,EAAE,CAAC;IAEtD,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAE3B,OAAO,CACN,iBACC,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC,EAC/C,OAAO,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,YAEvC,cAAK,SAAS,EAAE,MAAM,CAAC,eAAe,CAAC,EAAE,UAAU,EAAE,CAAC,YAAG,IAAI,CAAC,OAAO,GAAO,GACpE,CACT,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { GalleryEmblaContext } from './gallery.types';
|
|
2
|
+
export declare const GalleryProvider: {
|
|
3
|
+
({ initialValue, children, }: {
|
|
4
|
+
initialValue: {
|
|
5
|
+
title?: import("react").ReactNode;
|
|
6
|
+
appearance: import("./gallery.types").GalleryAppearanceOptions;
|
|
7
|
+
size: import("../../..").UtilitySizeOptions | "fill";
|
|
8
|
+
variableWidths: boolean;
|
|
9
|
+
items: Record<import("./gallery.types").GalleryItemId, {
|
|
10
|
+
id: import("./gallery.types").GalleryItemId;
|
|
11
|
+
content: import("./gallery.types").GalleryItem;
|
|
12
|
+
}>;
|
|
13
|
+
ItemWrapper: import("./gallery.types").GalleryProps["itemWrapper"];
|
|
14
|
+
itemOrder: import("./gallery.types").GalleryItemId[];
|
|
15
|
+
};
|
|
16
|
+
children: import("react").ReactNode;
|
|
17
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
displayName: string;
|
|
19
|
+
}, useGalleryContext: () => {
|
|
20
|
+
value: {
|
|
21
|
+
title?: import("react").ReactNode;
|
|
22
|
+
appearance: import("./gallery.types").GalleryAppearanceOptions;
|
|
23
|
+
size: import("../../..").UtilitySizeOptions | "fill";
|
|
24
|
+
variableWidths: boolean;
|
|
25
|
+
items: Record<import("./gallery.types").GalleryItemId, {
|
|
26
|
+
id: import("./gallery.types").GalleryItemId;
|
|
27
|
+
content: import("./gallery.types").GalleryItem;
|
|
28
|
+
}>;
|
|
29
|
+
ItemWrapper: import("./gallery.types").GalleryProps["itemWrapper"];
|
|
30
|
+
itemOrder: import("./gallery.types").GalleryItemId[];
|
|
31
|
+
};
|
|
32
|
+
setValue: import("react").Dispatch<import("react").SetStateAction<{
|
|
33
|
+
title?: import("react").ReactNode;
|
|
34
|
+
appearance: import("./gallery.types").GalleryAppearanceOptions;
|
|
35
|
+
size: import("../../..").UtilitySizeOptions | "fill";
|
|
36
|
+
variableWidths: boolean;
|
|
37
|
+
items: Record<import("./gallery.types").GalleryItemId, {
|
|
38
|
+
id: import("./gallery.types").GalleryItemId;
|
|
39
|
+
content: import("./gallery.types").GalleryItem;
|
|
40
|
+
}>;
|
|
41
|
+
ItemWrapper: import("./gallery.types").GalleryProps["itemWrapper"];
|
|
42
|
+
itemOrder: import("./gallery.types").GalleryItemId[];
|
|
43
|
+
}>>;
|
|
44
|
+
};
|
|
45
|
+
export declare const GalleryEmblaProvider: import("react").Provider<GalleryEmblaContext | undefined>, useGalleryEmblaContext: () => GalleryEmblaContext;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { createStatefulComponentContext, createComponentContext } from '../../../utils';
|
|
3
|
+
export const [GalleryProvider, useGalleryContext] = createStatefulComponentContext('Gallery');
|
|
4
|
+
export const [GalleryEmblaProvider, useGalleryEmblaContext] = createComponentContext('GalleryEmbla');
|
|
5
|
+
//# sourceMappingURL=gallery-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gallery-context.js","sourceRoot":"","sources":["../../../../src/components/content-display/gallery/gallery-context.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AACb,OAAO,EAAE,8BAA8B,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAGjF,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,iBAAiB,CAAC,GAChD,8BAA8B,CAAe,SAAS,CAAC,CAAC;AAEzD,MAAM,CAAC,MAAM,CAAC,oBAAoB,EAAE,sBAAsB,CAAC,GAC1D,sBAAsB,CAAsB,cAAc,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const GALLERY_DISPLAY_CONSTANTS: {
|
|
2
|
+
readonly displayItemHeight: "100%";
|
|
3
|
+
readonly displayItemSpacing: "1rem";
|
|
4
|
+
readonly displayItemWidth: "100%";
|
|
5
|
+
readonly trackItemHeight: "6rem";
|
|
6
|
+
readonly itemTrackSpacing: "0.8rem";
|
|
7
|
+
};
|
|
8
|
+
export type DisplayConstantsKeys = keyof typeof GALLERY_DISPLAY_CONSTANTS;
|
|
9
|
+
export declare const GALLERY_DISPLAY_CONSTANT_NAMES: Record<DisplayConstantsKeys, string>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export const GALLERY_DISPLAY_CONSTANTS = {
|
|
2
|
+
displayItemHeight: '100%',
|
|
3
|
+
displayItemSpacing: '1rem',
|
|
4
|
+
displayItemWidth: '100%',
|
|
5
|
+
trackItemHeight: '6rem',
|
|
6
|
+
itemTrackSpacing: '0.8rem',
|
|
7
|
+
};
|
|
8
|
+
export const GALLERY_DISPLAY_CONSTANT_NAMES = {
|
|
9
|
+
displayItemHeight: '--thread-gallery-display-item-height',
|
|
10
|
+
displayItemSpacing: '--thread-gallery-display-item-spacing',
|
|
11
|
+
displayItemWidth: '--thread-gallery-display-item-width',
|
|
12
|
+
trackItemHeight: '--thread-gallery-track-item-height',
|
|
13
|
+
itemTrackSpacing: '--thread-gallery-item-track-spacing',
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=gallery-display-constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gallery-display-constants.js","sourceRoot":"","sources":["../../../../src/components/content-display/gallery/gallery-display-constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACxC,iBAAiB,EAAE,MAAM;IACzB,kBAAkB,EAAE,MAAM;IAC1B,gBAAgB,EAAE,MAAM;IACxB,eAAe,EAAE,MAAM;IACvB,gBAAgB,EAAE,QAAQ;CACgB,CAAC;AAI5C,MAAM,CAAC,MAAM,8BAA8B,GAAyC;IACnF,iBAAiB,EAAE,sCAAsC;IACzD,kBAAkB,EAAE,uCAAuC;IAC3D,gBAAgB,EAAE,qCAAqC;IACvD,eAAe,EAAE,oCAAoC;IACrD,gBAAgB,EAAE,qCAAqC;CACvD,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { GalleryProps } from './gallery.types';
|
|
2
|
+
/**
|
|
3
|
+
* A synchronized dual-carousel gallery with a main display and a thumbnail track. Powered by [Embla Carousel](https://www.embla-carousel.com)
|
|
4
|
+
*
|
|
5
|
+
* Selecting a thumbnail scrolls the main display, and swiping the main display
|
|
6
|
+
* updates the active thumbnail. Supports trackpad scrolling on the thumbnail track
|
|
7
|
+
* via the Embla wheel gestures plugin.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```tsx
|
|
11
|
+
* <Gallery
|
|
12
|
+
* title="Photos"
|
|
13
|
+
* items={[<img src="a.jpg" />, <img src="b.jpg" />]}
|
|
14
|
+
* appearance="bare"
|
|
15
|
+
* />
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export declare const Gallery: ({ title, items: itemList, itemWrapper, size, appearance, startIndex, variableWidths, }: GalleryProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useCallback, useEffect, useMemo, useState } from 'react';
|
|
4
|
+
import useEmblaCarousel from 'embla-carousel-react';
|
|
5
|
+
import { GalleryEmblaProvider, GalleryProvider } from './gallery-context';
|
|
6
|
+
import { GalleryContent } from './components/gallery-content';
|
|
7
|
+
import { WheelGesturesPlugin } from 'embla-carousel-wheel-gestures';
|
|
8
|
+
/**
|
|
9
|
+
* A synchronized dual-carousel gallery with a main display and a thumbnail track. Powered by [Embla Carousel](https://www.embla-carousel.com)
|
|
10
|
+
*
|
|
11
|
+
* Selecting a thumbnail scrolls the main display, and swiping the main display
|
|
12
|
+
* updates the active thumbnail. Supports trackpad scrolling on the thumbnail track
|
|
13
|
+
* via the Embla wheel gestures plugin.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```tsx
|
|
17
|
+
* <Gallery
|
|
18
|
+
* title="Photos"
|
|
19
|
+
* items={[<img src="a.jpg" />, <img src="b.jpg" />]}
|
|
20
|
+
* appearance="bare"
|
|
21
|
+
* />
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export const Gallery = ({ title, items: itemList, itemWrapper, size = 'lg', appearance = 'framed', startIndex = 0, variableWidths = false, }) => {
|
|
25
|
+
const [emblaDisplayRef, emblaDisplayApi] = useEmblaCarousel({ startIndex });
|
|
26
|
+
const [emblaItemTrackRef, emblaItemTrackApi] = useEmblaCarousel({
|
|
27
|
+
startIndex,
|
|
28
|
+
containScroll: 'keepSnaps',
|
|
29
|
+
dragFree: true,
|
|
30
|
+
}, [WheelGesturesPlugin()]);
|
|
31
|
+
const [selectedIndex, setSelectedIndex] = useState(startIndex);
|
|
32
|
+
const onTrackItemClick = useCallback((index) => {
|
|
33
|
+
if (!emblaDisplayApi || !emblaItemTrackApi)
|
|
34
|
+
return;
|
|
35
|
+
emblaDisplayApi.scrollTo(index);
|
|
36
|
+
}, [emblaDisplayApi, emblaItemTrackApi]);
|
|
37
|
+
const onSelect = useCallback(() => {
|
|
38
|
+
if (!emblaDisplayApi || !emblaItemTrackApi)
|
|
39
|
+
return;
|
|
40
|
+
setSelectedIndex(emblaDisplayApi.selectedScrollSnap());
|
|
41
|
+
emblaItemTrackApi.scrollTo(emblaDisplayApi.selectedScrollSnap());
|
|
42
|
+
}, [emblaDisplayApi, emblaItemTrackApi, setSelectedIndex]);
|
|
43
|
+
useEffect(() => {
|
|
44
|
+
if (!emblaDisplayApi)
|
|
45
|
+
return;
|
|
46
|
+
onSelect();
|
|
47
|
+
emblaDisplayApi.on('select', onSelect).on('reInit', onSelect);
|
|
48
|
+
}, [emblaDisplayApi, onSelect]);
|
|
49
|
+
const normalizedItems = useMemo(() => itemList.map((item, index) => ({
|
|
50
|
+
content: item,
|
|
51
|
+
id: index,
|
|
52
|
+
})), [itemList]);
|
|
53
|
+
const initialState = useMemo(() => {
|
|
54
|
+
const items = Object.fromEntries(normalizedItems.map((item) => [item.id, item]));
|
|
55
|
+
const itemOrder = normalizedItems.map((item) => item.id);
|
|
56
|
+
return {
|
|
57
|
+
title,
|
|
58
|
+
items,
|
|
59
|
+
itemOrder,
|
|
60
|
+
ItemWrapper: itemWrapper,
|
|
61
|
+
size,
|
|
62
|
+
appearance,
|
|
63
|
+
variableWidths,
|
|
64
|
+
};
|
|
65
|
+
}, [title, normalizedItems, size]);
|
|
66
|
+
const emblaValue = useMemo(() => ({
|
|
67
|
+
emblaDisplayRef,
|
|
68
|
+
emblaDisplayApi,
|
|
69
|
+
emblaItemTrackRef,
|
|
70
|
+
emblaItemTrackApi,
|
|
71
|
+
onTrackItemClick,
|
|
72
|
+
selectedIndex,
|
|
73
|
+
}), [
|
|
74
|
+
emblaDisplayRef,
|
|
75
|
+
emblaDisplayApi,
|
|
76
|
+
emblaItemTrackRef,
|
|
77
|
+
emblaItemTrackApi,
|
|
78
|
+
onTrackItemClick,
|
|
79
|
+
selectedIndex,
|
|
80
|
+
]);
|
|
81
|
+
return (_jsx(GalleryProvider, { initialValue: initialState, children: _jsx(GalleryEmblaProvider, { value: emblaValue, children: _jsx(GalleryContent, {}) }) }));
|
|
82
|
+
};
|
|
83
|
+
//# sourceMappingURL=gallery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gallery.js","sourceRoot":"","sources":["../../../../src/components/content-display/gallery/gallery.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { ReactNode, ComponentType } from 'react';
|
|
2
|
+
import { Prettify, UtilitySizeOptions } from '../../../types';
|
|
3
|
+
import { EmblaViewportRefType } from 'embla-carousel-react';
|
|
4
|
+
import { EmblaCarouselType } from 'embla-carousel';
|
|
5
|
+
export type GalleryItemId = number;
|
|
6
|
+
/** Content renderable as a gallery slide — any valid React node. */
|
|
7
|
+
export type GalleryItem = ReactNode;
|
|
8
|
+
/**
|
|
9
|
+
* Controls the visual treatment of gallery item containers.
|
|
10
|
+
* - `'framed'` — Adds background, border, and border-radius to each item.
|
|
11
|
+
* - `'bare'` — Renders items without any decorative container styles.
|
|
12
|
+
*/
|
|
13
|
+
export type GalleryAppearanceOptions = 'framed' | 'bare';
|
|
14
|
+
export type GalleryProps = {
|
|
15
|
+
/** Visual treatment for item containers @default `'framed'` */
|
|
16
|
+
appearance?: GalleryAppearanceOptions;
|
|
17
|
+
/** Optional title rendered above the gallery */
|
|
18
|
+
title?: string | ReactNode;
|
|
19
|
+
/** Array of React nodes to render as slides, in display order */
|
|
20
|
+
items: GalleryItem[];
|
|
21
|
+
/** Optional component used to wrap each item, replacing the default container */
|
|
22
|
+
itemWrapper?: ComponentType<any>;
|
|
23
|
+
/** Controls the gallery's dimensional presets @default `'lg'` */
|
|
24
|
+
size?: UtilitySizeOptions | 'fill';
|
|
25
|
+
/** Index of Item Gallery opens at Start @default 0 */
|
|
26
|
+
startIndex?: number;
|
|
27
|
+
/** Display thumbnail items with varying widths @default `false` */
|
|
28
|
+
variableWidths?: boolean;
|
|
29
|
+
};
|
|
30
|
+
type InternalGalleryItem = {
|
|
31
|
+
id: GalleryItemId;
|
|
32
|
+
content: GalleryItem;
|
|
33
|
+
};
|
|
34
|
+
export type GalleryState = Prettify<Pick<GalleryProps, 'title'> & Required<Pick<GalleryProps, 'size' | 'appearance' | 'variableWidths'>> & {
|
|
35
|
+
items: Record<GalleryItemId, InternalGalleryItem>;
|
|
36
|
+
ItemWrapper: GalleryProps['itemWrapper'];
|
|
37
|
+
itemOrder: GalleryItemId[];
|
|
38
|
+
}>;
|
|
39
|
+
export type GalleryEmblaContext = {
|
|
40
|
+
emblaDisplayRef: EmblaViewportRefType;
|
|
41
|
+
emblaDisplayApi: EmblaCarouselType | undefined;
|
|
42
|
+
emblaItemTrackRef: EmblaViewportRefType;
|
|
43
|
+
emblaItemTrackApi: EmblaCarouselType | undefined;
|
|
44
|
+
onTrackItemClick: (index: number) => void;
|
|
45
|
+
selectedIndex: number;
|
|
46
|
+
};
|
|
47
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gallery.types.js","sourceRoot":"","sources":["../../../../src/components/content-display/gallery/gallery.types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/content-display/gallery/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/content-display/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const LightBoxContent: () => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { css } from '../../../../styled-system/css';
|
|
4
|
+
import { Gallery } from '../../gallery';
|
|
5
|
+
import { useLightboxContext } from '../lightbox-context';
|
|
6
|
+
import { LightboxTitle } from './lightbox-title';
|
|
7
|
+
const styles = {
|
|
8
|
+
container: css({
|
|
9
|
+
width: '90vw',
|
|
10
|
+
height: '85vh',
|
|
11
|
+
maxHeight: { base: '80vh', md: '100%' },
|
|
12
|
+
overflow: 'hidden',
|
|
13
|
+
}),
|
|
14
|
+
};
|
|
15
|
+
export const LightBoxContent = () => {
|
|
16
|
+
const { items, itemWrapper, appearance, startIndex, variableWidths } = useLightboxContext();
|
|
17
|
+
return (_jsx("div", { className: styles.container, children: _jsx(Gallery, { startIndex: startIndex, title: _jsx(LightboxTitle, {}), items: items, itemWrapper: itemWrapper, size: "fill", appearance: appearance, variableWidths: variableWidths }) }));
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=lightbox-content.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lightbox-content.js","sourceRoot":"","sources":["../../../../../src/components/content-display/lightbox/components/lightbox-content.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AACb,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,MAAM,MAAM,GAAG;IACd,SAAS,EAAE,GAAG,CAAC;QACd,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,MAAM;QACd,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE;QACvC,QAAQ,EAAE,QAAQ;KAClB,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,EAAE;IACnC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,kBAAkB,EAAE,CAAC;IAE5F,OAAO,CACN,cAAK,SAAS,EAAE,MAAM,CAAC,SAAS,YAC/B,KAAC,OAAO,IACP,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,KAAC,aAAa,KAAG,EACxB,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,WAAW,EACxB,IAAI,EAAC,MAAM,EACX,UAAU,EAAE,UAAU,EACtB,cAAc,EAAE,cAAc,GAC7B,GACG,CACN,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const LightboxTitle: () => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useLightboxContext } from '../lightbox-context';
|
|
4
|
+
import { H2 } from '../../../../components/typography';
|
|
5
|
+
import { css } from '../../../../styled-system/css';
|
|
6
|
+
import { IconButton } from '../../../../components/ui';
|
|
7
|
+
const styles = {
|
|
8
|
+
container: css({
|
|
9
|
+
width: '100%',
|
|
10
|
+
display: 'flex',
|
|
11
|
+
flexDirection: 'row-reverse',
|
|
12
|
+
alignItems: 'center',
|
|
13
|
+
justifyContent: 'space-between',
|
|
14
|
+
marginBottom: '4',
|
|
15
|
+
}),
|
|
16
|
+
};
|
|
17
|
+
export const LightboxTitle = () => {
|
|
18
|
+
const { title, onClose } = useLightboxContext();
|
|
19
|
+
const titleDisplay = typeof title === 'string' ? _jsx(H2, { inline: true, children: title }) : title;
|
|
20
|
+
return (_jsxs("div", { className: styles.container, children: [_jsx(IconButton, { ariaLabel: "Close modal", onClick: onClose, color: "text", size: 'sm', name: "X" }), titleDisplay] }));
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=lightbox-title.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lightbox-title.js","sourceRoot":"","sources":["../../../../../src/components/content-display/lightbox/components/lightbox-title.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,EAAE,EAAE,MAAM,yBAAyB,CAAC;AAC7C,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,MAAM,MAAM,GAAG;IACd,SAAS,EAAE,GAAG,CAAC;QACd,KAAK,EAAE,MAAM;QACb,OAAO,EAAE,MAAM;QACf,aAAa,EAAE,aAAa;QAC5B,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,eAAe;QAC/B,YAAY,EAAE,GAAG;KACjB,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,EAAE;IACjC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,kBAAkB,EAAE,CAAC;IAEhD,MAAM,YAAY,GAAc,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAC,EAAE,IAAC,MAAM,kBAAE,KAAK,GAAM,CAAC,CAAC,CAAC,KAAK,CAAC;IAE5F,OAAO,CACN,eAAK,SAAS,EAAE,MAAM,CAAC,SAAS,aAC/B,KAAC,UAAU,IACV,SAAS,EAAC,aAAa,EACvB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAC,MAAM,EACZ,IAAI,EAAE,IAAI,EACV,IAAI,EAAC,GAAG,GACP,EACD,YAAY,IACR,CACN,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/content-display/lightbox/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export declare const LightboxProvider: import("react").Provider<{
|
|
2
|
+
title?: import("react").ReactNode;
|
|
3
|
+
items: import("../gallery/gallery.types").GalleryItem[];
|
|
4
|
+
itemWrapper?: import("react").ComponentType<any> | undefined;
|
|
5
|
+
startIndex?: number | undefined;
|
|
6
|
+
isOpen: boolean;
|
|
7
|
+
onClose: () => void;
|
|
8
|
+
appearance?: import("../gallery/gallery.types").GalleryAppearanceOptions | undefined;
|
|
9
|
+
variableWidths?: boolean | undefined;
|
|
10
|
+
} | undefined>, useLightboxContext: () => {
|
|
11
|
+
title?: import("react").ReactNode;
|
|
12
|
+
items: import("../gallery/gallery.types").GalleryItem[];
|
|
13
|
+
itemWrapper?: import("react").ComponentType<any> | undefined;
|
|
14
|
+
startIndex?: number | undefined;
|
|
15
|
+
isOpen: boolean;
|
|
16
|
+
onClose: () => void;
|
|
17
|
+
appearance?: import("../gallery/gallery.types").GalleryAppearanceOptions | undefined;
|
|
18
|
+
variableWidths?: boolean | undefined;
|
|
19
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lightbox-context.js","sourceRoot":"","sources":["../../../../src/components/content-display/lightbox/lightbox-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAGjD,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,GAClD,sBAAsB,CAAgB,UAAU,CAAC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { LightboxProps } from './lightbox.types';
|
|
2
|
+
/**
|
|
3
|
+
* A fullscreen Gallery for focused content viewing, built on {@link ModalPrimitive}.
|
|
4
|
+
*
|
|
5
|
+
* Renders a {@link Gallery} in `bare` appearance over a scrim backdrop.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```tsx
|
|
9
|
+
* <Lightbox
|
|
10
|
+
* isOpen={isOpen}
|
|
11
|
+
* onClose={() => setOpen(false)}
|
|
12
|
+
* title="Photos"
|
|
13
|
+
* items={[<img src="a.jpg" />, <img src="b.jpg" />]}
|
|
14
|
+
* />
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export declare const Lightbox: ({ title, items, itemWrapper, isOpen, onClose, startIndex, appearance, variableWidths, }: LightboxProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { ModalPrimitive } from '../../../internal-components';
|
|
3
|
+
import { LightboxProvider } from './lightbox-context';
|
|
4
|
+
import { css } from '../../../styled-system/css';
|
|
5
|
+
import { LightBoxContent } from './components/lightbox-content';
|
|
6
|
+
const styles = {
|
|
7
|
+
overlay: css({
|
|
8
|
+
position: 'fixed',
|
|
9
|
+
inset: 0,
|
|
10
|
+
background: 'scrim',
|
|
11
|
+
display: 'flex',
|
|
12
|
+
justifyContent: 'center',
|
|
13
|
+
zIndex: 'modal',
|
|
14
|
+
alignItems: 'center',
|
|
15
|
+
padding: '6',
|
|
16
|
+
}),
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* A fullscreen Gallery for focused content viewing, built on {@link ModalPrimitive}.
|
|
20
|
+
*
|
|
21
|
+
* Renders a {@link Gallery} in `bare` appearance over a scrim backdrop.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```tsx
|
|
25
|
+
* <Lightbox
|
|
26
|
+
* isOpen={isOpen}
|
|
27
|
+
* onClose={() => setOpen(false)}
|
|
28
|
+
* title="Photos"
|
|
29
|
+
* items={[<img src="a.jpg" />, <img src="b.jpg" />]}
|
|
30
|
+
* />
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export const Lightbox = ({ title, items, itemWrapper, isOpen, onClose, startIndex, appearance = 'bare', variableWidths = true, }) => {
|
|
34
|
+
const initialValue = {
|
|
35
|
+
title,
|
|
36
|
+
items,
|
|
37
|
+
itemWrapper,
|
|
38
|
+
isOpen,
|
|
39
|
+
onClose,
|
|
40
|
+
startIndex,
|
|
41
|
+
appearance,
|
|
42
|
+
variableWidths,
|
|
43
|
+
};
|
|
44
|
+
return (_jsx(LightboxProvider, { value: initialValue, children: _jsx(ModalPrimitive, { overlayClassName: styles.overlay, isOpen: isOpen, onClose: onClose, children: _jsx(LightBoxContent, {}) }) }));
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=lightbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lightbox.js","sourceRoot":"","sources":["../../../../src/components/content-display/lightbox/lightbox.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,MAAM,MAAM,GAAG;IACd,OAAO,EAAE,GAAG,CAAC;QACZ,QAAQ,EAAE,OAAO;QACjB,KAAK,EAAE,CAAC;QACR,UAAU,EAAE,OAAO;QACnB,OAAO,EAAE,MAAM;QACf,cAAc,EAAE,QAAQ;QACxB,MAAM,EAAE,OAAO;QACf,UAAU,EAAE,QAAQ;QACpB,OAAO,EAAE,GAAG;KACZ,CAAC;CACF,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,EACxB,KAAK,EACL,KAAK,EACL,WAAW,EACX,MAAM,EACN,OAAO,EACP,UAAU,EACV,UAAU,GAAG,MAAM,EACnB,cAAc,GAAG,IAAI,GACN,EAAE,EAAE;IACnB,MAAM,YAAY,GAAkB;QACnC,KAAK;QACL,KAAK;QACL,WAAW;QACX,MAAM;QACN,OAAO;QACP,UAAU;QACV,UAAU;QACV,cAAc;KACd,CAAC;IAEF,OAAO,CACN,KAAC,gBAAgB,IAAC,KAAK,EAAE,YAAY,YACpC,KAAC,cAAc,IAAC,gBAAgB,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,YACjF,KAAC,eAAe,KAAG,GACH,GACC,CACnB,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Prettify } from '../../../types';
|
|
2
|
+
import { GalleryProps } from '../gallery';
|
|
3
|
+
import { ModalProps } from '../../../components/ui';
|
|
4
|
+
import { GalleryAppearanceOptions } from '../gallery/gallery.types';
|
|
5
|
+
export type LightboxProps = Prettify<Omit<GalleryProps, 'size' | 'appearance' | 'variableWidths'> & Pick<ModalProps, 'isOpen' | 'onClose'> & {
|
|
6
|
+
/** Gallery Content Appearance @default `bare` */
|
|
7
|
+
appearance?: GalleryAppearanceOptions;
|
|
8
|
+
/** Control Auto-Width within track thumbnails @default `true` */
|
|
9
|
+
variableWidths?: boolean;
|
|
10
|
+
}>;
|
|
11
|
+
export type LightboxState = LightboxProps;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lightbox.types.js","sourceRoot":"","sources":["../../../../src/components/content-display/lightbox/lightbox.types.ts"],"names":[],"mappings":""}
|