@giddaa-housing/ui 1.0.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 (326) hide show
  1. package/css/generated/shared.css +1 -1
  2. package/dist/accordion.d.ts +9 -10
  3. package/dist/accordion.js +41 -87
  4. package/dist/activity-timeline.d.ts +12 -16
  5. package/dist/activity-timeline.js +83 -198
  6. package/dist/alert.d.ts +8 -9
  7. package/dist/alert.js +53 -111
  8. package/dist/auth-layout.d.ts +4 -4
  9. package/dist/auth-layout.js +143 -294
  10. package/dist/avatar.d.ts +6 -6
  11. package/dist/avatar.js +49 -19
  12. package/dist/badge.d.ts +12 -14
  13. package/dist/badge.js +71 -11
  14. package/dist/bar-chart.d.ts +65 -67
  15. package/dist/bar-chart.js +232 -207
  16. package/dist/breadcrumb.d.ts +5 -5
  17. package/dist/breadcrumb.js +56 -118
  18. package/dist/bullet-chart.d.ts +33 -33
  19. package/dist/bullet-chart.js +121 -148
  20. package/dist/button-BZIeyUw6.d.ts +17 -0
  21. package/dist/button-group.d.ts +13 -16
  22. package/dist/button-group.js +39 -88
  23. package/dist/button.d.ts +2 -19
  24. package/dist/button.js +94 -13
  25. package/dist/calendar.d.ts +6 -6
  26. package/dist/calendar.js +138 -17
  27. package/dist/card.d.ts +14 -16
  28. package/dist/card.js +59 -145
  29. package/dist/carousel.d.ts +34 -35
  30. package/dist/carousel.js +335 -20
  31. package/dist/chart.d.ts +58 -59
  32. package/dist/chart.js +376 -28
  33. package/dist/checkbox.d.ts +10 -12
  34. package/dist/checkbox.js +82 -47
  35. package/dist/cn-BI_4DMBf.js +23 -0
  36. package/dist/collapsible.d.ts +7 -8
  37. package/dist/collapsible.js +22 -47
  38. package/dist/combobox.d.ts +10 -10
  39. package/dist/combobox.js +236 -44
  40. package/dist/cta.d.ts +12 -14
  41. package/dist/cta.js +175 -341
  42. package/dist/currency-selector.d.ts +31 -32
  43. package/dist/currency-selector.js +106 -184
  44. package/dist/data-table.d.ts +164 -0
  45. package/dist/data-table.js +673 -0
  46. package/dist/date-picker.d.ts +22 -23
  47. package/dist/date-picker.js +119 -192
  48. package/dist/details-card.d.ts +7 -7
  49. package/dist/details-card.js +104 -253
  50. package/dist/dialog.d.ts +13 -14
  51. package/dist/dialog.js +116 -209
  52. package/dist/dropdown-menu.d.ts +13 -13
  53. package/dist/dropdown-menu.js +180 -37
  54. package/dist/dropzone.d.ts +55 -55
  55. package/dist/dropzone.js +327 -439
  56. package/dist/editorial-card.d.ts +23 -25
  57. package/dist/editorial-card.js +129 -296
  58. package/dist/empty-state.d.ts +8 -9
  59. package/dist/empty-state.js +48 -105
  60. package/dist/field.d.ts +23 -25
  61. package/dist/field.js +110 -221
  62. package/dist/filter.d.ts +118 -0
  63. package/dist/filter.js +775 -0
  64. package/dist/footer.d.ts +8 -15
  65. package/dist/footer.js +197 -400
  66. package/dist/funnel-chart.d.ts +38 -41
  67. package/dist/funnel-chart.js +167 -189
  68. package/dist/gallery-indicator.d.ts +11 -12
  69. package/dist/gallery-indicator.js +75 -12
  70. package/dist/heatmap-chart.d.ts +47 -50
  71. package/dist/heatmap-chart.js +186 -237
  72. package/dist/infotip.d.ts +8 -9
  73. package/dist/infotip.js +33 -59
  74. package/dist/input-CfoEJ8A6.d.ts +12 -0
  75. package/dist/input-group.d.ts +16 -20
  76. package/dist/input-group.js +99 -23
  77. package/dist/input-size-context-C-SFx9sx.d.ts +10 -0
  78. package/dist/input-size-context.d.ts +2 -11
  79. package/dist/input-size-context.js +17 -9
  80. package/dist/input.d.ts +2 -13
  81. package/dist/input.js +27 -11
  82. package/dist/item.d.ts +7 -8
  83. package/dist/item.js +22 -59
  84. package/dist/kpi-card.d.ts +18 -20
  85. package/dist/kpi-card.js +84 -192
  86. package/dist/label.d.ts +6 -6
  87. package/dist/label.js +40 -8
  88. package/dist/line-chart.d.ts +88 -89
  89. package/dist/line-chart.js +142 -104
  90. package/dist/logo.d.ts +4 -4
  91. package/dist/logo.js +92 -9
  92. package/dist/map-indicator.d.ts +7 -7
  93. package/dist/map-indicator.js +80 -106
  94. package/dist/match.d.ts +10 -11
  95. package/dist/match.js +62 -107
  96. package/dist/media-gallery-hero.d.ts +40 -42
  97. package/dist/media-gallery-hero.js +182 -343
  98. package/dist/media-player.d.ts +17 -17
  99. package/dist/media-player.js +873 -1348
  100. package/dist/multi-step-form.d.ts +56 -0
  101. package/dist/multi-step-form.js +342 -0
  102. package/dist/number-input.d.ts +34 -34
  103. package/dist/number-input.js +61 -117
  104. package/dist/page-header.d.ts +10 -11
  105. package/dist/page-header.js +34 -79
  106. package/dist/pagination.d.ts +17 -21
  107. package/dist/pagination.js +132 -207
  108. package/dist/password-input.d.ts +5 -13
  109. package/dist/password-input.js +31 -55
  110. package/dist/phone-input.d.ts +19 -20
  111. package/dist/phone-input.js +226 -344
  112. package/dist/photo-gallery.d.ts +19 -19
  113. package/dist/photo-gallery.js +313 -449
  114. package/dist/picker-lzgmsNfG.js +32 -0
  115. package/dist/pie-chart.d.ts +60 -60
  116. package/dist/pie-chart.js +140 -148
  117. package/dist/popover.d.ts +9 -9
  118. package/dist/popover.js +72 -23
  119. package/dist/price-tag.d.ts +26 -27
  120. package/dist/price-tag.js +113 -173
  121. package/dist/progress.d.ts +16 -17
  122. package/dist/progress.js +169 -24
  123. package/dist/property-listing-card.d.ts +14 -17
  124. package/dist/property-listing-card.js +102 -220
  125. package/dist/radar-chart.d.ts +29 -31
  126. package/dist/radar-chart.js +162 -137
  127. package/dist/radio-group.d.ts +11 -13
  128. package/dist/radio-group.js +46 -60
  129. package/dist/review-block.d.ts +14 -16
  130. package/dist/review-block.js +154 -10
  131. package/dist/rich-text-editor.d.ts +30 -14
  132. package/dist/rich-text-editor.js +592 -716
  133. package/dist/scatter-chart.d.ts +45 -47
  134. package/dist/scatter-chart.js +236 -240
  135. package/dist/search-input.d.ts +8 -16
  136. package/dist/search-input.js +57 -109
  137. package/dist/select.d.ts +8 -8
  138. package/dist/select.js +144 -27
  139. package/dist/separator.d.ts +8 -9
  140. package/dist/separator.js +32 -8
  141. package/dist/sheet.d.ts +11 -11
  142. package/dist/sheet.js +103 -24
  143. package/dist/sidebar.d.ts +32 -37
  144. package/dist/sidebar.js +364 -634
  145. package/dist/size-context-D4mYvcg8.d.ts +10 -0
  146. package/dist/size-context.d.ts +2 -11
  147. package/dist/size-context.js +17 -9
  148. package/dist/skeleton.d.ts +4 -5
  149. package/dist/skeleton.js +12 -8
  150. package/dist/slider.d.ts +8 -9
  151. package/dist/slider.js +64 -135
  152. package/dist/sparkline.d.ts +43 -46
  153. package/dist/sparkline.js +221 -251
  154. package/dist/stepper.d.ts +23 -24
  155. package/dist/stepper.js +149 -246
  156. package/dist/styles.css +510 -108
  157. package/dist/switch.d.ts +10 -12
  158. package/dist/switch.js +48 -70
  159. package/dist/table-card.d.ts +35 -0
  160. package/dist/table-card.js +125 -0
  161. package/dist/table.d.ts +18 -14
  162. package/dist/table.js +113 -154
  163. package/dist/tabs.d.ts +23 -15
  164. package/dist/tabs.js +71 -18
  165. package/dist/tag.d.ts +21 -23
  166. package/dist/tag.js +103 -159
  167. package/dist/testimonial-block.d.ts +18 -19
  168. package/dist/testimonial-block.js +189 -358
  169. package/dist/textarea-IS_D8pXf.d.ts +11 -0
  170. package/dist/textarea.d.ts +2 -12
  171. package/dist/textarea.js +24 -11
  172. package/dist/time-picker.d.ts +11 -11
  173. package/dist/time-picker.js +245 -302
  174. package/dist/toast.d.ts +16 -18
  175. package/dist/toast.js +154 -205
  176. package/dist/tooltip.d.ts +8 -9
  177. package/dist/tooltip.js +37 -12
  178. package/dist/tree-map.d.ts +54 -57
  179. package/dist/tree-map.js +227 -269
  180. package/dist/use-uncontrolled-CLfM1XbB.js +21 -0
  181. package/dist/waterfall-chart.d.ts +94 -97
  182. package/dist/waterfall-chart.js +455 -552
  183. package/package.json +28 -9
  184. package/dist/accordion.js.map +0 -1
  185. package/dist/activity-timeline.js.map +0 -1
  186. package/dist/alert.js.map +0 -1
  187. package/dist/auth-layout.js.map +0 -1
  188. package/dist/avatar.js.map +0 -1
  189. package/dist/badge.js.map +0 -1
  190. package/dist/bar-chart.js.map +0 -1
  191. package/dist/breadcrumb.js.map +0 -1
  192. package/dist/bullet-chart.js.map +0 -1
  193. package/dist/button-group.js.map +0 -1
  194. package/dist/button.js.map +0 -1
  195. package/dist/calendar.js.map +0 -1
  196. package/dist/card.js.map +0 -1
  197. package/dist/carousel.js.map +0 -1
  198. package/dist/chart.js.map +0 -1
  199. package/dist/checkbox.js.map +0 -1
  200. package/dist/chunk-322YCNVL.js +0 -278
  201. package/dist/chunk-322YCNVL.js.map +0 -1
  202. package/dist/chunk-3ACQVT7A.js +0 -25
  203. package/dist/chunk-3ACQVT7A.js.map +0 -1
  204. package/dist/chunk-3T65TLJX.js +0 -334
  205. package/dist/chunk-3T65TLJX.js.map +0 -1
  206. package/dist/chunk-6ZSGQHH2.js +0 -192
  207. package/dist/chunk-6ZSGQHH2.js.map +0 -1
  208. package/dist/chunk-7TBMLFGW.js +0 -41
  209. package/dist/chunk-7TBMLFGW.js.map +0 -1
  210. package/dist/chunk-B4H6RNDH.js +0 -135
  211. package/dist/chunk-B4H6RNDH.js.map +0 -1
  212. package/dist/chunk-BUXCGZ6X.js +0 -219
  213. package/dist/chunk-BUXCGZ6X.js.map +0 -1
  214. package/dist/chunk-CHII2QHH.js +0 -58
  215. package/dist/chunk-CHII2QHH.js.map +0 -1
  216. package/dist/chunk-DMNOXRRW.js +0 -147
  217. package/dist/chunk-DMNOXRRW.js.map +0 -1
  218. package/dist/chunk-EFSOSSIC.js +0 -130
  219. package/dist/chunk-EFSOSSIC.js.map +0 -1
  220. package/dist/chunk-FZDSVMKY.js +0 -363
  221. package/dist/chunk-FZDSVMKY.js.map +0 -1
  222. package/dist/chunk-GJOFIJS3.js +0 -246
  223. package/dist/chunk-GJOFIJS3.js.map +0 -1
  224. package/dist/chunk-HL3ZSYES.js +0 -23
  225. package/dist/chunk-HL3ZSYES.js.map +0 -1
  226. package/dist/chunk-JVLUBAPB.js +0 -129
  227. package/dist/chunk-JVLUBAPB.js.map +0 -1
  228. package/dist/chunk-KDPYSOYZ.js +0 -64
  229. package/dist/chunk-KDPYSOYZ.js.map +0 -1
  230. package/dist/chunk-KSMDANKI.js +0 -43
  231. package/dist/chunk-KSMDANKI.js.map +0 -1
  232. package/dist/chunk-MEKCCOP5.js +0 -46
  233. package/dist/chunk-MEKCCOP5.js.map +0 -1
  234. package/dist/chunk-NOFXVRWL.js +0 -451
  235. package/dist/chunk-NOFXVRWL.js.map +0 -1
  236. package/dist/chunk-PC5MHNVA.js +0 -171
  237. package/dist/chunk-PC5MHNVA.js.map +0 -1
  238. package/dist/chunk-QKAQZ2GU.js +0 -122
  239. package/dist/chunk-QKAQZ2GU.js.map +0 -1
  240. package/dist/chunk-QZHSHSVV.js +0 -26
  241. package/dist/chunk-QZHSHSVV.js.map +0 -1
  242. package/dist/chunk-RBMK26XD.js +0 -19
  243. package/dist/chunk-RBMK26XD.js.map +0 -1
  244. package/dist/chunk-SFNJGF6M.js +0 -262
  245. package/dist/chunk-SFNJGF6M.js.map +0 -1
  246. package/dist/chunk-UJJNLGTM.js +0 -112
  247. package/dist/chunk-UJJNLGTM.js.map +0 -1
  248. package/dist/chunk-VGR4ZWJ3.js +0 -418
  249. package/dist/chunk-VGR4ZWJ3.js.map +0 -1
  250. package/dist/chunk-XG47P6D4.js +0 -99
  251. package/dist/chunk-XG47P6D4.js.map +0 -1
  252. package/dist/chunk-XZZAHNVM.js +0 -21
  253. package/dist/chunk-XZZAHNVM.js.map +0 -1
  254. package/dist/chunk-Y4TTYVNE.js +0 -36
  255. package/dist/chunk-Y4TTYVNE.js.map +0 -1
  256. package/dist/chunk-YDWIHW6Q.js +0 -69
  257. package/dist/chunk-YDWIHW6Q.js.map +0 -1
  258. package/dist/collapsible.js.map +0 -1
  259. package/dist/combobox.js.map +0 -1
  260. package/dist/cta.js.map +0 -1
  261. package/dist/currency-selector.js.map +0 -1
  262. package/dist/date-picker.js.map +0 -1
  263. package/dist/details-card.js.map +0 -1
  264. package/dist/dialog.js.map +0 -1
  265. package/dist/dropdown-menu.js.map +0 -1
  266. package/dist/dropzone.js.map +0 -1
  267. package/dist/editorial-card.js.map +0 -1
  268. package/dist/empty-state.js.map +0 -1
  269. package/dist/field.js.map +0 -1
  270. package/dist/footer.js.map +0 -1
  271. package/dist/funnel-chart.js.map +0 -1
  272. package/dist/gallery-indicator.js.map +0 -1
  273. package/dist/heatmap-chart.js.map +0 -1
  274. package/dist/infotip.js.map +0 -1
  275. package/dist/input-group.js.map +0 -1
  276. package/dist/input-size-context.js.map +0 -1
  277. package/dist/input.js.map +0 -1
  278. package/dist/item.js.map +0 -1
  279. package/dist/kpi-card.js.map +0 -1
  280. package/dist/label.js.map +0 -1
  281. package/dist/line-chart.js.map +0 -1
  282. package/dist/logo.js.map +0 -1
  283. package/dist/map-indicator.js.map +0 -1
  284. package/dist/match.js.map +0 -1
  285. package/dist/media-gallery-hero.js.map +0 -1
  286. package/dist/media-player.js.map +0 -1
  287. package/dist/number-input.js.map +0 -1
  288. package/dist/page-header.js.map +0 -1
  289. package/dist/pagination.js.map +0 -1
  290. package/dist/password-input.js.map +0 -1
  291. package/dist/phone-input.js.map +0 -1
  292. package/dist/photo-gallery.js.map +0 -1
  293. package/dist/pie-chart.js.map +0 -1
  294. package/dist/popover.js.map +0 -1
  295. package/dist/price-tag.js.map +0 -1
  296. package/dist/progress.js.map +0 -1
  297. package/dist/property-listing-card.js.map +0 -1
  298. package/dist/radar-chart.js.map +0 -1
  299. package/dist/radio-group.js.map +0 -1
  300. package/dist/review-block.js.map +0 -1
  301. package/dist/rich-text-editor.js.map +0 -1
  302. package/dist/scatter-chart.js.map +0 -1
  303. package/dist/search-input.js.map +0 -1
  304. package/dist/select.js.map +0 -1
  305. package/dist/separator.js.map +0 -1
  306. package/dist/sheet.js.map +0 -1
  307. package/dist/sidebar.js.map +0 -1
  308. package/dist/size-context.js.map +0 -1
  309. package/dist/skeleton.js.map +0 -1
  310. package/dist/slider.js.map +0 -1
  311. package/dist/sparkline.js.map +0 -1
  312. package/dist/stepper.js.map +0 -1
  313. package/dist/switch.js.map +0 -1
  314. package/dist/tab-list.d.ts +0 -38
  315. package/dist/tab-list.js +0 -123
  316. package/dist/tab-list.js.map +0 -1
  317. package/dist/table.js.map +0 -1
  318. package/dist/tabs.js.map +0 -1
  319. package/dist/tag.js.map +0 -1
  320. package/dist/testimonial-block.js.map +0 -1
  321. package/dist/textarea.js.map +0 -1
  322. package/dist/time-picker.js.map +0 -1
  323. package/dist/toast.js.map +0 -1
  324. package/dist/tooltip.js.map +0 -1
  325. package/dist/tree-map.js.map +0 -1
  326. package/dist/waterfall-chart.js.map +0 -1
