@giddaa-housing/ui 0.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 (248) hide show
  1. package/README.md +41 -0
  2. package/dist/accordion.d.ts +11 -0
  3. package/dist/accordion.js +124 -0
  4. package/dist/accordion.js.map +1 -0
  5. package/dist/alert.d.ts +18 -0
  6. package/dist/alert.js +152 -0
  7. package/dist/alert.js.map +1 -0
  8. package/dist/avatar.d.ts +14 -0
  9. package/dist/avatar.js +152 -0
  10. package/dist/avatar.js.map +1 -0
  11. package/dist/badge.d.ts +14 -0
  12. package/dist/badge.js +119 -0
  13. package/dist/badge.js.map +1 -0
  14. package/dist/bar-chart.d.ts +136 -0
  15. package/dist/bar-chart.js +302 -0
  16. package/dist/bar-chart.js.map +1 -0
  17. package/dist/base.css +32 -0
  18. package/dist/breadcrumb.d.ts +12 -0
  19. package/dist/breadcrumb.js +161 -0
  20. package/dist/breadcrumb.js.map +1 -0
  21. package/dist/bullet-chart.d.ts +98 -0
  22. package/dist/bullet-chart.js +189 -0
  23. package/dist/bullet-chart.js.map +1 -0
  24. package/dist/button-group.d.ts +18 -0
  25. package/dist/button-group.js +170 -0
  26. package/dist/button-group.js.map +1 -0
  27. package/dist/button.d.ts +19 -0
  28. package/dist/button.js +146 -0
  29. package/dist/button.js.map +1 -0
  30. package/dist/calendar.d.ts +9 -0
  31. package/dist/calendar.js +293 -0
  32. package/dist/calendar.js.map +1 -0
  33. package/dist/card.d.ts +18 -0
  34. package/dist/card.js +186 -0
  35. package/dist/card.js.map +1 -0
  36. package/dist/carousel.d.ts +53 -0
  37. package/dist/carousel.js +396 -0
  38. package/dist/carousel.js.map +1 -0
  39. package/dist/chart.d.ts +122 -0
  40. package/dist/chart.js +494 -0
  41. package/dist/chart.js.map +1 -0
  42. package/dist/checkbox.d.ts +73 -0
  43. package/dist/checkbox.js +87 -0
  44. package/dist/checkbox.js.map +1 -0
  45. package/dist/collapsible.d.ts +8 -0
  46. package/dist/collapsible.js +82 -0
  47. package/dist/collapsible.js.map +1 -0
  48. package/dist/combobox.d.ts +30 -0
  49. package/dist/combobox.js +713 -0
  50. package/dist/combobox.js.map +1 -0
  51. package/dist/date-picker.d.ts +22 -0
  52. package/dist/date-picker.js +528 -0
  53. package/dist/date-picker.js.map +1 -0
  54. package/dist/dialog.d.ts +30 -0
  55. package/dist/dialog.js +339 -0
  56. package/dist/dialog.js.map +1 -0
  57. package/dist/dropdown-menu.d.ts +35 -0
  58. package/dist/dropdown-menu.js +376 -0
  59. package/dist/dropdown-menu.js.map +1 -0
  60. package/dist/dropzone.d.ts +128 -0
  61. package/dist/dropzone.js +490 -0
  62. package/dist/dropzone.js.map +1 -0
  63. package/dist/empty-state.d.ts +17 -0
  64. package/dist/empty-state.js +146 -0
  65. package/dist/empty-state.js.map +1 -0
  66. package/dist/field.d.ts +29 -0
  67. package/dist/field.js +345 -0
  68. package/dist/field.js.map +1 -0
  69. package/dist/files/red-hat-display-latin-300-italic.woff +0 -0
  70. package/dist/files/red-hat-display-latin-300-italic.woff2 +0 -0
  71. package/dist/files/red-hat-display-latin-300-normal.woff +0 -0
  72. package/dist/files/red-hat-display-latin-300-normal.woff2 +0 -0
  73. package/dist/files/red-hat-display-latin-400-italic.woff +0 -0
  74. package/dist/files/red-hat-display-latin-400-italic.woff2 +0 -0
  75. package/dist/files/red-hat-display-latin-400-normal.woff +0 -0
  76. package/dist/files/red-hat-display-latin-400-normal.woff2 +0 -0
  77. package/dist/files/red-hat-display-latin-500-italic.woff +0 -0
  78. package/dist/files/red-hat-display-latin-500-italic.woff2 +0 -0
  79. package/dist/files/red-hat-display-latin-500-normal.woff +0 -0
  80. package/dist/files/red-hat-display-latin-500-normal.woff2 +0 -0
  81. package/dist/files/red-hat-display-latin-600-italic.woff +0 -0
  82. package/dist/files/red-hat-display-latin-600-italic.woff2 +0 -0
  83. package/dist/files/red-hat-display-latin-600-normal.woff +0 -0
  84. package/dist/files/red-hat-display-latin-600-normal.woff2 +0 -0
  85. package/dist/files/red-hat-display-latin-700-italic.woff +0 -0
  86. package/dist/files/red-hat-display-latin-700-italic.woff2 +0 -0
  87. package/dist/files/red-hat-display-latin-700-normal.woff +0 -0
  88. package/dist/files/red-hat-display-latin-700-normal.woff2 +0 -0
  89. package/dist/files/red-hat-display-latin-800-italic.woff +0 -0
  90. package/dist/files/red-hat-display-latin-800-italic.woff2 +0 -0
  91. package/dist/files/red-hat-display-latin-800-normal.woff +0 -0
  92. package/dist/files/red-hat-display-latin-800-normal.woff2 +0 -0
  93. package/dist/files/red-hat-display-latin-900-italic.woff +0 -0
  94. package/dist/files/red-hat-display-latin-900-italic.woff2 +0 -0
  95. package/dist/files/red-hat-display-latin-900-normal.woff +0 -0
  96. package/dist/files/red-hat-display-latin-900-normal.woff2 +0 -0
  97. package/dist/files/red-hat-display-latin-ext-300-italic.woff +0 -0
  98. package/dist/files/red-hat-display-latin-ext-300-italic.woff2 +0 -0
  99. package/dist/files/red-hat-display-latin-ext-300-normal.woff +0 -0
  100. package/dist/files/red-hat-display-latin-ext-300-normal.woff2 +0 -0
  101. package/dist/files/red-hat-display-latin-ext-400-italic.woff +0 -0
  102. package/dist/files/red-hat-display-latin-ext-400-italic.woff2 +0 -0
  103. package/dist/files/red-hat-display-latin-ext-400-normal.woff +0 -0
  104. package/dist/files/red-hat-display-latin-ext-400-normal.woff2 +0 -0
  105. package/dist/files/red-hat-display-latin-ext-500-italic.woff +0 -0
  106. package/dist/files/red-hat-display-latin-ext-500-italic.woff2 +0 -0
  107. package/dist/files/red-hat-display-latin-ext-500-normal.woff +0 -0
  108. package/dist/files/red-hat-display-latin-ext-500-normal.woff2 +0 -0
  109. package/dist/files/red-hat-display-latin-ext-600-italic.woff +0 -0
  110. package/dist/files/red-hat-display-latin-ext-600-italic.woff2 +0 -0
  111. package/dist/files/red-hat-display-latin-ext-600-normal.woff +0 -0
  112. package/dist/files/red-hat-display-latin-ext-600-normal.woff2 +0 -0
  113. package/dist/files/red-hat-display-latin-ext-700-italic.woff +0 -0
  114. package/dist/files/red-hat-display-latin-ext-700-italic.woff2 +0 -0
  115. package/dist/files/red-hat-display-latin-ext-700-normal.woff +0 -0
  116. package/dist/files/red-hat-display-latin-ext-700-normal.woff2 +0 -0
  117. package/dist/files/red-hat-display-latin-ext-800-italic.woff +0 -0
  118. package/dist/files/red-hat-display-latin-ext-800-italic.woff2 +0 -0
  119. package/dist/files/red-hat-display-latin-ext-800-normal.woff +0 -0
  120. package/dist/files/red-hat-display-latin-ext-800-normal.woff2 +0 -0
  121. package/dist/files/red-hat-display-latin-ext-900-italic.woff +0 -0
  122. package/dist/files/red-hat-display-latin-ext-900-italic.woff2 +0 -0
  123. package/dist/files/red-hat-display-latin-ext-900-normal.woff +0 -0
  124. package/dist/files/red-hat-display-latin-ext-900-normal.woff2 +0 -0
  125. package/dist/funnel-chart.d.ts +84 -0
  126. package/dist/funnel-chart.js +569 -0
  127. package/dist/funnel-chart.js.map +1 -0
  128. package/dist/index.d.ts +87 -0
  129. package/dist/index.js +10448 -0
  130. package/dist/index.js.map +1 -0
  131. package/dist/input-group.d.ts +31 -0
  132. package/dist/input-group.js +380 -0
  133. package/dist/input-group.js.map +1 -0
  134. package/dist/input-size-context.d.ts +11 -0
  135. package/dist/input-size-context.js +24 -0
  136. package/dist/input-size-context.js.map +1 -0
  137. package/dist/input.d.ts +13 -0
  138. package/dist/input.js +83 -0
  139. package/dist/input.js.map +1 -0
  140. package/dist/item.d.ts +8 -0
  141. package/dist/item.js +93 -0
  142. package/dist/item.js.map +1 -0
  143. package/dist/kpi-card.d.ts +24 -0
  144. package/dist/kpi-card.js +243 -0
  145. package/dist/kpi-card.js.map +1 -0
  146. package/dist/label.d.ts +8 -0
  147. package/dist/label.js +68 -0
  148. package/dist/label.js.map +1 -0
  149. package/dist/line-chart.d.ts +155 -0
  150. package/dist/line-chart.js +269 -0
  151. package/dist/line-chart.js.map +1 -0
  152. package/dist/logo.d.ts +6 -0
  153. package/dist/logo.js +146 -0
  154. package/dist/logo.js.map +1 -0
  155. package/dist/number-input.d.ts +41 -0
  156. package/dist/number-input.js +418 -0
  157. package/dist/number-input.js.map +1 -0
  158. package/dist/page-header.d.ts +13 -0
  159. package/dist/page-header.js +113 -0
  160. package/dist/page-header.js.map +1 -0
  161. package/dist/pagination.d.ts +35 -0
  162. package/dist/pagination.js +352 -0
  163. package/dist/pagination.js.map +1 -0
  164. package/dist/password-input.d.ts +13 -0
  165. package/dist/password-input.js +356 -0
  166. package/dist/password-input.js.map +1 -0
  167. package/dist/phone-input.d.ts +21 -0
  168. package/dist/phone-input.js +573 -0
  169. package/dist/phone-input.js.map +1 -0
  170. package/dist/photo-gallery.d.ts +42 -0
  171. package/dist/photo-gallery.js +756 -0
  172. package/dist/photo-gallery.js.map +1 -0
  173. package/dist/pie-chart.d.ts +125 -0
  174. package/dist/pie-chart.js +192 -0
  175. package/dist/pie-chart.js.map +1 -0
  176. package/dist/popover.d.ts +20 -0
  177. package/dist/popover.js +169 -0
  178. package/dist/popover.js.map +1 -0
  179. package/dist/progress.d.ts +28 -0
  180. package/dist/progress.js +315 -0
  181. package/dist/progress.js.map +1 -0
  182. package/dist/radio-group.d.ts +32 -0
  183. package/dist/radio-group.js +100 -0
  184. package/dist/radio-group.js.map +1 -0
  185. package/dist/red-hat-display.css +2 -0
  186. package/dist/rich-text-editor.d.ts +16 -0
  187. package/dist/rich-text-editor.js +1000 -0
  188. package/dist/rich-text-editor.js.map +1 -0
  189. package/dist/search-input.d.ts +19 -0
  190. package/dist/search-input.js +411 -0
  191. package/dist/search-input.js.map +1 -0
  192. package/dist/select.d.ts +21 -0
  193. package/dist/select.js +305 -0
  194. package/dist/select.js.map +1 -0
  195. package/dist/separator.d.ts +10 -0
  196. package/dist/separator.js +72 -0
  197. package/dist/separator.js.map +1 -0
  198. package/dist/sheet.d.ts +24 -0
  199. package/dist/sheet.js +282 -0
  200. package/dist/sheet.js.map +1 -0
  201. package/dist/sidebar.d.ts +70 -0
  202. package/dist/sidebar.js +1078 -0
  203. package/dist/sidebar.js.map +1 -0
  204. package/dist/size-context.d.ts +11 -0
  205. package/dist/size-context.js +22 -0
  206. package/dist/size-context.js.map +1 -0
  207. package/dist/skeleton.d.ts +5 -0
  208. package/dist/skeleton.js +48 -0
  209. package/dist/skeleton.js.map +1 -0
  210. package/dist/sparkline.d.ts +94 -0
  211. package/dist/sparkline.js +568 -0
  212. package/dist/sparkline.js.map +1 -0
  213. package/dist/stepper.d.ts +43 -0
  214. package/dist/stepper.js +296 -0
  215. package/dist/stepper.js.map +1 -0
  216. package/dist/styles.css +2 -0
  217. package/dist/switch.d.ts +29 -0
  218. package/dist/switch.js +108 -0
  219. package/dist/switch.js.map +1 -0
  220. package/dist/tab-list.d.ts +38 -0
  221. package/dist/tab-list.js +394 -0
  222. package/dist/tab-list.js.map +1 -0
  223. package/dist/table.d.ts +69 -0
  224. package/dist/table.js +197 -0
  225. package/dist/table.js.map +1 -0
  226. package/dist/tabs.d.ts +18 -0
  227. package/dist/tabs.js +159 -0
  228. package/dist/tabs.js.map +1 -0
  229. package/dist/tag.d.ts +25 -0
  230. package/dist/tag.js +160 -0
  231. package/dist/tag.js.map +1 -0
  232. package/dist/textarea.d.ts +12 -0
  233. package/dist/textarea.js +78 -0
  234. package/dist/textarea.js.map +1 -0
  235. package/dist/theme/giddaa.css +2 -0
  236. package/dist/time-picker.d.ts +13 -0
  237. package/dist/time-picker.js +472 -0
  238. package/dist/time-picker.js.map +1 -0
  239. package/dist/toast.d.ts +23 -0
  240. package/dist/toast.js +330 -0
  241. package/dist/toast.js.map +1 -0
  242. package/dist/tooltip.d.ts +11 -0
  243. package/dist/tooltip.js +96 -0
  244. package/dist/tooltip.js.map +1 -0
  245. package/dist/tree-map.d.ts +127 -0
  246. package/dist/tree-map.js +652 -0
  247. package/dist/tree-map.js.map +1 -0
  248. package/package.json +328 -0
