@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.
- package/README.md +41 -0
- package/dist/accordion.d.ts +11 -0
- package/dist/accordion.js +124 -0
- package/dist/accordion.js.map +1 -0
- package/dist/alert.d.ts +18 -0
- package/dist/alert.js +152 -0
- package/dist/alert.js.map +1 -0
- package/dist/avatar.d.ts +14 -0
- package/dist/avatar.js +152 -0
- package/dist/avatar.js.map +1 -0
- package/dist/badge.d.ts +14 -0
- package/dist/badge.js +119 -0
- package/dist/badge.js.map +1 -0
- package/dist/bar-chart.d.ts +136 -0
- package/dist/bar-chart.js +302 -0
- package/dist/bar-chart.js.map +1 -0
- package/dist/base.css +32 -0
- package/dist/breadcrumb.d.ts +12 -0
- package/dist/breadcrumb.js +161 -0
- package/dist/breadcrumb.js.map +1 -0
- package/dist/bullet-chart.d.ts +98 -0
- package/dist/bullet-chart.js +189 -0
- package/dist/bullet-chart.js.map +1 -0
- package/dist/button-group.d.ts +18 -0
- package/dist/button-group.js +170 -0
- package/dist/button-group.js.map +1 -0
- package/dist/button.d.ts +19 -0
- package/dist/button.js +146 -0
- package/dist/button.js.map +1 -0
- package/dist/calendar.d.ts +9 -0
- package/dist/calendar.js +293 -0
- package/dist/calendar.js.map +1 -0
- package/dist/card.d.ts +18 -0
- package/dist/card.js +186 -0
- package/dist/card.js.map +1 -0
- package/dist/carousel.d.ts +53 -0
- package/dist/carousel.js +396 -0
- package/dist/carousel.js.map +1 -0
- package/dist/chart.d.ts +122 -0
- package/dist/chart.js +494 -0
- package/dist/chart.js.map +1 -0
- package/dist/checkbox.d.ts +73 -0
- package/dist/checkbox.js +87 -0
- package/dist/checkbox.js.map +1 -0
- package/dist/collapsible.d.ts +8 -0
- package/dist/collapsible.js +82 -0
- package/dist/collapsible.js.map +1 -0
- package/dist/combobox.d.ts +30 -0
- package/dist/combobox.js +713 -0
- package/dist/combobox.js.map +1 -0
- package/dist/date-picker.d.ts +22 -0
- package/dist/date-picker.js +528 -0
- package/dist/date-picker.js.map +1 -0
- package/dist/dialog.d.ts +30 -0
- package/dist/dialog.js +339 -0
- package/dist/dialog.js.map +1 -0
- package/dist/dropdown-menu.d.ts +35 -0
- package/dist/dropdown-menu.js +376 -0
- package/dist/dropdown-menu.js.map +1 -0
- package/dist/dropzone.d.ts +128 -0
- package/dist/dropzone.js +490 -0
- package/dist/dropzone.js.map +1 -0
- package/dist/empty-state.d.ts +17 -0
- package/dist/empty-state.js +146 -0
- package/dist/empty-state.js.map +1 -0
- package/dist/field.d.ts +29 -0
- package/dist/field.js +345 -0
- package/dist/field.js.map +1 -0
- package/dist/files/red-hat-display-latin-300-italic.woff +0 -0
- package/dist/files/red-hat-display-latin-300-italic.woff2 +0 -0
- package/dist/files/red-hat-display-latin-300-normal.woff +0 -0
- package/dist/files/red-hat-display-latin-300-normal.woff2 +0 -0
- package/dist/files/red-hat-display-latin-400-italic.woff +0 -0
- package/dist/files/red-hat-display-latin-400-italic.woff2 +0 -0
- package/dist/files/red-hat-display-latin-400-normal.woff +0 -0
- package/dist/files/red-hat-display-latin-400-normal.woff2 +0 -0
- package/dist/files/red-hat-display-latin-500-italic.woff +0 -0
- package/dist/files/red-hat-display-latin-500-italic.woff2 +0 -0
- package/dist/files/red-hat-display-latin-500-normal.woff +0 -0
- package/dist/files/red-hat-display-latin-500-normal.woff2 +0 -0
- package/dist/files/red-hat-display-latin-600-italic.woff +0 -0
- package/dist/files/red-hat-display-latin-600-italic.woff2 +0 -0
- package/dist/files/red-hat-display-latin-600-normal.woff +0 -0
- package/dist/files/red-hat-display-latin-600-normal.woff2 +0 -0
- package/dist/files/red-hat-display-latin-700-italic.woff +0 -0
- package/dist/files/red-hat-display-latin-700-italic.woff2 +0 -0
- package/dist/files/red-hat-display-latin-700-normal.woff +0 -0
- package/dist/files/red-hat-display-latin-700-normal.woff2 +0 -0
- package/dist/files/red-hat-display-latin-800-italic.woff +0 -0
- package/dist/files/red-hat-display-latin-800-italic.woff2 +0 -0
- package/dist/files/red-hat-display-latin-800-normal.woff +0 -0
- package/dist/files/red-hat-display-latin-800-normal.woff2 +0 -0
- package/dist/files/red-hat-display-latin-900-italic.woff +0 -0
- package/dist/files/red-hat-display-latin-900-italic.woff2 +0 -0
- package/dist/files/red-hat-display-latin-900-normal.woff +0 -0
- package/dist/files/red-hat-display-latin-900-normal.woff2 +0 -0
- package/dist/files/red-hat-display-latin-ext-300-italic.woff +0 -0
- package/dist/files/red-hat-display-latin-ext-300-italic.woff2 +0 -0
- package/dist/files/red-hat-display-latin-ext-300-normal.woff +0 -0
- package/dist/files/red-hat-display-latin-ext-300-normal.woff2 +0 -0
- package/dist/files/red-hat-display-latin-ext-400-italic.woff +0 -0
- package/dist/files/red-hat-display-latin-ext-400-italic.woff2 +0 -0
- package/dist/files/red-hat-display-latin-ext-400-normal.woff +0 -0
- package/dist/files/red-hat-display-latin-ext-400-normal.woff2 +0 -0
- package/dist/files/red-hat-display-latin-ext-500-italic.woff +0 -0
- package/dist/files/red-hat-display-latin-ext-500-italic.woff2 +0 -0
- package/dist/files/red-hat-display-latin-ext-500-normal.woff +0 -0
- package/dist/files/red-hat-display-latin-ext-500-normal.woff2 +0 -0
- package/dist/files/red-hat-display-latin-ext-600-italic.woff +0 -0
- package/dist/files/red-hat-display-latin-ext-600-italic.woff2 +0 -0
- package/dist/files/red-hat-display-latin-ext-600-normal.woff +0 -0
- package/dist/files/red-hat-display-latin-ext-600-normal.woff2 +0 -0
- package/dist/files/red-hat-display-latin-ext-700-italic.woff +0 -0
- package/dist/files/red-hat-display-latin-ext-700-italic.woff2 +0 -0
- package/dist/files/red-hat-display-latin-ext-700-normal.woff +0 -0
- package/dist/files/red-hat-display-latin-ext-700-normal.woff2 +0 -0
- package/dist/files/red-hat-display-latin-ext-800-italic.woff +0 -0
- package/dist/files/red-hat-display-latin-ext-800-italic.woff2 +0 -0
- package/dist/files/red-hat-display-latin-ext-800-normal.woff +0 -0
- package/dist/files/red-hat-display-latin-ext-800-normal.woff2 +0 -0
- package/dist/files/red-hat-display-latin-ext-900-italic.woff +0 -0
- package/dist/files/red-hat-display-latin-ext-900-italic.woff2 +0 -0
- package/dist/files/red-hat-display-latin-ext-900-normal.woff +0 -0
- package/dist/files/red-hat-display-latin-ext-900-normal.woff2 +0 -0
- package/dist/funnel-chart.d.ts +84 -0
- package/dist/funnel-chart.js +569 -0
- package/dist/funnel-chart.js.map +1 -0
- package/dist/index.d.ts +87 -0
- package/dist/index.js +10448 -0
- package/dist/index.js.map +1 -0
- package/dist/input-group.d.ts +31 -0
- package/dist/input-group.js +380 -0
- package/dist/input-group.js.map +1 -0
- package/dist/input-size-context.d.ts +11 -0
- package/dist/input-size-context.js +24 -0
- package/dist/input-size-context.js.map +1 -0
- package/dist/input.d.ts +13 -0
- package/dist/input.js +83 -0
- package/dist/input.js.map +1 -0
- package/dist/item.d.ts +8 -0
- package/dist/item.js +93 -0
- package/dist/item.js.map +1 -0
- package/dist/kpi-card.d.ts +24 -0
- package/dist/kpi-card.js +243 -0
- package/dist/kpi-card.js.map +1 -0
- package/dist/label.d.ts +8 -0
- package/dist/label.js +68 -0
- package/dist/label.js.map +1 -0
- package/dist/line-chart.d.ts +155 -0
- package/dist/line-chart.js +269 -0
- package/dist/line-chart.js.map +1 -0
- package/dist/logo.d.ts +6 -0
- package/dist/logo.js +146 -0
- package/dist/logo.js.map +1 -0
- package/dist/number-input.d.ts +41 -0
- package/dist/number-input.js +418 -0
- package/dist/number-input.js.map +1 -0
- package/dist/page-header.d.ts +13 -0
- package/dist/page-header.js +113 -0
- package/dist/page-header.js.map +1 -0
- package/dist/pagination.d.ts +35 -0
- package/dist/pagination.js +352 -0
- package/dist/pagination.js.map +1 -0
- package/dist/password-input.d.ts +13 -0
- package/dist/password-input.js +356 -0
- package/dist/password-input.js.map +1 -0
- package/dist/phone-input.d.ts +21 -0
- package/dist/phone-input.js +573 -0
- package/dist/phone-input.js.map +1 -0
- package/dist/photo-gallery.d.ts +42 -0
- package/dist/photo-gallery.js +756 -0
- package/dist/photo-gallery.js.map +1 -0
- package/dist/pie-chart.d.ts +125 -0
- package/dist/pie-chart.js +192 -0
- package/dist/pie-chart.js.map +1 -0
- package/dist/popover.d.ts +20 -0
- package/dist/popover.js +169 -0
- package/dist/popover.js.map +1 -0
- package/dist/progress.d.ts +28 -0
- package/dist/progress.js +315 -0
- package/dist/progress.js.map +1 -0
- package/dist/radio-group.d.ts +32 -0
- package/dist/radio-group.js +100 -0
- package/dist/radio-group.js.map +1 -0
- package/dist/red-hat-display.css +2 -0
- package/dist/rich-text-editor.d.ts +16 -0
- package/dist/rich-text-editor.js +1000 -0
- package/dist/rich-text-editor.js.map +1 -0
- package/dist/search-input.d.ts +19 -0
- package/dist/search-input.js +411 -0
- package/dist/search-input.js.map +1 -0
- package/dist/select.d.ts +21 -0
- package/dist/select.js +305 -0
- package/dist/select.js.map +1 -0
- package/dist/separator.d.ts +10 -0
- package/dist/separator.js +72 -0
- package/dist/separator.js.map +1 -0
- package/dist/sheet.d.ts +24 -0
- package/dist/sheet.js +282 -0
- package/dist/sheet.js.map +1 -0
- package/dist/sidebar.d.ts +70 -0
- package/dist/sidebar.js +1078 -0
- package/dist/sidebar.js.map +1 -0
- package/dist/size-context.d.ts +11 -0
- package/dist/size-context.js +22 -0
- package/dist/size-context.js.map +1 -0
- package/dist/skeleton.d.ts +5 -0
- package/dist/skeleton.js +48 -0
- package/dist/skeleton.js.map +1 -0
- package/dist/sparkline.d.ts +94 -0
- package/dist/sparkline.js +568 -0
- package/dist/sparkline.js.map +1 -0
- package/dist/stepper.d.ts +43 -0
- package/dist/stepper.js +296 -0
- package/dist/stepper.js.map +1 -0
- package/dist/styles.css +2 -0
- package/dist/switch.d.ts +29 -0
- package/dist/switch.js +108 -0
- package/dist/switch.js.map +1 -0
- package/dist/tab-list.d.ts +38 -0
- package/dist/tab-list.js +394 -0
- package/dist/tab-list.js.map +1 -0
- package/dist/table.d.ts +69 -0
- package/dist/table.js +197 -0
- package/dist/table.js.map +1 -0
- package/dist/tabs.d.ts +18 -0
- package/dist/tabs.js +159 -0
- package/dist/tabs.js.map +1 -0
- package/dist/tag.d.ts +25 -0
- package/dist/tag.js +160 -0
- package/dist/tag.js.map +1 -0
- package/dist/textarea.d.ts +12 -0
- package/dist/textarea.js +78 -0
- package/dist/textarea.js.map +1 -0
- package/dist/theme/giddaa.css +2 -0
- package/dist/time-picker.d.ts +13 -0
- package/dist/time-picker.js +472 -0
- package/dist/time-picker.js.map +1 -0
- package/dist/toast.d.ts +23 -0
- package/dist/toast.js +330 -0
- package/dist/toast.js.map +1 -0
- package/dist/tooltip.d.ts +11 -0
- package/dist/tooltip.js +96 -0
- package/dist/tooltip.js.map +1 -0
- package/dist/tree-map.d.ts +127 -0
- package/dist/tree-map.js +652 -0
- package/dist/tree-map.js.map +1 -0
- 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 };
|