package/dist/card.js CHANGED
@@ -1,156 +1,70 @@
1
- import {
2
- cn
3
- } from "./chunk-Y4TTYVNE.js";
4
-
5
- // src/card.tsx
1
+ import { t as cn } from "./cn-BI_4DMBf.js";
6
2
  import { mergeProps } from "@base-ui/react/merge-props";
7
3
  import { useRender } from "@base-ui/react/use-render";
8
4
  import { cva } from "class-variance-authority";
9
- var cardVariants = cva(
10
- "group/card relative flex w-full min-w-0 flex-col gap-5 rounded-2xl border border-line-subtle bg-canvas py-gdt-xl text-fg-primary shadow-1 transition-[background-color,border-color,box-shadow,transform] outline-none has-[[data-slot=card-action]:hover]:shadow-2 has-[[data-slot=card-action]:focus-visible]:border-line-focus has-[[data-slot=card-action]:focus-visible]inset-ring-1 has-[[data-slot=card-action]:focus-visible]:ring-line-focus has-[[data-slot=card-action]:active]:border-line-subtle has-[[data-slot=card-action]:active]:bg-surface has-[[data-slot=card-action]:active]:shadow-none!",
11
- {
12
- variants: {
13
- selected: {
14
- true: "border-line-focus bg-surface-brand-subtle inset-ring-1 inset-ring-line-focus has-[[data-slot=card-action]:hover]:border-line-focus has-[[data-slot=card-action]:hover]:bg-surface-brand-subtle has-[[data-slot=card-action]:hover]:inset-ring-1 has-[[data-slot=card-action]:active]:border-line-focus has-[[data-slot=card-action]:active]:bg-surface-brand-subtle has-[[data-slot=card-action]:active]:inset-ring-1 has-[[data-slot=card-action]:active]:inset-ring-line-focus",
15
- false: ""
16
- }
17
- },
18
- defaultVariants: {
19
- selected: false
20
- }
21
- }
22
- );
5
+ //#region src/card.tsx
6
+ const cardVariants = cva("group/card relative flex w-full min-w-0 flex-col gap-5 rounded-2xl border border-line-subtle bg-canvas py-gdt-xl text-fg-primary shadow-1 transition-[background-color,border-color,box-shadow,transform] outline-none has-[[data-slot=card-action]:hover]:shadow-2 has-[[data-slot=card-action]:focus-visible]:border-line-focus has-[[data-slot=card-action]:focus-visible]inset-ring-1 has-[[data-slot=card-action]:focus-visible]:ring-line-focus has-[[data-slot=card-action]:active]:border-line-subtle has-[[data-slot=card-action]:active]:bg-surface has-[[data-slot=card-action]:active]:shadow-none!", {
7
+ variants: { selected: {
8
+ true: "border-line-focus bg-surface-brand-subtle inset-ring-1 inset-ring-line-focus has-[[data-slot=card-action]:hover]:border-line-focus has-[[data-slot=card-action]:hover]:bg-surface-brand-subtle has-[[data-slot=card-action]:hover]:inset-ring-1 has-[[data-slot=card-action]:active]:border-line-focus has-[[data-slot=card-action]:active]:bg-surface-brand-subtle has-[[data-slot=card-action]:active]:inset-ring-1 has-[[data-slot=card-action]:active]:inset-ring-line-focus",
9
+ false: ""
10
+ } },
11
+ defaultVariants: { selected: false }
12
+ });
23
13
  function Card({ className, render, selected = false, ...props }) {
24
- return useRender({
25
- defaultTagName: "article",
26
- props: mergeProps(
27
- {
28
- className: cn(cardVariants({ selected }), className)
29
- },
30
- props
31
- ),
32
- render,
33
- state: {
34
- selected,
35
- slot: "card"
36
- }
37
- });
14
+ return useRender({
15
+ defaultTagName: "article",
16
+ props: mergeProps({ className: cn(cardVariants({ selected }), className) }, props),
17
+ render,
18
+ state: {
19
+ selected,
20
+ slot: "card"
21
+ }
22
+ });
38
23
  }