@@ -0,0 +1,376 @@
1
+ // src/components/ui/dropdown-menu.tsx
2
+ import { Menu as MenuPrimitive } from "@base-ui/react/menu";
3
+ import { cva } from "class-variance-authority";
4
+ import { CheckIcon, ChevronRightIcon } from "lucide-react";
5
+
6
+ // src/lib/cn.ts
7
+ import { clsx } from "clsx";
8
+ import { extendTailwindMerge } from "tailwind-merge";
9
+ var twMerge = extendTailwindMerge({
10
+ extend: {
11
+ classGroups: {
12
+ "font-size": [
13
+ {
14
+ text: [
15
+ "gdt-display",
16
+ "gdt-h1",
17
+ "gdt-h2",
18
+ "gdt-h3",
19
+ "gdt-h4",
20
+ "gdt-h5",
21
+ "gdt-xl",
22
+ "gdt-lg",
23
+ "gdt-md",
24
+ "gdt-sm",
25
+ "gdt-xs",
26
+ "gdt-subtext",
27
+ "gdt-capitalized"
28
+ ]
29
+ }
30
+ ]
31
+ }
32
+ }
33
+ });
34
+ function cn(...inputs) {
35
+ return twMerge(clsx(inputs));
36
+ }
37
+
38
+ // src/components/ui/size-context.tsx
39
+ import { createContext, useContext } from "react";
40
+ import { Fragment, jsx } from "react/jsx-runtime";
41
+ var SizeContext = createContext(void 0);
42
+ function SizeProvider({
43
+ children,
44
+ size
45
+ }) {
46
+ if (!size) {
47
+ return /* @__PURE__ */ jsx(Fragment, { children });
48
+ }
49
+ return /* @__PURE__ */ jsx(SizeContext.Provider, { value: size, children });
50
+ }
51
+ function useComponentSize(size, fallback = "md") {
52
+ const inheritedSize = useContext(SizeContext);
53
+ return size ?? inheritedSize ?? fallback;
54
+ }
55
+
56
+ // src/components/ui/dropdown-menu.tsx
57
+ import { jsx as jsx2, jsxs } from "react/jsx-runtime";
58
+ function DropdownMenu({
59
+ children,
60
+ size,
61
+ ...props
62
+ }) {
63
+ return /* @__PURE__ */ jsx2(SizeProvider, { size, children: /* @__PURE__ */ jsx2(MenuPrimitive.Root, { "data-slot": "dropdown-menu", ...props, children }) });
64
+ }
65
+ function DropdownMenuPortal({ ...props }) {
66
+ return /* @__PURE__ */ jsx2(MenuPrimitive.Portal, { "data-slot": "dropdown-menu-portal", ...props });
67
+ }
68
+ function DropdownMenuTrigger({ ...props }) {
69
+ return /* @__PURE__ */ jsx2(MenuPrimitive.Trigger, { "data-slot": "dropdown-menu-trigger", ...props });
70
+ }
71
+ var dropdownMenuContentVariants = cva(
72
+ "relative isolate z-50 max-h-(--available-height) w-(--anchor-width) min-w-36 origin-(--transform-origin) overflow-x-hidden overflow-y-auto border border-line-subtle bg-canvas text-fg-primary shadow-(--elevation-e1-shadow) duration-100 outline-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:overflow-hidden data-closed:fade-out-0 data-closed:zoom-out-95",
73
+ {
74
+ variants: {
75
+ size: {
76
+ sm: "rounded-lg p-1",
77
+ md: "rounded-xl p-1.5",
78
+ lg: "rounded-[18px] p-2"
79
+ }
80
+ },
81
+ defaultVariants: {
82
+ size: "md"
83
+ }
84
+ }
85
+ );
86
+ var dropdownMenuItemVariants = cva(
87
+ "group/dropdown-menu-item relative flex w-full cursor-pointer items-center font-normal text-fg-primary outline-none transition-colors select-none focus:bg-surface focus:text-fg-primary data-highlighted:bg-surface data-highlighted:text-fg-primary data-[variant=destructive]:text-fg-danger data-[variant=destructive]:focus:bg-surface-danger-subtle data-[variant=destructive]:focus:text-fg-danger data-[variant=destructive]:data-highlighted:bg-surface-danger-subtle data-[variant=destructive]:data-highlighted:text-fg-danger data-disabled:pointer-events-none data-disabled:text-fg-caption-placeholder data-disabled:opacity-100 [&_svg]:pointer-events-none [&_svg]:shrink-0 data-[variant=destructive]:[&_svg]:text-fg-danger",
88
+ {
89
+ variants: {
90
+ size: {
91
+ sm: "gap-1.5 rounded-md px-3 py-1.5 text-gdt-xs [&_svg:not([class*='size-'])]:size-3.5",
92
+ md: "gap-2 rounded-md px-4 py-2 text-gdt-sm [&_svg:not([class*='size-'])]:size-4",
93
+ lg: "gap-2.5 rounded-md px-4 py-2.5 text-gdt-md [&_svg:not([class*='size-'])]:size-4.5"
94
+ }
95
+ },
96
+ defaultVariants: {
97
+ size: "md"
98
+ }
99
+ }
100
+ );
101
+ var dropdownMenuLabelVariants = cva(
102
+ "font-medium text-fg-secondary data-inset:pl-8",
103
+ {
104
+ variants: {
105
+ size: {
106
+ sm: "px-3 py-1 text-gdt-xs",
107
+ md: "px-3 py-1 text-gdt-xs",
108
+ lg: "px-4 py-1.5 text-gdt-sm"
109
+ }
110
+ },
111
+ defaultVariants: {
112
+ size: "md"
113
+ }
114
+ }
115
+ );
116
+ function DropdownMenuContent({
117
+ align = "start",
118
+ alignOffset = 0,
119
+ side = "bottom",
120
+ sideOffset = 6,
121
+ className,
122
+ ...props
123
+ }) {
124
+ const resolvedSize = useComponentSize();
125
+ return /* @__PURE__ */ jsx2(MenuPrimitive.Portal, { children: /* @__PURE__ */ jsx2(
126
+ MenuPrimitive.Positioner,
127
+ {
128
+ className: "isolate z-50 outline-none",
129
+ align,
130
+ alignOffset,
131
+ side,
132
+ sideOffset,
133
+ children: /* @__PURE__ */ jsx2(
134
+ MenuPrimitive.Popup,
135
+ {
136
+ "data-slot": "dropdown-menu-content",
137
+ "data-size": resolvedSize,
138
+ className: cn(
139
+ dropdownMenuContentVariants({ size: resolvedSize }),
140
+ className
141
+ ),
142
+ ...props
143
+ }
144
+ )
145
+ }
146
+ ) });
147
+ }
148
+ function DropdownMenuGroup({ className, ...props }) {
149
+ return /* @__PURE__ */ jsx2(
150
+ MenuPrimitive.Group,
151
+ {
152
+ "data-slot": "dropdown-menu-group",
153
+ className: cn("scroll-my-1 space-y-0.5", className),
154
+ ...props
155
+ }
156
+ );
157
+ }
158
+ function DropdownMenuLabel({
159
+ className,
160
+ inset,
161
+ ...props
162
+ }) {
163
+ const resolvedSize = useComponentSize();
164
+ return /* @__PURE__ */ jsx2(
165
+ MenuPrimitive.GroupLabel,
166
+ {
167
+ "data-slot": "dropdown-menu-label",
168
+ "data-inset": inset,
169
+ className: cn(
170
+ dropdownMenuLabelVariants({ size: resolvedSize }),
171
+ className
172
+ ),
173
+ ...props
174
+ }
175
+ );
176
+ }
177
+ function DropdownMenuItem({
178
+ className,
179
+ inset,
180
+ variant = "default",
181
+ ...props
182
+ }) {
183
+ const resolvedSize = useComponentSize();
184
+ return /* @__PURE__ */ jsx2(
185
+ MenuPrimitive.Item,
186
+ {
187
+ "data-slot": "dropdown-menu-item",
188
+ "data-inset": inset,
189
+ "data-size": resolvedSize,
190
+ "data-variant": variant,
191
+ className: cn(
192
+ dropdownMenuItemVariants({ size: resolvedSize }),
193
+ "data-inset:pl-8",
194
+ className
195
+ ),
196
+ ...props
197
+ }
198
+ );
199
+ }
200
+ function DropdownMenuSub({ ...props }) {
201
+ return /* @__PURE__ */ jsx2(MenuPrimitive.SubmenuRoot, { "data-slot": "dropdown-menu-sub", ...props });
202
+ }
203
+ function DropdownMenuSubTrigger({
204
+ className,
205
+ inset,
206
+ children,
207
+ ...props
208
+ }) {
209
+ const resolvedSize = useComponentSize();
210
+ return /* @__PURE__ */ jsxs(
211
+ MenuPrimitive.SubmenuTrigger,
212
+ {
213
+ "data-slot": "dropdown-menu-sub-trigger",
214
+ "data-inset": inset,
215
+ "data-size": resolvedSize,
216
+ className: cn(
217
+ dropdownMenuItemVariants({ size: resolvedSize }),
218
+ "data-inset:pl-8 data-open:bg-surface data-open:text-fg-primary data-popup-open:bg-surface data-popup-open:text-fg-primary",
219
+ className
220
+ ),
221
+ ...props,
222
+ children: [
223
+ children,
224
+ /* @__PURE__ */ jsx2(ChevronRightIcon, { className: "cn-rtl-flip ml-auto" })
225
+ ]
226
+ }
227
+ );
228
+ }
229
+ function DropdownMenuSubContent({
230
+ align = "start",
231
+ alignOffset = -3,
232
+ side = "right",
233
+ sideOffset = 4,
234
+ className,
235
+ ...props
236
+ }) {
237
+ return /* @__PURE__ */ jsx2(
238
+ DropdownMenuContent,
239
+ {
240
+ "data-slot": "dropdown-menu-sub-content",
241
+ className: cn(
242
+ "w-auto min-w-28 shadow-(--elevation-e2-shadow)",
243
+ className
244
+ ),
245
+ align,
246
+ alignOffset,
247
+ side,
248
+ sideOffset,
249
+ ...props
250
+ }
251
+ );
252
+ }
253
+ function DropdownMenuCheckboxItem({
254
+ className,
255
+ children,
256
+ checked,
257
+ inset,
258
+ ...props
259
+ }) {
260
+ const resolvedSize = useComponentSize();
261
+ return /* @__PURE__ */ jsxs(
262
+ MenuPrimitive.CheckboxItem,
263
+ {
264
+ "data-slot": "dropdown-menu-checkbox-item",
265
+ "data-inset": inset,
266
+ "data-size": resolvedSize,
267
+ className: cn(
268
+ dropdownMenuItemVariants({ size: resolvedSize }),
269
+ "pr-10 data-inset:pl-8",
270
+ className
271
+ ),
272
+ checked,
273
+ ...props,
274
+ children: [
275
+ /* @__PURE__ */ jsx2(
276
+ "span",
277
+ {
278
+ className: "pointer-events-none absolute right-3 flex items-center justify-center text-fg-brand",
279
+ "data-slot": "dropdown-menu-checkbox-item-indicator",
280
+ children: /* @__PURE__ */ jsx2(MenuPrimitive.CheckboxItemIndicator, { children: /* @__PURE__ */ jsx2(CheckIcon, {}) })
281
+ }
282
+ ),
283
+ children
284
+ ]
285
+ }
286
+ );
287
+ }
288
+ function DropdownMenuRadioGroup({ ...props }) {
289
+ return /* @__PURE__ */ jsx2(
290
+ MenuPrimitive.RadioGroup,
291
+ {
292
+ "data-slot": "dropdown-menu-radio-group",
293
+ ...props
294
+ }
295
+ );
296
+ }
297
+ function DropdownMenuRadioItem({
298
+ className,
299
+ children,
300
+ inset,
301
+ ...props
302
+ }) {
303
+ const resolvedSize = useComponentSize();
304
+ return /* @__PURE__ */ jsxs(
305
+ MenuPrimitive.RadioItem,
306
+ {
307
+ "data-slot": "dropdown-menu-radio-item",
308
+ "data-inset": inset,
309
+ "data-size": resolvedSize,
310
+ className: cn(
311
+ dropdownMenuItemVariants({ size: resolvedSize }),
312
+ "pr-10 data-inset:pl-8",
313
+ className
314
+ ),
315
+ ...props,
316
+ children: [
317
+ /* @__PURE__ */ jsx2(
318
+ "span",
319
+ {
320
+ className: "pointer-events-none absolute right-3 flex items-center justify-center text-fg-brand",
321
+ "data-slot": "dropdown-menu-radio-item-indicator",
322
+ children: /* @__PURE__ */ jsx2(MenuPrimitive.RadioItemIndicator, { children: /* @__PURE__ */ jsx2(CheckIcon, {}) })
323
+ }
324
+ ),
325
+ children
326
+ ]
327
+ }
328
+ );
329
+ }
330
+ function DropdownMenuSeparator({
331
+ className,
332
+ ...props
333
+ }) {
334
+ return /* @__PURE__ */ jsx2(
335
+ MenuPrimitive.Separator,
336
+ {
337
+ "data-slot": "dropdown-menu-separator",
338
+ className: cn("pointer-events-none my-1 h-px bg-line-subtle", className),
339
+ ...props
340
+ }
341
+ );
342
+ }
343
+ function DropdownMenuShortcut({
344
+ className,
345
+ ...props
346
+ }) {
347
+ return /* @__PURE__ */ jsx2(
348
+ "span",
349
+ {
350
+ "data-slot": "dropdown-menu-shortcut",
351
+ className: cn(
352
+ "ml-auto text-gdt-xs tracking-widest text-fg-secondary group-focus/dropdown-menu-item:text-fg-primary group-data-highlighted/dropdown-menu-item:text-fg-primary",
353
+ className
354
+ ),
355
+ ...props
356
+ }
357
+ );
358
+ }
359
+ export {
360
+ DropdownMenu,
361
+ DropdownMenuCheckboxItem,
362
+ DropdownMenuContent,
363
+ DropdownMenuGroup,
364
+ DropdownMenuItem,
365
+ DropdownMenuLabel,
366
+ DropdownMenuPortal,
367
+ DropdownMenuRadioGroup,
368
+ DropdownMenuRadioItem,
369
+ DropdownMenuSeparator,
370
+ DropdownMenuShortcut,
371
+ DropdownMenuSub,
372
+ DropdownMenuSubContent,
373
+ DropdownMenuSubTrigger,
374
+ DropdownMenuTrigger
375
+ };
376
+ //# sourceMappingURL=dropdown-menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ui/dropdown-menu.tsx","../src/lib/cn.ts","../src/components/ui/size-context.tsx"],"sourcesContent":["\"use client\";\n\nimport { Menu as MenuPrimitive } from \"@base-ui/react/menu\";\nimport { cva } from \"class-variance-authority\";\nimport { CheckIcon, ChevronRightIcon } from \"lucide-react\";\nimport type * as React from \"react\";\n\nimport { cn } from \"../../lib/cn\";\nimport {\n\ttype ComponentSize,\n\tSizeProvider,\n\tuseComponentSize,\n} from \"./size-context\";\n\ntype DropdownMenuSize = ComponentSize;\n\nfunction DropdownMenu({\n\tchildren,\n\tsize,\n\t...props\n}: MenuPrimitive.Root.Props & {\n\tsize?: DropdownMenuSize;\n}) {\n\treturn (\n\t\t<SizeProvider size={size}>\n\t\t\t<MenuPrimitive.Root data-slot=\"dropdown-menu\" {...props}>\n\t\t\t\t{children}\n\t\t\t</MenuPrimitive.Root>\n\t\t</SizeProvider>\n\t);\n}\n\nfunction DropdownMenuPortal({ ...props }: MenuPrimitive.Portal.Props) {\n\treturn <MenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />;\n}\n\nfunction DropdownMenuTrigger({ ...props }: MenuPrimitive.Trigger.Props) {\n\treturn <MenuPrimitive.Trigger data-slot=\"dropdown-menu-trigger\" {...props} />;\n}\n\nconst dropdownMenuContentVariants = cva(\n\t\"relative isolate z-50 max-h-(--available-height) w-(--anchor-width) min-w-36 origin-(--transform-origin) overflow-x-hidden overflow-y-auto border border-line-subtle bg-canvas text-fg-primary shadow-(--elevation-e1-shadow) duration-100 outline-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:overflow-hidden data-closed:fade-out-0 data-closed:zoom-out-95\",\n\t{\n\t\tvariants: {\n\t\t\tsize: {\n\t\t\t\tsm: \"rounded-lg p-1\",\n\t\t\t\tmd: \"rounded-xl p-1.5\",\n\t\t\t\tlg: \"rounded-[18px] p-2\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tsize: \"md\",\n\t\t},\n\t},\n);\n\nconst dropdownMenuItemVariants = cva(\n\t\"group/dropdown-menu-item relative flex w-full cursor-pointer items-center font-normal text-fg-primary outline-none transition-colors select-none focus:bg-surface focus:text-fg-primary data-highlighted:bg-surface data-highlighted:text-fg-primary data-[variant=destructive]:text-fg-danger data-[variant=destructive]:focus:bg-surface-danger-subtle data-[variant=destructive]:focus:text-fg-danger data-[variant=destructive]:data-highlighted:bg-surface-danger-subtle data-[variant=destructive]:data-highlighted:text-fg-danger data-disabled:pointer-events-none data-disabled:text-fg-caption-placeholder data-disabled:opacity-100 [&_svg]:pointer-events-none [&_svg]:shrink-0 data-[variant=destructive]:[&_svg]:text-fg-danger\",\n\t{\n\t\tvariants: {\n\t\t\tsize: {\n\t\t\t\tsm: \"gap-1.5 rounded-md px-3 py-1.5 text-gdt-xs [&_svg:not([class*='size-'])]:size-3.5\",\n\t\t\t\tmd: \"gap-2 rounded-md px-4 py-2 text-gdt-sm [&_svg:not([class*='size-'])]:size-4\",\n\t\t\t\tlg: \"gap-2.5 rounded-md px-4 py-2.5 text-gdt-md [&_svg:not([class*='size-'])]:size-4.5\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tsize: \"md\",\n\t\t},\n\t},\n);\n\nconst dropdownMenuLabelVariants = cva(\n\t\"font-medium text-fg-secondary data-inset:pl-8\",\n\t{\n\t\tvariants: {\n\t\t\tsize: {\n\t\t\t\tsm: \"px-3 py-1 text-gdt-xs\",\n\t\t\t\tmd: \"px-3 py-1 text-gdt-xs\",\n\t\t\t\tlg: \"px-4 py-1.5 text-gdt-sm\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tsize: \"md\",\n\t\t},\n\t},\n);\n\nfunction DropdownMenuContent({\n\talign = \"start\",\n\talignOffset = 0,\n\tside = \"bottom\",\n\tsideOffset = 6,\n\tclassName,\n\t...props\n}: MenuPrimitive.Popup.Props &\n\tPick<\n\t\tMenuPrimitive.Positioner.Props,\n\t\t\"align\" | \"alignOffset\" | \"side\" | \"sideOffset\"\n\t>) {\n\tconst resolvedSize = useComponentSize();\n\n\treturn (\n\t\t<MenuPrimitive.Portal>\n\t\t\t<MenuPrimitive.Positioner\n\t\t\t\tclassName=\"isolate z-50 outline-none\"\n\t\t\t\talign={align}\n\t\t\t\talignOffset={alignOffset}\n\t\t\t\tside={side}\n\t\t\t\tsideOffset={sideOffset}\n\t\t\t>\n\t\t\t\t<MenuPrimitive.Popup\n\t\t\t\t\tdata-slot=\"dropdown-menu-content\"\n\t\t\t\t\tdata-size={resolvedSize}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\tdropdownMenuContentVariants({ size: resolvedSize }),\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\t\t\t</MenuPrimitive.Positioner>\n\t\t</MenuPrimitive.Portal>\n\t);\n}\n\nfunction DropdownMenuGroup({ className, ...props }: MenuPrimitive.Group.Props) {\n\treturn (\n\t\t<MenuPrimitive.Group\n\t\t\tdata-slot=\"dropdown-menu-group\"\n\t\t\tclassName={cn(\"scroll-my-1 space-y-0.5\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction DropdownMenuLabel({\n\tclassName,\n\tinset,\n\t...props\n}: MenuPrimitive.GroupLabel.Props & {\n\tinset?: boolean;\n}) {\n\tconst resolvedSize = useComponentSize();\n\n\treturn (\n\t\t<MenuPrimitive.GroupLabel\n\t\t\tdata-slot=\"dropdown-menu-label\"\n\t\t\tdata-inset={inset}\n\t\t\tclassName={cn(\n\t\t\t\tdropdownMenuLabelVariants({ size: resolvedSize }),\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction DropdownMenuItem({\n\tclassName,\n\tinset,\n\tvariant = \"default\",\n\t...props\n}: MenuPrimitive.Item.Props & {\n\tinset?: boolean;\n\tvariant?: \"default\" | \"destructive\";\n}) {\n\tconst resolvedSize = useComponentSize();\n\n\treturn (\n\t\t<MenuPrimitive.Item\n\t\t\tdata-slot=\"dropdown-menu-item\"\n\t\t\tdata-inset={inset}\n\t\t\tdata-size={resolvedSize}\n\t\t\tdata-variant={variant}\n\t\t\tclassName={cn(\n\t\t\t\tdropdownMenuItemVariants({ size: resolvedSize }),\n\t\t\t\t\"data-inset:pl-8\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction DropdownMenuSub({ ...props }: MenuPrimitive.SubmenuRoot.Props) {\n\treturn <MenuPrimitive.SubmenuRoot data-slot=\"dropdown-menu-sub\" {...props} />;\n}\n\nfunction DropdownMenuSubTrigger({\n\tclassName,\n\tinset,\n\tchildren,\n\t...props\n}: MenuPrimitive.SubmenuTrigger.Props & {\n\tinset?: boolean;\n}) {\n\tconst resolvedSize = useComponentSize();\n\n\treturn (\n\t\t<MenuPrimitive.SubmenuTrigger\n\t\t\tdata-slot=\"dropdown-menu-sub-trigger\"\n\t\t\tdata-inset={inset}\n\t\t\tdata-size={resolvedSize}\n\t\t\tclassName={cn(\n\t\t\t\tdropdownMenuItemVariants({ size: resolvedSize }),\n\t\t\t\t\"data-inset:pl-8 data-open:bg-surface data-open:text-fg-primary data-popup-open:bg-surface data-popup-open:text-fg-primary\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t\t<ChevronRightIcon className=\"cn-rtl-flip ml-auto\" />\n\t\t</MenuPrimitive.SubmenuTrigger>\n\t);\n}\n\nfunction DropdownMenuSubContent({\n\talign = \"start\",\n\talignOffset = -3,\n\tside = \"right\",\n\tsideOffset = 4,\n\tclassName,\n\t...props\n}: React.ComponentProps<typeof DropdownMenuContent>) {\n\treturn (\n\t\t<DropdownMenuContent\n\t\t\tdata-slot=\"dropdown-menu-sub-content\"\n\t\t\tclassName={cn(\n\t\t\t\t\"w-auto min-w-28 shadow-(--elevation-e2-shadow)\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\talign={align}\n\t\t\talignOffset={alignOffset}\n\t\t\tside={side}\n\t\t\tsideOffset={sideOffset}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction DropdownMenuCheckboxItem({\n\tclassName,\n\tchildren,\n\tchecked,\n\tinset,\n\t...props\n}: MenuPrimitive.CheckboxItem.Props & {\n\tinset?: boolean;\n}) {\n\tconst resolvedSize = useComponentSize();\n\n\treturn (\n\t\t<MenuPrimitive.CheckboxItem\n\t\t\tdata-slot=\"dropdown-menu-checkbox-item\"\n\t\t\tdata-inset={inset}\n\t\t\tdata-size={resolvedSize}\n\t\t\tclassName={cn(\n\t\t\t\tdropdownMenuItemVariants({ size: resolvedSize }),\n\t\t\t\t\"pr-10 data-inset:pl-8\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tchecked={checked}\n\t\t\t{...props}\n\t\t>\n\t\t\t<span\n\t\t\t\tclassName=\"pointer-events-none absolute right-3 flex items-center justify-center text-fg-brand\"\n\t\t\t\tdata-slot=\"dropdown-menu-checkbox-item-indicator\"\n\t\t\t>\n\t\t\t\t<MenuPrimitive.CheckboxItemIndicator>\n\t\t\t\t\t<CheckIcon />\n\t\t\t\t</MenuPrimitive.CheckboxItemIndicator>\n\t\t\t</span>\n\t\t\t{children}\n\t\t</MenuPrimitive.CheckboxItem>\n\t);\n}\n\nfunction DropdownMenuRadioGroup({ ...props }: MenuPrimitive.RadioGroup.Props) {\n\treturn (\n\t\t<MenuPrimitive.RadioGroup\n\t\t\tdata-slot=\"dropdown-menu-radio-group\"\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction DropdownMenuRadioItem({\n\tclassName,\n\tchildren,\n\tinset,\n\t...props\n}: MenuPrimitive.RadioItem.Props & {\n\tinset?: boolean;\n}) {\n\tconst resolvedSize = useComponentSize();\n\n\treturn (\n\t\t<MenuPrimitive.RadioItem\n\t\t\tdata-slot=\"dropdown-menu-radio-item\"\n\t\t\tdata-inset={inset}\n\t\t\tdata-size={resolvedSize}\n\t\t\tclassName={cn(\n\t\t\t\tdropdownMenuItemVariants({ size: resolvedSize }),\n\t\t\t\t\"pr-10 data-inset:pl-8\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<span\n\t\t\t\tclassName=\"pointer-events-none absolute right-3 flex items-center justify-center text-fg-brand\"\n\t\t\t\tdata-slot=\"dropdown-menu-radio-item-indicator\"\n\t\t\t>\n\t\t\t\t<MenuPrimitive.RadioItemIndicator>\n\t\t\t\t\t<CheckIcon />\n\t\t\t\t</MenuPrimitive.RadioItemIndicator>\n\t\t\t</span>\n\t\t\t{children}\n\t\t</MenuPrimitive.RadioItem>\n\t);\n}\n\nfunction DropdownMenuSeparator({\n\tclassName,\n\t...props\n}: MenuPrimitive.Separator.Props) {\n\treturn (\n\t\t<MenuPrimitive.Separator\n\t\t\tdata-slot=\"dropdown-menu-separator\"\n\t\t\tclassName={cn(\"pointer-events-none my-1 h-px bg-line-subtle\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction DropdownMenuShortcut({\n\tclassName,\n\t...props\n}: React.ComponentProps<\"span\">) {\n\treturn (\n\t\t<span\n\t\t\tdata-slot=\"dropdown-menu-shortcut\"\n\t\t\tclassName={cn(\n\t\t\t\t\"ml-auto text-gdt-xs tracking-widest text-fg-secondary group-focus/dropdown-menu-item:text-fg-primary group-data-highlighted/dropdown-menu-item:text-fg-primary\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport {\n\tDropdownMenu,\n\tDropdownMenuPortal,\n\tDropdownMenuTrigger,\n\tDropdownMenuContent,\n\tDropdownMenuGroup,\n\tDropdownMenuLabel,\n\tDropdownMenuItem,\n\tDropdownMenuCheckboxItem,\n\tDropdownMenuRadioGroup,\n\tDropdownMenuRadioItem,\n\tDropdownMenuSeparator,\n\tDropdownMenuShortcut,\n\tDropdownMenuSub,\n\tDropdownMenuSubTrigger,\n\tDropdownMenuSubContent,\n\ttype DropdownMenuSize,\n};\n","import { type ClassValue, clsx } from \"clsx\";\nimport { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({\n\textend: {\n\t\tclassGroups: {\n\t\t\t\"font-size\": [\n\t\t\t\t{\n\t\t\t\t\ttext: [\n\t\t\t\t\t\t\"gdt-display\",\n\t\t\t\t\t\t\"gdt-h1\",\n\t\t\t\t\t\t\"gdt-h2\",\n\t\t\t\t\t\t\"gdt-h3\",\n\t\t\t\t\t\t\"gdt-h4\",\n\t\t\t\t\t\t\"gdt-h5\",\n\t\t\t\t\t\t\"gdt-xl\",\n\t\t\t\t\t\t\"gdt-lg\",\n\t\t\t\t\t\t\"gdt-md\",\n\t\t\t\t\t\t\"gdt-sm\",\n\t\t\t\t\t\t\"gdt-xs\",\n\t\t\t\t\t\t\"gdt-subtext\",\n\t\t\t\t\t\t\"gdt-capitalized\",\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t},\n});\n\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n","\"use client\";\n\nimport { createContext, type ReactNode, useContext } from \"react\";\n\ntype ComponentSize = \"sm\" | \"md\" | \"lg\";\n\nconst SizeContext = createContext<ComponentSize | undefined>(undefined);\n\nfunction SizeProvider({\n\tchildren,\n\tsize,\n}: {\n\tchildren: ReactNode;\n\tsize?: ComponentSize | null;\n}) {\n\tif (!size) {\n\t\treturn <>{children}</>;\n\t}\n\n\treturn <SizeContext.Provider value={size}>{children}</SizeContext.Provider>;\n}\n\nfunction useComponentSize(\n\tsize?: ComponentSize | null,\n\tfallback: ComponentSize = \"md\",\n) {\n\tconst inheritedSize = useContext(SizeContext);\n\treturn size ?? inheritedSize ?? fallback;\n}\n\nexport { SizeProvider, useComponentSize, type ComponentSize };\n"],"mappings":"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","names":["jsx"]}
@@ -0,0 +1,128 @@
1
+ import * as React from 'react';
2
+ import { ComponentPropsWithoutRef, Ref, DragEvent, ChangeEvent, RefObject, ReactNode, ComponentProps } from 'react';
3
+
4
+ type FilePickerErrorCode = "file-invalid-type" | "file-too-large" | "too-many-files";
5
+ type FilePickerError = {
6
+ code: FilePickerErrorCode;
7
+ message: string;
8
+ };
9
+ type FileRejection = {
10
+ file: File;
11
+ errors: FilePickerError[];
12
+ };
13
+ type FilePickerResult = {
14
+ acceptedFiles: File[];
15
+ rejectedFiles: FileRejection[];
16
+ };
17
+ type UseFilePickerOptions = {
18
+ accept?: string;
19
+ disabled?: boolean;
20
+ maxFiles?: number;
21
+ maxSize?: number;
22
+ multiple?: boolean;
23
+ onFilesAccepted?: (files: File[]) => void;
24
+ onFilesChange?: (result: FilePickerResult) => void;
25
+ onFilesRejected?: (rejectedFiles: FileRejection[]) => void;
26
+ };
27
+ type FilePickerInputProps = Omit<ComponentPropsWithoutRef<"input">, "type" | "accept" | "multiple"> & {
28
+ accept?: string;
29
+ multiple?: boolean;
30
+ ref?: Ref<HTMLInputElement>;
31
+ };
32
+ type UseFilePickerReturn = {
33
+ getInputProps: (props?: FilePickerInputProps) => FilePickerInputProps & {
34
+ type: "file";
35
+ ref: Ref<HTMLInputElement>;
36
+ };
37
+ handleDragEnter: (event: DragEvent<HTMLElement>) => void;
38
+ handleDragLeave: (event: DragEvent<HTMLElement>) => void;
39
+ handleDragOver: (event: DragEvent<HTMLElement>) => void;
40
+ handleDrop: (event: DragEvent<HTMLElement>) => void;
41
+ handleFileChange: (event: ChangeEvent<HTMLInputElement>) => void;
42
+ inputRef: RefObject<HTMLInputElement | null>;
43
+ isDragging: boolean;
44
+ openFileDialog: () => void;
45
+ pickFiles: (files: FileList | File[]) => FilePickerResult;
46
+ };
47
+
48
+ type DropzoneContextValue = Pick<UseFilePickerReturn, "isDragging" | "openFileDialog" | "getInputProps" | "handleDragEnter" | "handleDragLeave" | "handleDragOver" | "handleDrop"> & {
49
+ isDisabled: boolean;
50
+ };
51
+ declare function useDropzoneContext(): DropzoneContextValue;
52
+ interface DropzoneProps extends UseFilePickerOptions {
53
+ children?: ReactNode;
54
+ className?: string;
55
+ }
56
+ /**
57
+ * Context provider that owns the `useFilePicker` instance.
58
+ * Wrap `<DropzoneArea>` and `<DropzoneInput>` (plus any content helpers)
59
+ * inside this component.
60
+ *
61
+ * @example
62
+ * ```tsx
63
+ * <Dropzone accept="image/*" multiple maxFiles={5} onFilesAccepted={handleFiles}>
64
+ * <DropzoneArea>
65
+ * <DropzoneIcon />
66
+ * <DropzoneTitle>Choose a file or drag & drop</DropzoneTitle>
67
+ * <DropzoneDescription>JPEG, PNG – up to 2 MB</DropzoneDescription>
68
+ * <DropzoneTrigger />
69
+ * </DropzoneArea>
70
+ * <DropzoneInput />
71
+ * </Dropzone>
72
+ * ```
73
+ */
74
+ declare function Dropzone({ children, className, disabled, ...options }: DropzoneProps): React.JSX.Element;
75
+ interface DropzoneAreaProps extends Omit<ComponentProps<"div">, "onClick" | "onKeyDown"> {
76
+ /**
77
+ * Accessible label for the drop zone.
78
+ * Defaults to a sensible description.
79
+ */
80
+ label?: string;
81
+ }
82
+ /**
83
+ * The visual, interactive drop zone.
84
+ *
85
+ * - Behaves as a `button` (role, tabIndex, Enter/Space keyboard support).
86
+ * - Announces drag-state changes to screen readers via a live region.
87
+ * - Applies design-token-based styles and reacts to `data-dragging` /
88
+ * `data-disabled` for visual feedback.
89
+ */
90
+ declare function DropzoneArea({ children, className, label, ...props }: DropzoneAreaProps): React.JSX.Element;
91
+ type DropzoneInputProps = Omit<ComponentProps<"input">, "type">;
92
+ /**
93
+ * The hidden `<input type="file">` that backs the drop zone.
94
+ * Rendered off-screen (not `display:none`) so it remains accessible.
95
+ * Place it as a sibling to `<DropzoneArea>` inside `<Dropzone>`.
96
+ */
97
+ declare function DropzoneInput({ className, ...props }: DropzoneInputProps): React.JSX.Element;
98
+ type DropzoneStateLabelProps = {
99
+ children?: ReactNode;
100
+ disabledLabel?: ReactNode;
101
+ draggingLabel?: ReactNode;
102
+ idleLabel?: ReactNode;
103
+ };
104
+ type DropzoneTextProps = Omit<ComponentProps<"p">, "children"> & DropzoneStateLabelProps;
105
+ /**
106
+ * A centred, brand-coloured icon container pre-populated with an upload cloud
107
+ * icon. Pass `children` to swap the icon.
108
+ */
109
+ declare function DropzoneIcon({ className, children, ...props }: ComponentProps<"div">): React.JSX.Element;
110
+ /**
111
+ * Primary heading text inside the drop zone.
112
+ */
113
+ declare function DropzoneTitle({ className, children, disabledLabel, draggingLabel, idleLabel, ...props }: DropzoneTextProps): React.JSX.Element;
114
+ /**
115
+ * Secondary descriptive text inside the drop zone (file-type hints, size
116
+ * limits, etc.).
117
+ */
118
+ declare function DropzoneDescription({ className, children, disabledLabel, draggingLabel, idleLabel, ...props }: DropzoneTextProps): React.JSX.Element;
119
+ /**
120
+ * A decorative "Browse File" pill that visually suggests the click action.
121
+ *
122
+ * This element is `aria-hidden` because the surrounding `<DropzoneArea>`
123
+ * already exposes a labelled `button` role to assistive technologies.
124
+ * The pill is purely a visual affordance.
125
+ */
126
+ declare function DropzoneTrigger({ className, children, ...props }: ComponentProps<"span">): React.JSX.Element;
127
+
128
+ export { Dropzone, DropzoneArea, DropzoneDescription, DropzoneIcon, DropzoneInput, DropzoneTitle, DropzoneTrigger, useDropzoneContext };