@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,192 @@
1
+ "use client";
2
+ import {
3
+ useUncontrolled
4
+ } from "./chunk-QZHSHSVV.js";
5
+ import {
6
+ Select,
7
+ SelectContent,
8
+ SelectItem,
9
+ SelectTrigger,
10
+ SelectValue
11
+ } from "./chunk-SFNJGF6M.js";
12
+ import "./chunk-HL3ZSYES.js";
13
+ import {
14
+ cn
15
+ } from "./chunk-Y4TTYVNE.js";
16
+
17
+ // src/currency-selector.tsx
18
+ import { cva } from "class-variance-authority";
19
+ import { CheckIcon } from "lucide-react";
20
+ import { jsx, jsxs } from "react/jsx-runtime";
21
+ var DEFAULT_FLAG = [
22
+ { color: "#1f8f55" },
23
+ { color: "#ffffff" },
24
+ { color: "#1f8f55" }
25
+ ];
26
+ var currencySelectorTriggerVariants = cva(
27
+ "group/currency-selector inline-flex w-fit shrink-0 items-center rounded-full border-0 font-bold whitespace-nowrap outline-none transition-[background-color,color,box-shadow] focus-visible:shadow-[0_0_0_2px_var(--color-line-focus)] disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-60 data-popup-open:text-fg-primary [&_svg]:size-3.5 [&_svg]:shrink-0 [&_svg]:text-current",
28
+ {
29
+ variants: {
30
+ size: {
31
+ sm: "h-8 gap-1.5 px-3 text-gdt-xs",
32
+ md: "h-11 gap-2 px-4 text-gdt-sm",
33
+ lg: "h-12 gap-2.5 px-5 text-gdt-md"
34
+ },
35
+ withBackground: {
36
+ true: "bg-action-tertiary text-fg-primary hover:bg-action-tertiary-hover active:bg-action-tertiary-pressed data-popup-open:bg-action-tertiary-hover",
37
+ false: "bg-transparent px-0 text-fg-primary hover:text-fg-brand active:text-fg-brand data-popup-open:bg-transparent"
38
+ }
39
+ },
40
+ defaultVariants: {
41
+ size: "md",
42
+ withBackground: true
43
+ }
44
+ }
45
+ );
46
+ function findOption(options, value) {
47
+ return options.find((option) => option.code === value);
48
+ }
49
+ function CurrencyFlag({
50
+ flag = DEFAULT_FLAG,
51
+ label,
52
+ className
53
+ }) {
54
+ const total = flag.reduce((sum, stripe) => sum + (stripe.size ?? 1), 0);
55
+ let cursor = 0;
56
+ const stops = flag.flatMap((stripe) => {
57
+ const start = cursor;
58
+ cursor += (stripe.size ?? 1) / total * 100;
59
+ return [
60
+ `${stripe.color} ${start.toFixed(2)}%`,
61
+ `${stripe.color} ${cursor.toFixed(2)}%`
62
+ ];
63
+ });
64
+ return /* @__PURE__ */ jsx(
65
+ "span",
66
+ {
67
+ role: "img",
68
+ "aria-label": label ?? "Currency flag",
69
+ "data-slot": "currency-flag",
70
+ className: cn(
71
+ "inline-block h-4 w-6 shrink-0 overflow-hidden rounded-[3px] bg-cover shadow-[inset_0_0_0_1px_rgb(0_0_0/0.04)]",
72
+ className
73
+ ),
74
+ style: { backgroundImage: `linear-gradient(90deg, ${stops.join(", ")})` }
75
+ }
76
+ );
77
+ }
78
+ function CurrencySelector({
79
+ options,
80
+ value,
81
+ defaultValue,
82
+ onValueChange,
83
+ open,
84
+ defaultOpen,
85
+ onOpenChange,
86
+ size = "md",
87
+ withBackground = true,
88
+ showFlag = true,
89
+ showOptionFlags = true,
90
+ contentClassName,
91
+ className,
92
+ placeholder = "Select currency",
93
+ type = "button",
94
+ ...props
95
+ }) {
96
+ const fallbackValue = options[0]?.code;
97
+ const [selectedValue, setSelectedValue] = useUncontrolled({
98
+ value,
99
+ defaultValue,
100
+ finalValue: fallbackValue,
101
+ onChange: (nextValue) => {
102
+ const nextOption = findOption(options, nextValue);
103
+ if (nextOption) {
104
+ onValueChange?.(nextValue, nextOption);
105
+ }
106
+ }
107
+ });
108
+ const selectedOption = findOption(options, selectedValue);
109
+ const handleValueChange = (nextValue) => {
110
+ if (nextValue) {
111
+ setSelectedValue(nextValue);
112
+ }
113
+ };
114
+ return /* @__PURE__ */ jsxs(
115
+ Select,
116
+ {
117
+ value: selectedValue,
118
+ onValueChange: handleValueChange,
119
+ open,
120
+ defaultOpen,
121
+ onOpenChange,
122
+ size,
123
+ children: [
124
+ /* @__PURE__ */ jsxs(
125
+ SelectTrigger,
126
+ {
127
+ type,
128
+ unstyled: true,
129
+ className: cn(
130
+ currencySelectorTriggerVariants({
131
+ size,
132
+ withBackground
133
+ }),
134
+ className
135
+ ),
136
+ ...props,
137
+ children: [
138
+ showFlag && selectedOption ? /* @__PURE__ */ jsx(
139
+ CurrencyFlag,
140
+ {
141
+ flag: selectedOption.flag,
142
+ label: `${selectedOption.countryCode ?? selectedOption.code} flag`
143
+ }
144
+ ) : null,
145
+ /* @__PURE__ */ jsx(SelectValue, { placeholder, children: selectedOption?.code ?? placeholder })
146
+ ]
147
+ }
148
+ ),
149
+ /* @__PURE__ */ jsx(
150
+ SelectContent,
151
+ {
152
+ align: "start",
153
+ sideOffset: 8,
154
+ className: cn(
155
+ "w-65 rounded-[18px] border-line-subtle bg-surface-overlay p-2 shadow-3",
156
+ contentClassName
157
+ ),
158
+ children: options.map((option) => /* @__PURE__ */ jsxs(
159
+ SelectItem,
160
+ {
161
+ value: option.code,
162
+ className: "min-h-12 rounded-lg px-3 text-gdt-sm data-selected:bg-surface-brand-subtle data-selected:font-normal data-selected:text-fg-brand data-highlighted:bg-surface-brand-subtle",
163
+ children: [
164
+ showOptionFlags ? /* @__PURE__ */ jsx(
165
+ CurrencyFlag,
166
+ {
167
+ flag: option.flag,
168
+ label: `${option.countryCode ?? option.code} flag`
169
+ }
170
+ ) : null,
171
+ /* @__PURE__ */ jsxs("span", { className: "min-w-0 flex-1 truncate", children: [
172
+ option.code,
173
+ " - ",
174
+ option.label
175
+ ] }),
176
+ option.code === selectedValue ? /* @__PURE__ */ jsx(CheckIcon, { className: "ml-auto size-4 text-fg-brand" }) : null
177
+ ]
178
+ },
179
+ option.code
180
+ ))
181
+ }
182
+ )
183
+ ]
184
+ }
185
+ );
186
+ }
187
+ export {
188
+ CurrencyFlag,
189
+ CurrencySelector,
190
+ currencySelectorTriggerVariants
191
+ };
192
+ //# sourceMappingURL=currency-selector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/currency-selector.tsx"],"sourcesContent":["\"use client\";\n\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { CheckIcon } from \"lucide-react\";\nimport type * as React from \"react\";\n\nimport { cn } from \"./lib/cn\";\nimport { useUncontrolled } from \"./lib/use-uncontrolled\";\nimport {\n\tSelect,\n\tSelectContent,\n\tSelectItem,\n\tSelectTrigger,\n\tSelectValue,\n} from \"./select\";\n\ntype CurrencyFlagStripe = {\n\tcolor: string;\n\tsize?: number;\n};\n\ntype CurrencySelectorOption = {\n\tcode: string;\n\tlabel: string;\n\tcountryCode?: string;\n\tflag?: readonly CurrencyFlagStripe[];\n};\n\ntype CurrencySelectorSize = NonNullable<\n\tVariantProps<typeof currencySelectorTriggerVariants>[\"size\"]\n>;\n\ntype CurrencySelectorProps = Omit<\n\tReact.ComponentProps<\"button\">,\n\t\"children\" | \"defaultValue\" | \"onChange\" | \"value\"\n> & {\n\toptions: readonly CurrencySelectorOption[];\n\tvalue?: string;\n\tdefaultValue?: string;\n\tonValueChange?: (value: string, option: CurrencySelectorOption) => void;\n\topen?: boolean;\n\tdefaultOpen?: boolean;\n\tonOpenChange?: (open: boolean) => void;\n\tsize?: CurrencySelectorSize;\n\twithBackground?: boolean;\n\tshowFlag?: boolean;\n\tshowOptionFlags?: boolean;\n\tcontentClassName?: string;\n\tplaceholder?: string;\n};\n\nconst DEFAULT_FLAG: readonly CurrencyFlagStripe[] = [\n\t{ color: \"#1f8f55\" },\n\t{ color: \"#ffffff\" },\n\t{ color: \"#1f8f55\" },\n];\n\nconst currencySelectorTriggerVariants = cva(\n\t\"group/currency-selector inline-flex w-fit shrink-0 items-center rounded-full border-0 font-bold whitespace-nowrap outline-none transition-[background-color,color,box-shadow] focus-visible:shadow-[0_0_0_2px_var(--color-line-focus)] disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-60 data-popup-open:text-fg-primary [&_svg]:size-3.5 [&_svg]:shrink-0 [&_svg]:text-current\",\n\t{\n\t\tvariants: {\n\t\t\tsize: {\n\t\t\t\tsm: \"h-8 gap-1.5 px-3 text-gdt-xs\",\n\t\t\t\tmd: \"h-11 gap-2 px-4 text-gdt-sm\",\n\t\t\t\tlg: \"h-12 gap-2.5 px-5 text-gdt-md\",\n\t\t\t},\n\t\t\twithBackground: {\n\t\t\t\ttrue: \"bg-action-tertiary text-fg-primary hover:bg-action-tertiary-hover active:bg-action-tertiary-pressed data-popup-open:bg-action-tertiary-hover\",\n\t\t\t\tfalse:\n\t\t\t\t\t\"bg-transparent px-0 text-fg-primary hover:text-fg-brand active:text-fg-brand data-popup-open:bg-transparent\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tsize: \"md\",\n\t\t\twithBackground: true,\n\t\t},\n\t},\n);\n\nfunction findOption(\n\toptions: readonly CurrencySelectorOption[],\n\tvalue: string | undefined,\n) {\n\treturn options.find((option) => option.code === value);\n}\n\nfunction CurrencyFlag({\n\tflag = DEFAULT_FLAG,\n\tlabel,\n\tclassName,\n}: {\n\tflag?: readonly CurrencyFlagStripe[];\n\tlabel?: string;\n\tclassName?: string;\n}) {\n\tconst total = flag.reduce((sum, stripe) => sum + (stripe.size ?? 1), 0);\n\tlet cursor = 0;\n\tconst stops = flag.flatMap((stripe) => {\n\t\tconst start = cursor;\n\t\tcursor += ((stripe.size ?? 1) / total) * 100;\n\n\t\treturn [\n\t\t\t`${stripe.color} ${start.toFixed(2)}%`,\n\t\t\t`${stripe.color} ${cursor.toFixed(2)}%`,\n\t\t];\n\t});\n\n\treturn (\n\t\t<span\n\t\t\trole=\"img\"\n\t\t\taria-label={label ?? \"Currency flag\"}\n\t\t\tdata-slot=\"currency-flag\"\n\t\t\tclassName={cn(\n\t\t\t\t\"inline-block h-4 w-6 shrink-0 overflow-hidden rounded-[3px] bg-cover shadow-[inset_0_0_0_1px_rgb(0_0_0/0.04)]\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tstyle={{ backgroundImage: `linear-gradient(90deg, ${stops.join(\", \")})` }}\n\t\t/>\n\t);\n}\n\nfunction CurrencySelector({\n\toptions,\n\tvalue,\n\tdefaultValue,\n\tonValueChange,\n\topen,\n\tdefaultOpen,\n\tonOpenChange,\n\tsize = \"md\",\n\twithBackground = true,\n\tshowFlag = true,\n\tshowOptionFlags = true,\n\tcontentClassName,\n\tclassName,\n\tplaceholder = \"Select currency\",\n\ttype = \"button\",\n\t...props\n}: CurrencySelectorProps) {\n\tconst fallbackValue = options[0]?.code;\n\tconst [selectedValue, setSelectedValue] = useUncontrolled({\n\t\tvalue,\n\t\tdefaultValue,\n\t\tfinalValue: fallbackValue,\n\t\tonChange: (nextValue) => {\n\t\t\tconst nextOption = findOption(options, nextValue);\n\n\t\t\tif (nextOption) {\n\t\t\t\tonValueChange?.(nextValue, nextOption);\n\t\t\t}\n\t\t},\n\t});\n\tconst selectedOption = findOption(options, selectedValue);\n\tconst handleValueChange = (nextValue: string | null) => {\n\t\tif (nextValue) {\n\t\t\tsetSelectedValue(nextValue);\n\t\t}\n\t};\n\n\treturn (\n\t\t<Select\n\t\t\tvalue={selectedValue}\n\t\t\tonValueChange={handleValueChange}\n\t\t\topen={open}\n\t\t\tdefaultOpen={defaultOpen}\n\t\t\tonOpenChange={onOpenChange}\n\t\t\tsize={size}\n\t\t>\n\t\t\t<SelectTrigger\n\t\t\t\ttype={type}\n\t\t\t\tunstyled\n\t\t\t\tclassName={cn(\n\t\t\t\t\tcurrencySelectorTriggerVariants({\n\t\t\t\t\t\tsize,\n\t\t\t\t\t\twithBackground,\n\t\t\t\t\t}),\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{showFlag && selectedOption ? (\n\t\t\t\t\t<CurrencyFlag\n\t\t\t\t\t\tflag={selectedOption.flag}\n\t\t\t\t\t\tlabel={`${selectedOption.countryCode ?? selectedOption.code} flag`}\n\t\t\t\t\t/>\n\t\t\t\t) : null}\n\t\t\t\t<SelectValue placeholder={placeholder}>\n\t\t\t\t\t{selectedOption?.code ?? placeholder}\n\t\t\t\t</SelectValue>\n\t\t\t</SelectTrigger>\n\t\t\t<SelectContent\n\t\t\t\talign=\"start\"\n\t\t\t\tsideOffset={8}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"w-65 rounded-[18px] border-line-subtle bg-surface-overlay p-2 shadow-3\",\n\t\t\t\t\tcontentClassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{options.map((option) => (\n\t\t\t\t\t<SelectItem\n\t\t\t\t\t\tkey={option.code}\n\t\t\t\t\t\tvalue={option.code}\n\t\t\t\t\t\tclassName=\"min-h-12 rounded-lg px-3 text-gdt-sm data-selected:bg-surface-brand-subtle data-selected:font-normal data-selected:text-fg-brand data-highlighted:bg-surface-brand-subtle\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{showOptionFlags ? (\n\t\t\t\t\t\t\t<CurrencyFlag\n\t\t\t\t\t\t\t\tflag={option.flag}\n\t\t\t\t\t\t\t\tlabel={`${option.countryCode ?? option.code} flag`}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t<span className=\"min-w-0 flex-1 truncate\">\n\t\t\t\t\t\t\t{option.code} - {option.label}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t{option.code === selectedValue ? (\n\t\t\t\t\t\t\t<CheckIcon className=\"ml-auto size-4 text-fg-brand\" />\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</SelectItem>\n\t\t\t\t))}\n\t\t\t</SelectContent>\n\t\t</Select>\n\t);\n}\n\nexport {\n\tCurrencyFlag,\n\tCurrencySelector,\n\tcurrencySelectorTriggerVariants,\n\ttype CurrencyFlagStripe,\n\ttype CurrencySelectorOption,\n\ttype CurrencySelectorProps,\n\ttype CurrencySelectorSize,\n};\n"],"mappings":"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","names":[]}
@@ -1,22 +1,30 @@
1
1
  import * as React from 'react';