39
- function CardTitle({
40
- className,
41
- render,
42
- ...props
43
- }) {
44
- return useRender({
45
- defaultTagName: "h3",
46
- props: mergeProps(
47
- {
48
- className: cn("text-gdt-h5 text-fg-primary", className)
49
- },
50
- props
51
- ),
52
- render
53
- });
24
+ function CardTitle({ className, render, ...props }) {
25
+ return useRender({
26
+ defaultTagName: "h3",
27
+ props: mergeProps({ className: cn("text-gdt-h5 text-fg-primary", className) }, props),
28
+ render
29
+ });
54
30
  }
55
- function CardHeader({
56
- className,
57
- render,
58
- ...props
59
- }) {
60
- return useRender({
61
- defaultTagName: "div",
62
- props: mergeProps(
63
- {
64
- className: cn("flex min-w-0 flex-col gap-gdt-sm px-gdt-xl", className)
65
- },
66
- props
67
- ),
68
- render
69
- });
31
+ function CardHeader({ className, render, ...props }) {
32
+ return useRender({
33
+ defaultTagName: "div",
34
+ props: mergeProps({ className: cn("flex min-w-0 flex-col gap-gdt-sm px-gdt-xl", className) }, props),
35
+ render
36
+ });
70
37
  }
71
- function CardDescription({
72
- className,
73
- render,
74
- ...props
75
- }) {
76
- return useRender({
77
- defaultTagName: "p",
78
- props: mergeProps(
79
- {
80
- className: cn("text-gdt-sm font-normal text-fg-primary", className)
81
- },
82
- props
83
- ),
84
- render
85
- });
38
+ function CardDescription({ className, render, ...props }) {
39
+ return useRender({
40
+ defaultTagName: "p",
41
+ props: mergeProps({ className: cn("text-gdt-sm font-normal text-fg-primary", className) }, props),
42
+ render
43
+ });
86
44
  }
87
- function CardContent({
88
- className,
89
- render,
90
- ...props
91
- }) {
92
- return useRender({
93
- defaultTagName: "div",
94
- props: mergeProps(
95
- {
96
- className: cn(
97
- "min-w-0 px-gdt-xl text-gdt-sm text-fg-primary",
98
- className
99
- )
100
- },
101
- props
102
- ),
103
- render
104
- });
45
+ function CardContent({ className, render, ...props }) {
46
+ return useRender({
47
+ defaultTagName: "div",
48
+ props: mergeProps({ className: cn("min-w-0 px-gdt-xl text-gdt-sm text-fg-primary", className) }, props),
49
+ render
50
+ });
105
51
  }
106
- function CardFooter({
107
- className,
108
- render,
109
- ...props
110
- }) {
111
- return useRender({
112
- defaultTagName: "div",
113
- props: mergeProps(
114
- {
115
- className: cn(
116
- "flex min-w-0 px-gdt-xl flex-wrap items-center justify-end gap-gdt-sm",
117
- className
118
- )
119
- },
120
- props
121
- ),
122
- render
123
- });
52
+ function CardFooter({ className, render, ...props }) {
53
+ return useRender({
54
+ defaultTagName: "div",
55
+ props: mergeProps({ className: cn("flex min-w-0 px-gdt-xl flex-wrap items-center justify-end gap-gdt-sm", className) }, props),
56
+ render
57
+ });
124
58
  }
125
- function CardAction({
126
- className,
127
- render,
128
- ...props
129
- }) {
130
- return useRender({
131
- defaultTagName: "button",
132
- props: mergeProps(
133
- {
134
- // @ts-expect-error — data-* attrs are valid but not in mergeProps generic
135
- "data-slot": "card-action",
136
- className: cn(
137
- "cursor-pointer focus-visible:outline-none before:absolute before:inset-0 before:content-['']",
138
- className
139
- )
140
- },
141
- props
142
- ),
143
- render
144
- });
59
+ function CardAction({ className, render, ...props }) {
60
+ return useRender({
61
+ defaultTagName: "button",
62
+ props: mergeProps({
63
+ "data-slot": "card-action",
64
+ className: cn("cursor-pointer focus-visible:outline-none before:absolute before:inset-0 before:content-['']", className)
65
+ }, props),
66
+ render
67
+ });
145
68
  }
146
- export {
147
- Card,
148
- CardAction,
149
- CardContent,
150
- CardDescription,
151
- CardFooter,
152
- CardHeader,
153
- CardTitle,
154
- cardVariants
155
- };
156
- //# sourceMappingURL=card.js.map
69
+ //#endregion
70
+ export { Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, cardVariants };
@@ -1,37 +1,36 @@
1
- import * as class_variance_authority_types from 'class-variance-authority/types';
2
- import { VariantProps } from 'class-variance-authority';
3
- import useEmblaCarousel, { UseEmblaCarouselType } from 'embla-carousel-react';
4
- import * as React from 'react';
5
- import { ComponentSize } from './size-context.js';
6
-
1
+ import { t as ComponentSize } from "./size-context-D4mYvcg8.js";
2
+ import { VariantProps } from "class-variance-authority";
3
+ import * as React from "react";
4
+ import useEmblaCarousel, { UseEmblaCarouselType } from "embla-carousel-react";
5
+ //#region src/carousel.d.ts
7
6
  type CarouselApi = UseEmblaCarouselType[1];
8
7
  type UseCarouselParameters = Parameters<typeof useEmblaCarousel>;
9
8
  type CarouselOptions = UseCarouselParameters[0];
10
9
  type CarouselPlugin = UseCarouselParameters[1];
11
10
  declare const carouselVariants: (props?: ({
12
- imageSize?: "sm" | "md" | "lg" | "full" | null | undefined;
13
- } & class_variance_authority_types.ClassProp) | undefined) => string;
11
+ imageSize?: "full" | "lg" | "md" | "sm" | null | undefined;
12
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
14
13
  type CarouselContextProps = {
15
- carouselRef: ReturnType<typeof useEmblaCarousel>[0];
16
- api: CarouselApi;
17
- orientation: "horizontal" | "vertical";
18
- size: ComponentSize;
19
- scrollPrev: () => void;
20
- scrollNext: () => void;
21
- scrollTo: (index: number) => void;
22
- canScrollPrev: boolean;
23
- canScrollNext: boolean;
24
- selectedIndex: number;
25
- scrollSnaps: number[];
14
+ carouselRef: ReturnType<typeof useEmblaCarousel>[0];
15
+ api: CarouselApi;
16
+ orientation: "horizontal" | "vertical";
17
+ size: ComponentSize;
18
+ scrollPrev: () => void;
19
+ scrollNext: () => void;
20
+ scrollTo: (index: number) => void;
21
+ canScrollPrev: boolean;
22
+ canScrollNext: boolean;
23
+ selectedIndex: number;
24
+ scrollSnaps: number[];
26
25
  };
27
26
  declare function useCarousel(): CarouselContextProps;
28
27
  type CarouselProps = {
29
- opts?: CarouselOptions;
30
- plugins?: CarouselPlugin;
31
- orientation?: "horizontal" | "vertical";
32
- /** Scales the chrome (arrows + indicator) without touching the image. */
33
- size?: ComponentSize;
34
- setApi?: (api: CarouselApi) => void;
28
+ opts?: CarouselOptions;
29
+ plugins?: CarouselPlugin;
30
+ orientation?: "horizontal" | "vertical";
31
+ /** Scales the chrome (arrows + indicator) without touching the image. */
32
+ size?: ComponentSize;
33
+ setApi?: (api: CarouselApi) => void;
35
34
  };
36
35
  declare function Carousel({ orientation, opts, setApi, plugins, size, imageSize, className, children, ...props }: React.ComponentProps<"div"> & CarouselProps & VariantProps<typeof carouselVariants>): React.JSX.Element;
37
36
  declare function CarouselContent({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
@@ -39,15 +38,15 @@ declare function CarouselItem({ className, ...props }: React.ComponentProps<"div
39
38
  declare function CarouselPrevious({ className, ...props }: React.ComponentProps<"button">): React.JSX.Element;
40
39
  declare function CarouselNext({ className, ...props }: React.ComponentProps<"button">): React.JSX.Element;
41
40
  type CarouselIndicatorProps = Omit<React.ComponentProps<"div">, "children" | "onSelect"> & {
42
- /** Override the live count (e.g. for static design previews). */
43
- count?: number;
44
- /** Override the live selected index. */
45
- selected?: number;
46
- /** Override the inherited carousel size. */
47
- size?: ComponentSize;
48
- /** Jump to a slide when a dot is activated. Defaults to the carousel API. */
49
- onSelect?: (index: number) => void;
41
+ /** Override the live count (e.g. for static design previews). */
42
+ count?: number;
43
+ /** Override the live selected index. */
44
+ selected?: number;
45
+ /** Override the inherited carousel size. */
46
+ size?: ComponentSize;
47
+ /** Jump to a slide when a dot is activated. Defaults to the carousel API. */
48
+ onSelect?: (index: number) => void;
50
49
  };
51
50
  declare function CarouselIndicator({ className, count: countProp, selected: selectedProp, size: sizeProp, onSelect, ...props }: CarouselIndicatorProps): React.JSX.Element | null;
52
-
53
- export { Carousel, type CarouselApi, CarouselContent, CarouselIndicator, CarouselItem, CarouselNext, CarouselPrevious, useCarousel };
51
+ //#endregion
52
+ export { Carousel, type CarouselApi, CarouselContent, CarouselIndicator, CarouselItem, CarouselNext, CarouselPrevious, useCarousel };
package/dist/carousel.js CHANGED
@@ -1,22 +1,337 @@
1
1
  "use client";
2
- import {
3
- Carousel,
4
- CarouselContent,
5
- CarouselIndicator,
6
- CarouselItem,
7
- CarouselNext,
8
- CarouselPrevious,
9
- useCarousel
10
- } from "./chunk-FZDSVMKY.js";
11
- import "./chunk-HL3ZSYES.js";
12
- import "./chunk-Y4TTYVNE.js";
13
- export {
14
- Carousel,
15
- CarouselContent,
16
- CarouselIndicator,
17
- CarouselItem,
18
- CarouselNext,
19
- CarouselPrevious,
20
- useCarousel
2
+ import { t as cn } from "./cn-BI_4DMBf.js";
3
+ import { useComponentSize } from "./size-context.js";
4
+ import { ChevronLeftIcon, ChevronRightIcon } from "lucide-react";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ import { cva } from "class-variance-authority";
7
+ import * as React from "react";
8
+ import useEmblaCarousel from "embla-carousel-react";
9
+ //#region src/carousel.tsx
10
+ /**
11
+ * Shared glassmorphic treatment for every overlay surface in the carousel
12
+ * (navigation arrows + indicator). Dark glass at 35% over a 16px backdrop
13
+ * blur with a near-invisible 18% light border that lifts the chrome off the
14
+ * imagery. Always dark, in both themes — see `--color-surface-glass-overlay-button`.
15
+ */
16
+ const glassChrome = "border border-fg-on-brand/[0.18] bg-surface-glass-overlay-button backdrop-blur-[16px]";
17
+ const carouselVariants = cva("relative overflow-hidden rounded-2xl bg-surface-brand-subtle", {
18
+ variants: { imageSize: {
19
+ sm: "w-[320px] max-w-full aspect-[320/220]",
20
+ md: "w-[520px] max-w-full aspect-[520/340]",
21
+ lg: "w-[800px] max-w-full aspect-[800/500]",
22
+ full: "w-full"
23
+ } },
24
+ defaultVariants: { imageSize: "md" }
25
+ });
26
+ const CarouselContext = React.createContext(null);
27
+ function useCarousel() {
28
+ const context = React.useContext(CarouselContext);
29
+ if (!context) throw new Error("useCarousel must be used within a <Carousel />");
30
+ return context;
31
+ }
32
+ function Carousel({ orientation = "horizontal", opts, setApi, plugins, size, imageSize, className, children, ...props }) {
33
+ const resolvedSize = useComponentSize(size);
34
+ const [carouselRef, api] = useEmblaCarousel({
35
+ ...opts,
36
+ axis: orientation === "horizontal" ? "x" : "y"
37
+ }, plugins);
38
+ const [canScrollPrev, setCanScrollPrev] = React.useState(false);
39
+ const [canScrollNext, setCanScrollNext] = React.useState(false);
40
+ const [selectedIndex, setSelectedIndex] = React.useState(0);
41
+ const [scrollSnaps, setScrollSnaps] = React.useState([]);
42
+ const onSelect = React.useCallback((api) => {
43
+ if (!api) return;
44
+ setCanScrollPrev(api.canScrollPrev());
45
+ setCanScrollNext(api.canScrollNext());
46
+ setSelectedIndex(api.selectedScrollSnap());
47
+ }, []);
48
+ const onReInit = React.useCallback((api) => {
49
+ if (!api) return;
50
+ setScrollSnaps(api.scrollSnapList());
51
+ onSelect(api);
52
+ }, [onSelect]);
53
+ const scrollPrev = React.useCallback(() => {
54
+ api?.scrollPrev();
55
+ }, [api]);
56
+ const scrollNext = React.useCallback(() => {
57
+ api?.scrollNext();
58
+ }, [api]);
59
+ const scrollTo = React.useCallback((index) => {
60
+ api?.scrollTo(index);
61
+ }, [api]);
62
+ const handleKeyDown = React.useCallback((event) => {
63
+ const prevKey = orientation === "horizontal" ? "ArrowLeft" : "ArrowUp";
64
+ const nextKey = orientation === "horizontal" ? "ArrowRight" : "ArrowDown";
65
+ if (event.key === prevKey) {
66
+ event.preventDefault();
67
+ scrollPrev();
68
+ } else if (event.key === nextKey) {
69
+ event.preventDefault();
70
+ scrollNext();
71
+ }
72
+ }, [
73
+ orientation,
74
+ scrollPrev,
75
+ scrollNext
76
+ ]);
77
+ React.useEffect(() => {
78
+ if (!api || !setApi) return;
79
+ setApi(api);
80
+ }, [api, setApi]);
81
+ React.useEffect(() => {
82
+ if (!api) return;
83
+ onReInit(api);
84
+ api.on("reInit", onReInit);
85
+ api.on("select", onSelect);
86
+ return () => {
87
+ api?.off("reInit", onReInit);
88
+ api?.off("select", onSelect);
89
+ };
90
+ }, [
91
+ api,
92
+ onReInit,
93
+ onSelect
94
+ ]);
95
+ return /* @__PURE__ */ jsx(CarouselContext.Provider, {
96
+ value: {
97
+ carouselRef,
98
+ api,
99
+ orientation,
100
+ size: resolvedSize,
101
+ scrollPrev,
102
+ scrollNext,
103
+ scrollTo,
104
+ canScrollPrev,
105
+ canScrollNext,
106
+ selectedIndex,
107
+ scrollSnaps
108
+ },
109
+ children: /* @__PURE__ */ jsx("div", {
110
+ onKeyDownCapture: handleKeyDown,
111
+ className: cn(carouselVariants({ imageSize }), className),
112
+ role: "region",
113
+ "aria-roledescription": "carousel",
114
+ "data-slot": "carousel",
115
+ ...props,
116
+ children
117
+ })
118
+ });
119
+ }
120
+ function CarouselContent({ className, ...props }) {
121
+ const { carouselRef, orientation } = useCarousel();
122
+ return /* @__PURE__ */ jsx("div", {
123
+ ref: carouselRef,
124
+ className: "h-full overflow-hidden",
125
+ "data-slot": "carousel-content",
126
+ children: /* @__PURE__ */ jsx("div", {
127
+ className: cn("flex h-full", orientation === "horizontal" ? "" : "flex-col", className),
128
+ ...props
129
+ })
130
+ });
131
+ }
132
+ function CarouselItem({ className, ...props }) {
133
+ return /* @__PURE__ */ jsx("div", {
134
+ role: "group",
135
+ "aria-roledescription": "slide",
136
+ "data-slot": "carousel-item",
137
+ className: cn("min-w-0 shrink-0 grow-0 basis-full", className),
138
+ ...props
139
+ });
140
+ }
141
+ const arrowVariants = cva(cn("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", glassChrome, "hover:scale-105 focus-visible:shadow-[0px_0px_0px_2px_var(--color-line-focus)] active:scale-95 disabled:pointer-events-none disabled:opacity-40"), {
142
+ variants: {
143
+ size: {
144
+ sm: "size-8 [&_svg]:size-4",
145
+ md: "size-10 [&_svg]:size-[18px]",
146
+ lg: "size-12 [&_svg]:size-5"
147
+ },
148
+ side: {
149
+ prev: "",
150
+ next: ""
151
+ }
152
+ },
153
+ compoundVariants: [
154
+ {
155
+ size: "sm",
156
+ side: "prev",
157
+ className: "left-3"
158
+ },
159
+ {
160
+ size: "sm",
161
+ side: "next",
162
+ className: "right-3"
163
+ },
164
+ {
165
+ size: "md",
166
+ side: "prev",
167
+ className: "left-4"
168
+ },
169
+ {
170
+ size: "md",
171
+ side: "next",
172
+ className: "right-4"
173
+ },
174
+ {
175
+ size: "lg",
176
+ side: "prev",
177
+ className: "left-5"
178
+ },
179
+ {
180
+ size: "lg",
181
+ side: "next",
182
+ className: "right-5"
183
+ }
184
+ ],
185
+ defaultVariants: {
186
+ size: "md",
187
+ side: "prev"
188
+ }
189
+ });
190
+ function CarouselPrevious({ className, ...props }) {
191
+ const { size, scrollPrev, canScrollPrev } = useCarousel();
192
+ return /* @__PURE__ */ jsxs("button", {
193
+ type: "button",
194
+ "data-slot": "carousel-previous",
195
+ className: cn(arrowVariants({
196
+ size,
197
+ side: "prev"
198
+ }), className),
199
+ disabled: !canScrollPrev,
200
+ onClick: scrollPrev,
201
+ ...props,
202
+ children: [/* @__PURE__ */ jsx(ChevronLeftIcon, { className: "cn-rtl-flip" }), /* @__PURE__ */ jsx("span", {
203
+ className: "sr-only",
204
+ children: "Previous slide"
205
+ })]
206
+ });
207
+ }
208
+ function CarouselNext({ className, ...props }) {
209
+ const { size, scrollNext, canScrollNext } = useCarousel();
210
+ return /* @__PURE__ */ jsxs("button", {
211
+ type: "button",
212
+ "data-slot": "carousel-next",
213
+ className: cn(arrowVariants({
214
+ size,
215
+ side: "next"
216
+ }), className),
217
+ disabled: !canScrollNext,
218
+ onClick: scrollNext,
219
+ ...props,
220
+ children: [/* @__PURE__ */ jsx(ChevronRightIcon, { className: "cn-rtl-flip" }), /* @__PURE__ */ jsx("span", {
221
+ className: "sr-only",
222
+ children: "Next slide"
223
+ })]
224
+ });
225
+ }
226
+ /**
227
+ * Past this many items the indicator switches from "show every dot" to the
228
+ * Airbnb-style windowed mode: at most `MANY_WINDOW` dots, the active one kept
229
+ * near the centre, and dots at a clipped edge faded down to imply more beyond.
230
+ */
231
+ const MANY_THRESHOLD = 5;
232
+ const MANY_WINDOW = 5;
233
+ /**
234
+ * Returns the dots to render plus the window start, so the determinate and
235
+ * windowed ("many") cases share one render path. The dot strip is always the
236
+ * full list; `start` drives the translate that slides it under the viewport.
237
+ */
238
+ function getIndicatorWindow(count, selected) {
239
+ if (count < MANY_THRESHOLD) return {
240
+ dots: Array.from({ length: count }, (_, index) => ({
241
+ index,
242
+ faded: false
243
+ })),
244
+ start: 0,
245
+ visible: count
246
+ };
247
+ const start = Math.max(0, Math.min(selected - Math.floor(MANY_WINDOW / 2), count - MANY_WINDOW));
248
+ const end = start + MANY_WINDOW - 1;
249
+ const overflowLeft = start > 0;
250
+ const overflowRight = end < count - 1;
251
+ return {
252
+ dots: Array.from({ length: count }, (_, index) => ({
253
+ index,
254
+ faded: overflowLeft && index === start || overflowRight && index === end
255
+ })),
256
+ start,
257
+ visible: MANY_WINDOW
258
+ };
259
+ }
260
+ /** Dot diameter, gap, and pill padding per size — in px to keep them crisp. */
261
+ const INDICATOR_SIZES = {
262
+ sm: {
263
+ dot: 5,
264
+ gap: 4,
265
+ padX: 8,
266
+ padY: 4
267
+ },
268
+ md: {
269
+ dot: 7,
270
+ gap: 5,
271
+ padX: 10,
272
+ padY: 5
273
+ },
274
+ lg: {
275
+ dot: 9,
276
+ gap: 6,
277
+ padX: 12,
278
+ padY: 6
279
+ }
21
280
  };
22
- //# sourceMappingURL=carousel.js.map
281
+ /** Distance of the indicator from the bottom edge, per size (12/18/24px). */
282
+ const INDICATOR_OFFSET = {
283
+ sm: "bottom-3",
284
+ md: "bottom-[18px]",
285
+ lg: "bottom-6"
286
+ };
287
+ function CarouselIndicator({ className, count: countProp, selected: selectedProp, size: sizeProp, onSelect, ...props }) {
288
+ const ctx = React.useContext(CarouselContext);
289
+ const inheritedSize = useComponentSize(sizeProp);
290
+ const size = sizeProp ?? ctx?.size ?? inheritedSize;
291
+ const count = countProp ?? ctx?.scrollSnaps.length ?? 0;
292
+ const selected = selectedProp ?? ctx?.selectedIndex ?? 0;
293
+ const handleSelect = onSelect ?? ctx?.scrollTo;
294
+ if (count <= 1) return null;
295
+ const { dot, gap, padX, padY } = INDICATOR_SIZES[size];
296
+ const { dots, start, visible } = getIndicatorWindow(count, selected);
297
+ const step = dot + gap;
298
+ const viewportWidth = visible * step - gap;
299
+ return /* @__PURE__ */ jsx("div", {
300
+ "data-slot": "carousel-indicator",
301
+ className: cn("absolute left-1/2 z-10 flex -translate-x-1/2 items-center justify-center rounded-full", INDICATOR_OFFSET[size], glassChrome, className),
302
+ style: { padding: `${padY}px ${padX}px` },
303
+ role: "tablist",
304
+ "aria-label": "Slide indicators",
305
+ ...props,
306
+ children: /* @__PURE__ */ jsx("div", {
307
+ className: "overflow-hidden",
308
+ style: { width: viewportWidth },
309
+ children: /* @__PURE__ */ jsx("div", {
310
+ className: "flex items-center transition-transform duration-300 ease-out",
311
+ style: {
312
+ gap,
313
+ transform: `translateX(${-start * step}px)`
314
+ },
315
+ children: dots.map(({ index, faded }) => {
316
+ const isActive = index === selected;
317
+ return /* @__PURE__ */ jsx("button", {
318
+ type: "button",
319
+ role: "tab",
320
+ "aria-selected": isActive,
321
+ "aria-label": `Go to slide ${index + 1}`,
322
+ onClick: () => handleSelect?.(index),
323
+ className: cn("shrink-0 rounded-full bg-fg-on-brand transition-[transform,opacity] duration-300 ease-out", handleSelect ? "cursor-pointer" : "cursor-default"),
324
+ style: {
325
+ width: dot,
326
+ height: dot,
327
+ opacity: faded ? .3 : isActive ? 1 : .55,
328
+ transform: faded ? "scale(0.6)" : "scale(1)"
329
+ }
330
+ }, index);
331
+ })
332
+ })
333
+ })
334
+ });
335
+ }
336
+ //#endregion
337
+ export { Carousel, CarouselContent, CarouselIndicator, CarouselItem, CarouselNext, CarouselPrevious, useCarousel };