@giddaa-housing/ui 0.1.0 → 1.0.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.js +5 -35
- package/dist/accordion.js.map +1 -1
- package/dist/activity-timeline.d.ts +33 -0
- package/dist/activity-timeline.js +212 -0
- package/dist/activity-timeline.js.map +1 -0
- package/dist/alert.js +5 -35
- package/dist/alert.js.map +1 -1
- package/dist/auth-layout.d.ts +23 -0
- package/dist/auth-layout.js +304 -0
- package/dist/auth-layout.js.map +1 -0
- package/dist/avatar.js +10 -142
- package/dist/avatar.js.map +1 -1
- package/dist/badge.d.ts +3 -2
- package/dist/badge.js +6 -114
- package/dist/badge.js.map +1 -1
- package/dist/bar-chart.d.ts +101 -77
- package/dist/bar-chart.js +142 -220
- package/dist/bar-chart.js.map +1 -1
- package/dist/breadcrumb.js +5 -35
- package/dist/breadcrumb.js.map +1 -1
- package/dist/bullet-chart.js +15 -48
- package/dist/bullet-chart.js.map +1 -1
- package/dist/button-group.js +14 -90
- package/dist/button-group.js.map +1 -1
- package/dist/button.d.ts +5 -5
- package/dist/button.js +7 -140
- package/dist/button.js.map +1 -1
- package/dist/calendar.js +12 -287
- package/dist/calendar.js.map +1 -1
- package/dist/card.js +5 -35
- package/dist/card.js.map +1 -1
- package/dist/carousel.js +12 -386
- package/dist/carousel.js.map +1 -1
- package/dist/chart.js +16 -480
- package/dist/chart.js.map +1 -1
- package/dist/checkbox.d.ts +1 -1
- package/dist/checkbox.js +13 -48
- package/dist/checkbox.js.map +1 -1
- package/dist/chunk-322YCNVL.js +278 -0
- package/dist/chunk-322YCNVL.js.map +1 -0
- package/dist/chunk-3ACQVT7A.js +25 -0
- package/dist/chunk-3ACQVT7A.js.map +1 -0
- package/dist/chunk-3T65TLJX.js +334 -0
- package/dist/chunk-3T65TLJX.js.map +1 -0
- package/dist/chunk-6ZSGQHH2.js +192 -0
- package/dist/chunk-6ZSGQHH2.js.map +1 -0
- package/dist/chunk-7TBMLFGW.js +41 -0
- package/dist/chunk-7TBMLFGW.js.map +1 -0
- package/dist/chunk-B4H6RNDH.js +135 -0
- package/dist/chunk-B4H6RNDH.js.map +1 -0
- package/dist/chunk-BUXCGZ6X.js +219 -0
- package/dist/chunk-BUXCGZ6X.js.map +1 -0
- package/dist/chunk-CHII2QHH.js +58 -0
- package/dist/chunk-CHII2QHH.js.map +1 -0
- package/dist/chunk-DMNOXRRW.js +147 -0
- package/dist/chunk-DMNOXRRW.js.map +1 -0
- package/dist/chunk-EFSOSSIC.js +130 -0
- package/dist/chunk-EFSOSSIC.js.map +1 -0
- package/dist/chunk-FZDSVMKY.js +363 -0
- package/dist/chunk-FZDSVMKY.js.map +1 -0
- package/dist/chunk-GJOFIJS3.js +246 -0
- package/dist/chunk-GJOFIJS3.js.map +1 -0
- package/dist/chunk-HL3ZSYES.js +23 -0
- package/dist/chunk-HL3ZSYES.js.map +1 -0
- package/dist/chunk-JVLUBAPB.js +129 -0
- package/dist/chunk-JVLUBAPB.js.map +1 -0
- package/dist/chunk-KDPYSOYZ.js +64 -0
- package/dist/chunk-KDPYSOYZ.js.map +1 -0
- package/dist/chunk-KSMDANKI.js +43 -0
- package/dist/chunk-KSMDANKI.js.map +1 -0
- package/dist/chunk-MEKCCOP5.js +46 -0
- package/dist/chunk-MEKCCOP5.js.map +1 -0
- package/dist/chunk-NOFXVRWL.js +451 -0
- package/dist/chunk-NOFXVRWL.js.map +1 -0
- package/dist/chunk-PC5MHNVA.js +171 -0
- package/dist/chunk-PC5MHNVA.js.map +1 -0
- package/dist/chunk-QKAQZ2GU.js +122 -0
- package/dist/chunk-QKAQZ2GU.js.map +1 -0
- package/dist/chunk-QZHSHSVV.js +26 -0
- package/dist/chunk-QZHSHSVV.js.map +1 -0
- package/dist/chunk-RBMK26XD.js +19 -0
- package/dist/chunk-RBMK26XD.js.map +1 -0
- package/dist/chunk-SFNJGF6M.js +262 -0
- package/dist/chunk-SFNJGF6M.js.map +1 -0
- package/dist/chunk-UJJNLGTM.js +112 -0
- package/dist/chunk-UJJNLGTM.js.map +1 -0
- package/dist/chunk-VGR4ZWJ3.js +418 -0
- package/dist/chunk-VGR4ZWJ3.js.map +1 -0
- package/dist/chunk-XG47P6D4.js +99 -0
- package/dist/chunk-XG47P6D4.js.map +1 -0
- package/dist/chunk-XZZAHNVM.js +21 -0
- package/dist/chunk-XZZAHNVM.js.map +1 -0
- package/dist/chunk-Y4TTYVNE.js +36 -0
- package/dist/chunk-Y4TTYVNE.js.map +1 -0
- package/dist/chunk-YDWIHW6Q.js +69 -0
- package/dist/chunk-YDWIHW6Q.js.map +1 -0
- package/dist/collapsible.js +6 -35
- package/dist/collapsible.js.map +1 -1
- package/dist/combobox.js +26 -694
- package/dist/combobox.js.map +1 -1
- package/dist/cta.d.ts +66 -0
- package/dist/cta.js +358 -0
- package/dist/cta.js.map +1 -0
- package/dist/currency-selector.d.ts +42 -0
- package/dist/currency-selector.js +192 -0
- package/dist/currency-selector.js.map +1 -0
- package/dist/date-picker.d.ts +18 -10
- package/dist/date-picker.js +105 -430
- package/dist/date-picker.js.map +1 -1
- package/dist/details-card.d.ts +19 -0
- package/dist/details-card.js +267 -0
- package/dist/details-card.js.map +1 -0
- package/dist/dialog.js +36 -146
- package/dist/dialog.js.map +1 -1
- package/dist/dropdown-menu.d.ts +1 -1
- package/dist/dropdown-menu.js +20 -358
- package/dist/dropdown-menu.js.map +1 -1
- package/dist/dropzone.js +13 -40
- package/dist/dropzone.js.map +1 -1
- package/dist/editorial-card.d.ts +29 -0
- package/dist/editorial-card.js +311 -0
- package/dist/editorial-card.js.map +1 -0
- package/dist/empty-state.js +5 -35
- package/dist/empty-state.js.map +1 -1
- package/dist/field.js +30 -135
- package/dist/field.js.map +1 -1
- package/dist/footer.d.ts +47 -0
- package/dist/footer.js +430 -0
- package/dist/footer.js.map +1 -0
- package/dist/funnel-chart.js +42 -415
- package/dist/funnel-chart.js.map +1 -1
- package/dist/gallery-indicator.d.ts +18 -0
- package/dist/gallery-indicator.js +12 -0
- package/dist/gallery-indicator.js.map +1 -0
- package/dist/heatmap-chart.d.ts +98 -0
- package/dist/heatmap-chart.js +248 -0
- package/dist/heatmap-chart.js.map +1 -0
- package/dist/infotip.d.ts +11 -0
- package/dist/infotip.js +66 -0
- package/dist/infotip.js.map +1 -0
- package/dist/input-group.d.ts +2 -1
- package/dist/input-group.js +15 -371
- package/dist/input-group.js.map +1 -1
- package/dist/input-size-context.js +5 -19
- package/dist/input-size-context.js.map +1 -1
- package/dist/input.js +6 -78
- package/dist/input.js.map +1 -1
- package/dist/item.js +5 -35
- package/dist/item.js.map +1 -1
- package/dist/kpi-card.js +12 -52
- package/dist/kpi-card.js.map +1 -1
- package/dist/label.js +5 -64
- package/dist/label.js.map +1 -1
- package/dist/line-chart.js +9 -166
- package/dist/line-chart.js.map +1 -1
- package/dist/logo.js +4 -141
- package/dist/logo.js.map +1 -1
- package/dist/map-indicator.d.ts +13 -0
- package/dist/map-indicator.js +109 -0
- package/dist/map-indicator.js.map +1 -0
- package/dist/match.d.ts +16 -0
- package/dist/match.js +113 -0
- package/dist/match.js.map +1 -0
- package/dist/media-gallery-hero.d.ts +60 -0
- package/dist/media-gallery-hero.js +362 -0
- package/dist/media-gallery-hero.js.map +1 -0
- package/dist/media-player.d.ts +60 -0
- package/dist/media-player.js +1394 -0
- package/dist/media-player.js.map +1 -0
- package/dist/number-input.js +30 -325
- package/dist/number-input.js.map +1 -1
- package/dist/page-header.js +4 -32
- package/dist/page-header.js.map +1 -1
- package/dist/pagination.d.ts +1 -0
- package/dist/pagination.js +27 -161
- package/dist/pagination.js.map +1 -1
- package/dist/password-input.d.ts +1 -0
- package/dist/password-input.js +21 -319
- package/dist/password-input.js.map +1 -1
- package/dist/phone-input.d.ts +2 -1
- package/dist/phone-input.js +148 -359
- package/dist/phone-input.js.map +1 -1
- package/dist/photo-gallery.d.ts +1 -1
- package/dist/photo-gallery.js +97 -393
- package/dist/photo-gallery.js.map +1 -1
- package/dist/pie-chart.js +17 -52
- package/dist/pie-chart.js.map +1 -1
- package/dist/popover.js +13 -158
- package/dist/popover.js.map +1 -1
- package/dist/price-tag.d.ts +35 -0
- package/dist/price-tag.js +178 -0
- package/dist/price-tag.js.map +1 -0
- package/dist/progress.d.ts +5 -2
- package/dist/progress.js +14 -303
- package/dist/progress.js.map +1 -1
- package/dist/property-listing-card.d.ts +32 -0
- package/dist/property-listing-card.js +235 -0
- package/dist/property-listing-card.js.map +1 -0
- package/dist/radar-chart.d.ts +110 -0
- package/dist/radar-chart.js +147 -0
- package/dist/radar-chart.js.map +1 -0
- package/dist/radio-group.js +15 -50
- package/dist/radio-group.js.map +1 -1
- package/dist/review-block.d.ts +20 -0
- package/dist/review-block.js +10 -0
- package/dist/review-block.js.map +1 -0
- package/dist/rich-text-editor.js +172 -433
- package/dist/rich-text-editor.js.map +1 -1
- package/dist/scatter-chart.d.ts +142 -0
- package/dist/scatter-chart.js +252 -0
- package/dist/scatter-chart.js.map +1 -0
- package/dist/search-input.d.ts +1 -0
- package/dist/search-input.js +22 -320
- package/dist/search-input.js.map +1 -1
- package/dist/select.js +15 -292
- package/dist/select.js.map +1 -1
- package/dist/separator.js +5 -68
- package/dist/separator.js.map +1 -1
- package/dist/sheet.js +14 -271
- package/dist/sheet.js.map +1 -1
- package/dist/sidebar.d.ts +1 -1
- package/dist/sidebar.js +89 -494
- package/dist/sidebar.js.map +1 -1
- package/dist/size-context.js +5 -17
- package/dist/size-context.js.map +1 -1
- package/dist/skeleton.js +4 -44
- package/dist/skeleton.js.map +1 -1
- package/dist/slider.d.ts +28 -0
- package/dist/slider.js +152 -0
- package/dist/slider.js.map +1 -0
- package/dist/sparkline.js +33 -341
- package/dist/sparkline.js.map +1 -1
- package/dist/stepper.js +5 -35
- package/dist/stepper.js.map +1 -1
- package/dist/styles.css +9593 -2
- package/dist/switch.js +13 -48
- package/dist/switch.js.map +1 -1
- package/dist/tab-list.js +35 -306
- package/dist/tab-list.js.map +1 -1
- package/dist/table.js +5 -32
- package/dist/table.js.map +1 -1
- package/dist/tabs.js +10 -150
- package/dist/tabs.js.map +1 -1
- package/dist/tag.d.ts +7 -6
- package/dist/tag.js +101 -97
- package/dist/tag.js.map +1 -1
- package/dist/testimonial-block.d.ts +34 -0
- package/dist/testimonial-block.js +377 -0
- package/dist/testimonial-block.js.map +1 -0
- package/dist/textarea.js +6 -73
- package/dist/textarea.js.map +1 -1
- package/dist/time-picker.js +119 -279
- package/dist/time-picker.js.map +1 -1
- package/dist/toast.js +27 -132
- package/dist/toast.js.map +1 -1
- package/dist/tooltip.d.ts +5 -5
- package/dist/tooltip.js +7 -90
- package/dist/tooltip.js.map +1 -1
- package/dist/tree-map.js +41 -414
- package/dist/tree-map.js.map +1 -1
- package/dist/waterfall-chart.d.ts +129 -0
- package/dist/waterfall-chart.js +577 -0
- package/dist/waterfall-chart.js.map +1 -0
- package/package.json +98 -28
- package/dist/base.css +0 -32
- 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/index.d.ts +0 -87
- package/dist/index.js +0 -10448
- package/dist/index.js.map +0 -1
- package/dist/red-hat-display.css +0 -2
- package/dist/theme/giddaa.css +0 -2
package/dist/photo-gallery.js
CHANGED
|
@@ -1,342 +1,36 @@
|
|
|
1
|
-
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
Button
|
|
4
|
+
} from "./chunk-B4H6RNDH.js";
|
|
5
|
+
import {
|
|
6
|
+
Carousel,
|
|
7
|
+
CarouselContent,
|
|
8
|
+
CarouselItem
|
|
9
|
+
} from "./chunk-FZDSVMKY.js";
|
|
10
|
+
import "./chunk-HL3ZSYES.js";
|
|
11
|
+
import {
|
|
12
|
+
cn
|
|
13
|
+
} from "./chunk-Y4TTYVNE.js";
|
|
14
|
+
|
|
15
|
+
// src/photo-gallery.tsx
|
|
2
16
|
import { Dialog as DialogPrimitive } from "@base-ui/react/dialog";
|
|
3
17
|
import {
|
|
4
|
-
ChevronLeftIcon
|
|
5
|
-
ChevronRightIcon
|
|
18
|
+
ChevronLeftIcon,
|
|
19
|
+
ChevronRightIcon,
|
|
6
20
|
Fullscreen,
|
|
7
21
|
XIcon
|
|
8
22
|
} from "lucide-react";
|
|
9
|
-
import * as React2 from "react";
|
|
10
|
-
|
|
11
|
-
// src/lib/cn.ts
|
|
12
|
-
import { clsx } from "clsx";
|
|
13
|
-
import { extendTailwindMerge } from "tailwind-merge";
|
|
14
|
-
var twMerge = extendTailwindMerge({
|
|
15
|
-
extend: {
|
|
16
|
-
classGroups: {
|
|
17
|
-
"font-size": [
|
|
18
|
-
{
|
|
19
|
-
text: [
|
|
20
|
-
"gdt-display",
|
|
21
|
-
"gdt-h1",
|
|
22
|
-
"gdt-h2",
|
|
23
|
-
"gdt-h3",
|
|
24
|
-
"gdt-h4",
|
|
25
|
-
"gdt-h5",
|
|
26
|
-
"gdt-xl",
|
|
27
|
-
"gdt-lg",
|
|
28
|
-
"gdt-md",
|
|
29
|
-
"gdt-sm",
|
|
30
|
-
"gdt-xs",
|
|
31
|
-
"gdt-subtext",
|
|
32
|
-
"gdt-capitalized"
|
|
33
|
-
]
|
|
34
|
-
}
|
|
35
|
-
]
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
function cn(...inputs) {
|
|
40
|
-
return twMerge(clsx(inputs));
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
// src/components/ui/button.tsx
|
|
44
|
-
import { Button as ButtonPrimitive } from "@base-ui/react/button";
|
|
45
|
-
import { cva } from "class-variance-authority";
|
|
46
|
-
import { Loader } from "lucide-react";
|
|
47
|
-
|
|
48
|
-
// src/components/ui/size-context.tsx
|
|
49
|
-
import { createContext, useContext } from "react";
|
|
50
|
-
import { Fragment, jsx } from "react/jsx-runtime";
|
|
51
|
-
var SizeContext = createContext(void 0);
|
|
52
|
-
function useComponentSize(size, fallback = "md") {
|
|
53
|
-
const inheritedSize = useContext(SizeContext);
|
|
54
|
-
return size ?? inheritedSize ?? fallback;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
// src/components/ui/button.tsx
|
|
58
|
-
import { jsx as jsx2, jsxs } from "react/jsx-runtime";
|
|
59
|
-
var buttonVariants = cva(
|
|
60
|
-
"group/button inline-flex shrink-0 items-center justify-center rounded-full bg-clip-padding whitespace-nowrap font-bold transition-[background-color,color,border-color,box-shadow,transform] outline-none select-none focus-visible:border-line-focus focus-visible:shadow-[0px_0px_0px_2px_var(--color-line-focus)] active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 aria-invalid:border-line-danger aria-invalid:ring-3 aria-invalid:ring-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
61
|
-
{
|
|
62
|
-
variants: {
|
|
63
|
-
variant: {
|
|
64
|
-
primary: "bg-action-primary text-fg-on-brand hover:bg-action-primary-hover active:bg-action-primary-pressed",
|
|
65
|
-
"primary-outline": "border-2 border-action-primary bg-transparent text-fg-brand hover:bg-surface-brand-subtle active:bg-surface-brand-subtle data-focused:bg-surface-brand-subtle data-pressed:bg-surface-brand-subtle",
|
|
66
|
-
secondary: "bg-surface-brand-subtle text-fg-brand hover:bg-action-primary-hover hover:text-fg-on-brand active:bg-action-primary-pressed active:text-fg-on-brand data-focused:bg-action-primary-hover data-pressed:bg-action-primary-pressed data-focused:text-fg-on-brand data-pressed:text-fg-on-brand",
|
|
67
|
-
"secondary-outline": "border-2 border-action-secondary bg-transparent text-fg-brand hover:bg-surface-brand-subtle active:bg-surface-brand-subtle data-focused:bg-surface-brand-subtle data-pressed:bg-surface-brand-subtle",
|
|
68
|
-
tertiary: "bg-action-tertiary text-fg-primary hover:bg-action-tertiary-hover active:bg-action-tertiary-pressed data-focused:bg-action-tertiary-hover data-pressed:bg-action-tertiary-pressed",
|
|
69
|
-
"tertiary-outline": "border border-line-strong bg-transparent text-fg-primary hover:bg-surface active:bg-surface-raised data-focused:bg-surface data-pressed:bg-surface-raised",
|
|
70
|
-
ghost: "bg-transparent text-fg-primary hover:bg-surface active:bg-surface-raised data-focused:bg-surface data-pressed:bg-surface-raised",
|
|
71
|
-
danger: "bg-action-danger text-fg-on-brand hover:bg-action-danger-hover active:bg-action-danger-pressed data-focused:bg-action-danger-hover data-pressed:bg-action-danger-pressed",
|
|
72
|
-
"glass-overlay": "bg-surface-glass-overlay-button text-fg-on-brand",
|
|
73
|
-
"link-brand": "border-transparent bg-transparent px-0 text-fg-brand hover:underline active:underline active:opacity-70",
|
|
74
|
-
"link-neutral": "border-transparent bg-transparent px-0 text-fg-secondary hover:underline active:underline active:opacity-70"
|
|
75
|
-
},
|
|
76
|
-
size: {
|
|
77
|
-
sm: "h-8 gap-2 px-3.5 text-gdt-xs has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3 [&_svg:not([class*='size-'])]:size-3.5",
|
|
78
|
-
md: "h-10 gap-2 px-4.5 text-gdt-sm has-data-[icon=inline-end]:pr-4 has-data-[icon=inline-start]:pl-4",
|
|
79
|
-
lg: "h-12.5 gap-2.5 px-5.5 text-gdt-md has-data-[icon=inline-end]:pr-5 has-data-[icon=inline-start]:pl-5 [&_svg:not([class*='size-'])]:size-4.5",
|
|
80
|
-
xl: "h-14 gap-3 px-6.5 text-gdt-lg has-data-[icon=inline-end]:pr-6 has-data-[icon=inline-start]:pl-6 [&_svg:not([class*='size-'])]:size-5",
|
|
81
|
-
icon: "size-10",
|
|
82
|
-
"icon-xs": "size-6 text-gdt-xs [&_svg:not([class*='size-'])]:size-3",
|
|
83
|
-
"icon-sm": "size-8 text-gdt-sm [&_svg:not([class*='size-'])]:size-3.5",
|
|
84
|
-
"icon-lg": "size-12.5 text-gdt-md [&_svg:not([class*='size-'])]:size-4.5",
|
|
85
|
-
"icon-xl": "size-14 text-gdt-lg [&_svg:not([class*='size-'])]:size-5"
|
|
86
|
-
}
|
|
87
|
-
},
|
|
88
|
-
defaultVariants: {
|
|
89
|
-
variant: "primary",
|
|
90
|
-
size: "md"
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
);
|
|
94
|
-
function Button({
|
|
95
|
-
className,
|
|
96
|
-
variant = "primary",
|
|
97
|
-
size,
|
|
98
|
-
isLoading = false,
|
|
99
|
-
children,
|
|
100
|
-
disabled = false,
|
|
101
|
-
...props
|
|
102
|
-
}) {
|
|
103
|
-
const inheritedSize = useComponentSize();
|
|
104
|
-
const resolvedSize = size ?? inheritedSize;
|
|
105
|
-
const _disabled = disabled || isLoading;
|
|
106
|
-
return /* @__PURE__ */ jsxs(
|
|
107
|
-
ButtonPrimitive,
|
|
108
|
-
{
|
|
109
|
-
"data-slot": "button",
|
|
110
|
-
className: cn(buttonVariants({ variant, size: resolvedSize, className })),
|
|
111
|
-
disabled: _disabled,
|
|
112
|
-
...props,
|
|
113
|
-
children: [
|
|
114
|
-
isLoading && /* @__PURE__ */ jsx2(Loader, { className: "size-4 animate-spin" }),
|
|
115
|
-
" ",
|
|
116
|
-
children
|
|
117
|
-
]
|
|
118
|
-
}
|
|
119
|
-
);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
// src/components/ui/carousel.tsx
|
|
123
|
-
import { cva as cva2 } from "class-variance-authority";
|
|
124
|
-
import useEmblaCarousel from "embla-carousel-react";
|
|
125
|
-
import { ChevronLeftIcon, ChevronRightIcon } from "lucide-react";
|
|
126
23
|
import * as React from "react";
|
|
127
|
-
import { jsx
|
|
128
|
-
var glassChrome = "border border-fg-on-brand/[0.18] bg-surface-glass-overlay-button backdrop-blur-[16px]";
|
|
129
|
-
var carouselVariants = cva2(
|
|
130
|
-
"relative overflow-hidden rounded-2xl bg-surface-brand-subtle",
|
|
131
|
-
{
|
|
132
|
-
variants: {
|
|
133
|
-
imageSize: {
|
|
134
|
-
sm: "w-[320px] max-w-full aspect-[320/220]",
|
|
135
|
-
md: "w-[520px] max-w-full aspect-[520/340]",
|
|
136
|
-
lg: "w-[800px] max-w-full aspect-[800/500]",
|
|
137
|
-
full: "w-full"
|
|
138
|
-
}
|
|
139
|
-
},
|
|
140
|
-
defaultVariants: {
|
|
141
|
-
imageSize: "md"
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
);
|
|
145
|
-
var CarouselContext = React.createContext(null);
|
|
146
|
-
function useCarousel() {
|
|
147
|
-
const context = React.useContext(CarouselContext);
|
|
148
|
-
if (!context) {
|
|
149
|
-
throw new Error("useCarousel must be used within a <Carousel />");
|
|
150
|
-
}
|
|
151
|
-
return context;
|
|
152
|
-
}
|
|
153
|
-
function Carousel({
|
|
154
|
-
orientation = "horizontal",
|
|
155
|
-
opts,
|
|
156
|
-
setApi,
|
|
157
|
-
plugins,
|
|
158
|
-
size,
|
|
159
|
-
imageSize,
|
|
160
|
-
className,
|
|
161
|
-
children,
|
|
162
|
-
...props
|
|
163
|
-
}) {
|
|
164
|
-
const resolvedSize = useComponentSize(size);
|
|
165
|
-
const [carouselRef, api] = useEmblaCarousel(
|
|
166
|
-
{
|
|
167
|
-
...opts,
|
|
168
|
-
axis: orientation === "horizontal" ? "x" : "y"
|
|
169
|
-
},
|
|
170
|
-
plugins
|
|
171
|
-
);
|
|
172
|
-
const [canScrollPrev, setCanScrollPrev] = React.useState(false);
|
|
173
|
-
const [canScrollNext, setCanScrollNext] = React.useState(false);
|
|
174
|
-
const [selectedIndex, setSelectedIndex] = React.useState(0);
|
|
175
|
-
const [scrollSnaps, setScrollSnaps] = React.useState([]);
|
|
176
|
-
const onSelect = React.useCallback((api2) => {
|
|
177
|
-
if (!api2) return;
|
|
178
|
-
setCanScrollPrev(api2.canScrollPrev());
|
|
179
|
-
setCanScrollNext(api2.canScrollNext());
|
|
180
|
-
setSelectedIndex(api2.selectedScrollSnap());
|
|
181
|
-
}, []);
|
|
182
|
-
const onReInit = React.useCallback(
|
|
183
|
-
(api2) => {
|
|
184
|
-
if (!api2) return;
|
|
185
|
-
setScrollSnaps(api2.scrollSnapList());
|
|
186
|
-
onSelect(api2);
|
|
187
|
-
},
|
|
188
|
-
[onSelect]
|
|
189
|
-
);
|
|
190
|
-
const scrollPrev = React.useCallback(() => {
|
|
191
|
-
api?.scrollPrev();
|
|
192
|
-
}, [api]);
|
|
193
|
-
const scrollNext = React.useCallback(() => {
|
|
194
|
-
api?.scrollNext();
|
|
195
|
-
}, [api]);
|
|
196
|
-
const scrollTo = React.useCallback(
|
|
197
|
-
(index) => {
|
|
198
|
-
api?.scrollTo(index);
|
|
199
|
-
},
|
|
200
|
-
[api]
|
|
201
|
-
);
|
|
202
|
-
const handleKeyDown = React.useCallback(
|
|
203
|
-
(event) => {
|
|
204
|
-
if (event.key === "ArrowLeft") {
|
|
205
|
-
event.preventDefault();
|
|
206
|
-
scrollPrev();
|
|
207
|
-
} else if (event.key === "ArrowRight") {
|
|
208
|
-
event.preventDefault();
|
|
209
|
-
scrollNext();
|
|
210
|
-
}
|
|
211
|
-
},
|
|
212
|
-
[scrollPrev, scrollNext]
|
|
213
|
-
);
|
|
214
|
-
React.useEffect(() => {
|
|
215
|
-
if (!api || !setApi) return;
|
|
216
|
-
setApi(api);
|
|
217
|
-
}, [api, setApi]);
|
|
218
|
-
React.useEffect(() => {
|
|
219
|
-
if (!api) return;
|
|
220
|
-
onReInit(api);
|
|
221
|
-
api.on("reInit", onReInit);
|
|
222
|
-
api.on("select", onSelect);
|
|
223
|
-
return () => {
|
|
224
|
-
api?.off("reInit", onReInit);
|
|
225
|
-
api?.off("select", onSelect);
|
|
226
|
-
};
|
|
227
|
-
}, [api, onReInit, onSelect]);
|
|
228
|
-
return /* @__PURE__ */ jsx3(
|
|
229
|
-
CarouselContext.Provider,
|
|
230
|
-
{
|
|
231
|
-
value: {
|
|
232
|
-
carouselRef,
|
|
233
|
-
api,
|
|
234
|
-
orientation,
|
|
235
|
-
size: resolvedSize,
|
|
236
|
-
scrollPrev,
|
|
237
|
-
scrollNext,
|
|
238
|
-
scrollTo,
|
|
239
|
-
canScrollPrev,
|
|
240
|
-
canScrollNext,
|
|
241
|
-
selectedIndex,
|
|
242
|
-
scrollSnaps
|
|
243
|
-
},
|
|
244
|
-
children: /* @__PURE__ */ jsx3(
|
|
245
|
-
"div",
|
|
246
|
-
{
|
|
247
|
-
onKeyDownCapture: handleKeyDown,
|
|
248
|
-
className: cn(carouselVariants({ imageSize }), className),
|
|
249
|
-
role: "region",
|
|
250
|
-
"aria-roledescription": "carousel",
|
|
251
|
-
"data-slot": "carousel",
|
|
252
|
-
...props,
|
|
253
|
-
children
|
|
254
|
-
}
|
|
255
|
-
)
|
|
256
|
-
}
|
|
257
|
-
);
|
|
258
|
-
}
|
|
259
|
-
function CarouselContent({ className, ...props }) {
|
|
260
|
-
const { carouselRef, orientation } = useCarousel();
|
|
261
|
-
return /* @__PURE__ */ jsx3(
|
|
262
|
-
"div",
|
|
263
|
-
{
|
|
264
|
-
ref: carouselRef,
|
|
265
|
-
className: "h-full overflow-hidden",
|
|
266
|
-
"data-slot": "carousel-content",
|
|
267
|
-
children: /* @__PURE__ */ jsx3(
|
|
268
|
-
"div",
|
|
269
|
-
{
|
|
270
|
-
className: cn(
|
|
271
|
-
"flex h-full",
|
|
272
|
-
orientation === "horizontal" ? "" : "flex-col",
|
|
273
|
-
className
|
|
274
|
-
),
|
|
275
|
-
...props
|
|
276
|
-
}
|
|
277
|
-
)
|
|
278
|
-
}
|
|
279
|
-
);
|
|
280
|
-
}
|
|
281
|
-
function CarouselItem({ className, ...props }) {
|
|
282
|
-
return (
|
|
283
|
-
// biome-ignore lint/a11y/useSemanticElements: a carousel slide is a role="group" with aria-roledescription per the W3C pattern, not a fieldset.
|
|
284
|
-
/* @__PURE__ */ jsx3(
|
|
285
|
-
"div",
|
|
286
|
-
{
|
|
287
|
-
role: "group",
|
|
288
|
-
"aria-roledescription": "slide",
|
|
289
|
-
"data-slot": "carousel-item",
|
|
290
|
-
className: cn("min-w-0 shrink-0 grow-0 basis-full", className),
|
|
291
|
-
...props
|
|
292
|
-
}
|
|
293
|
-
)
|
|
294
|
-
);
|
|
295
|
-
}
|
|
296
|
-
var arrowVariants = cva2(
|
|
297
|
-
cn(
|
|
298
|
-
"absolute top-1/2 z-10 grid -translate-y-1/2 place-items-center rounded-full text-fg-on-brand/95 shadow-1 transition-[transform,opacity] outline-none",
|
|
299
|
-
glassChrome,
|
|
300
|
-
"hover:scale-105 focus-visible:shadow-[0px_0px_0px_2px_var(--color-line-focus)] active:scale-95 disabled:pointer-events-none disabled:opacity-40"
|
|
301
|
-
),
|
|
302
|
-
{
|
|
303
|
-
variants: {
|
|
304
|
-
size: {
|
|
305
|
-
sm: "size-8 [&_svg]:size-4",
|
|
306
|
-
md: "size-10 [&_svg]:size-[18px]",
|
|
307
|
-
lg: "size-12 [&_svg]:size-5"
|
|
308
|
-
},
|
|
309
|
-
side: {
|
|
310
|
-
prev: "",
|
|
311
|
-
next: ""
|
|
312
|
-
}
|
|
313
|
-
},
|
|
314
|
-
compoundVariants: [
|
|
315
|
-
{ size: "sm", side: "prev", className: "left-3" },
|
|
316
|
-
{ size: "sm", side: "next", className: "right-3" },
|
|
317
|
-
{ size: "md", side: "prev", className: "left-4" },
|
|
318
|
-
{ size: "md", side: "next", className: "right-4" },
|
|
319
|
-
{ size: "lg", side: "prev", className: "left-5" },
|
|
320
|
-
{ size: "lg", side: "next", className: "right-5" }
|
|
321
|
-
],
|
|
322
|
-
defaultVariants: {
|
|
323
|
-
size: "md",
|
|
324
|
-
side: "prev"
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
);
|
|
328
|
-
|
|
329
|
-
// src/components/ui/photo-gallery.tsx
|
|
330
|
-
import { Fragment as Fragment2, jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
24
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
331
25
|
function useGalleryCarousel(index, onIndexChange) {
|
|
332
|
-
const [api, setApi] =
|
|
333
|
-
const [selectedIndex, setSelectedIndex] =
|
|
334
|
-
const initialIndexRef =
|
|
335
|
-
const onIndexChangeRef =
|
|
336
|
-
|
|
26
|
+
const [api, setApi] = React.useState();
|
|
27
|
+
const [selectedIndex, setSelectedIndex] = React.useState(index ?? 0);
|
|
28
|
+
const initialIndexRef = React.useRef(index ?? 0);
|
|
29
|
+
const onIndexChangeRef = React.useRef(onIndexChange);
|
|
30
|
+
React.useEffect(() => {
|
|
337
31
|
onIndexChangeRef.current = onIndexChange;
|
|
338
32
|
});
|
|
339
|
-
|
|
33
|
+
React.useEffect(() => {
|
|
340
34
|
if (!api) return;
|
|
341
35
|
const onSelect = () => {
|
|
342
36
|
const next = api.selectedScrollSnap();
|
|
@@ -349,17 +43,17 @@ function useGalleryCarousel(index, onIndexChange) {
|
|
|
349
43
|
api.off("select", onSelect).off("reInit", onSelect);
|
|
350
44
|
};
|
|
351
45
|
}, [api]);
|
|
352
|
-
|
|
46
|
+
React.useEffect(() => {
|
|
353
47
|
if (api && index !== void 0 && index !== api.selectedScrollSnap()) {
|
|
354
48
|
api.scrollTo(index, false);
|
|
355
49
|
}
|
|
356
50
|
}, [api, index]);
|
|
357
|
-
const scrollTo =
|
|
51
|
+
const scrollTo = React.useCallback(
|
|
358
52
|
(i) => api?.scrollTo(i, false),
|
|
359
53
|
[api]
|
|
360
54
|
);
|
|
361
|
-
const scrollPrev =
|
|
362
|
-
const scrollNext =
|
|
55
|
+
const scrollPrev = React.useCallback(() => api?.scrollPrev(false), [api]);
|
|
56
|
+
const scrollNext = React.useCallback(() => api?.scrollNext(false), [api]);
|
|
363
57
|
return {
|
|
364
58
|
setApi,
|
|
365
59
|
selectedIndex,
|
|
@@ -374,7 +68,7 @@ function GalleryFrame({
|
|
|
374
68
|
fit = "cover",
|
|
375
69
|
className
|
|
376
70
|
}) {
|
|
377
|
-
return /* @__PURE__ */
|
|
71
|
+
return /* @__PURE__ */ jsx(
|
|
378
72
|
"div",
|
|
379
73
|
{
|
|
380
74
|
"data-slot": "photo-gallery-frame",
|
|
@@ -382,22 +76,21 @@ function GalleryFrame({
|
|
|
382
76
|
"relative flex size-full items-center justify-center overflow-hidden",
|
|
383
77
|
className
|
|
384
78
|
),
|
|
385
|
-
children: image?.src ? /* @__PURE__ */
|
|
79
|
+
children: image?.src ? /* @__PURE__ */ jsx(
|
|
386
80
|
"img",
|
|
387
81
|
{
|
|
388
82
|
src: image.src,
|
|
389
83
|
alt: image.alt ?? "Property image",
|
|
390
84
|
className: cn(
|
|
391
|
-
"size-full"
|
|
392
|
-
fit === "contain" ? "object-contain" : "object-cover"
|
|
85
|
+
fit === "contain" ? "max-h-full max-w-full rounded-lg object-contain" : "size-full object-cover"
|
|
393
86
|
),
|
|
394
87
|
draggable: false
|
|
395
88
|
}
|
|
396
|
-
) : /* @__PURE__ */
|
|
89
|
+
) : /* @__PURE__ */ jsx("span", { className: "text-gdt-sm font-medium text-fg-caption-placeholder", children: "Property Image" })
|
|
397
90
|
}
|
|
398
91
|
);
|
|
399
92
|
}
|
|
400
|
-
var Images = (props) => /* @__PURE__ */
|
|
93
|
+
var Images = (props) => /* @__PURE__ */ jsxs(
|
|
401
94
|
"svg",
|
|
402
95
|
{
|
|
403
96
|
"aria-hidden": "true",
|
|
@@ -408,14 +101,14 @@ var Images = (props) => /* @__PURE__ */ jsxs3(
|
|
|
408
101
|
fill: "none",
|
|
409
102
|
...props,
|
|
410
103
|
children: [
|
|
411
|
-
/* @__PURE__ */
|
|
104
|
+
/* @__PURE__ */ jsx(
|
|
412
105
|
"path",
|
|
413
106
|
{
|
|
414
107
|
fill: "currentColor",
|
|
415
108
|
d: "M6.72 14.332c-.705 0-1.38-.3-1.878-.83a2.935 2.935 0 0 1-.779-2.003V2.012l-3.02.738c-.36.102-.667.353-.853.697a1.587 1.587 0 0 0-.143 1.136l2.589 10.309c.083.318.261.598.507.798.246.2.546.309.856.31.115 0 .233-.015.349-.048l6.3-1.62H6.72ZM8.125 6c.69 0 1.25-.597 1.25-1.333 0-.735-.56-1.333-1.25-1.333s-1.25.598-1.25 1.333c0 .736.56 1.333 1.25 1.333Z"
|
|
416
109
|
}
|
|
417
110
|
),
|
|
418
|
-
/* @__PURE__ */
|
|
111
|
+
/* @__PURE__ */ jsx(
|
|
419
112
|
"path",
|
|
420
113
|
{
|
|
421
114
|
fill: "currentColor",
|
|
@@ -431,7 +124,7 @@ function GalleryCounter({
|
|
|
431
124
|
className
|
|
432
125
|
}) {
|
|
433
126
|
if (total <= 1) return null;
|
|
434
|
-
return /* @__PURE__ */
|
|
127
|
+
return /* @__PURE__ */ jsxs(
|
|
435
128
|
"div",
|
|
436
129
|
{
|
|
437
130
|
"data-slot": "photo-gallery-counter",
|
|
@@ -440,8 +133,8 @@ function GalleryCounter({
|
|
|
440
133
|
className
|
|
441
134
|
),
|
|
442
135
|
children: [
|
|
443
|
-
/* @__PURE__ */
|
|
444
|
-
/* @__PURE__ */
|
|
136
|
+
/* @__PURE__ */ jsx(Images, { "aria-hidden": "true", className: "size-3.5" }),
|
|
137
|
+
/* @__PURE__ */ jsxs("span", { children: [
|
|
445
138
|
current,
|
|
446
139
|
" / ",
|
|
447
140
|
total
|
|
@@ -455,7 +148,7 @@ function GalleryButton({
|
|
|
455
148
|
variant = "ghost",
|
|
456
149
|
...rest
|
|
457
150
|
}) {
|
|
458
|
-
return /* @__PURE__ */
|
|
151
|
+
return /* @__PURE__ */ jsx(
|
|
459
152
|
Button,
|
|
460
153
|
{
|
|
461
154
|
size: "icon",
|
|
@@ -473,8 +166,8 @@ function GalleryArrow({
|
|
|
473
166
|
onClick,
|
|
474
167
|
className
|
|
475
168
|
}) {
|
|
476
|
-
const Icon = side === "prev" ?
|
|
477
|
-
return /* @__PURE__ */
|
|
169
|
+
const Icon = side === "prev" ? ChevronLeftIcon : ChevronRightIcon;
|
|
170
|
+
return /* @__PURE__ */ jsx(
|
|
478
171
|
GalleryButton,
|
|
479
172
|
{
|
|
480
173
|
type: "button",
|
|
@@ -489,7 +182,7 @@ function GalleryArrow({
|
|
|
489
182
|
side === "prev" ? "left-2 sm:left-4" : "right-2 sm:right-4",
|
|
490
183
|
className
|
|
491
184
|
),
|
|
492
|
-
children: /* @__PURE__ */
|
|
185
|
+
children: /* @__PURE__ */ jsx(Icon, { className: "cn-rtl-flip size-4 sm:size-5" })
|
|
493
186
|
}
|
|
494
187
|
);
|
|
495
188
|
}
|
|
@@ -498,32 +191,45 @@ function GalleryThumbnails({
|
|
|
498
191
|
selectedIndex,
|
|
499
192
|
onSelect,
|
|
500
193
|
colsClassName,
|
|
501
|
-
className
|
|
502
|
-
activeVariant = "focus"
|
|
194
|
+
className
|
|
503
195
|
}) {
|
|
504
|
-
const containerRef =
|
|
505
|
-
|
|
196
|
+
const containerRef = React.useRef(null);
|
|
197
|
+
const hasPositionedRef = React.useRef(false);
|
|
198
|
+
const [overflowing, setOverflowing] = React.useState(false);
|
|
199
|
+
React.useEffect(() => {
|
|
200
|
+
const el = containerRef.current;
|
|
201
|
+
if (!el) return;
|
|
202
|
+
const update = () => setOverflowing(el.scrollWidth > el.clientWidth + 1);
|
|
203
|
+
update();
|
|
204
|
+
const observer = new ResizeObserver(update);
|
|
205
|
+
observer.observe(el);
|
|
206
|
+
return () => observer.disconnect();
|
|
207
|
+
}, []);
|
|
208
|
+
React.useEffect(() => {
|
|
506
209
|
const active = containerRef.current?.children[selectedIndex];
|
|
507
|
-
active
|
|
508
|
-
|
|
210
|
+
if (!active) return;
|
|
211
|
+
active.scrollIntoView({
|
|
212
|
+
behavior: hasPositionedRef.current ? "smooth" : "auto",
|
|
509
213
|
inline: "center",
|
|
510
214
|
block: "nearest"
|
|
511
215
|
});
|
|
216
|
+
hasPositionedRef.current = true;
|
|
512
217
|
}, [selectedIndex]);
|
|
513
218
|
if (images.length <= 1) return null;
|
|
514
|
-
return /* @__PURE__ */
|
|
219
|
+
return /* @__PURE__ */ jsx(
|
|
515
220
|
"div",
|
|
516
221
|
{
|
|
517
222
|
ref: containerRef,
|
|
518
223
|
"data-slot": "photo-gallery-thumbnails",
|
|
519
224
|
className: cn(
|
|
520
225
|
"flex gap-2 overflow-x-auto [--gallery-gap:0.5rem] scrollbar-none [&::-webkit-scrollbar]:hidden",
|
|
226
|
+
overflowing ? "justify-start" : "justify-center",
|
|
521
227
|
colsClassName,
|
|
522
228
|
className
|
|
523
229
|
),
|
|
524
230
|
children: images.map((image, index) => {
|
|
525
231
|
const isActive = index === selectedIndex;
|
|
526
|
-
return /* @__PURE__ */
|
|
232
|
+
return /* @__PURE__ */ jsx(
|
|
527
233
|
"button",
|
|
528
234
|
{
|
|
529
235
|
type: "button",
|
|
@@ -535,10 +241,9 @@ function GalleryThumbnails({
|
|
|
535
241
|
},
|
|
536
242
|
className: cn(
|
|
537
243
|
"relative aspect-4/3 shrink-0 overflow-hidden rounded-lg border-2 bg-surface-raised transition-[border-color,opacity] outline-none focus-visible:border-line-focus focus-visible:shadow-[0px_0px_0px_2px_var(--color-line-focus)]",
|
|
538
|
-
|
|
539
|
-
isActive ? activeVariant === "subtle" ? "border-line-subtle" : "border-line-focus" : "border-transparent opacity-80 hover:opacity-100"
|
|
244
|
+
isActive ? "border-line-focus" : "border-transparent opacity-80 hover:opacity-100"
|
|
540
245
|
),
|
|
541
|
-
children: image.src ? /* @__PURE__ */
|
|
246
|
+
children: image.src ? /* @__PURE__ */ jsx(
|
|
542
247
|
"img",
|
|
543
248
|
{
|
|
544
249
|
src: image.src,
|
|
@@ -571,7 +276,7 @@ function PhotoGallery({
|
|
|
571
276
|
scrollNext
|
|
572
277
|
} = useGalleryCarousel(index, onIndexChange);
|
|
573
278
|
const hasMany = images.length > 1;
|
|
574
|
-
return /* @__PURE__ */
|
|
279
|
+
return /* @__PURE__ */ jsxs(
|
|
575
280
|
"div",
|
|
576
281
|
{
|
|
577
282
|
"data-slot": "photo-gallery",
|
|
@@ -581,7 +286,7 @@ function PhotoGallery({
|
|
|
581
286
|
),
|
|
582
287
|
...props,
|
|
583
288
|
children: [
|
|
584
|
-
/* @__PURE__ */
|
|
289
|
+
/* @__PURE__ */ jsxs(
|
|
585
290
|
Carousel,
|
|
586
291
|
{
|
|
587
292
|
imageSize: "full",
|
|
@@ -589,22 +294,22 @@ function PhotoGallery({
|
|
|
589
294
|
opts: { loop: true, startIndex: initialIndex, watchDrag: hasMany },
|
|
590
295
|
className: "aspect-video rounded-xl bg-surface-raised",
|
|
591
296
|
children: [
|
|
592
|
-
/* @__PURE__ */
|
|
297
|
+
/* @__PURE__ */ jsx(CarouselContent, { children: images.map((image, i) => /* @__PURE__ */ jsx(
|
|
593
298
|
CarouselItem,
|
|
594
299
|
{
|
|
595
|
-
children: /* @__PURE__ */
|
|
300
|
+
children: /* @__PURE__ */ jsx(GalleryFrame, { image })
|
|
596
301
|
},
|
|
597
302
|
i
|
|
598
303
|
)) }),
|
|
599
|
-
onImageClick && /* @__PURE__ */
|
|
304
|
+
onImageClick && /* @__PURE__ */ jsx(
|
|
600
305
|
GalleryButton,
|
|
601
306
|
{
|
|
602
307
|
className: "absolute bottom-2 right-2 sm:bottom-4 sm:right-4",
|
|
603
308
|
onClick: () => onImageClick(selectedIndex),
|
|
604
|
-
children: /* @__PURE__ */
|
|
309
|
+
children: /* @__PURE__ */ jsx(Fullscreen, { className: "size-4 md:size-5" })
|
|
605
310
|
}
|
|
606
311
|
),
|
|
607
|
-
/* @__PURE__ */
|
|
312
|
+
/* @__PURE__ */ jsx(
|
|
608
313
|
GalleryCounter,
|
|
609
314
|
{
|
|
610
315
|
current: selectedIndex + 1,
|
|
@@ -612,14 +317,14 @@ function PhotoGallery({
|
|
|
612
317
|
className: "top-2 right-2 sm:top-4 md:right-4"
|
|
613
318
|
}
|
|
614
319
|
),
|
|
615
|
-
hasMany && /* @__PURE__ */
|
|
616
|
-
/* @__PURE__ */
|
|
617
|
-
/* @__PURE__ */
|
|
320
|
+
hasMany && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
321
|
+
/* @__PURE__ */ jsx(GalleryArrow, { side: "prev", onClick: scrollPrev }),
|
|
322
|
+
/* @__PURE__ */ jsx(GalleryArrow, { side: "next", onClick: scrollNext })
|
|
618
323
|
] })
|
|
619
324
|
]
|
|
620
325
|
}
|
|
621
326
|
),
|
|
622
|
-
/* @__PURE__ */
|
|
327
|
+
/* @__PURE__ */ jsx(
|
|
623
328
|
GalleryThumbnails,
|
|
624
329
|
{
|
|
625
330
|
images,
|
|
@@ -658,24 +363,24 @@ function PhotoGalleryFullscreen({
|
|
|
658
363
|
scrollNext();
|
|
659
364
|
}
|
|
660
365
|
};
|
|
661
|
-
return /* @__PURE__ */
|
|
662
|
-
/* @__PURE__ */
|
|
366
|
+
return /* @__PURE__ */ jsx(DialogPrimitive.Root, { open, onOpenChange, children: /* @__PURE__ */ jsxs(DialogPrimitive.Portal, { children: [
|
|
367
|
+
/* @__PURE__ */ jsx(
|
|
663
368
|
DialogPrimitive.Backdrop,
|
|
664
369
|
{
|
|
665
370
|
"data-slot": "photo-gallery-fullscreen-backdrop",
|
|
666
|
-
className: "fixed inset-0 z-50 bg-black/
|
|
371
|
+
className: "fixed inset-0 z-50 bg-black/90 transition-opacity duration-150 data-closed:opacity-0 data-open:opacity-100"
|
|
667
372
|
}
|
|
668
373
|
),
|
|
669
|
-
/* @__PURE__ */
|
|
374
|
+
/* @__PURE__ */ jsxs(
|
|
670
375
|
DialogPrimitive.Popup,
|
|
671
376
|
{
|
|
672
377
|
"data-slot": "photo-gallery-fullscreen",
|
|
673
378
|
onKeyDown: handleKeyDown,
|
|
674
379
|
className: "fixed inset-0 z-50 flex flex-col gap-4 p-4 sm:p-6 xl:p-8 outline-none transition-opacity duration-150 data-closed:opacity-0 data-open:opacity-100",
|
|
675
380
|
children: [
|
|
676
|
-
/* @__PURE__ */
|
|
677
|
-
/* @__PURE__ */
|
|
678
|
-
/* @__PURE__ */
|
|
381
|
+
/* @__PURE__ */ jsx(DialogPrimitive.Title, { className: "sr-only", children: "Photo Gallery" }),
|
|
382
|
+
/* @__PURE__ */ jsxs("div", { className: "w-full flex items-center justify-between", children: [
|
|
383
|
+
/* @__PURE__ */ jsx(
|
|
679
384
|
GalleryCounter,
|
|
680
385
|
{
|
|
681
386
|
current: selectedIndex + 1,
|
|
@@ -683,34 +388,34 @@ function PhotoGalleryFullscreen({
|
|
|
683
388
|
className: "static"
|
|
684
389
|
}
|
|
685
390
|
),
|
|
686
|
-
/* @__PURE__ */
|
|
391
|
+
/* @__PURE__ */ jsx(
|
|
687
392
|
DialogPrimitive.Close,
|
|
688
393
|
{
|
|
689
394
|
"data-slot": "photo-gallery-fullscreen-close",
|
|
690
395
|
"aria-label": "Close gallery",
|
|
691
|
-
render: /* @__PURE__ */
|
|
692
|
-
children: /* @__PURE__ */
|
|
396
|
+
render: /* @__PURE__ */ jsx(GalleryButton, {}),
|
|
397
|
+
children: /* @__PURE__ */ jsx(XIcon, { className: "size-4 sm:size-5" })
|
|
693
398
|
}
|
|
694
399
|
)
|
|
695
400
|
] }),
|
|
696
|
-
/* @__PURE__ */
|
|
401
|
+
/* @__PURE__ */ jsxs(
|
|
697
402
|
Carousel,
|
|
698
403
|
{
|
|
699
404
|
imageSize: "full",
|
|
700
405
|
setApi,
|
|
701
406
|
opts: { loop: true, startIndex: initialIndex, watchDrag: hasMany },
|
|
702
|
-
className: "flex-1 w-full rounded-xl bg-transparent",
|
|
407
|
+
className: "min-h-0 flex-1 w-full rounded-xl bg-transparent",
|
|
703
408
|
children: [
|
|
704
|
-
/* @__PURE__ */
|
|
409
|
+
/* @__PURE__ */ jsx(CarouselContent, { className: "items-center", children: images.map((image, i) => /* @__PURE__ */ jsx(
|
|
705
410
|
CarouselItem,
|
|
706
411
|
{
|
|
707
412
|
className: "h-full",
|
|
708
|
-
children: /* @__PURE__ */
|
|
413
|
+
children: /* @__PURE__ */ jsx(GalleryFrame, { image, fit: "contain" })
|
|
709
414
|
},
|
|
710
415
|
i
|
|
711
416
|
)) }),
|
|
712
|
-
hasMany && /* @__PURE__ */
|
|
713
|
-
/* @__PURE__ */
|
|
417
|
+
hasMany && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
418
|
+
/* @__PURE__ */ jsx(
|
|
714
419
|
GalleryArrow,
|
|
715
420
|
{
|
|
716
421
|
side: "prev",
|
|
@@ -718,7 +423,7 @@ function PhotoGalleryFullscreen({
|
|
|
718
423
|
className: "left-0!"
|
|
719
424
|
}
|
|
720
425
|
),
|
|
721
|
-
/* @__PURE__ */
|
|
426
|
+
/* @__PURE__ */ jsx(
|
|
722
427
|
GalleryArrow,
|
|
723
428
|
{
|
|
724
429
|
side: "next",
|
|
@@ -730,17 +435,16 @@ function PhotoGalleryFullscreen({
|
|
|
730
435
|
]
|
|
731
436
|
}
|
|
732
437
|
),
|
|
733
|
-
hasMany && /* @__PURE__ */
|
|
734
|
-
/* @__PURE__ */
|
|
735
|
-
/* @__PURE__ */
|
|
438
|
+
hasMany && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3", children: [
|
|
439
|
+
/* @__PURE__ */ jsx("p", { className: "hidden text-center text-gdt-xs text-fg-secondary sm:block", children: "\u2190 \u2192 to navigate \xB7 ESC to close" }),
|
|
440
|
+
/* @__PURE__ */ jsx(
|
|
736
441
|
GalleryThumbnails,
|
|
737
442
|
{
|
|
738
443
|
images,
|
|
739
444
|
selectedIndex,
|
|
740
445
|
onSelect: scrollTo,
|
|
741
446
|
colsClassName: "[--gallery-cols:5] sm:[--gallery-cols:10]",
|
|
742
|
-
className: "mx-auto w-full max-w-3xl"
|
|
743
|
-
activeVariant: "subtle"
|
|
447
|
+
className: "mx-auto w-full max-w-3xl"
|
|
744
448
|
}
|
|
745
449
|
)
|
|
746
450
|
] })
|