@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.
Files changed (315) hide show
  1. package/README.md +18 -6
  2. package/css/base.css +37 -0
  3. package/css/components.css +135 -0
  4. package/css/generated/shared.css +1 -0
  5. package/css/giddaa.css +402 -0
  6. package/css/preset.css +77 -0
  7. package/css/styles.css +2 -0
  8. package/css/theme.css +255 -0
  9. package/dist/accordion.d.ts +9 -10
  10. package/dist/accordion.js +41 -117
  11. package/dist/activity-timeline.d.ts +29 -0
  12. package/dist/activity-timeline.js +97 -0
  13. package/dist/alert.d.ts +8 -9
  14. package/dist/alert.js +53 -141
  15. package/dist/auth-layout.d.ts +23 -0
  16. package/dist/auth-layout.js +153 -0
  17. package/dist/avatar.d.ts +6 -6
  18. package/dist/avatar.js +40 -142
  19. package/dist/badge.d.ts +12 -13
  20. package/dist/badge.js +66 -114
  21. package/dist/bar-chart.d.ts +136 -114
  22. package/dist/bar-chart.js +244 -297
  23. package/dist/breadcrumb.d.ts +5 -5
  24. package/dist/breadcrumb.js +56 -148
  25. package/dist/bullet-chart.d.ts +33 -33
  26. package/dist/bullet-chart.js +123 -183
  27. package/dist/button-BZIeyUw6.d.ts +17 -0
  28. package/dist/button-group.d.ts +13 -16
  29. package/dist/button-group.js +38 -163
  30. package/dist/button.d.ts +2 -19
  31. package/dist/button.js +90 -142
  32. package/dist/calendar.d.ts +6 -6
  33. package/dist/calendar.js +134 -288
  34. package/dist/card.d.ts +14 -16
  35. package/dist/card.js +58 -174
  36. package/dist/carousel.d.ts +34 -35
  37. package/dist/carousel.js +319 -378
  38. package/dist/chart.d.ts +58 -59
  39. package/dist/chart.js +350 -466
  40. package/dist/checkbox.d.ts +10 -12
  41. package/dist/checkbox.js +84 -84
  42. package/dist/cn-BI_4DMBf.js +23 -0
  43. package/dist/collapsible.d.ts +7 -8
  44. package/dist/collapsible.js +23 -77
  45. package/dist/combobox.d.ts +10 -10
  46. package/dist/combobox.js +220 -696
  47. package/dist/cta.d.ts +64 -0
  48. package/dist/cta.js +192 -0
  49. package/dist/currency-selector.d.ts +41 -0
  50. package/dist/currency-selector.js +114 -0
  51. package/dist/data-table.d.ts +164 -0
  52. package/dist/data-table.js +673 -0
  53. package/dist/date-picker.d.ts +27 -20
  54. package/dist/date-picker.js +122 -520
  55. package/dist/details-card.d.ts +19 -0
  56. package/dist/details-card.js +118 -0
  57. package/dist/dialog.d.ts +13 -14
  58. package/dist/dialog.js +117 -320
  59. package/dist/dropdown-menu.d.ts +14 -14
  60. package/dist/dropdown-menu.js +170 -365
  61. package/dist/dropzone.d.ts +55 -55
  62. package/dist/dropzone.js +328 -467
  63. package/dist/editorial-card.d.ts +27 -0
  64. package/dist/editorial-card.js +144 -0
  65. package/dist/empty-state.d.ts +8 -9
  66. package/dist/empty-state.js +48 -135
  67. package/dist/field.d.ts +23 -25
  68. package/dist/field.js +111 -327
  69. package/dist/filter.d.ts +118 -0
  70. package/dist/filter.js +775 -0
  71. package/dist/footer.d.ts +40 -0
  72. package/dist/footer.js +227 -0
  73. package/dist/funnel-chart.d.ts +38 -41
  74. package/dist/funnel-chart.js +168 -563
  75. package/dist/gallery-indicator.d.ts +17 -0
  76. package/dist/gallery-indicator.js +75 -0
  77. package/dist/heatmap-chart.d.ts +95 -0
  78. package/dist/heatmap-chart.js +197 -0
  79. package/dist/infotip.d.ts +10 -0
  80. package/dist/infotip.js +40 -0
  81. package/dist/input-CfoEJ8A6.d.ts +12 -0
  82. package/dist/input-group.d.ts +16 -19
  83. package/dist/input-group.js +92 -372
  84. package/dist/input-size-context-C-SFx9sx.d.ts +10 -0
  85. package/dist/input-size-context.d.ts +2 -11
  86. package/dist/input-size-context.js +14 -20
  87. package/dist/input.d.ts +2 -13
  88. package/dist/input.js +23 -79
  89. package/dist/item.d.ts +7 -8
  90. package/dist/item.js +22 -89
  91. package/dist/kpi-card.d.ts +18 -20
  92. package/dist/kpi-card.js +84 -232
  93. package/dist/label.d.ts +6 -6
  94. package/dist/label.js +39 -66
  95. package/dist/line-chart.d.ts +88 -89
  96. package/dist/line-chart.js +143 -262
  97. package/dist/logo.d.ts +4 -4
  98. package/dist/logo.js +87 -141
  99. package/dist/map-indicator.d.ts +13 -0
  100. package/dist/map-indicator.js +83 -0
  101. package/dist/match.d.ts +15 -0
  102. package/dist/match.js +68 -0
  103. package/dist/media-gallery-hero.d.ts +58 -0
  104. package/dist/media-gallery-hero.js +201 -0
  105. package/dist/media-player.d.ts +60 -0
  106. package/dist/media-player.js +919 -0
  107. package/dist/multi-step-form.d.ts +56 -0
  108. package/dist/multi-step-form.js +342 -0
  109. package/dist/number-input.d.ts +34 -34
  110. package/dist/number-input.js +62 -413
  111. package/dist/page-header.d.ts +10 -11
  112. package/dist/page-header.js +34 -107
  113. package/dist/pagination.d.ts +17 -20
  114. package/dist/pagination.js +132 -341
  115. package/dist/password-input.d.ts +5 -12
  116. package/dist/password-input.js +32 -354
  117. package/dist/phone-input.d.ts +19 -19
  118. package/dist/phone-input.js +232 -561
  119. package/dist/photo-gallery.d.ts +20 -20
  120. package/dist/photo-gallery.js +314 -746
  121. package/dist/picker-lzgmsNfG.js +32 -0
  122. package/dist/pie-chart.d.ts +60 -60
  123. package/dist/pie-chart.js +141 -184
  124. package/dist/popover.d.ts +9 -9
  125. package/dist/popover.js +60 -156
  126. package/dist/price-tag.d.ts +34 -0
  127. package/dist/price-tag.js +118 -0
  128. package/dist/progress.d.ts +18 -16
  129. package/dist/progress.js +156 -300
  130. package/dist/property-listing-card.d.ts +29 -0
  131. package/dist/property-listing-card.js +117 -0
  132. package/dist/radar-chart.d.ts +108 -0
  133. package/dist/radar-chart.js +172 -0
  134. package/dist/radio-group.d.ts +11 -13
  135. package/dist/radio-group.js +47 -96
  136. package/dist/review-block.d.ts +18 -0
  137. package/dist/review-block.js +154 -0
  138. package/dist/rich-text-editor.d.ts +30 -14
  139. package/dist/rich-text-editor.js +594 -979
  140. package/dist/scatter-chart.d.ts +140 -0
  141. package/dist/scatter-chart.js +248 -0
  142. package/dist/search-input.d.ts +8 -15
  143. package/dist/search-input.js +58 -408
  144. package/dist/select.d.ts +8 -8
  145. package/dist/select.js +131 -291
  146. package/dist/separator.d.ts +8 -9
  147. package/dist/separator.js +31 -70
  148. package/dist/sheet.d.ts +11 -11
  149. package/dist/sheet.js +84 -262
  150. package/dist/sidebar.d.ts +32 -37
  151. package/dist/sidebar.js +380 -1055
  152. package/dist/size-context-D4mYvcg8.d.ts +10 -0
  153. package/dist/size-context.d.ts +2 -11
  154. package/dist/size-context.js +14 -18
  155. package/dist/skeleton.d.ts +4 -5
  156. package/dist/skeleton.js +9 -45
  157. package/dist/slider.d.ts +27 -0
  158. package/dist/slider.js +81 -0
  159. package/dist/sparkline.d.ts +43 -46
  160. package/dist/sparkline.js +223 -561
  161. package/dist/stepper.d.ts +23 -24
  162. package/dist/stepper.js +149 -276
  163. package/dist/styles.css +9995 -2
  164. package/dist/switch.d.ts +10 -12
  165. package/dist/switch.js +49 -106
  166. package/dist/table-card.d.ts +35 -0
  167. package/dist/table-card.js +125 -0
  168. package/dist/table.d.ts +18 -14
  169. package/dist/table.js +114 -182
  170. package/dist/tabs.d.ts +23 -15
  171. package/dist/tabs.js +62 -149
  172. package/dist/tag.d.ts +22 -23
  173. package/dist/tag.js +104 -156
  174. package/dist/testimonial-block.d.ts +33 -0
  175. package/dist/testimonial-block.js +208 -0
  176. package/dist/textarea-IS_D8pXf.d.ts +11 -0
  177. package/dist/textarea.d.ts +2 -12
  178. package/dist/textarea.js +20 -74
  179. package/dist/time-picker.d.ts +11 -11
  180. package/dist/time-picker.js +247 -464
  181. package/dist/toast.d.ts +16 -18
  182. package/dist/toast.js +154 -310
  183. package/dist/tooltip.d.ts +9 -10
  184. package/dist/tooltip.js +33 -91
  185. package/dist/tree-map.d.ts +54 -57
  186. package/dist/tree-map.js +231 -646
  187. package/dist/use-uncontrolled-CLfM1XbB.js +21 -0
  188. package/dist/waterfall-chart.d.ts +126 -0
  189. package/dist/waterfall-chart.js +480 -0
  190. package/package.json +123 -34
  191. package/dist/accordion.js.map +0 -1
  192. package/dist/alert.js.map +0 -1
  193. package/dist/avatar.js.map +0 -1
  194. package/dist/badge.js.map +0 -1
  195. package/dist/bar-chart.js.map +0 -1
  196. package/dist/base.css +0 -32
  197. package/dist/breadcrumb.js.map +0 -1
  198. package/dist/bullet-chart.js.map +0 -1
  199. package/dist/button-group.js.map +0 -1
  200. package/dist/button.js.map +0 -1
  201. package/dist/calendar.js.map +0 -1
  202. package/dist/card.js.map +0 -1
  203. package/dist/carousel.js.map +0 -1
  204. package/dist/chart.js.map +0 -1
  205. package/dist/checkbox.js.map +0 -1
  206. package/dist/collapsible.js.map +0 -1
  207. package/dist/combobox.js.map +0 -1
  208. package/dist/date-picker.js.map +0 -1
  209. package/dist/dialog.js.map +0 -1
  210. package/dist/dropdown-menu.js.map +0 -1
  211. package/dist/dropzone.js.map +0 -1
  212. package/dist/empty-state.js.map +0 -1
  213. package/dist/field.js.map +0 -1
  214. package/dist/files/red-hat-display-latin-300-italic.woff +0 -0
  215. package/dist/files/red-hat-display-latin-300-italic.woff2 +0 -0
  216. package/dist/files/red-hat-display-latin-300-normal.woff +0 -0
  217. package/dist/files/red-hat-display-latin-300-normal.woff2 +0 -0
  218. package/dist/files/red-hat-display-latin-400-italic.woff +0 -0
  219. package/dist/files/red-hat-display-latin-400-italic.woff2 +0 -0
  220. package/dist/files/red-hat-display-latin-400-normal.woff +0 -0
  221. package/dist/files/red-hat-display-latin-400-normal.woff2 +0 -0
  222. package/dist/files/red-hat-display-latin-500-italic.woff +0 -0
  223. package/dist/files/red-hat-display-latin-500-italic.woff2 +0 -0
  224. package/dist/files/red-hat-display-latin-500-normal.woff +0 -0
  225. package/dist/files/red-hat-display-latin-500-normal.woff2 +0 -0
  226. package/dist/files/red-hat-display-latin-600-italic.woff +0 -0
  227. package/dist/files/red-hat-display-latin-600-italic.woff2 +0 -0
  228. package/dist/files/red-hat-display-latin-600-normal.woff +0 -0
  229. package/dist/files/red-hat-display-latin-600-normal.woff2 +0 -0
  230. package/dist/files/red-hat-display-latin-700-italic.woff +0 -0
  231. package/dist/files/red-hat-display-latin-700-italic.woff2 +0 -0
  232. package/dist/files/red-hat-display-latin-700-normal.woff +0 -0
  233. package/dist/files/red-hat-display-latin-700-normal.woff2 +0 -0
  234. package/dist/files/red-hat-display-latin-800-italic.woff +0 -0
  235. package/dist/files/red-hat-display-latin-800-italic.woff2 +0 -0
  236. package/dist/files/red-hat-display-latin-800-normal.woff +0 -0
  237. package/dist/files/red-hat-display-latin-800-normal.woff2 +0 -0
  238. package/dist/files/red-hat-display-latin-900-italic.woff +0 -0
  239. package/dist/files/red-hat-display-latin-900-italic.woff2 +0 -0
  240. package/dist/files/red-hat-display-latin-900-normal.woff +0 -0
  241. package/dist/files/red-hat-display-latin-900-normal.woff2 +0 -0
  242. package/dist/files/red-hat-display-latin-ext-300-italic.woff +0 -0
  243. package/dist/files/red-hat-display-latin-ext-300-italic.woff2 +0 -0
  244. package/dist/files/red-hat-display-latin-ext-300-normal.woff +0 -0
  245. package/dist/files/red-hat-display-latin-ext-300-normal.woff2 +0 -0
  246. package/dist/files/red-hat-display-latin-ext-400-italic.woff +0 -0
  247. package/dist/files/red-hat-display-latin-ext-400-italic.woff2 +0 -0
  248. package/dist/files/red-hat-display-latin-ext-400-normal.woff +0 -0
  249. package/dist/files/red-hat-display-latin-ext-400-normal.woff2 +0 -0
  250. package/dist/files/red-hat-display-latin-ext-500-italic.woff +0 -0
  251. package/dist/files/red-hat-display-latin-ext-500-italic.woff2 +0 -0
  252. package/dist/files/red-hat-display-latin-ext-500-normal.woff +0 -0
  253. package/dist/files/red-hat-display-latin-ext-500-normal.woff2 +0 -0
  254. package/dist/files/red-hat-display-latin-ext-600-italic.woff +0 -0
  255. package/dist/files/red-hat-display-latin-ext-600-italic.woff2 +0 -0
  256. package/dist/files/red-hat-display-latin-ext-600-normal.woff +0 -0
  257. package/dist/files/red-hat-display-latin-ext-600-normal.woff2 +0 -0
  258. package/dist/files/red-hat-display-latin-ext-700-italic.woff +0 -0
  259. package/dist/files/red-hat-display-latin-ext-700-italic.woff2 +0 -0
  260. package/dist/files/red-hat-display-latin-ext-700-normal.woff +0 -0
  261. package/dist/files/red-hat-display-latin-ext-700-normal.woff2 +0 -0
  262. package/dist/files/red-hat-display-latin-ext-800-italic.woff +0 -0
  263. package/dist/files/red-hat-display-latin-ext-800-italic.woff2 +0 -0
  264. package/dist/files/red-hat-display-latin-ext-800-normal.woff +0 -0
  265. package/dist/files/red-hat-display-latin-ext-800-normal.woff2 +0 -0
  266. package/dist/files/red-hat-display-latin-ext-900-italic.woff +0 -0
  267. package/dist/files/red-hat-display-latin-ext-900-italic.woff2 +0 -0
  268. package/dist/files/red-hat-display-latin-ext-900-normal.woff +0 -0
  269. package/dist/files/red-hat-display-latin-ext-900-normal.woff2 +0 -0
  270. package/dist/funnel-chart.js.map +0 -1
  271. package/dist/index.d.ts +0 -87
  272. package/dist/index.js +0 -10448
  273. package/dist/index.js.map +0 -1
  274. package/dist/input-group.js.map +0 -1
  275. package/dist/input-size-context.js.map +0 -1
  276. package/dist/input.js.map +0 -1
  277. package/dist/item.js.map +0 -1
  278. package/dist/kpi-card.js.map +0 -1
  279. package/dist/label.js.map +0 -1
  280. package/dist/line-chart.js.map +0 -1
  281. package/dist/logo.js.map +0 -1
  282. package/dist/number-input.js.map +0 -1
  283. package/dist/page-header.js.map +0 -1
  284. package/dist/pagination.js.map +0 -1
  285. package/dist/password-input.js.map +0 -1
  286. package/dist/phone-input.js.map +0 -1
  287. package/dist/photo-gallery.js.map +0 -1
  288. package/dist/pie-chart.js.map +0 -1
  289. package/dist/popover.js.map +0 -1
  290. package/dist/progress.js.map +0 -1
  291. package/dist/radio-group.js.map +0 -1
  292. package/dist/red-hat-display.css +0 -2
  293. package/dist/rich-text-editor.js.map +0 -1
  294. package/dist/search-input.js.map +0 -1
  295. package/dist/select.js.map +0 -1
  296. package/dist/separator.js.map +0 -1
  297. package/dist/sheet.js.map +0 -1
  298. package/dist/sidebar.js.map +0 -1
  299. package/dist/size-context.js.map +0 -1
  300. package/dist/skeleton.js.map +0 -1
  301. package/dist/sparkline.js.map +0 -1
  302. package/dist/stepper.js.map +0 -1
  303. package/dist/switch.js.map +0 -1
  304. package/dist/tab-list.d.ts +0 -38
  305. package/dist/tab-list.js +0 -394
  306. package/dist/tab-list.js.map +0 -1
  307. package/dist/table.js.map +0 -1
  308. package/dist/tabs.js.map +0 -1
  309. package/dist/tag.js.map +0 -1
  310. package/dist/textarea.js.map +0 -1
  311. package/dist/theme/giddaa.css +0 -2
  312. package/dist/time-picker.js.map +0 -1
  313. package/dist/toast.js.map +0 -1
  314. package/dist/tooltip.js.map +0 -1
  315. 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 };