@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.
Files changed (334) 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.js +5 -35
  10. package/dist/accordion.js.map +1 -1
  11. package/dist/activity-timeline.d.ts +33 -0
  12. package/dist/activity-timeline.js +212 -0
  13. package/dist/activity-timeline.js.map +1 -0
  14. package/dist/alert.js +5 -35
  15. package/dist/alert.js.map +1 -1
  16. package/dist/auth-layout.d.ts +23 -0
  17. package/dist/auth-layout.js +304 -0
  18. package/dist/auth-layout.js.map +1 -0
  19. package/dist/avatar.js +10 -142
  20. package/dist/avatar.js.map +1 -1
  21. package/dist/badge.d.ts +3 -2
  22. package/dist/badge.js +6 -114
  23. package/dist/badge.js.map +1 -1
  24. package/dist/bar-chart.d.ts +101 -77
  25. package/dist/bar-chart.js +142 -220
  26. package/dist/bar-chart.js.map +1 -1
  27. package/dist/breadcrumb.js +5 -35
  28. package/dist/breadcrumb.js.map +1 -1
  29. package/dist/bullet-chart.js +15 -48
  30. package/dist/bullet-chart.js.map +1 -1
  31. package/dist/button-group.js +14 -90
  32. package/dist/button-group.js.map +1 -1
  33. package/dist/button.d.ts +5 -5
  34. package/dist/button.js +7 -140
  35. package/dist/button.js.map +1 -1
  36. package/dist/calendar.js +12 -287
  37. package/dist/calendar.js.map +1 -1
  38. package/dist/card.js +5 -35
  39. package/dist/card.js.map +1 -1
  40. package/dist/carousel.js +12 -386
  41. package/dist/carousel.js.map +1 -1
  42. package/dist/chart.js +16 -480
  43. package/dist/chart.js.map +1 -1
  44. package/dist/checkbox.d.ts +1 -1
  45. package/dist/checkbox.js +13 -48
  46. package/dist/checkbox.js.map +1 -1
  47. package/dist/chunk-322YCNVL.js +278 -0
  48. package/dist/chunk-322YCNVL.js.map +1 -0
  49. package/dist/chunk-3ACQVT7A.js +25 -0
  50. package/dist/chunk-3ACQVT7A.js.map +1 -0
  51. package/dist/chunk-3T65TLJX.js +334 -0
  52. package/dist/chunk-3T65TLJX.js.map +1 -0
  53. package/dist/chunk-6ZSGQHH2.js +192 -0
  54. package/dist/chunk-6ZSGQHH2.js.map +1 -0
  55. package/dist/chunk-7TBMLFGW.js +41 -0
  56. package/dist/chunk-7TBMLFGW.js.map +1 -0
  57. package/dist/chunk-B4H6RNDH.js +135 -0
  58. package/dist/chunk-B4H6RNDH.js.map +1 -0
  59. package/dist/chunk-BUXCGZ6X.js +219 -0
  60. package/dist/chunk-BUXCGZ6X.js.map +1 -0
  61. package/dist/chunk-CHII2QHH.js +58 -0
  62. package/dist/chunk-CHII2QHH.js.map +1 -0
  63. package/dist/chunk-DMNOXRRW.js +147 -0
  64. package/dist/chunk-DMNOXRRW.js.map +1 -0
  65. package/dist/chunk-EFSOSSIC.js +130 -0
  66. package/dist/chunk-EFSOSSIC.js.map +1 -0
  67. package/dist/chunk-FZDSVMKY.js +363 -0
  68. package/dist/chunk-FZDSVMKY.js.map +1 -0
  69. package/dist/chunk-GJOFIJS3.js +246 -0
  70. package/dist/chunk-GJOFIJS3.js.map +1 -0
  71. package/dist/chunk-HL3ZSYES.js +23 -0
  72. package/dist/chunk-HL3ZSYES.js.map +1 -0
  73. package/dist/chunk-JVLUBAPB.js +129 -0
  74. package/dist/chunk-JVLUBAPB.js.map +1 -0
  75. package/dist/chunk-KDPYSOYZ.js +64 -0
  76. package/dist/chunk-KDPYSOYZ.js.map +1 -0
  77. package/dist/chunk-KSMDANKI.js +43 -0
  78. package/dist/chunk-KSMDANKI.js.map +1 -0
  79. package/dist/chunk-MEKCCOP5.js +46 -0
  80. package/dist/chunk-MEKCCOP5.js.map +1 -0
  81. package/dist/chunk-NOFXVRWL.js +451 -0
  82. package/dist/chunk-NOFXVRWL.js.map +1 -0
  83. package/dist/chunk-PC5MHNVA.js +171 -0
  84. package/dist/chunk-PC5MHNVA.js.map +1 -0
  85. package/dist/chunk-QKAQZ2GU.js +122 -0
  86. package/dist/chunk-QKAQZ2GU.js.map +1 -0
  87. package/dist/chunk-QZHSHSVV.js +26 -0
  88. package/dist/chunk-QZHSHSVV.js.map +1 -0
  89. package/dist/chunk-RBMK26XD.js +19 -0
  90. package/dist/chunk-RBMK26XD.js.map +1 -0
  91. package/dist/chunk-SFNJGF6M.js +262 -0
  92. package/dist/chunk-SFNJGF6M.js.map +1 -0
  93. package/dist/chunk-UJJNLGTM.js +112 -0
  94. package/dist/chunk-UJJNLGTM.js.map +1 -0
  95. package/dist/chunk-VGR4ZWJ3.js +418 -0
  96. package/dist/chunk-VGR4ZWJ3.js.map +1 -0
  97. package/dist/chunk-XG47P6D4.js +99 -0
  98. package/dist/chunk-XG47P6D4.js.map +1 -0
  99. package/dist/chunk-XZZAHNVM.js +21 -0
  100. package/dist/chunk-XZZAHNVM.js.map +1 -0
  101. package/dist/chunk-Y4TTYVNE.js +36 -0
  102. package/dist/chunk-Y4TTYVNE.js.map +1 -0
  103. package/dist/chunk-YDWIHW6Q.js +69 -0
  104. package/dist/chunk-YDWIHW6Q.js.map +1 -0
  105. package/dist/collapsible.js +6 -35
  106. package/dist/collapsible.js.map +1 -1
  107. package/dist/combobox.js +26 -694
  108. package/dist/combobox.js.map +1 -1
  109. package/dist/cta.d.ts +66 -0
  110. package/dist/cta.js +358 -0
  111. package/dist/cta.js.map +1 -0
  112. package/dist/currency-selector.d.ts +42 -0
  113. package/dist/currency-selector.js +192 -0
  114. package/dist/currency-selector.js.map +1 -0
  115. package/dist/date-picker.d.ts +18 -10
  116. package/dist/date-picker.js +105 -430
  117. package/dist/date-picker.js.map +1 -1
  118. package/dist/details-card.d.ts +19 -0
  119. package/dist/details-card.js +267 -0
  120. package/dist/details-card.js.map +1 -0
  121. package/dist/dialog.js +36 -146
  122. package/dist/dialog.js.map +1 -1
  123. package/dist/dropdown-menu.d.ts +1 -1
  124. package/dist/dropdown-menu.js +20 -358
  125. package/dist/dropdown-menu.js.map +1 -1
  126. package/dist/dropzone.js +13 -40
  127. package/dist/dropzone.js.map +1 -1
  128. package/dist/editorial-card.d.ts +29 -0
  129. package/dist/editorial-card.js +311 -0
  130. package/dist/editorial-card.js.map +1 -0
  131. package/dist/empty-state.js +5 -35
  132. package/dist/empty-state.js.map +1 -1
  133. package/dist/field.js +30 -135
  134. package/dist/field.js.map +1 -1
  135. package/dist/footer.d.ts +47 -0
  136. package/dist/footer.js +430 -0
  137. package/dist/footer.js.map +1 -0
  138. package/dist/funnel-chart.js +42 -415
  139. package/dist/funnel-chart.js.map +1 -1
  140. package/dist/gallery-indicator.d.ts +18 -0
  141. package/dist/gallery-indicator.js +12 -0
  142. package/dist/gallery-indicator.js.map +1 -0
  143. package/dist/heatmap-chart.d.ts +98 -0
  144. package/dist/heatmap-chart.js +248 -0
  145. package/dist/heatmap-chart.js.map +1 -0
  146. package/dist/infotip.d.ts +11 -0
  147. package/dist/infotip.js +66 -0
  148. package/dist/infotip.js.map +1 -0
  149. package/dist/input-group.d.ts +2 -1
  150. package/dist/input-group.js +15 -371
  151. package/dist/input-group.js.map +1 -1
  152. package/dist/input-size-context.js +5 -19
  153. package/dist/input-size-context.js.map +1 -1
  154. package/dist/input.js +6 -78
  155. package/dist/input.js.map +1 -1
  156. package/dist/item.js +5 -35
  157. package/dist/item.js.map +1 -1
  158. package/dist/kpi-card.js +12 -52
  159. package/dist/kpi-card.js.map +1 -1
  160. package/dist/label.js +5 -64
  161. package/dist/label.js.map +1 -1
  162. package/dist/line-chart.js +9 -166
  163. package/dist/line-chart.js.map +1 -1
  164. package/dist/logo.js +4 -141
  165. package/dist/logo.js.map +1 -1
  166. package/dist/map-indicator.d.ts +13 -0
  167. package/dist/map-indicator.js +109 -0
  168. package/dist/map-indicator.js.map +1 -0
  169. package/dist/match.d.ts +16 -0
  170. package/dist/match.js +113 -0
  171. package/dist/match.js.map +1 -0
  172. package/dist/media-gallery-hero.d.ts +60 -0
  173. package/dist/media-gallery-hero.js +362 -0
  174. package/dist/media-gallery-hero.js.map +1 -0
  175. package/dist/media-player.d.ts +60 -0
  176. package/dist/media-player.js +1394 -0
  177. package/dist/media-player.js.map +1 -0
  178. package/dist/number-input.js +30 -325
  179. package/dist/number-input.js.map +1 -1
  180. package/dist/page-header.js +4 -32
  181. package/dist/page-header.js.map +1 -1
  182. package/dist/pagination.d.ts +1 -0
  183. package/dist/pagination.js +27 -161
  184. package/dist/pagination.js.map +1 -1
  185. package/dist/password-input.d.ts +1 -0
  186. package/dist/password-input.js +21 -319
  187. package/dist/password-input.js.map +1 -1
  188. package/dist/phone-input.d.ts +2 -1
  189. package/dist/phone-input.js +148 -359
  190. package/dist/phone-input.js.map +1 -1
  191. package/dist/photo-gallery.d.ts +1 -1
  192. package/dist/photo-gallery.js +97 -393
  193. package/dist/photo-gallery.js.map +1 -1
  194. package/dist/pie-chart.js +17 -52
  195. package/dist/pie-chart.js.map +1 -1
  196. package/dist/popover.js +13 -158
  197. package/dist/popover.js.map +1 -1
  198. package/dist/price-tag.d.ts +35 -0
  199. package/dist/price-tag.js +178 -0
  200. package/dist/price-tag.js.map +1 -0
  201. package/dist/progress.d.ts +5 -2
  202. package/dist/progress.js +14 -303
  203. package/dist/progress.js.map +1 -1
  204. package/dist/property-listing-card.d.ts +32 -0
  205. package/dist/property-listing-card.js +235 -0
  206. package/dist/property-listing-card.js.map +1 -0
  207. package/dist/radar-chart.d.ts +110 -0
  208. package/dist/radar-chart.js +147 -0
  209. package/dist/radar-chart.js.map +1 -0
  210. package/dist/radio-group.js +15 -50
  211. package/dist/radio-group.js.map +1 -1
  212. package/dist/review-block.d.ts +20 -0
  213. package/dist/review-block.js +10 -0
  214. package/dist/review-block.js.map +1 -0
  215. package/dist/rich-text-editor.js +172 -433
  216. package/dist/rich-text-editor.js.map +1 -1
  217. package/dist/scatter-chart.d.ts +142 -0
  218. package/dist/scatter-chart.js +252 -0
  219. package/dist/scatter-chart.js.map +1 -0
  220. package/dist/search-input.d.ts +1 -0
  221. package/dist/search-input.js +22 -320
  222. package/dist/search-input.js.map +1 -1
  223. package/dist/select.js +15 -292
  224. package/dist/select.js.map +1 -1
  225. package/dist/separator.js +5 -68
  226. package/dist/separator.js.map +1 -1
  227. package/dist/sheet.js +14 -271
  228. package/dist/sheet.js.map +1 -1
  229. package/dist/sidebar.d.ts +1 -1
  230. package/dist/sidebar.js +89 -494
  231. package/dist/sidebar.js.map +1 -1
  232. package/dist/size-context.js +5 -17
  233. package/dist/size-context.js.map +1 -1
  234. package/dist/skeleton.js +4 -44
  235. package/dist/skeleton.js.map +1 -1
  236. package/dist/slider.d.ts +28 -0
  237. package/dist/slider.js +152 -0
  238. package/dist/slider.js.map +1 -0
  239. package/dist/sparkline.js +33 -341
  240. package/dist/sparkline.js.map +1 -1
  241. package/dist/stepper.js +5 -35
  242. package/dist/stepper.js.map +1 -1
  243. package/dist/styles.css +9593 -2
  244. package/dist/switch.js +13 -48
  245. package/dist/switch.js.map +1 -1
  246. package/dist/tab-list.js +35 -306
  247. package/dist/tab-list.js.map +1 -1
  248. package/dist/table.js +5 -32
  249. package/dist/table.js.map +1 -1
  250. package/dist/tabs.js +10 -150
  251. package/dist/tabs.js.map +1 -1
  252. package/dist/tag.d.ts +7 -6
  253. package/dist/tag.js +101 -97
  254. package/dist/tag.js.map +1 -1
  255. package/dist/testimonial-block.d.ts +34 -0
  256. package/dist/testimonial-block.js +377 -0
  257. package/dist/testimonial-block.js.map +1 -0
  258. package/dist/textarea.js +6 -73
  259. package/dist/textarea.js.map +1 -1
  260. package/dist/time-picker.js +119 -279
  261. package/dist/time-picker.js.map +1 -1
  262. package/dist/toast.js +27 -132
  263. package/dist/toast.js.map +1 -1
  264. package/dist/tooltip.d.ts +5 -5
  265. package/dist/tooltip.js +7 -90
  266. package/dist/tooltip.js.map +1 -1
  267. package/dist/tree-map.js +41 -414
  268. package/dist/tree-map.js.map +1 -1
  269. package/dist/waterfall-chart.d.ts +129 -0
  270. package/dist/waterfall-chart.js +577 -0
  271. package/dist/waterfall-chart.js.map +1 -0
  272. package/package.json +98 -28
  273. package/dist/base.css +0 -32
  274. package/dist/files/red-hat-display-latin-300-italic.woff +0 -0
  275. package/dist/files/red-hat-display-latin-300-italic.woff2 +0 -0
  276. package/dist/files/red-hat-display-latin-300-normal.woff +0 -0
  277. package/dist/files/red-hat-display-latin-300-normal.woff2 +0 -0
  278. package/dist/files/red-hat-display-latin-400-italic.woff +0 -0
  279. package/dist/files/red-hat-display-latin-400-italic.woff2 +0 -0
  280. package/dist/files/red-hat-display-latin-400-normal.woff +0 -0
  281. package/dist/files/red-hat-display-latin-400-normal.woff2 +0 -0
  282. package/dist/files/red-hat-display-latin-500-italic.woff +0 -0
  283. package/dist/files/red-hat-display-latin-500-italic.woff2 +0 -0
  284. package/dist/files/red-hat-display-latin-500-normal.woff +0 -0
  285. package/dist/files/red-hat-display-latin-500-normal.woff2 +0 -0
  286. package/dist/files/red-hat-display-latin-600-italic.woff +0 -0
  287. package/dist/files/red-hat-display-latin-600-italic.woff2 +0 -0
  288. package/dist/files/red-hat-display-latin-600-normal.woff +0 -0
  289. package/dist/files/red-hat-display-latin-600-normal.woff2 +0 -0
  290. package/dist/files/red-hat-display-latin-700-italic.woff +0 -0
  291. package/dist/files/red-hat-display-latin-700-italic.woff2 +0 -0
  292. package/dist/files/red-hat-display-latin-700-normal.woff +0 -0
  293. package/dist/files/red-hat-display-latin-700-normal.woff2 +0 -0
  294. package/dist/files/red-hat-display-latin-800-italic.woff +0 -0
  295. package/dist/files/red-hat-display-latin-800-italic.woff2 +0 -0
  296. package/dist/files/red-hat-display-latin-800-normal.woff +0 -0
  297. package/dist/files/red-hat-display-latin-800-normal.woff2 +0 -0
  298. package/dist/files/red-hat-display-latin-900-italic.woff +0 -0
  299. package/dist/files/red-hat-display-latin-900-italic.woff2 +0 -0
  300. package/dist/files/red-hat-display-latin-900-normal.woff +0 -0
  301. package/dist/files/red-hat-display-latin-900-normal.woff2 +0 -0
  302. package/dist/files/red-hat-display-latin-ext-300-italic.woff +0 -0
  303. package/dist/files/red-hat-display-latin-ext-300-italic.woff2 +0 -0
  304. package/dist/files/red-hat-display-latin-ext-300-normal.woff +0 -0
  305. package/dist/files/red-hat-display-latin-ext-300-normal.woff2 +0 -0
  306. package/dist/files/red-hat-display-latin-ext-400-italic.woff +0 -0
  307. package/dist/files/red-hat-display-latin-ext-400-italic.woff2 +0 -0
  308. package/dist/files/red-hat-display-latin-ext-400-normal.woff +0 -0
  309. package/dist/files/red-hat-display-latin-ext-400-normal.woff2 +0 -0
  310. package/dist/files/red-hat-display-latin-ext-500-italic.woff +0 -0
  311. package/dist/files/red-hat-display-latin-ext-500-italic.woff2 +0 -0
  312. package/dist/files/red-hat-display-latin-ext-500-normal.woff +0 -0
  313. package/dist/files/red-hat-display-latin-ext-500-normal.woff2 +0 -0
  314. package/dist/files/red-hat-display-latin-ext-600-italic.woff +0 -0
  315. package/dist/files/red-hat-display-latin-ext-600-italic.woff2 +0 -0
  316. package/dist/files/red-hat-display-latin-ext-600-normal.woff +0 -0
  317. package/dist/files/red-hat-display-latin-ext-600-normal.woff2 +0 -0
  318. package/dist/files/red-hat-display-latin-ext-700-italic.woff +0 -0
  319. package/dist/files/red-hat-display-latin-ext-700-italic.woff2 +0 -0
  320. package/dist/files/red-hat-display-latin-ext-700-normal.woff +0 -0
  321. package/dist/files/red-hat-display-latin-ext-700-normal.woff2 +0 -0
  322. package/dist/files/red-hat-display-latin-ext-800-italic.woff +0 -0
  323. package/dist/files/red-hat-display-latin-ext-800-italic.woff2 +0 -0
  324. package/dist/files/red-hat-display-latin-ext-800-normal.woff +0 -0
  325. package/dist/files/red-hat-display-latin-ext-800-normal.woff2 +0 -0
  326. package/dist/files/red-hat-display-latin-ext-900-italic.woff +0 -0
  327. package/dist/files/red-hat-display-latin-ext-900-italic.woff2 +0 -0
  328. package/dist/files/red-hat-display-latin-ext-900-normal.woff +0 -0
  329. package/dist/files/red-hat-display-latin-ext-900-normal.woff2 +0 -0
  330. package/dist/index.d.ts +0 -87
  331. package/dist/index.js +0 -10448
  332. package/dist/index.js.map +0 -1
  333. package/dist/red-hat-display.css +0 -2
  334. package/dist/theme/giddaa.css +0 -2