2
- import { DateRange } from 'react-day-picker';
2
+ import { Matcher, DateRange } from 'react-day-picker';
3
3
  export { DateRange } from 'react-day-picker';
4
4
 
5
- interface DatePickerProps {
6
- value?: Date;
7
- onChange?: (date: Date | undefined) => void;
5
+ type CaptionLayout = "label" | "dropdown" | "dropdown-months" | "dropdown-years";
6
+ interface DatePickerBaseProps {
8
7
  disabled?: boolean;
9
8
  placeholder?: string;
10
9
  className?: string;
10
+ /** Caption style. Defaults to month + year dropdowns for quick navigation. */
11
+ captionLayout?: CaptionLayout;
12
+ /** Earliest navigable month. Defaults to 100 years before today. */
13
+ startMonth?: Date;
14
+ /** Latest navigable month. Defaults to 10 years after today. */
15
+ endMonth?: Date;
16
+ /** Dates that cannot be selected (react-day-picker matcher). */
17
+ disabledDates?: Matcher | Matcher[];
18
+ }
19
+ interface DatePickerProps extends DatePickerBaseProps {
20
+ value?: Date;
21
+ onChange?: (date: Date | undefined) => void;
11
22
  }
12
- declare function DatePicker({ value, onChange, disabled, placeholder, className, }: DatePickerProps): React.JSX.Element;
13
- interface DateRangePickerProps {
23
+ declare function DatePicker({ value, onChange, disabled, placeholder, className, captionLayout, startMonth, endMonth, disabledDates, }: DatePickerProps): React.JSX.Element;
24
+ interface DateRangePickerProps extends DatePickerBaseProps {
14
25
  value?: DateRange;
15
26
  onChange?: (range: DateRange | undefined) => void;
16
- disabled?: boolean;
17
- placeholder?: string;
18
- className?: string;
19
27
  }
20
- declare function DateRangePicker({ value, onChange, disabled, placeholder, className, }: DateRangePickerProps): React.JSX.Element;
28
+ declare function DateRangePicker({ value, onChange, disabled, placeholder, className, captionLayout, startMonth, endMonth, disabledDates, }: DateRangePickerProps): React.JSX.Element;
21
29
 
22
30
  export { DatePicker, type DatePickerProps, DateRangePicker, type DateRangePickerProps };