@deftui/react 0.0.0-stage → 0.0.2

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 (95) hide show
  1. package/dist/index.d.mts +24 -0
  2. package/dist/index.mjs +24 -0
  3. package/dist/styles.css +88 -0
  4. package/dist/styles.shadcn.css +537 -0
  5. package/dist/styles.tokens.css +87 -0
  6. package/dist/vendor/coss/form.d.mts +4 -0
  7. package/dist/vendor/coss/form.mjs +12 -0
  8. package/dist/vendor/coss/hooks/use-copy-to-clipboard.d.mts +7 -0
  9. package/dist/vendor/coss/hooks/use-copy-to-clipboard.mjs +30 -0
  10. package/dist/vendor/coss/hooks/use-media-query.d.mts +20 -0
  11. package/dist/vendor/coss/hooks/use-media-query.mjs +57 -0
  12. package/dist/vendor/coss/scroll-area.d.mts +10 -0
  13. package/dist/vendor/coss/scroll-area.mjs +39 -0
  14. package/dist/vendor/shadcn/alert-dialog.d.mts +14 -0
  15. package/dist/vendor/shadcn/alert-dialog.mjs +80 -0
  16. package/dist/vendor/shadcn/badge.d.mts +7 -0
  17. package/dist/vendor/shadcn/badge.mjs +28 -0
  18. package/dist/vendor/shadcn/breadcrumb.d.mts +10 -0
  19. package/dist/vendor/shadcn/breadcrumb.mjs +71 -0
  20. package/dist/vendor/shadcn/button.d.mts +8 -0
  21. package/dist/vendor/shadcn/button.mjs +43 -0
  22. package/dist/vendor/shadcn/calendar.d.mts +7 -0
  23. package/dist/vendor/shadcn/calendar.mjs +107 -0
  24. package/dist/vendor/shadcn/card.d.mts +11 -0
  25. package/dist/vendor/shadcn/card.mjs +55 -0
  26. package/dist/vendor/shadcn/carousel.d.mts +19 -0
  27. package/dist/vendor/shadcn/carousel.mjs +131 -0
  28. package/dist/vendor/shadcn/combobox.d.mts +20 -0
  29. package/dist/vendor/shadcn/combobox.mjs +151 -0
  30. package/dist/vendor/shadcn/dialog.d.mts +15 -0
  31. package/dist/vendor/shadcn/dialog.mjs +91 -0
  32. package/dist/vendor/shadcn/drawer.d.mts +13 -0
  33. package/dist/vendor/shadcn/drawer.mjs +122 -0
  34. package/dist/vendor/shadcn/dropdown-menu.d.mts +28 -0
  35. package/dist/vendor/shadcn/dropdown-menu.mjs +130 -0
  36. package/dist/vendor/shadcn/empty.d.mts +11 -0
  37. package/dist/vendor/shadcn/empty.mjs +58 -0
  38. package/dist/vendor/shadcn/field.d.mts +14 -0
  39. package/dist/vendor/shadcn/field.mjs +60 -0
  40. package/dist/vendor/shadcn/input-group.d.mts +12 -0
  41. package/dist/vendor/shadcn/input-group.mjs +78 -0
  42. package/dist/vendor/shadcn/input.d.mts +3 -0
  43. package/dist/vendor/shadcn/input.mjs +14 -0
  44. package/dist/vendor/shadcn/kbd.d.mts +3 -0
  45. package/dist/vendor/shadcn/kbd.mjs +18 -0
  46. package/dist/vendor/shadcn/label.d.mts +3 -0
  47. package/dist/vendor/shadcn/label.mjs +13 -0
  48. package/dist/vendor/shadcn/lib/utils.mjs +1 -0
  49. package/dist/vendor/shadcn/pagination.d.mts +17 -0
  50. package/dist/vendor/shadcn/pagination.mjs +79 -0
  51. package/dist/vendor/shadcn/popover.d.mts +8 -0
  52. package/dist/vendor/shadcn/popover.mjs +47 -0
  53. package/dist/vendor/shadcn/progress.d.mts +7 -0
  54. package/dist/vendor/shadcn/progress.mjs +43 -0
  55. package/dist/vendor/shadcn/radio-group.d.mts +5 -0
  56. package/dist/vendor/shadcn/radio-group.mjs +26 -0
  57. package/dist/vendor/shadcn/select.d.mts +12 -0
  58. package/dist/vendor/shadcn/select.mjs +97 -0
  59. package/dist/vendor/shadcn/separator.d.mts +3 -0
  60. package/dist/vendor/shadcn/separator.mjs +14 -0
  61. package/dist/vendor/shadcn/sheet.mjs +69 -0
  62. package/dist/vendor/shadcn/sidebar.d.mts +60 -0
  63. package/dist/vendor/shadcn/sidebar.mjs +366 -0
  64. package/dist/vendor/shadcn/skeleton.mjs +3 -0
  65. package/dist/vendor/shadcn/spinner.d.mts +2 -0
  66. package/dist/vendor/shadcn/spinner.mjs +14 -0
  67. package/dist/vendor/shadcn/switch.d.mts +5 -0
  68. package/dist/vendor/shadcn/switch.mjs +18 -0
  69. package/dist/vendor/shadcn/table.d.mts +9 -0
  70. package/dist/vendor/shadcn/table.mjs +59 -0
  71. package/dist/vendor/shadcn/tabs.d.mts +10 -0
  72. package/dist/vendor/shadcn/tabs.mjs +44 -0
  73. package/dist/vendor/shadcn/textarea.d.mts +3 -0
  74. package/dist/vendor/shadcn/textarea.mjs +12 -0
  75. package/dist/vendor/shadcn/toast.d.mts +5 -0
  76. package/dist/vendor/shadcn/toast.mjs +122 -0
  77. package/dist/vendor/shadcn/tooltip.d.mts +5 -0
  78. package/dist/vendor/shadcn/tooltip.mjs +33 -0
  79. package/dist/vendor.css +1 -0
  80. package/dist/widgets/breadcrumb.d.mts +17 -0
  81. package/dist/widgets/breadcrumb.mjs +22 -0
  82. package/dist/widgets/datetime-picker.d.mts +25 -0
  83. package/dist/widgets/datetime-picker.mjs +75 -0
  84. package/dist/widgets/image-display.d.mts +12 -0
  85. package/dist/widgets/image-display.mjs +29 -0
  86. package/dist/widgets/index.d.mts +186 -0
  87. package/dist/widgets/index.mjs +187 -0
  88. package/dist/widgets/pagination.d.mts +10 -0
  89. package/dist/widgets/pagination.mjs +12 -0
  90. package/dist/widgets/sidebar.d.mts +26 -0
  91. package/dist/widgets/sidebar.mjs +27 -0
  92. package/dist/widgets/toast.d.mts +2 -0
  93. package/dist/widgets/toast.mjs +1 -0
  94. package/package.json +53 -4
  95. package/README.md +0 -3
