@giddaa-housing/ui 0.1.0 → 1.1.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 +18 -6
- package/css/base.css +37 -0
- package/css/components.css +135 -0
- package/css/generated/shared.css +1 -0
- package/css/giddaa.css +402 -0
- package/css/preset.css +77 -0
- package/css/styles.css +2 -0
- package/css/theme.css +255 -0
- package/dist/accordion.d.ts +9 -10
- package/dist/accordion.js +41 -117
- package/dist/activity-timeline.d.ts +29 -0
- package/dist/activity-timeline.js +97 -0
- package/dist/alert.d.ts +8 -9
- package/dist/alert.js +53 -141
- package/dist/auth-layout.d.ts +23 -0
- package/dist/auth-layout.js +153 -0
- package/dist/avatar.d.ts +6 -6
- package/dist/avatar.js +40 -142
- package/dist/badge.d.ts +12 -13
- package/dist/badge.js +66 -114
- package/dist/bar-chart.d.ts +136 -114
- package/dist/bar-chart.js +244 -297
- package/dist/breadcrumb.d.ts +5 -5
- package/dist/breadcrumb.js +56 -148
- package/dist/bullet-chart.d.ts +33 -33
- package/dist/bullet-chart.js +123 -183
- package/dist/button-BZIeyUw6.d.ts +17 -0
- package/dist/button-group.d.ts +13 -16
- package/dist/button-group.js +38 -163
- package/dist/button.d.ts +2 -19
- package/dist/button.js +90 -142
- package/dist/calendar.d.ts +6 -6
- package/dist/calendar.js +134 -288
- package/dist/card.d.ts +14 -16
- package/dist/card.js +58 -174
- package/dist/carousel.d.ts +34 -35
- package/dist/carousel.js +319 -378
- package/dist/chart.d.ts +58 -59
- package/dist/chart.js +350 -466
- package/dist/checkbox.d.ts +10 -12
- package/dist/checkbox.js +84 -84
- package/dist/cn-BI_4DMBf.js +23 -0
- package/dist/collapsible.d.ts +7 -8
- package/dist/collapsible.js +23 -77
- package/dist/combobox.d.ts +10 -10
- package/dist/combobox.js +220 -696
- package/dist/cta.d.ts +64 -0
- package/dist/cta.js +192 -0
- package/dist/currency-selector.d.ts +41 -0
- package/dist/currency-selector.js +114 -0
- package/dist/data-table.d.ts +164 -0
- package/dist/data-table.js +673 -0
- package/dist/date-picker.d.ts +27 -20
- package/dist/date-picker.js +122 -520
- package/dist/details-card.d.ts +19 -0
- package/dist/details-card.js +118 -0
- package/dist/dialog.d.ts +13 -14
- package/dist/dialog.js +117 -320
- package/dist/dropdown-menu.d.ts +14 -14
- package/dist/dropdown-menu.js +170 -365
- package/dist/dropzone.d.ts +55 -55
- package/dist/dropzone.js +328 -467
- package/dist/editorial-card.d.ts +27 -0
- package/dist/editorial-card.js +144 -0
- package/dist/empty-state.d.ts +8 -9
- package/dist/empty-state.js +48 -135
- package/dist/field.d.ts +23 -25
- package/dist/field.js +111 -327
- package/dist/filter.d.ts +118 -0
- package/dist/filter.js +775 -0
- package/dist/footer.d.ts +40 -0
- package/dist/footer.js +227 -0
- package/dist/funnel-chart.d.ts +38 -41
- package/dist/funnel-chart.js +168 -563
- package/dist/gallery-indicator.d.ts +17 -0
- package/dist/gallery-indicator.js +75 -0
- package/dist/heatmap-chart.d.ts +95 -0
- package/dist/heatmap-chart.js +197 -0
- package/dist/infotip.d.ts +10 -0
- package/dist/infotip.js +40 -0
- package/dist/input-CfoEJ8A6.d.ts +12 -0
- package/dist/input-group.d.ts +16 -19
- package/dist/input-group.js +92 -372
- package/dist/input-size-context-C-SFx9sx.d.ts +10 -0
- package/dist/input-size-context.d.ts +2 -11
- package/dist/input-size-context.js +14 -20
- package/dist/input.d.ts +2 -13
- package/dist/input.js +23 -79
- package/dist/item.d.ts +7 -8
- package/dist/item.js +22 -89
- package/dist/kpi-card.d.ts +18 -20
- package/dist/kpi-card.js +84 -232
- package/dist/label.d.ts +6 -6
- package/dist/label.js +39 -66
- package/dist/line-chart.d.ts +88 -89
- package/dist/line-chart.js +143 -262
- package/dist/logo.d.ts +4 -4
- package/dist/logo.js +87 -141
- package/dist/map-indicator.d.ts +13 -0
- package/dist/map-indicator.js +83 -0
- package/dist/match.d.ts +15 -0
- package/dist/match.js +68 -0
- package/dist/media-gallery-hero.d.ts +58 -0
- package/dist/media-gallery-hero.js +201 -0
- package/dist/media-player.d.ts +60 -0
- package/dist/media-player.js +919 -0
- package/dist/multi-step-form.d.ts +56 -0
- package/dist/multi-step-form.js +342 -0
- package/dist/number-input.d.ts +34 -34
- package/dist/number-input.js +62 -413
- package/dist/page-header.d.ts +10 -11
- package/dist/page-header.js +34 -107
- package/dist/pagination.d.ts +17 -20
- package/dist/pagination.js +132 -341
- package/dist/password-input.d.ts +5 -12
- package/dist/password-input.js +32 -354
- package/dist/phone-input.d.ts +19 -19
- package/dist/phone-input.js +232 -561
- package/dist/photo-gallery.d.ts +20 -20
- package/dist/photo-gallery.js +314 -746
- package/dist/picker-lzgmsNfG.js +32 -0
- package/dist/pie-chart.d.ts +60 -60
- package/dist/pie-chart.js +141 -184
- package/dist/popover.d.ts +9 -9
- package/dist/popover.js +60 -156
- package/dist/price-tag.d.ts +34 -0
- package/dist/price-tag.js +118 -0
- package/dist/progress.d.ts +18 -16
- package/dist/progress.js +156 -300
- package/dist/property-listing-card.d.ts +29 -0
- package/dist/property-listing-card.js +117 -0
- package/dist/radar-chart.d.ts +108 -0
- package/dist/radar-chart.js +172 -0
- package/dist/radio-group.d.ts +11 -13
- package/dist/radio-group.js +47 -96
- package/dist/review-block.d.ts +18 -0
- package/dist/review-block.js +154 -0
- package/dist/rich-text-editor.d.ts +30 -14
- package/dist/rich-text-editor.js +594 -979
- package/dist/scatter-chart.d.ts +140 -0
- package/dist/scatter-chart.js +248 -0
- package/dist/search-input.d.ts +8 -15
- package/dist/search-input.js +58 -408
- package/dist/select.d.ts +8 -8
- package/dist/select.js +131 -291
- package/dist/separator.d.ts +8 -9
- package/dist/separator.js +31 -70
- package/dist/sheet.d.ts +11 -11
- package/dist/sheet.js +84 -262
- package/dist/sidebar.d.ts +32 -37
- package/dist/sidebar.js +380 -1055
- package/dist/size-context-D4mYvcg8.d.ts +10 -0
- package/dist/size-context.d.ts +2 -11
- package/dist/size-context.js +14 -18
- package/dist/skeleton.d.ts +4 -5
- package/dist/skeleton.js +9 -45
- package/dist/slider.d.ts +27 -0
- package/dist/slider.js +81 -0
- package/dist/sparkline.d.ts +43 -46
- package/dist/sparkline.js +223 -561
- package/dist/stepper.d.ts +23 -24
- package/dist/stepper.js +149 -276
- package/dist/styles.css +9995 -2
- package/dist/switch.d.ts +10 -12
- package/dist/switch.js +49 -106
- package/dist/table-card.d.ts +35 -0
- package/dist/table-card.js +125 -0
- package/dist/table.d.ts +18 -14
- package/dist/table.js +114 -182
- package/dist/tabs.d.ts +23 -15
- package/dist/tabs.js +62 -149
- package/dist/tag.d.ts +22 -23
- package/dist/tag.js +104 -156
- package/dist/testimonial-block.d.ts +33 -0
- package/dist/testimonial-block.js +208 -0
- package/dist/textarea-IS_D8pXf.d.ts +11 -0
- package/dist/textarea.d.ts +2 -12
- package/dist/textarea.js +20 -74
- package/dist/time-picker.d.ts +11 -11
- package/dist/time-picker.js +247 -464
- package/dist/toast.d.ts +16 -18
- package/dist/toast.js +154 -310
- package/dist/tooltip.d.ts +9 -10
- package/dist/tooltip.js +33 -91
- package/dist/tree-map.d.ts +54 -57
- package/dist/tree-map.js +231 -646
- package/dist/use-uncontrolled-CLfM1XbB.js +21 -0
- package/dist/waterfall-chart.d.ts +126 -0
- package/dist/waterfall-chart.js +480 -0
- package/package.json +123 -34
- package/dist/accordion.js.map +0 -1
- package/dist/alert.js.map +0 -1
- package/dist/avatar.js.map +0 -1
- package/dist/badge.js.map +0 -1
- package/dist/bar-chart.js.map +0 -1
- package/dist/base.css +0 -32
- package/dist/breadcrumb.js.map +0 -1
- package/dist/bullet-chart.js.map +0 -1
- package/dist/button-group.js.map +0 -1
- package/dist/button.js.map +0 -1
- package/dist/calendar.js.map +0 -1
- package/dist/card.js.map +0 -1
- package/dist/carousel.js.map +0 -1
- package/dist/chart.js.map +0 -1
- package/dist/checkbox.js.map +0 -1
- package/dist/collapsible.js.map +0 -1
- package/dist/combobox.js.map +0 -1
- package/dist/date-picker.js.map +0 -1
- package/dist/dialog.js.map +0 -1
- package/dist/dropdown-menu.js.map +0 -1
- package/dist/dropzone.js.map +0 -1
- package/dist/empty-state.js.map +0 -1
- package/dist/field.js.map +0 -1
- package/dist/files/red-hat-display-latin-300-italic.woff +0 -0
- package/dist/files/red-hat-display-latin-300-italic.woff2 +0 -0
- package/dist/files/red-hat-display-latin-300-normal.woff +0 -0
- package/dist/files/red-hat-display-latin-300-normal.woff2 +0 -0
- package/dist/files/red-hat-display-latin-400-italic.woff +0 -0
- package/dist/files/red-hat-display-latin-400-italic.woff2 +0 -0
- package/dist/files/red-hat-display-latin-400-normal.woff +0 -0
- package/dist/files/red-hat-display-latin-400-normal.woff2 +0 -0
- package/dist/files/red-hat-display-latin-500-italic.woff +0 -0
- package/dist/files/red-hat-display-latin-500-italic.woff2 +0 -0
- package/dist/files/red-hat-display-latin-500-normal.woff +0 -0
- package/dist/files/red-hat-display-latin-500-normal.woff2 +0 -0
- package/dist/files/red-hat-display-latin-600-italic.woff +0 -0
- package/dist/files/red-hat-display-latin-600-italic.woff2 +0 -0
- package/dist/files/red-hat-display-latin-600-normal.woff +0 -0
- package/dist/files/red-hat-display-latin-600-normal.woff2 +0 -0
- package/dist/files/red-hat-display-latin-700-italic.woff +0 -0
- package/dist/files/red-hat-display-latin-700-italic.woff2 +0 -0
- package/dist/files/red-hat-display-latin-700-normal.woff +0 -0
- package/dist/files/red-hat-display-latin-700-normal.woff2 +0 -0
- package/dist/files/red-hat-display-latin-800-italic.woff +0 -0
- package/dist/files/red-hat-display-latin-800-italic.woff2 +0 -0
- package/dist/files/red-hat-display-latin-800-normal.woff +0 -0
- package/dist/files/red-hat-display-latin-800-normal.woff2 +0 -0
- package/dist/files/red-hat-display-latin-900-italic.woff +0 -0
- package/dist/files/red-hat-display-latin-900-italic.woff2 +0 -0
- package/dist/files/red-hat-display-latin-900-normal.woff +0 -0
- package/dist/files/red-hat-display-latin-900-normal.woff2 +0 -0
- package/dist/files/red-hat-display-latin-ext-300-italic.woff +0 -0
- package/dist/files/red-hat-display-latin-ext-300-italic.woff2 +0 -0
- package/dist/files/red-hat-display-latin-ext-300-normal.woff +0 -0
- package/dist/files/red-hat-display-latin-ext-300-normal.woff2 +0 -0
- package/dist/files/red-hat-display-latin-ext-400-italic.woff +0 -0
- package/dist/files/red-hat-display-latin-ext-400-italic.woff2 +0 -0
- package/dist/files/red-hat-display-latin-ext-400-normal.woff +0 -0
- package/dist/files/red-hat-display-latin-ext-400-normal.woff2 +0 -0
- package/dist/files/red-hat-display-latin-ext-500-italic.woff +0 -0
- package/dist/files/red-hat-display-latin-ext-500-italic.woff2 +0 -0
- package/dist/files/red-hat-display-latin-ext-500-normal.woff +0 -0
- package/dist/files/red-hat-display-latin-ext-500-normal.woff2 +0 -0
- package/dist/files/red-hat-display-latin-ext-600-italic.woff +0 -0
- package/dist/files/red-hat-display-latin-ext-600-italic.woff2 +0 -0
- package/dist/files/red-hat-display-latin-ext-600-normal.woff +0 -0
- package/dist/files/red-hat-display-latin-ext-600-normal.woff2 +0 -0
- package/dist/files/red-hat-display-latin-ext-700-italic.woff +0 -0
- package/dist/files/red-hat-display-latin-ext-700-italic.woff2 +0 -0
- package/dist/files/red-hat-display-latin-ext-700-normal.woff +0 -0
- package/dist/files/red-hat-display-latin-ext-700-normal.woff2 +0 -0
- package/dist/files/red-hat-display-latin-ext-800-italic.woff +0 -0
- package/dist/files/red-hat-display-latin-ext-800-italic.woff2 +0 -0
- package/dist/files/red-hat-display-latin-ext-800-normal.woff +0 -0
- package/dist/files/red-hat-display-latin-ext-800-normal.woff2 +0 -0
- package/dist/files/red-hat-display-latin-ext-900-italic.woff +0 -0
- package/dist/files/red-hat-display-latin-ext-900-italic.woff2 +0 -0
- package/dist/files/red-hat-display-latin-ext-900-normal.woff +0 -0
- package/dist/files/red-hat-display-latin-ext-900-normal.woff2 +0 -0
- package/dist/funnel-chart.js.map +0 -1
- package/dist/index.d.ts +0 -87
- package/dist/index.js +0 -10448
- package/dist/index.js.map +0 -1
- package/dist/input-group.js.map +0 -1
- package/dist/input-size-context.js.map +0 -1
- package/dist/input.js.map +0 -1
- package/dist/item.js.map +0 -1
- package/dist/kpi-card.js.map +0 -1
- package/dist/label.js.map +0 -1
- package/dist/line-chart.js.map +0 -1
- package/dist/logo.js.map +0 -1
- package/dist/number-input.js.map +0 -1
- package/dist/page-header.js.map +0 -1
- package/dist/pagination.js.map +0 -1
- package/dist/password-input.js.map +0 -1
- package/dist/phone-input.js.map +0 -1
- package/dist/photo-gallery.js.map +0 -1
- package/dist/pie-chart.js.map +0 -1
- package/dist/popover.js.map +0 -1
- package/dist/progress.js.map +0 -1
- package/dist/radio-group.js.map +0 -1
- package/dist/red-hat-display.css +0 -2
- package/dist/rich-text-editor.js.map +0 -1
- package/dist/search-input.js.map +0 -1
- package/dist/select.js.map +0 -1
- package/dist/separator.js.map +0 -1
- package/dist/sheet.js.map +0 -1
- package/dist/sidebar.js.map +0 -1
- package/dist/size-context.js.map +0 -1
- package/dist/skeleton.js.map +0 -1
- package/dist/sparkline.js.map +0 -1
- package/dist/stepper.js.map +0 -1
- package/dist/switch.js.map +0 -1
- package/dist/tab-list.d.ts +0 -38
- package/dist/tab-list.js +0 -394
- package/dist/tab-list.js.map +0 -1
- package/dist/table.js.map +0 -1
- package/dist/tabs.js.map +0 -1
- package/dist/tag.js.map +0 -1
- package/dist/textarea.js.map +0 -1
- package/dist/theme/giddaa.css +0 -2
- package/dist/time-picker.js.map +0 -1
- package/dist/toast.js.map +0 -1
- package/dist/tooltip.js.map +0 -1
- package/dist/tree-map.js.map +0 -1
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { t as cn } from "./cn-BI_4DMBf.js";
|
|
3
|
+
import { buttonVariants } from "./button.js";
|
|
4
|
+
import { Carousel, CarouselContent, CarouselItem, useCarousel } from "./carousel.js";
|
|
5
|
+
import { GalleryIndicator } from "./gallery-indicator.js";
|
|
6
|
+
import { ReviewBlock } from "./review-block.js";
|
|
7
|
+
import { Play } from "lucide-react";
|
|
8
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
9
|
+
import { cva } from "class-variance-authority";
|
|
10
|
+
//#region src/media-gallery-hero.tsx
|
|
11
|
+
const mediaGalleryHeroVariants = cva("relative isolate h-[350px] w-full overflow-hidden rounded-[32px] bg-surface-raised md:h-[380px] md:rounded-[40px] lg:h-[480px]");
|
|
12
|
+
const mediaGalleryImagesVariants = cva("absolute inset-0 z-0 hidden size-full min-h-0 min-w-0 bg-surface-raised md:grid", {
|
|
13
|
+
variants: { imageCount: {
|
|
14
|
+
1: "",
|
|
15
|
+
2: "gap-2 grid-cols-[minmax(0,3fr)_minmax(0,2fr)]",
|
|
16
|
+
3: "gap-2 grid-cols-[minmax(0,3fr)_minmax(0,2fr)] grid-rows-2",
|
|
17
|
+
4: "gap-2 grid-cols-[minmax(0,2fr)_minmax(0,1fr)_minmax(0,1fr)] grid-rows-2"
|
|
18
|
+
} },
|
|
19
|
+
defaultVariants: { imageCount: 4 }
|
|
20
|
+
});
|
|
21
|
+
function MediaGalleryHero({ className, ...props }) {
|
|
22
|
+
return /* @__PURE__ */ jsx("div", {
|
|
23
|
+
className: cn(mediaGalleryHeroVariants(), className),
|
|
24
|
+
"data-slot": "media-gallery-hero",
|
|
25
|
+
...props
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
function getVisibleImages(images, imageCount) {
|
|
29
|
+
if (images.length === 0) return [{}];
|
|
30
|
+
return images.slice(0, imageCount);
|
|
31
|
+
}
|
|
32
|
+
function getTileClassName(index, imageCount) {
|
|
33
|
+
if (index === 0) return "md:col-start-1 md:row-span-2";
|
|
34
|
+
if (imageCount === 2 && index === 1) return "md:col-start-2 md:row-span-2";
|
|
35
|
+
if (imageCount === 3 && index === 1) return "md:col-start-2 md:row-start-1";
|
|
36
|
+
if (imageCount === 3 && index === 2) return "md:col-start-2 md:row-start-2";
|
|
37
|
+
if (imageCount === 4 && index === 1) return "md:col-start-2 md:row-span-2";
|
|
38
|
+
if (imageCount === 4 && index === 2) return "md:col-start-3 md:row-start-1";
|
|
39
|
+
return "md:col-start-3 md:row-start-2";
|
|
40
|
+
}
|
|
41
|
+
function getMediaKey(image) {
|
|
42
|
+
return image.id ?? image.src ?? image.alt ?? "placeholder";
|
|
43
|
+
}
|
|
44
|
+
function MediaGalleryTile({ className, image, index, isDesktopTile, onMediaClick, renderMedia }) {
|
|
45
|
+
const content = renderMedia?.(image, index) ?? (image.src ? /* @__PURE__ */ jsx("img", {
|
|
46
|
+
alt: image.alt ?? "",
|
|
47
|
+
className: "size-full object-cover",
|
|
48
|
+
draggable: false,
|
|
49
|
+
src: image.src
|
|
50
|
+
}) : /* @__PURE__ */ jsx("span", {
|
|
51
|
+
className: "text-gdt-sm font-medium text-fg-caption-placeholder",
|
|
52
|
+
children: "Media"
|
|
53
|
+
}));
|
|
54
|
+
const tileClassName = cn("relative flex size-full min-h-0 min-w-0 items-center justify-center overflow-hidden rounded-[32px] bg-surface-raised md:rounded-[40px]", "[&>img]:size-full [&>img]:object-cover", isDesktopTile && "hidden md:flex", className);
|
|
55
|
+
if (!onMediaClick) return /* @__PURE__ */ jsx("div", {
|
|
56
|
+
className: tileClassName,
|
|
57
|
+
"data-slot": "media-gallery-tile",
|
|
58
|
+
children: content
|
|
59
|
+
});
|
|
60
|
+
return /* @__PURE__ */ jsx("button", {
|
|
61
|
+
"aria-label": `Open media ${index + 1}`,
|
|
62
|
+
className: cn(tileClassName, "cursor-pointer text-left"),
|
|
63
|
+
"data-slot": "media-gallery-tile",
|
|
64
|
+
onClick: () => onMediaClick(index),
|
|
65
|
+
type: "button",
|
|
66
|
+
children: content
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
function MobileGalleryCounter({ total }) {
|
|
70
|
+
const { selectedIndex } = useCarousel();
|
|
71
|
+
return /* @__PURE__ */ jsx(GalleryIndicator, {
|
|
72
|
+
currentPhoto: selectedIndex + 1,
|
|
73
|
+
size: "sm",
|
|
74
|
+
totalPhotos: total
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
function MobileMediaCarousel({ currentMedia, images, mediaTotal, onMediaClick, renderMedia, showMobileIndicator }) {
|
|
78
|
+
const carouselImages = images.length > 0 ? images : [{}];
|
|
79
|
+
return /* @__PURE__ */ jsxs(Carousel, {
|
|
80
|
+
className: "absolute inset-0 z-0 block size-full rounded-[32px] bg-surface-raised md:hidden",
|
|
81
|
+
imageSize: "full",
|
|
82
|
+
opts: {
|
|
83
|
+
align: "start",
|
|
84
|
+
loop: carouselImages.length > 1,
|
|
85
|
+
startIndex: Math.max(0, currentMedia - 1)
|
|
86
|
+
},
|
|
87
|
+
children: [/* @__PURE__ */ jsx(CarouselContent, { children: carouselImages.map((image, index) => /* @__PURE__ */ jsx(CarouselItem, {
|
|
88
|
+
className: "h-full",
|
|
89
|
+
children: /* @__PURE__ */ jsx(MediaGalleryTile, {
|
|
90
|
+
className: "rounded-[32px]",
|
|
91
|
+
image,
|
|
92
|
+
index,
|
|
93
|
+
onMediaClick,
|
|
94
|
+
renderMedia
|
|
95
|
+
})
|
|
96
|
+
}, getMediaKey(image))) }), showMobileIndicator ? /* @__PURE__ */ jsx("div", {
|
|
97
|
+
className: "absolute right-4 bottom-4 z-10",
|
|
98
|
+
children: /* @__PURE__ */ jsx(MobileGalleryCounter, { total: mediaTotal })
|
|
99
|
+
}) : null]
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
function MediaGalleryImages({ className, currentMedia = 1, imageCount = 4, images, onMediaClick, renderMedia, showMobileIndicator = true, totalMediaCount, ...props }) {
|
|
103
|
+
const resolvedImageCount = imageCount ?? 4;
|
|
104
|
+
const mediaTotal = totalMediaCount ?? Math.max(images.length, 1);
|
|
105
|
+
const visibleImages = getVisibleImages(images, resolvedImageCount);
|
|
106
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(MobileMediaCarousel, {
|
|
107
|
+
currentMedia,
|
|
108
|
+
images,
|
|
109
|
+
mediaTotal,
|
|
110
|
+
onMediaClick,
|
|
111
|
+
renderMedia,
|
|
112
|
+
showMobileIndicator
|
|
113
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
114
|
+
className: cn(mediaGalleryImagesVariants({ imageCount: resolvedImageCount }), className),
|
|
115
|
+
"data-image-count": resolvedImageCount,
|
|
116
|
+
"data-slot": "media-gallery-images",
|
|
117
|
+
...props,
|
|
118
|
+
children: visibleImages.map((image, index) => /* @__PURE__ */ jsx(MediaGalleryTile, {
|
|
119
|
+
className: getTileClassName(index, resolvedImageCount),
|
|
120
|
+
image,
|
|
121
|
+
index,
|
|
122
|
+
isDesktopTile: true,
|
|
123
|
+
onMediaClick,
|
|
124
|
+
renderMedia
|
|
125
|
+
}, getMediaKey(image)))
|
|
126
|
+
})] });
|
|
127
|
+
}
|
|
128
|
+
function MediaGalleryVideo({ alt = "", autoPlay, className, controls, label = "Play Video", loop, muted, onPlayClick, playsInline = true, poster, renderMedia, src, ...props }) {
|
|
129
|
+
const content = renderMedia?.() ?? (src ? /* @__PURE__ */ jsx("video", {
|
|
130
|
+
autoPlay,
|
|
131
|
+
className: "size-full object-cover",
|
|
132
|
+
controls,
|
|
133
|
+
loop,
|
|
134
|
+
muted,
|
|
135
|
+
playsInline,
|
|
136
|
+
poster,
|
|
137
|
+
src
|
|
138
|
+
}) : poster ? /* @__PURE__ */ jsx("img", {
|
|
139
|
+
alt,
|
|
140
|
+
className: "size-full object-cover",
|
|
141
|
+
draggable: false,
|
|
142
|
+
src: poster
|
|
143
|
+
}) : /* @__PURE__ */ jsx("span", {
|
|
144
|
+
className: "text-gdt-sm font-medium text-fg-caption-placeholder",
|
|
145
|
+
children: "Video"
|
|
146
|
+
}));
|
|
147
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
148
|
+
className: cn("absolute inset-0 z-0 flex size-full items-center justify-center overflow-hidden rounded-[32px] bg-surface-raised md:rounded-[40px]", "[&>img]:size-full [&>img]:object-cover [&>video]:size-full [&>video]:object-cover", className),
|
|
149
|
+
"data-slot": "media-gallery-video",
|
|
150
|
+
...props,
|
|
151
|
+
children: [content, controls ? null : /* @__PURE__ */ jsx("button", {
|
|
152
|
+
"aria-label": label,
|
|
153
|
+
className: cn(buttonVariants({
|
|
154
|
+
variant: "glass-overlay",
|
|
155
|
+
size: "icon-xl"
|
|
156
|
+
}), "absolute top-1/2 left-1/2 z-10 size-20 -translate-x-1/2 -translate-y-1/2 active:not-aria-[haspopup]:-translate-y-1/2 md:size-24"),
|
|
157
|
+
"data-slot": "media-gallery-video-play",
|
|
158
|
+
onClick: onPlayClick,
|
|
159
|
+
type: "button",
|
|
160
|
+
children: /* @__PURE__ */ jsx(Play, {
|
|
161
|
+
"aria-hidden": "true",
|
|
162
|
+
className: "ml-0.5",
|
|
163
|
+
fill: "currentColor"
|
|
164
|
+
})
|
|
165
|
+
})]
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
function MediaGalleryReview({ bordered = false, className, size = "xs", ...props }) {
|
|
169
|
+
return /* @__PURE__ */ jsx(ReviewBlock, {
|
|
170
|
+
bordered,
|
|
171
|
+
className: cn("absolute top-4 left-4 z-10", className),
|
|
172
|
+
size,
|
|
173
|
+
...props
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
function MediaGalleryIndicator({ "aria-label": ariaLabel, className, label, onClick, size = "md", totalMediaCount = 35, ...props }) {
|
|
177
|
+
const indicatorLabel = label ?? `View All ${totalMediaCount.toLocaleString()} Photos`;
|
|
178
|
+
if (onClick) return /* @__PURE__ */ jsx("button", {
|
|
179
|
+
"aria-label": ariaLabel ?? indicatorLabel,
|
|
180
|
+
className: cn("absolute right-4 bottom-4 z-10 hidden rounded-full md:block", className),
|
|
181
|
+
"data-slot": "media-gallery-indicator",
|
|
182
|
+
onClick,
|
|
183
|
+
type: "button",
|
|
184
|
+
...props,
|
|
185
|
+
children: /* @__PURE__ */ jsx(GalleryIndicator, {
|
|
186
|
+
"aria-hidden": "true",
|
|
187
|
+
label: indicatorLabel,
|
|
188
|
+
size
|
|
189
|
+
})
|
|
190
|
+
});
|
|
191
|
+
return /* @__PURE__ */ jsx("div", {
|
|
192
|
+
className: cn("absolute right-4 bottom-4 z-10 hidden md:block", className),
|
|
193
|
+
"data-slot": "media-gallery-indicator",
|
|
194
|
+
children: /* @__PURE__ */ jsx(GalleryIndicator, {
|
|
195
|
+
label: indicatorLabel,
|
|
196
|
+
size
|
|
197
|
+
})
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
//#endregion
|
|
201
|
+
export { MediaGalleryHero, MediaGalleryImages, MediaGalleryIndicator, MediaGalleryReview, MediaGalleryTile, MediaGalleryVideo, mediaGalleryHeroVariants, mediaGalleryImagesVariants };
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { Slider } from "@base-ui/react/slider";
|
|
3
|
+
import { MediaProvider } from "media-chrome/react/media-store";
|
|
4
|
+
//#region src/media-player.d.ts
|
|
5
|
+
type MediaProviderProps = React.ComponentProps<typeof MediaProvider>;
|
|
6
|
+
type MediaPlayerProps = React.ComponentProps<"div"> & {
|
|
7
|
+
audio?: boolean;
|
|
8
|
+
mediaStore?: MediaProviderProps["mediaStore"];
|
|
9
|
+
};
|
|
10
|
+
type MediaPlayerControlsProps = React.ComponentProps<"div">;
|
|
11
|
+
type MediaPlayerVideoProps = React.ComponentProps<"video">;
|
|
12
|
+
type MediaPlayerAudioProps = React.ComponentProps<"audio">;
|
|
13
|
+
type MediaPlayerControlsOverlayProps = React.ComponentProps<"div">;
|
|
14
|
+
type MediaPlayerPlayProps = React.ComponentProps<"button">;
|
|
15
|
+
type MediaPlayerSeekButtonProps = React.ComponentProps<"button"> & {
|
|
16
|
+
seekOffset?: number;
|
|
17
|
+
};
|
|
18
|
+
type MediaPlayerVolumeProps = React.ComponentProps<"button"> & {
|
|
19
|
+
expandable?: boolean;
|
|
20
|
+
rangeClassName?: string;
|
|
21
|
+
};
|
|
22
|
+
type MediaPlayerPlaybackSpeedProps = React.ComponentProps<"button"> & {
|
|
23
|
+
rates?: number[];
|
|
24
|
+
};
|
|
25
|
+
type MediaPlayerCaptionsProps = React.ComponentProps<"button">;
|
|
26
|
+
type MediaPlayerSettingsProps = React.ComponentProps<"button"> & {
|
|
27
|
+
rates?: number[];
|
|
28
|
+
};
|
|
29
|
+
type MediaPlayerTimeProps = React.ComponentProps<"span"> & {
|
|
30
|
+
showDuration?: boolean;
|
|
31
|
+
};
|
|
32
|
+
type MediaPlayerSeekProps = Omit<Slider.Root.Props<number>, "defaultValue" | "onValueChange" | "onValueCommitted" | "value"> & {
|
|
33
|
+
onValueChange?: (value: number) => void;
|
|
34
|
+
step?: number;
|
|
35
|
+
withTime?: boolean;
|
|
36
|
+
};
|
|
37
|
+
type MediaPlayerLoopProps = React.ComponentProps<"button">;
|
|
38
|
+
type MediaPlayerPiPProps = React.ComponentProps<"button">;
|
|
39
|
+
type MediaPlayerFullscreenProps = React.ComponentProps<"button">;
|
|
40
|
+
type MediaPlayerErrorProps = React.ComponentProps<"div">;
|
|
41
|
+
declare function MediaPlayer({ mediaStore, ...props }: MediaPlayerProps): React.JSX.Element;
|
|
42
|
+
declare function MediaPlayerVideo({ className, ref, ...props }: MediaPlayerVideoProps): React.JSX.Element;
|
|
43
|
+
declare function MediaPlayerAudio({ className, ref, ...props }: MediaPlayerAudioProps): React.JSX.Element;
|
|
44
|
+
declare function MediaPlayerControls({ className, ...props }: MediaPlayerControlsProps): React.JSX.Element;
|
|
45
|
+
declare function MediaPlayerControlsOverlay({ className, ...props }: MediaPlayerControlsOverlayProps): React.JSX.Element;
|
|
46
|
+
declare function MediaPlayerPlay({ className, onClick, ...props }: MediaPlayerPlayProps): React.JSX.Element;
|
|
47
|
+
declare function MediaPlayerSeekBackward({ className, onClick, seekOffset, ...props }: MediaPlayerSeekButtonProps): React.JSX.Element;
|
|
48
|
+
declare function MediaPlayerSeekForward({ className, onClick, seekOffset, ...props }: MediaPlayerSeekButtonProps): React.JSX.Element;
|
|
49
|
+
declare function MediaPlayerVolume({ className, disabled, expandable, onClick, rangeClassName, ...props }: MediaPlayerVolumeProps): React.JSX.Element;
|
|
50
|
+
declare function MediaPlayerPlaybackSpeed({ className, rates, ...props }: MediaPlayerPlaybackSpeedProps): React.JSX.Element;
|
|
51
|
+
declare function MediaPlayerCaptions({ className, disabled, onClick, ...props }: MediaPlayerCaptionsProps): React.JSX.Element;
|
|
52
|
+
declare function MediaPlayerSettings({ className, rates, ...props }: MediaPlayerSettingsProps): React.JSX.Element;
|
|
53
|
+
declare function MediaPlayerTime({ className, showDuration, ...props }: MediaPlayerTimeProps): React.JSX.Element;
|
|
54
|
+
declare function MediaPlayerSeek({ className, disabled, onValueChange, "aria-label": ariaLabel, step, withTime, ...props }: MediaPlayerSeekProps): React.JSX.Element;
|
|
55
|
+
declare function MediaPlayerLoop({ className, onClick, ...props }: MediaPlayerLoopProps): React.JSX.Element;
|
|
56
|
+
declare function MediaPlayerPiP({ className, disabled, onClick, ...props }: MediaPlayerPiPProps): React.JSX.Element;
|
|
57
|
+
declare function MediaPlayerFullscreen({ className, disabled, onClick, ...props }: MediaPlayerFullscreenProps): React.JSX.Element;
|
|
58
|
+
declare function MediaPlayerError({ children, className, ...props }: MediaPlayerErrorProps): React.JSX.Element | null;
|
|
59
|
+
//#endregion
|
|
60
|
+
export { MediaPlayer, MediaPlayerAudio, MediaPlayerCaptions, MediaPlayerControls, MediaPlayerControlsOverlay, MediaPlayerError, MediaPlayerFullscreen, MediaPlayerLoop, MediaPlayerPiP, MediaPlayerPlay, MediaPlayerPlaybackSpeed, MediaPlayerSeek, MediaPlayerSeekBackward, MediaPlayerSeekForward, MediaPlayerSettings, MediaPlayerTime, MediaPlayerVideo, MediaPlayerVolume };
|