@@ -0,0 +1,362 @@
1
+ "use client";
2
+ import {
3
+ ReviewBlock
4
+ } from "./chunk-BUXCGZ6X.js";
5
+ import {
6
+ GalleryIndicator
7
+ } from "./chunk-UJJNLGTM.js";
8
+ import {
9
+ buttonVariants
10
+ } from "./chunk-B4H6RNDH.js";
11
+ import {
12
+ Carousel,
13
+ CarouselContent,
14
+ CarouselItem,
15
+ useCarousel
16
+ } from "./chunk-FZDSVMKY.js";
17
+ import "./chunk-HL3ZSYES.js";
18
+ import {
19
+ cn
20
+ } from "./chunk-Y4TTYVNE.js";
21
+
22
+ // src/media-gallery-hero.tsx
23
+ import { cva } from "class-variance-authority";
24
+ import { Play } from "lucide-react";
25
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
26
+ var mediaGalleryHeroVariants = cva(
27
+ "relative isolate h-[350px] w-full overflow-hidden rounded-[32px] bg-surface-raised md:h-[380px] md:rounded-[40px] lg:h-[480px]"
28
+ );
29
+ var mediaGalleryImagesVariants = cva(
30
+ "absolute inset-0 z-0 hidden size-full min-h-0 min-w-0 bg-surface-raised md:grid",
31
+ {
32
+ variants: {
33
+ imageCount: {
34
+ 1: "",
35
+ 2: "gap-2 grid-cols-[minmax(0,3fr)_minmax(0,2fr)]",
36
+ 3: "gap-2 grid-cols-[minmax(0,3fr)_minmax(0,2fr)] grid-rows-2",
37
+ 4: "gap-2 grid-cols-[minmax(0,2fr)_minmax(0,1fr)_minmax(0,1fr)] grid-rows-2"
38
+ }
39
+ },
40
+ defaultVariants: {
41
+ imageCount: 4
42
+ }
43
+ }
44
+ );
45
+ function MediaGalleryHero({ className, ...props }) {
46
+ return /* @__PURE__ */ jsx(
47
+ "div",
48
+ {
49
+ className: cn(mediaGalleryHeroVariants(), className),
50
+ "data-slot": "media-gallery-hero",
51
+ ...props
52
+ }
53
+ );
54
+ }
55
+ function getVisibleImages(images, imageCount) {
56
+ if (images.length === 0) {
57
+ return [{}];
58
+ }
59
+ return images.slice(0, imageCount);
60
+ }
61
+ function getTileClassName(index, imageCount) {
62
+ if (index === 0) {
63
+ return "md:col-start-1 md:row-span-2";
64
+ }
65
+ if (imageCount === 2 && index === 1) {
66
+ return "md:col-start-2 md:row-span-2";
67
+ }
68
+ if (imageCount === 3 && index === 1) {
69
+ return "md:col-start-2 md:row-start-1";
70
+ }
71
+ if (imageCount === 3 && index === 2) {
72
+ return "md:col-start-2 md:row-start-2";
73
+ }
74
+ if (imageCount === 4 && index === 1) {
75
+ return "md:col-start-2 md:row-span-2";
76
+ }
77
+ if (imageCount === 4 && index === 2) {
78
+ return "md:col-start-3 md:row-start-1";
79
+ }
80
+ return "md:col-start-3 md:row-start-2";
81
+ }
82
+ function getMediaKey(image) {
83
+ return image.id ?? image.src ?? image.alt ?? "placeholder";
84
+ }
85
+ function MediaGalleryTile({
86
+ className,
87
+ image,
88
+ index,
89
+ isDesktopTile,
90
+ onMediaClick,
91
+ renderMedia
92
+ }) {
93
+ const content = renderMedia?.(image, index) ?? (image.src ? /* @__PURE__ */ jsx(
94
+ "img",
95
+ {
96
+ alt: image.alt ?? "",
97
+ className: "size-full object-cover",
98
+ draggable: false,
99
+ src: image.src
100
+ }
101
+ ) : /* @__PURE__ */ jsx("span", { className: "text-gdt-sm font-medium text-fg-caption-placeholder", children: "Media" }));
102
+ const tileClassName = cn(
103
+ "relative flex size-full min-h-0 min-w-0 items-center justify-center overflow-hidden rounded-[32px] bg-surface-raised md:rounded-[40px]",
104
+ "[&>img]:size-full [&>img]:object-cover",
105
+ isDesktopTile && "hidden md:flex",
106
+ className
107
+ );
108
+ if (!onMediaClick) {
109
+ return /* @__PURE__ */ jsx("div", { className: tileClassName, "data-slot": "media-gallery-tile", children: content });
110
+ }
111
+ return /* @__PURE__ */ jsx(
112
+ "button",
113
+ {
114
+ "aria-label": `Open media ${index + 1}`,
115
+ className: cn(tileClassName, "cursor-pointer text-left"),
116
+ "data-slot": "media-gallery-tile",
117
+ onClick: () => onMediaClick(index),
118
+ type: "button",
119
+ children: content
120
+ }
121
+ );
122
+ }
123
+ function MobileGalleryCounter({ total }) {
124
+ const { selectedIndex } = useCarousel();
125
+ return /* @__PURE__ */ jsx(
126
+ GalleryIndicator,
127
+ {
128
+ currentPhoto: selectedIndex + 1,
129
+ size: "sm",
130
+ totalPhotos: total
131
+ }
132
+ );
133
+ }
134
+ function MobileMediaCarousel({
135
+ currentMedia,
136
+ images,
137
+ mediaTotal,
138
+ onMediaClick,
139
+ renderMedia,
140
+ showMobileIndicator
141
+ }) {
142
+ const carouselImages = images.length > 0 ? images : [{}];
143
+ return /* @__PURE__ */ jsxs(
144
+ Carousel,
145
+ {
146
+ className: "absolute inset-0 z-0 block size-full rounded-[32px] bg-surface-raised md:hidden",
147
+ imageSize: "full",
148
+ opts: {
149
+ align: "start",
150
+ loop: carouselImages.length > 1,
151
+ startIndex: Math.max(0, currentMedia - 1)
152
+ },
153
+ children: [
154
+ /* @__PURE__ */ jsx(CarouselContent, { children: carouselImages.map((image, index) => /* @__PURE__ */ jsx(CarouselItem, { className: "h-full", children: /* @__PURE__ */ jsx(
155
+ MediaGalleryTile,
156
+ {
157
+ className: "rounded-[32px]",
158
+ image,
159
+ index,
160
+ onMediaClick,
161
+ renderMedia
162
+ }
163
+ ) }, getMediaKey(image))) }),
164
+ showMobileIndicator ? /* @__PURE__ */ jsx("div", { className: "absolute right-4 bottom-4 z-10", children: /* @__PURE__ */ jsx(MobileGalleryCounter, { total: mediaTotal }) }) : null
165
+ ]
166
+ }
167
+ );
168
+ }
169
+ function MediaGalleryImages({
170
+ className,
171
+ currentMedia = 1,
172
+ imageCount = 4,
173
+ images,
174
+ onMediaClick,
175
+ renderMedia,
176
+ showMobileIndicator = true,
177
+ totalMediaCount,
178
+ ...props
179
+ }) {
180
+ const resolvedImageCount = imageCount ?? 4;
181
+ const mediaTotal = totalMediaCount ?? Math.max(images.length, 1);
182
+ const visibleImages = getVisibleImages(images, resolvedImageCount);
183
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
184
+ /* @__PURE__ */ jsx(
185
+ MobileMediaCarousel,
186
+ {
187
+ currentMedia,
188
+ images,
189
+ mediaTotal,
190
+ onMediaClick,
191
+ renderMedia,
192
+ showMobileIndicator
193
+ }
194
+ ),
195
+ /* @__PURE__ */ jsx(
196
+ "div",
197
+ {
198
+ className: cn(
199
+ mediaGalleryImagesVariants({ imageCount: resolvedImageCount }),
200
+ className
201
+ ),
202
+ "data-image-count": resolvedImageCount,
203
+ "data-slot": "media-gallery-images",
204
+ ...props,
205
+ children: visibleImages.map((image, index) => /* @__PURE__ */ jsx(
206
+ MediaGalleryTile,
207
+ {
208
+ className: getTileClassName(index, resolvedImageCount),
209
+ image,
210
+ index,
211
+ isDesktopTile: true,
212
+ onMediaClick,
213
+ renderMedia
214
+ },
215
+ getMediaKey(image)
216
+ ))
217
+ }
218
+ )
219
+ ] });
220
+ }
221
+ function MediaGalleryVideo({
222
+ alt = "",
223
+ autoPlay,
224
+ className,
225
+ controls,
226
+ label = "Play Video",
227
+ loop,
228
+ muted,
229
+ onPlayClick,
230
+ playsInline = true,
231
+ poster,
232
+ renderMedia,
233
+ src,
234
+ ...props
235
+ }) {
236
+ const content = renderMedia?.() ?? (src ? /* @__PURE__ */ jsx(
237
+ "video",
238
+ {
239
+ autoPlay,
240
+ className: "size-full object-cover",
241
+ controls,
242
+ loop,
243
+ muted,
244
+ playsInline,
245
+ poster,
246
+ src
247
+ }
248
+ ) : poster ? /* @__PURE__ */ jsx(
249
+ "img",
250
+ {
251
+ alt,
252
+ className: "size-full object-cover",
253
+ draggable: false,
254
+ src: poster
255
+ }
256
+ ) : /* @__PURE__ */ jsx("span", { className: "text-gdt-sm font-medium text-fg-caption-placeholder", children: "Video" }));
257
+ return /* @__PURE__ */ jsxs(
258
+ "div",
259
+ {
260
+ className: cn(
261
+ "absolute inset-0 z-0 flex size-full items-center justify-center overflow-hidden rounded-[32px] bg-surface-raised md:rounded-[40px]",
262
+ "[&>img]:size-full [&>img]:object-cover [&>video]:size-full [&>video]:object-cover",
263
+ className
264
+ ),
265
+ "data-slot": "media-gallery-video",
266
+ ...props,
267
+ children: [
268
+ content,
269
+ controls ? null : /* @__PURE__ */ jsx(
270
+ "button",
271
+ {
272
+ "aria-label": label,
273
+ className: cn(
274
+ buttonVariants({
275
+ variant: "glass-overlay",
276
+ size: "icon-xl"
277
+ }),
278
+ "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"
279
+ ),
280
+ "data-slot": "media-gallery-video-play",
281
+ onClick: onPlayClick,
282
+ type: "button",
283
+ children: /* @__PURE__ */ jsx(Play, { "aria-hidden": "true", className: "ml-0.5", fill: "currentColor" })
284
+ }
285
+ )
286
+ ]
287
+ }
288
+ );
289
+ }
290
+ function MediaGalleryReview({
291
+ bordered = false,
292
+ className,
293
+ size = "xs",
294
+ ...props
295
+ }) {
296
+ return /* @__PURE__ */ jsx(
297
+ ReviewBlock,
298
+ {
299
+ bordered,
300
+ className: cn("absolute top-4 left-4 z-10", className),
301
+ size,
302
+ ...props
303
+ }
304
+ );
305
+ }
306
+ function MediaGalleryIndicator({
307
+ "aria-label": ariaLabel,
308
+ className,
309
+ label,
310
+ onClick,
311
+ size = "md",
312
+ totalMediaCount = 35,
313
+ ...props
314
+ }) {
315
+ const indicatorLabel = label ?? `View All ${totalMediaCount.toLocaleString()} Photos`;
316
+ if (onClick) {
317
+ return /* @__PURE__ */ jsx(
318
+ "button",
319
+ {
320
+ "aria-label": ariaLabel ?? indicatorLabel,
321
+ className: cn(
322
+ "absolute right-4 bottom-4 z-10 hidden rounded-full md:block",
323
+ className
324
+ ),
325
+ "data-slot": "media-gallery-indicator",
326
+ onClick,
327
+ type: "button",
328
+ ...props,
329
+ children: /* @__PURE__ */ jsx(
330
+ GalleryIndicator,
331
+ {
332
+ "aria-hidden": "true",
333
+ label: indicatorLabel,
334
+ size
335
+ }
336
+ )
337
+ }
338
+ );
339
+ }
340
+ return /* @__PURE__ */ jsx(
341
+ "div",
342
+ {
343
+ className: cn(
344
+ "absolute right-4 bottom-4 z-10 hidden md:block",
345
+ className
346
+ ),
347
+ "data-slot": "media-gallery-indicator",
348
+ children: /* @__PURE__ */ jsx(GalleryIndicator, { label: indicatorLabel, size })
349
+ }
350
+ );
351
+ }
352
+ export {
353
+ MediaGalleryHero,
354
+ MediaGalleryImages,
355
+ MediaGalleryIndicator,
356
+ MediaGalleryReview,
357
+ MediaGalleryTile,
358
+ MediaGalleryVideo,
359
+ mediaGalleryHeroVariants,
360
+ mediaGalleryImagesVariants
361
+ };
362
+ //# sourceMappingURL=media-gallery-hero.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/media-gallery-hero.tsx"],"sourcesContent":["\"use client\";\n\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Play } from \"lucide-react\";\nimport type * as React from \"react\";\n\nimport { buttonVariants } from \"./button\";\nimport {\n\tCarousel,\n\tCarouselContent,\n\tCarouselItem,\n\tuseCarousel,\n} from \"./carousel\";\nimport { GalleryIndicator } from \"./gallery-indicator\";\nimport { cn } from \"./lib/cn\";\nimport { ReviewBlock, type ReviewBlockProps } from \"./review-block\";\n\nconst mediaGalleryHeroVariants = cva(\n\t\"relative isolate h-[350px] w-full overflow-hidden rounded-[32px] bg-surface-raised md:h-[380px] md:rounded-[40px] lg:h-[480px]\",\n);\n\nconst mediaGalleryImagesVariants = cva(\n\t\"absolute inset-0 z-0 hidden size-full min-h-0 min-w-0 bg-surface-raised md:grid\",\n\t{\n\t\tvariants: {\n\t\t\timageCount: {\n\t\t\t\t1: \"\",\n\t\t\t\t2: \"gap-2 grid-cols-[minmax(0,3fr)_minmax(0,2fr)]\",\n\t\t\t\t3: \"gap-2 grid-cols-[minmax(0,3fr)_minmax(0,2fr)] grid-rows-2\",\n\t\t\t\t4: \"gap-2 grid-cols-[minmax(0,2fr)_minmax(0,1fr)_minmax(0,1fr)] grid-rows-2\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\timageCount: 4,\n\t\t},\n\t},\n);\n\ntype MediaGalleryHeroProps = React.ComponentProps<\"div\"> &\n\tVariantProps<typeof mediaGalleryHeroVariants>;\n\ntype MediaGalleryImageCount = 1 | 2 | 3 | 4;\n\ntype MediaGalleryItem = {\n\tid?: string;\n\tsrc?: string;\n\talt?: string;\n\ttype?: \"image\" | \"video\";\n};\n\ntype MediaGalleryImagesProps = Omit<React.ComponentProps<\"div\">, \"children\"> &\n\tVariantProps<typeof mediaGalleryImagesVariants> & {\n\t\timages: MediaGalleryItem[];\n\t\tcurrentMedia?: number;\n\t\ttotalMediaCount?: number;\n\t\tshowMobileIndicator?: boolean;\n\t\tonMediaClick?: (index: number) => void;\n\t\trenderMedia?: (image: MediaGalleryItem, index: number) => React.ReactNode;\n\t};\n\ntype MediaGalleryVideoProps = Omit<React.ComponentProps<\"div\">, \"children\"> & {\n\tsrc?: string;\n\tposter?: string;\n\talt?: string;\n\tlabel?: string;\n\tautoPlay?: boolean;\n\tcontrols?: boolean;\n\tloop?: boolean;\n\tmuted?: boolean;\n\tplaysInline?: boolean;\n\tonPlayClick?: React.MouseEventHandler<HTMLButtonElement>;\n\trenderMedia?: () => React.ReactNode;\n};\n\ntype MediaGalleryReviewProps = ReviewBlockProps;\n\ntype MediaGalleryIndicatorProps = Omit<\n\tReact.ComponentProps<\"button\">,\n\t\"children\"\n> & {\n\tlabel?: string;\n\ttotalMediaCount?: number;\n\tsize?: \"sm\" | \"md\" | \"lg\";\n};\n\nfunction MediaGalleryHero({ className, ...props }: MediaGalleryHeroProps) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(mediaGalleryHeroVariants(), className)}\n\t\t\tdata-slot=\"media-gallery-hero\"\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction getVisibleImages(\n\timages: MediaGalleryItem[],\n\timageCount: MediaGalleryImageCount,\n) {\n\tif (images.length === 0) {\n\t\treturn [{}] satisfies MediaGalleryItem[];\n\t}\n\n\treturn images.slice(0, imageCount);\n}\n\nfunction getTileClassName(index: number, imageCount: MediaGalleryImageCount) {\n\tif (index === 0) {\n\t\treturn \"md:col-start-1 md:row-span-2\";\n\t}\n\n\tif (imageCount === 2 && index === 1) {\n\t\treturn \"md:col-start-2 md:row-span-2\";\n\t}\n\n\tif (imageCount === 3 && index === 1) {\n\t\treturn \"md:col-start-2 md:row-start-1\";\n\t}\n\n\tif (imageCount === 3 && index === 2) {\n\t\treturn \"md:col-start-2 md:row-start-2\";\n\t}\n\n\tif (imageCount === 4 && index === 1) {\n\t\treturn \"md:col-start-2 md:row-span-2\";\n\t}\n\n\tif (imageCount === 4 && index === 2) {\n\t\treturn \"md:col-start-3 md:row-start-1\";\n\t}\n\n\treturn \"md:col-start-3 md:row-start-2\";\n}\n\nfunction getMediaKey(image: MediaGalleryItem) {\n\treturn image.id ?? image.src ?? image.alt ?? \"placeholder\";\n}\n\nfunction MediaGalleryTile({\n\tclassName,\n\timage,\n\tindex,\n\tisDesktopTile,\n\tonMediaClick,\n\trenderMedia,\n}: {\n\tclassName?: string;\n\timage: MediaGalleryItem;\n\tindex: number;\n\tisDesktopTile?: boolean;\n\tonMediaClick?: (index: number) => void;\n\trenderMedia?: (image: MediaGalleryItem, index: number) => React.ReactNode;\n}) {\n\tconst content =\n\t\trenderMedia?.(image, index) ??\n\t\t(image.src ? (\n\t\t\t<img\n\t\t\t\talt={image.alt ?? \"\"}\n\t\t\t\tclassName=\"size-full object-cover\"\n\t\t\t\tdraggable={false}\n\t\t\t\tsrc={image.src}\n\t\t\t/>\n\t\t) : (\n\t\t\t<span className=\"text-gdt-sm font-medium text-fg-caption-placeholder\">\n\t\t\t\tMedia\n\t\t\t</span>\n\t\t));\n\n\tconst tileClassName = cn(\n\t\t\"relative flex size-full min-h-0 min-w-0 items-center justify-center overflow-hidden rounded-[32px] bg-surface-raised md:rounded-[40px]\",\n\t\t\"[&>img]:size-full [&>img]:object-cover\",\n\t\tisDesktopTile && \"hidden md:flex\",\n\t\tclassName,\n\t);\n\n\tif (!onMediaClick) {\n\t\treturn (\n\t\t\t<div className={tileClassName} data-slot=\"media-gallery-tile\">\n\t\t\t\t{content}\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<button\n\t\t\taria-label={`Open media ${index + 1}`}\n\t\t\tclassName={cn(tileClassName, \"cursor-pointer text-left\")}\n\t\t\tdata-slot=\"media-gallery-tile\"\n\t\t\tonClick={() => onMediaClick(index)}\n\t\t\ttype=\"button\"\n\t\t>\n\t\t\t{content}\n\t\t</button>\n\t);\n}\n\nfunction MobileGalleryCounter({ total }: { total: number }) {\n\tconst { selectedIndex } = useCarousel();\n\n\treturn (\n\t\t<GalleryIndicator\n\t\t\tcurrentPhoto={selectedIndex + 1}\n\t\t\tsize=\"sm\"\n\t\t\ttotalPhotos={total}\n\t\t/>\n\t);\n}\n\nfunction MobileMediaCarousel({\n\tcurrentMedia,\n\timages,\n\tmediaTotal,\n\tonMediaClick,\n\trenderMedia,\n\tshowMobileIndicator,\n}: {\n\tcurrentMedia: number;\n\timages: MediaGalleryItem[];\n\tmediaTotal: number;\n\tonMediaClick?: (index: number) => void;\n\trenderMedia?: (image: MediaGalleryItem, index: number) => React.ReactNode;\n\tshowMobileIndicator: boolean;\n}) {\n\tconst carouselImages =\n\t\timages.length > 0 ? images : ([{}] satisfies MediaGalleryItem[]);\n\n\treturn (\n\t\t<Carousel\n\t\t\tclassName=\"absolute inset-0 z-0 block size-full rounded-[32px] bg-surface-raised md:hidden\"\n\t\t\timageSize=\"full\"\n\t\t\topts={{\n\t\t\t\talign: \"start\",\n\t\t\t\tloop: carouselImages.length > 1,\n\t\t\t\tstartIndex: Math.max(0, currentMedia - 1),\n\t\t\t}}\n\t\t>\n\t\t\t<CarouselContent>\n\t\t\t\t{carouselImages.map((image, index) => (\n\t\t\t\t\t<CarouselItem className=\"h-full\" key={getMediaKey(image)}>\n\t\t\t\t\t\t<MediaGalleryTile\n\t\t\t\t\t\t\tclassName=\"rounded-[32px]\"\n\t\t\t\t\t\t\timage={image}\n\t\t\t\t\t\t\tindex={index}\n\t\t\t\t\t\t\tonMediaClick={onMediaClick}\n\t\t\t\t\t\t\trenderMedia={renderMedia}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</CarouselItem>\n\t\t\t\t))}\n\t\t\t</CarouselContent>\n\t\t\t{showMobileIndicator ? (\n\t\t\t\t<div className=\"absolute right-4 bottom-4 z-10\">\n\t\t\t\t\t<MobileGalleryCounter total={mediaTotal} />\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t</Carousel>\n\t);\n}\n\nfunction MediaGalleryImages({\n\tclassName,\n\tcurrentMedia = 1,\n\timageCount = 4,\n\timages,\n\tonMediaClick,\n\trenderMedia,\n\tshowMobileIndicator = true,\n\ttotalMediaCount,\n\t...props\n}: MediaGalleryImagesProps) {\n\tconst resolvedImageCount = imageCount ?? 4;\n\tconst mediaTotal = totalMediaCount ?? Math.max(images.length, 1);\n\tconst visibleImages = getVisibleImages(images, resolvedImageCount);\n\n\treturn (\n\t\t<>\n\t\t\t<MobileMediaCarousel\n\t\t\t\tcurrentMedia={currentMedia}\n\t\t\t\timages={images}\n\t\t\t\tmediaTotal={mediaTotal}\n\t\t\t\tonMediaClick={onMediaClick}\n\t\t\t\trenderMedia={renderMedia}\n\t\t\t\tshowMobileIndicator={showMobileIndicator}\n\t\t\t/>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\tmediaGalleryImagesVariants({ imageCount: resolvedImageCount }),\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tdata-image-count={resolvedImageCount}\n\t\t\t\tdata-slot=\"media-gallery-images\"\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{visibleImages.map((image, index) => (\n\t\t\t\t\t<MediaGalleryTile\n\t\t\t\t\t\tclassName={getTileClassName(index, resolvedImageCount)}\n\t\t\t\t\t\timage={image}\n\t\t\t\t\t\tindex={index}\n\t\t\t\t\t\tisDesktopTile\n\t\t\t\t\t\tkey={getMediaKey(image)}\n\t\t\t\t\t\tonMediaClick={onMediaClick}\n\t\t\t\t\t\trenderMedia={renderMedia}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t</>\n\t);\n}\n\nfunction MediaGalleryVideo({\n\talt = \"\",\n\tautoPlay,\n\tclassName,\n\tcontrols,\n\tlabel = \"Play Video\",\n\tloop,\n\tmuted,\n\tonPlayClick,\n\tplaysInline = true,\n\tposter,\n\trenderMedia,\n\tsrc,\n\t...props\n}: MediaGalleryVideoProps) {\n\tconst content =\n\t\trenderMedia?.() ??\n\t\t(src ? (\n\t\t\t<video\n\t\t\t\tautoPlay={autoPlay}\n\t\t\t\tclassName=\"size-full object-cover\"\n\t\t\t\tcontrols={controls}\n\t\t\t\tloop={loop}\n\t\t\t\tmuted={muted}\n\t\t\t\tplaysInline={playsInline}\n\t\t\t\tposter={poster}\n\t\t\t\tsrc={src}\n\t\t\t/>\n\t\t) : poster ? (\n\t\t\t<img\n\t\t\t\talt={alt}\n\t\t\t\tclassName=\"size-full object-cover\"\n\t\t\t\tdraggable={false}\n\t\t\t\tsrc={poster}\n\t\t\t/>\n\t\t) : (\n\t\t\t<span className=\"text-gdt-sm font-medium text-fg-caption-placeholder\">\n\t\t\t\tVideo\n\t\t\t</span>\n\t\t));\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"absolute inset-0 z-0 flex size-full items-center justify-center overflow-hidden rounded-[32px] bg-surface-raised md:rounded-[40px]\",\n\t\t\t\t\"[&>img]:size-full [&>img]:object-cover [&>video]:size-full [&>video]:object-cover\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tdata-slot=\"media-gallery-video\"\n\t\t\t{...props}\n\t\t>\n\t\t\t{content}\n\t\t\t{controls ? null : (\n\t\t\t\t<button\n\t\t\t\t\taria-label={label}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\tbuttonVariants({\n\t\t\t\t\t\t\tvariant: \"glass-overlay\",\n\t\t\t\t\t\t\tsize: \"icon-xl\",\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t\"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\",\n\t\t\t\t\t)}\n\t\t\t\t\tdata-slot=\"media-gallery-video-play\"\n\t\t\t\t\tonClick={onPlayClick}\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t>\n\t\t\t\t\t<Play aria-hidden=\"true\" className=\"ml-0.5\" fill=\"currentColor\" />\n\t\t\t\t</button>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nfunction MediaGalleryReview({\n\tbordered = false,\n\tclassName,\n\tsize = \"xs\",\n\t...props\n}: MediaGalleryReviewProps) {\n\treturn (\n\t\t<ReviewBlock\n\t\t\tbordered={bordered}\n\t\t\tclassName={cn(\"absolute top-4 left-4 z-10\", className)}\n\t\t\tsize={size}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction MediaGalleryIndicator({\n\t\"aria-label\": ariaLabel,\n\tclassName,\n\tlabel,\n\tonClick,\n\tsize = \"md\",\n\ttotalMediaCount = 35,\n\t...props\n}: MediaGalleryIndicatorProps) {\n\tconst indicatorLabel =\n\t\tlabel ?? `View All ${totalMediaCount.toLocaleString()} Photos`;\n\n\tif (onClick) {\n\t\treturn (\n\t\t\t<button\n\t\t\t\taria-label={ariaLabel ?? indicatorLabel}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"absolute right-4 bottom-4 z-10 hidden rounded-full md:block\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tdata-slot=\"media-gallery-indicator\"\n\t\t\t\tonClick={onClick}\n\t\t\t\ttype=\"button\"\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<GalleryIndicator\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tlabel={indicatorLabel}\n\t\t\t\t\tsize={size}\n\t\t\t\t/>\n\t\t\t</button>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"absolute right-4 bottom-4 z-10 hidden md:block\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tdata-slot=\"media-gallery-indicator\"\n\t\t>\n\t\t\t<GalleryIndicator label={indicatorLabel} size={size} />\n\t\t</div>\n\t);\n}\n\nexport {\n\tMediaGalleryHero,\n\tMediaGalleryImages,\n\tMediaGalleryIndicator,\n\tMediaGalleryReview,\n\tMediaGalleryTile,\n\tMediaGalleryVideo,\n\tmediaGalleryHeroVariants,\n\tmediaGalleryImagesVariants,\n};\nexport type {\n\tMediaGalleryHeroProps,\n\tMediaGalleryImageCount,\n\tMediaGalleryImagesProps,\n\tMediaGalleryIndicatorProps,\n\tMediaGalleryItem,\n\tMediaGalleryReviewProps,\n\tMediaGalleryVideoProps,\n};\n"],"mappings":"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","names":[]}
@@ -0,0 +1,60 @@
1
+ import { Slider } from '@base-ui/react/slider';
2
+ import { MediaProvider } from 'media-chrome/react/media-store';
3
+ import * as React from 'react';
4
+
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
+
60
+ export { MediaPlayer, MediaPlayerAudio, MediaPlayerCaptions, MediaPlayerControls, MediaPlayerControlsOverlay, MediaPlayerError, MediaPlayerFullscreen, MediaPlayerLoop, MediaPlayerPiP, MediaPlayerPlay, MediaPlayerPlaybackSpeed, MediaPlayerSeek, MediaPlayerSeekBackward, MediaPlayerSeekForward, MediaPlayerSettings, MediaPlayerTime, MediaPlayerVideo, MediaPlayerVolume };