@@ -0,0 +1,122 @@
1
+ "use client";
2
+ import { Button } from "./button.mjs";
3
+ import { cn } from "cn";
4
+ import "react";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ import { CircleCheckIcon, InfoIcon, Loader2Icon, OctagonXIcon, TriangleAlertIcon, XIcon } from "lucide-react";
7
+ import { Toast } from "@base-ui/react/toast";
8
+ // src/vendor/shadcn/toast.tsx
9
+ const toast = Toast.createToastManager();
10
+ function ToastProvider({ ...props }) {
11
+ return /* @__PURE__ */ jsx(Toast.Provider, { ...props });
12
+ }
13
+ function ToastPortal({ ...props }) {
14
+ return /* @__PURE__ */ jsx(Toast.Portal, {
15
+ "data-slot": "toast-portal",
16
+ ...props
17
+ });
18
+ }
19
+ function ToastViewport({ className, ...props }) {
20
+ return /* @__PURE__ */ jsx(Toast.Viewport, {
21
+ "data-slot": "toast-viewport",
22
+ className: cn("pointer-events-none fixed inset-x-4 bottom-4 z-50 mx-auto w-auto max-w-sm outline-none sm:right-4 sm:left-auto sm:mx-0 sm:w-full", className),
23
+ ...props
24
+ });
25
+ }
26
+ function Toast$1({ className, ...props }) {
27
+ return /* @__PURE__ */ jsx(Toast.Root, {
28
+ "data-slot": "toast",
29
+ className: cn("group/toast pointer-events-auto absolute right-0 bottom-0 z-[calc(1000-var(--toast-index))] w-full origin-bottom rounded-2xl border bg-popover text-popover-foreground shadow-lg will-change-transform outline-none select-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50", "[--gap:0.75rem] [--height:var(--toast-frontmost-height,var(--toast-height))] [--offset-y:calc(var(--toast-offset-y)*-1+calc(var(--toast-index)*var(--gap)*-1)+var(--toast-swipe-movement-y))] [--peek:0.75rem] [--scale:calc(max(0,1-(var(--toast-index)*0.1)))] [--shrink:calc(1-var(--scale))]", "h-(--height) [transform:translateX(var(--toast-swipe-movement-x))_translateY(calc(var(--toast-swipe-movement-y)-(var(--toast-index)*var(--peek))-(var(--shrink)*var(--height))))_scale(var(--scale))] [transition:transform_500ms_cubic-bezier(0.22,1,0.36,1),opacity_500ms,height_150ms]", "after:absolute after:top-full after:left-0 after:h-[calc(var(--gap)+1px)] after:w-full after:content-['']", "data-expanded:h-(--toast-height) data-expanded:[transform:translateX(var(--toast-swipe-movement-x))_translateY(var(--offset-y))]", "data-limited:opacity-0 data-starting-style:[transform:translateY(150%)]", "[&[data-ending-style]:not([data-limited]):not([data-swipe-direction])]:[transform:translateY(150%)]", "data-ending-style:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y)+150%))]", "data-ending-style:data-[swipe-direction=left]:[transform:translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))]", "data-ending-style:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]", "data-ending-style:data-[swipe-direction=up]:[transform:translateY(calc(var(--toast-swipe-movement-y)-150%))]", "data-expanded:data-ending-style:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y)+150%))]", "data-expanded:data-ending-style:data-[swipe-direction=left]:[transform:translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))]", "data-expanded:data-ending-style:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]", "data-expanded:data-ending-style:data-[swipe-direction=up]:[transform:translateY(calc(var(--toast-swipe-movement-y)-150%))]", className),
30
+ ...props
31
+ });
32
+ }
33
+ function ToastContent({ className, ...props }) {
34
+ return /* @__PURE__ */ jsx(Toast.Content, {
35
+ "data-slot": "toast-content",
36
+ className: cn("flex h-full items-center gap-3 overflow-hidden p-4 transition-opacity duration-250 ease-[cubic-bezier(0.22,1,0.36,1)] data-behind:opacity-0 data-expanded:opacity-100", className),
37
+ ...props
38
+ });
39
+ }
40
+ function ToastTitle({ className, ...props }) {
41
+ return /* @__PURE__ */ jsx(Toast.Title, {
42
+ "data-slot": "toast-title",
43
+ className: cn("text-sm font-medium", className),
44
+ ...props
45
+ });
46
+ }
47
+ function ToastDescription({ className, ...props }) {
48
+ return /* @__PURE__ */ jsx(Toast.Description, {
49
+ "data-slot": "toast-description",
50
+ className: cn("text-sm text-muted-foreground", className),
51
+ ...props
52
+ });
53
+ }
54
+ function ToastAction({ className, render = /* @__PURE__ */ jsx(Button, {
55
+ variant: "outline",
56
+ size: "sm"
57
+ }), ...props }) {
58
+ return /* @__PURE__ */ jsx(Toast.Action, {
59
+ "data-slot": "toast-action",
60
+ render,
61
+ className: cn("shrink-0", className),
62
+ ...props
63
+ });
64
+ }
65
+ function ToastClose({ className, children, render = /* @__PURE__ */ jsx(Button, {
66
+ variant: "ghost",
67
+ size: "icon-sm"
68
+ }), ...props }) {
69
+ return /* @__PURE__ */ jsx(Toast.Close, {
70
+ "data-slot": "toast-close",
71
+ "aria-label": "Close toast",
72
+ render,
73
+ className: cn("relative shrink-0 text-muted-foreground after:absolute after:-inset-2 after:content-[''] hover:text-foreground", className),
74
+ ...props,
75
+ children: children ?? /* @__PURE__ */ jsx(XIcon, { "aria-hidden": "true" })
76
+ });
77
+ }
78
+ function ToastIcon({ type }) {
79
+ let icon = null;
80
+ if (type === "success") icon = /* @__PURE__ */ jsx(CircleCheckIcon, { "aria-hidden": "true" });
81
+ if (type === "info") icon = /* @__PURE__ */ jsx(InfoIcon, { "aria-hidden": "true" });
82
+ if (type === "warning") icon = /* @__PURE__ */ jsx(TriangleAlertIcon, { "aria-hidden": "true" });
83
+ if (type === "error") icon = /* @__PURE__ */ jsx(OctagonXIcon, {
84
+ className: "text-destructive",
85
+ "aria-hidden": "true"
86
+ });
87
+ if (type === "loading") icon = /* @__PURE__ */ jsx(Loader2Icon, {
88
+ className: "animate-spin",
89
+ "aria-hidden": "true"
90
+ });
91
+ if (!icon) return null;
92
+ return /* @__PURE__ */ jsx("span", {
93
+ "data-slot": "toast-icon",
94
+ className: "shrink-0 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4",
95
+ children: icon
96
+ });
97
+ }
98
+ function ToastList() {
99
+ const { toasts } = Toast.useToastManager();
100
+ return toasts.map((toastItem) => /* @__PURE__ */ jsx(Toast$1, {
101
+ toast: toastItem,
102
+ children: /* @__PURE__ */ jsxs(ToastContent, { children: [
103
+ /* @__PURE__ */ jsx(ToastIcon, { type: toastItem.type }),
104
+ /* @__PURE__ */ jsxs("div", {
105
+ className: "flex min-w-0 flex-1 flex-col gap-1",
106
+ children: [/* @__PURE__ */ jsx(ToastTitle, {}), /* @__PURE__ */ jsx(ToastDescription, {})]
107
+ }),
108
+ /* @__PURE__ */ jsx(ToastAction, {}),
109
+ /* @__PURE__ */ jsx(ToastClose, {})
110
+ ] })
111
+ }, toastItem.id));
112
+ }
113
+ function Toaster({ children, toastManager = toast, ...props }) {
114
+ return /* @__PURE__ */ jsxs(ToastProvider, {
115
+ toastManager,
116
+ ...props,
117
+ children: [children, /* @__PURE__ */ jsx(ToastPortal, { children: /* @__PURE__ */ jsx(ToastViewport, { children: /* @__PURE__ */ jsx(ToastList, {}) }) })]
118
+ });
119
+ }
120
+ Toast.createToastManager;
121
+ Toast.useToastManager;
122
+ export { Toast$1 as Toast, ToastAction, ToastClose, ToastContent, ToastDescription, ToastPortal, ToastProvider, ToastTitle, ToastViewport, Toaster, toast };
@@ -0,0 +1,5 @@
1
+ import { Tooltip } from "@base-ui/react/tooltip";
2
+ declare function Tooltip$1({ ...props }: Tooltip.Root.Props): import("react").JSX.Element;
3
+ declare function TooltipTrigger({ ...props }: Tooltip.Trigger.Props): import("react").JSX.Element;
4
+ declare function TooltipContent({ className, side, sideOffset, align, alignOffset, children, ...props }: Tooltip.Popup.Props & Pick<Tooltip.Positioner.Props, "align" | "alignOffset" | "side" | "sideOffset">): import("react").JSX.Element;
5
+ export { Tooltip$1 as Tooltip, TooltipContent, TooltipTrigger };
@@ -0,0 +1,33 @@
1
+ "use client";
2
+ import { cn } from "cn";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ import { Tooltip } from "@base-ui/react/tooltip";
5
+ // src/vendor/shadcn/tooltip.tsx
6
+ function Tooltip$1({ ...props }) {
7
+ return /* @__PURE__ */ jsx(Tooltip.Root, {
8
+ "data-slot": "tooltip",
9
+ ...props
10
+ });
11
+ }
12
+ function TooltipTrigger({ ...props }) {
13
+ return /* @__PURE__ */ jsx(Tooltip.Trigger, {
14
+ "data-slot": "tooltip-trigger",
15
+ ...props
16
+ });
17
+ }
18
+ function TooltipContent({ className, side = "top", sideOffset = 4, align = "center", alignOffset = 0, children, ...props }) {
19
+ return /* @__PURE__ */ jsx(Tooltip.Portal, { children: /* @__PURE__ */ jsx(Tooltip.Positioner, {
20
+ align,
21
+ alignOffset,
22
+ side,
23
+ sideOffset,
24
+ className: "isolate z-50",
25
+ children: /* @__PURE__ */ jsxs(Tooltip.Popup, {
26
+ "data-slot": "tooltip-content",
27
+ className: cn("z-50 inline-flex w-fit max-w-xs origin-(--transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pr-1.5 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-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
28
+ ...props,
29
+ children: [children, /* @__PURE__ */ jsx(Tooltip.Arrow, { className: "z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground data-[side=bottom]:top-1 data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5" })]
30
+ })
31
+ }) });
32
+ }
33
+ export { Tooltip$1 as Tooltip, TooltipContent, TooltipTrigger };
@@ -0,0 +1 @@
1
+ /* Temporary landing spot for CSS added by the shadcn CLI; move it to the proper location afterward. */
@@ -0,0 +1,17 @@
1
+ import { Breadcrumb as Breadcrumb$1, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator } from "../vendor/shadcn/breadcrumb.mjs";
2
+ import React from "react";
3
+ type ASTProps = Omit<React.ComponentProps<typeof Breadcrumb$1>, "children"> & {
4
+ children: React.ReactElement | React.ReactElement[];
5
+ };
6
+ declare function BreadcrumbAST({ children, ...props }: ASTProps): React.JSX.Element;
7
+ export declare const Breadcrumb: typeof Breadcrumb$1 & {
8
+ AST: typeof BreadcrumbAST;
9
+ Root: typeof Breadcrumb$1;
10
+ List: typeof BreadcrumbList;
11
+ Item: typeof BreadcrumbItem;
12
+ Separator: typeof BreadcrumbSeparator;
13
+ Link: typeof BreadcrumbLink;
14
+ Ellipsis: typeof BreadcrumbEllipsis;
15
+ Page: typeof BreadcrumbPage;
16
+ };
17
+ export {};
@@ -0,0 +1,22 @@
1
+ import { Breadcrumb as Breadcrumb$1, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator } from "../vendor/shadcn/breadcrumb.mjs";
2
+ import React from "react";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ import { castArray } from "radashi";
5
+ // src/widgets/breadcrumb.tsx
6
+ function BreadcrumbAST({ children, ...props }) {
7
+ return /* @__PURE__ */ jsx(Breadcrumb, {
8
+ ...props,
9
+ children: /* @__PURE__ */ jsx(Breadcrumb.List, { children: castArray(children).map((item, index) => /* @__PURE__ */ jsxs(React.Fragment, { children: [index > 0 && /* @__PURE__ */ jsx(Breadcrumb.Separator, {}), /* @__PURE__ */ jsx(Breadcrumb.Item, { children: item })] }, item.key ?? index)) })
10
+ });
11
+ }
12
+ const Breadcrumb = Object.assign(Breadcrumb$1, {
13
+ AST: BreadcrumbAST,
14
+ Root: Breadcrumb$1,
15
+ List: BreadcrumbList,
16
+ Item: BreadcrumbItem,
17
+ Separator: BreadcrumbSeparator,
18
+ Link: BreadcrumbLink,
19
+ Ellipsis: BreadcrumbEllipsis,
20
+ Page: BreadcrumbPage
21
+ });
22
+ export { Breadcrumb };
@@ -0,0 +1,25 @@
1
+ import { Button } from "../vendor/shadcn/button.mjs";
2
+ import { Input } from "../vendor/shadcn/input.mjs";
3
+ import { Calendar } from "../vendor/shadcn/calendar.mjs";
4
+ import { ComponentProps } from "react";
5
+ import { DateRange } from "@daypicker/react";
6
+ type PickerProps<T> = Omit<ComponentProps<typeof Button>, "children" | "render" | "value" | "defaultValue" | "onChange"> & {
7
+ value?: T | null;
8
+ defaultValue?: T | null;
9
+ onChange?: (value: T | null) => void;
10
+ placeholder?: string;
11
+ };
12
+ type DatePickerProps = PickerProps<Date> & {
13
+ calendarProps?: Omit<Extract<ComponentProps<typeof Calendar>, {
14
+ mode: "single";
15
+ }>, "mode" | "required" | "selected" | "onSelect">;
16
+ };
17
+ type DateRangePickerProps = PickerProps<DateRange> & {
18
+ calendarProps?: Omit<Extract<ComponentProps<typeof Calendar>, {
19
+ mode: "range";
20
+ }>, "mode" | "required" | "selected" | "onSelect">;
21
+ };
22
+ export declare function TimePicker({ className, step, ...props }: Omit<ComponentProps<typeof Input>, "type">): import("react").JSX.Element;
23
+ export declare function DatePicker({ value, defaultValue, placeholder, disabled, onChange, className, calendarProps, ...props }: DatePickerProps): import("react").JSX.Element;
24
+ export declare function DateRangePicker({ value, defaultValue, placeholder, disabled, onChange, className, calendarProps, ...props }: DateRangePickerProps): import("react").JSX.Element;
25
+ export type { DateRange };
@@ -0,0 +1,75 @@
1
+ import { Button } from "../vendor/shadcn/button.mjs";
2
+ import { Input } from "../vendor/shadcn/input.mjs";
3
+ import { Popover, PopoverContent, PopoverTrigger } from "../vendor/shadcn/popover.mjs";
4
+ import { Calendar } from "../vendor/shadcn/calendar.mjs";
5
+ import { cn } from "cn";
6
+ import { useState } from "react";
7
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
8
+ import { CalendarIcon } from "lucide-react";
9
+ import { format } from "date-fns";
10
+ // src/widgets/datetime-picker.tsx
11
+ function TimePicker({ className, step = "1", ...props }) {
12
+ return /* @__PURE__ */ jsx(Input, {
13
+ ...props,
14
+ type: "time",
15
+ step,
16
+ className: cn("bg-background appearance-none [&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-calendar-picker-indicator]:appearance-none", className)
17
+ });
18
+ }
19
+ function DatePicker({ value, defaultValue = null, placeholder = "请选择日期", disabled, onChange, className, calendarProps, ...props }) {
20
+ const [internalValue, setInternalValue] = useState(defaultValue);
21
+ const date = value === void 0 ? internalValue : value;
22
+ function handleSelect(selected) {
23
+ const nextValue = selected ?? null;
24
+ if (value === void 0) setInternalValue(nextValue);
25
+ onChange?.(nextValue);
26
+ }
27
+ return /* @__PURE__ */ jsxs(Popover, { children: [/* @__PURE__ */ jsxs(PopoverTrigger, {
28
+ disabled,
29
+ render: /* @__PURE__ */ jsx(Button, {
30
+ variant: "outline",
31
+ ...props,
32
+ disabled,
33
+ className: cn("w-full justify-start", className)
34
+ }),
35
+ children: [/* @__PURE__ */ jsx(CalendarIcon, { "aria-hidden": "true" }), date ? format(date, "PPP") : placeholder]
36
+ }), /* @__PURE__ */ jsx(PopoverContent, { children: /* @__PURE__ */ jsx(Calendar, {
37
+ defaultMonth: date ?? void 0,
38
+ ...calendarProps,
39
+ disabled: disabled || calendarProps?.disabled,
40
+ onSelect: handleSelect,
41
+ selected: date ?? void 0,
42
+ mode: "single"
43
+ }) })] });
44
+ }
45
+ function DateRangePicker({ value, defaultValue = null, placeholder = "请选择日期范围", disabled, onChange, className, calendarProps, ...props }) {
46
+ const [internalValue, setInternalValue] = useState(defaultValue);
47
+ const date = value === void 0 ? internalValue : value;
48
+ function handleSelect(selected) {
49
+ const nextValue = selected ?? null;
50
+ if (value === void 0) setInternalValue(nextValue);
51
+ onChange?.(nextValue);
52
+ }
53
+ return /* @__PURE__ */ jsxs(Popover, { children: [/* @__PURE__ */ jsxs(PopoverTrigger, {
54
+ disabled,
55
+ render: /* @__PURE__ */ jsx(Button, {
56
+ variant: "outline",
57
+ ...props,
58
+ disabled,
59
+ className: cn("w-full justify-start", className)
60
+ }),
61
+ children: [
62
+ /* @__PURE__ */ jsx(CalendarIcon, { "aria-hidden": "true" }),
63
+ !date?.from ? /* @__PURE__ */ jsx("span", { children: placeholder }) : /* @__PURE__ */ jsx(Fragment, { children: format(date.from, "LLL dd, y") }),
64
+ date?.to && /* @__PURE__ */ jsxs(Fragment, { children: [" - ", format(date.to, "LLL dd, y")] })
65
+ ]
66
+ }), /* @__PURE__ */ jsx(PopoverContent, { children: /* @__PURE__ */ jsx(Calendar, {
67
+ defaultMonth: date?.from,
68
+ ...calendarProps,
69
+ disabled: disabled || calendarProps?.disabled,
70
+ onSelect: handleSelect,
71
+ selected: date ?? void 0,
72
+ mode: "range"
73
+ }) })] });
74
+ }
75
+ export { DatePicker, DateRangePicker, TimePicker };
@@ -0,0 +1,12 @@
1
+ import { Carousel as Carousel$1, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious } from "../vendor/shadcn/carousel.mjs";
2
+ declare function CarouselAST(props: React.ComponentProps<typeof CarouselContent>): import("react").JSX.Element;
3
+ export declare const Carousel: typeof Carousel$1 & {
4
+ AST: typeof CarouselAST;
5
+ Root: typeof Carousel$1;
6
+ Content: typeof CarouselContent;
7
+ Previous: typeof CarouselPrevious;
8
+ Next: typeof CarouselNext;
9
+ Item: typeof CarouselItem;
10
+ };
11
+ export declare function FadeImage(props: React.ImgHTMLAttributes<HTMLImageElement>): import("react").JSX.Element;
12
+ export {};
@@ -0,0 +1,29 @@
1
+ import { Carousel as Carousel$1, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious } from "../vendor/shadcn/carousel.mjs";
2
+ import { cn } from "cn";
3
+ import { useState } from "react";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ // src/widgets/image-display.tsx
6
+ function CarouselAST(props) {
7
+ return /* @__PURE__ */ jsxs(Carousel, { children: [
8
+ /* @__PURE__ */ jsx(Carousel.Content, { ...props }),
9
+ /* @__PURE__ */ jsx(Carousel.Previous, {}),
10
+ /* @__PURE__ */ jsx(Carousel.Next, {})
11
+ ] });
12
+ }
13
+ const Carousel = Object.assign(Carousel$1, {
14
+ AST: CarouselAST,
15
+ Root: Carousel$1,
16
+ Content: CarouselContent,
17
+ Previous: CarouselPrevious,
18
+ Next: CarouselNext,
19
+ Item: CarouselItem
20
+ });
21
+ function FadeImage(props) {
22
+ const [loaded, setLoaded] = useState(false);
23
+ return /* @__PURE__ */ jsx("img", {
24
+ ...props,
25
+ onLoad: (event) => (setLoaded(true), props.onLoad?.(event)),
26
+ className: cn("object-cover transition-opacity duration-300", loaded ? "opacity-100" : "opacity-0", props.className)
27
+ });
28
+ }
29
+ export { Carousel, FadeImage };
@@ -0,0 +1,186 @@
1
+ import { Button } from "../vendor/shadcn/button.mjs";
2
+ import { AlertDialog as AlertDialog$1, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogPrimitive, AlertDialogTitle, AlertDialogTrigger } from "../vendor/shadcn/alert-dialog.mjs";
3
+ import { Card as Card$1, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "../vendor/shadcn/card.mjs";
4
+ import { ComboboxChip, ComboboxChips, ComboboxChipsInput, ComboboxCollection, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxInput, ComboboxItem, ComboboxLabel, ComboboxList, ComboboxPrimitive, ComboboxValue } from "../vendor/shadcn/combobox.mjs";
5
+ import { Dialog as Dialog$1, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogPrimitive, DialogTitle, DialogTrigger } from "../vendor/shadcn/dialog.mjs";
6
+ import { Drawer as Drawer$1, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerPrimitive, DrawerTitle, DrawerTrigger } from "../vendor/shadcn/drawer.mjs";
7
+ import { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger } from "../vendor/shadcn/dropdown-menu.mjs";
8
+ import { Empty as Empty$1, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle } from "../vendor/shadcn/empty.mjs";
9
+ import { Label } from "../vendor/shadcn/label.mjs";
10
+ import { Field as Field$1, FieldDescription, FieldError, FieldLabel } from "../vendor/shadcn/field.mjs";
11
+ import { InputGroup as InputGroup$1, InputGroupAddon, InputGroupInput, InputGroupText, InputGroupTextarea } from "../vendor/shadcn/input-group.mjs";
12
+ import { Kbd as Kbd$1, KbdGroup } from "../vendor/shadcn/kbd.mjs";
13
+ import { Popover as Popover$1, PopoverContent, PopoverDescription, PopoverTitle, PopoverTrigger } from "../vendor/shadcn/popover.mjs";
14
+ import { Progress as Progress$1, ProgressIndicator, ProgressLabel, ProgressTrack, ProgressValue } from "../vendor/shadcn/progress.mjs";
15
+ import { RadioGroup, RadioGroupItem } from "../vendor/shadcn/radio-group.mjs";
16
+ import { SelectContent, SelectGroup, SelectItem, SelectLabel, SelectSeparator, SelectTrigger, SelectValue } from "../vendor/shadcn/select.mjs";
17
+ import { Table as Table$1, TableBody, TableCell, TableFooter, TableHead, TableHeader, TableRow } from "../vendor/shadcn/table.mjs";
18
+ import { Tabs as Tabs$1, TabsContent, TabsList, TabsTrigger } from "../vendor/shadcn/tabs.mjs";
19
+ import { Tooltip as Tooltip$1, TooltipContent, TooltipTrigger } from "../vendor/shadcn/tooltip.mjs";
20
+ import { Toaster, toast } from "../vendor/shadcn/toast.mjs";
21
+ import "./toast.mjs";
22
+ import { Input } from "../vendor/shadcn/input.mjs";
23
+ import { Separator } from "../vendor/shadcn/separator.mjs";
24
+ import { useSidebar } from "../vendor/shadcn/sidebar.mjs";
25
+ import { Sidebar } from "./sidebar.mjs";
26
+ import { Breadcrumb } from "./breadcrumb.mjs";
27
+ import { Pagination } from "./pagination.mjs";
28
+ import { Carousel, FadeImage } from "./image-display.mjs";
29
+ import { DatePicker, DateRange, DateRangePicker, TimePicker } from "./datetime-picker.mjs";
30
+ import { Form } from "../vendor/coss/form.mjs";
31
+ import { Badge } from "../vendor/shadcn/badge.mjs";
32
+ import { Switch } from "../vendor/shadcn/switch.mjs";
33
+ import { Spinner } from "../vendor/shadcn/spinner.mjs";
34
+ import { Textarea } from "../vendor/shadcn/textarea.mjs";
35
+ import { ScrollArea } from "../vendor/coss/scroll-area.mjs";
36
+ export declare const Kbd: typeof Kbd$1 & {
37
+ Root: typeof Kbd$1;
38
+ Group: typeof KbdGroup;
39
+ };
40
+ export declare const Tabs: typeof Tabs$1 & {
41
+ Root: typeof Tabs$1;
42
+ List: typeof TabsList;
43
+ Trigger: typeof TabsTrigger;
44
+ Content: typeof TabsContent;
45
+ };
46
+ export declare const Card: typeof Card$1 & {
47
+ Root: typeof Card$1;
48
+ Header: typeof CardHeader;
49
+ Content: typeof CardContent;
50
+ Footer: typeof CardFooter;
51
+ Title: typeof CardTitle;
52
+ Action: typeof CardAction;
53
+ Description: typeof CardDescription;
54
+ };
55
+ export declare const Field: typeof Field$1 & {
56
+ Root: typeof Field$1;
57
+ Label: typeof FieldLabel;
58
+ Description: typeof FieldDescription;
59
+ Error: typeof FieldError;
60
+ };
61
+ export declare const Empty: typeof Empty$1 & {
62
+ Root: typeof Empty$1;
63
+ Header: typeof EmptyHeader;
64
+ Content: typeof EmptyContent;
65
+ Media: typeof EmptyMedia;
66
+ Title: typeof EmptyTitle;
67
+ Description: typeof EmptyDescription;
68
+ };
69
+ export declare const Table: typeof Table$1 & {
70
+ Root: typeof Table$1;
71
+ Header: typeof TableHeader;
72
+ Body: typeof TableBody;
73
+ Footer: typeof TableFooter;
74
+ Row: typeof TableRow;
75
+ Head: typeof TableHead;
76
+ Cell: typeof TableCell;
77
+ };
78
+ export declare const Radio: typeof RadioGroupItem & {
79
+ Root: typeof RadioGroupItem;
80
+ Group: typeof RadioGroup;
81
+ };
82
+ export declare const Select: typeof import("@base-ui/react").SelectRoot & {
83
+ Root: typeof import("@base-ui/react").SelectRoot;
84
+ Trigger: typeof SelectTrigger;
85
+ Value: typeof SelectValue;
86
+ Content: typeof SelectContent;
87
+ Separator: typeof SelectSeparator;
88
+ Group: typeof SelectGroup;
89
+ Label: typeof SelectLabel;
90
+ Item: typeof SelectItem;
91
+ };
92
+ export declare const Drawer: typeof Drawer$1 & {
93
+ Root: typeof Drawer$1;
94
+ Trigger: typeof DrawerTrigger;
95
+ Close: typeof DrawerClose;
96
+ Content: typeof DrawerContent;
97
+ Header: typeof DrawerHeader;
98
+ Footer: typeof DrawerFooter;
99
+ Title: typeof DrawerTitle;
100
+ Description: typeof DrawerDescription;
101
+ Handle: typeof DrawerPrimitive.Handle;
102
+ createHandle: typeof DrawerPrimitive.createHandle;
103
+ };
104
+ export declare const Dialog: typeof Dialog$1 & {
105
+ Root: typeof Dialog$1;
106
+ Trigger: typeof DialogTrigger;
107
+ Close: typeof DialogClose;
108
+ Content: typeof DialogContent;
109
+ Header: typeof DialogHeader;
110
+ Footer: typeof DialogFooter;
111
+ Title: typeof DialogTitle;
112
+ Description: typeof DialogDescription;
113
+ Handle: typeof DialogPrimitive.Handle;
114
+ createHandle: typeof DialogPrimitive.createHandle;
115
+ };
116
+ export declare const Tooltip: typeof Tooltip$1 & {
117
+ Root: typeof Tooltip$1;
118
+ Trigger: typeof TooltipTrigger;
119
+ Content: typeof TooltipContent;
120
+ };
121
+ export declare const Popover: typeof Popover$1 & {
122
+ Root: typeof Popover$1;
123
+ Trigger: typeof PopoverTrigger;
124
+ Content: typeof PopoverContent;
125
+ Title: typeof PopoverTitle;
126
+ Description: typeof PopoverDescription;
127
+ };
128
+ export declare const Dropdown: typeof DropdownMenu & {
129
+ Root: typeof DropdownMenu;
130
+ Trigger: typeof DropdownMenuTrigger;
131
+ Content: typeof DropdownMenuContent;
132
+ Sub: typeof DropdownMenuSub;
133
+ SubTrigger: typeof DropdownMenuSubTrigger;
134
+ SubContent: typeof DropdownMenuSubContent;
135
+ Group: typeof DropdownMenuGroup;
136
+ GroupLabel: typeof DropdownMenuLabel;
137
+ Separator: typeof DropdownMenuSeparator;
138
+ Item: typeof DropdownMenuItem;
139
+ Shortcut: typeof DropdownMenuShortcut;
140
+ RadioItem: typeof DropdownMenuRadioItem;
141
+ RadioGroup: typeof DropdownMenuRadioGroup;
142
+ CheckboxItem: typeof DropdownMenuCheckboxItem;
143
+ };
144
+ export declare const Progress: typeof Progress$1 & {
145
+ Root: typeof Progress$1;
146
+ Label: typeof ProgressLabel;
147
+ Value: typeof ProgressValue;
148
+ Track: typeof ProgressTrack;
149
+ Indicator: typeof ProgressIndicator;
150
+ };
151
+ export declare const AlertDialog: typeof AlertDialog$1 & {
152
+ Root: typeof AlertDialog$1;
153
+ Trigger: typeof AlertDialogTrigger;
154
+ Close: typeof AlertDialogCancel;
155
+ Content: typeof AlertDialogContent;
156
+ Header: typeof AlertDialogHeader;
157
+ Footer: typeof AlertDialogFooter;
158
+ Title: typeof AlertDialogTitle;
159
+ Description: typeof AlertDialogDescription;
160
+ Handle: typeof AlertDialogPrimitive.Handle;
161
+ createHandle: typeof AlertDialogPrimitive.createHandle;
162
+ };
163
+ export declare const InputGroup: typeof InputGroup$1 & {
164
+ Root: typeof InputGroup$1;
165
+ Addon: typeof InputGroupAddon;
166
+ AddonText: typeof InputGroupText;
167
+ Input: typeof InputGroupInput;
168
+ Textarea: typeof InputGroupTextarea;
169
+ };
170
+ export declare const Combobox: typeof ComboboxPrimitive.Root & {
171
+ Root: typeof ComboboxPrimitive.Root;
172
+ Content: typeof ComboboxContent;
173
+ Empty: typeof ComboboxEmpty;
174
+ List: typeof ComboboxList;
175
+ Input: typeof ComboboxInput;
176
+ ChipsInput: typeof ComboboxChipsInput;
177
+ Chips: typeof ComboboxChips;
178
+ Value: typeof ComboboxValue;
179
+ Chip: typeof ComboboxChip;
180
+ Group: typeof ComboboxGroup;
181
+ GroupLabel: typeof ComboboxLabel;
182
+ GroupCollection: typeof ComboboxCollection;
183
+ Item: typeof ComboboxItem;
184
+ createItems: typeof ComboboxPrimitive.createItems;
185
+ };
186
+ export { Badge, Breadcrumb, Button, Carousel, DatePicker, type DateRange, DateRangePicker, FadeImage, Form, Input, Label, Pagination, ScrollArea, Separator, Sidebar, Spinner, Switch, Textarea, TimePicker, Toaster as ToastProvider, toast, useSidebar };