@deftui/react 0.3.0 → 0.3.1

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 (29) hide show
  1. package/dist/index.d.mts +4 -3
  2. package/dist/index.mjs +2 -3
  3. package/dist/vendor/README.md +2 -1
  4. package/dist/vendor/reui.io/cascader/cascader-async.d.mts +20 -0
  5. package/dist/vendor/reui.io/cascader/cascader-async.mjs +578 -0
  6. package/dist/vendor/reui.io/cascader/cascader-context.d.mts +12 -0
  7. package/dist/vendor/reui.io/cascader/cascader-context.mjs +56 -0
  8. package/dist/vendor/reui.io/cascader/cascader-footer.d.mts +60 -0
  9. package/dist/vendor/reui.io/cascader/cascader-footer.mjs +445 -0
  10. package/dist/vendor/reui.io/cascader/cascader-i18n.mjs +64 -0
  11. package/dist/vendor/reui.io/cascader/cascader-item.d.mts +92 -0
  12. package/dist/vendor/reui.io/cascader/cascader-item.mjs +533 -0
  13. package/dist/vendor/reui.io/cascader/cascader-lib.d.mts +3 -0
  14. package/dist/vendor/reui.io/cascader/cascader-lib.mjs +688 -0
  15. package/dist/vendor/reui.io/cascader/cascader-nav.d.mts +56 -0
  16. package/dist/vendor/reui.io/cascader/cascader-nav.mjs +310 -0
  17. package/dist/vendor/reui.io/cascader/cascader-types.d.mts +140 -0
  18. package/dist/vendor/reui.io/cascader/cascader-virtual.d.mts +18 -0
  19. package/dist/vendor/reui.io/cascader/cascader-virtual.mjs +159 -0
  20. package/dist/vendor/reui.io/cascader/cascader.d.mts +299 -0
  21. package/dist/vendor/reui.io/cascader/cascader.mjs +1470 -0
  22. package/dist/vendor/reui.io/timeline.d.mts +21 -0
  23. package/dist/vendor/reui.io/timeline.mjs +127 -0
  24. package/dist/widgets/export.d.mts +28 -0
  25. package/dist/widgets/index.d.mts +55 -11
  26. package/dist/widgets/index.mjs +45 -2
  27. package/package.json +2 -2
  28. package/dist/vendor/tailored/file-tree.d.mts +0 -21
  29. package/dist/vendor/tailored/file-tree.mjs +0 -146
@@ -0,0 +1,21 @@
1
+ import { useRender } from "@base-ui/react/use-render";
2
+ interface TimelineProps extends useRender.ComponentProps<"div"> {
3
+ defaultValue?: number;
4
+ value?: number;
5
+ onValueChange?: (value: number) => void;
6
+ orientation?: "horizontal" | "vertical";
7
+ }
8
+ declare function Timeline({ defaultValue, value, onValueChange, orientation, className, render, children, ...props }: TimelineProps): import("react").JSX.Element;
9
+ declare function TimelineContent({ className, render, children, ...props }: useRender.ComponentProps<"div">): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
10
+ type TimelineDateProps = useRender.ComponentProps<"time">;
11
+ declare function TimelineDate({ className, render, children, ...props }: TimelineDateProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
12
+ declare function TimelineHeader({ className, render, children, ...props }: useRender.ComponentProps<"div">): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
13
+ type TimelineIndicatorProps = useRender.ComponentProps<"div">;
14
+ declare function TimelineIndicator({ className, children, render, ...props }: TimelineIndicatorProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
15
+ interface TimelineItemProps extends useRender.ComponentProps<"div"> {
16
+ step: number;
17
+ }
18
+ declare function TimelineItem({ step, className, render, children, ...props }: TimelineItemProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
19
+ declare function TimelineSeparator({ className, render, children, ...props }: useRender.ComponentProps<"div">): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
20
+ declare function TimelineTitle({ className, render, children, ...props }: useRender.ComponentProps<"h3">): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
21
+ export { Timeline, TimelineContent, TimelineDate, TimelineHeader, TimelineIndicator, TimelineItem, TimelineSeparator, TimelineTitle };
@@ -0,0 +1,127 @@
1
+ "use client";
2
+ import { cn } from "cn";
3
+ import { mergeProps } from "@base-ui/react/merge-props";
4
+ import { createContext, useCallback, useContext, useState } from "react";
5
+ import { jsx } from "react/jsx-runtime";
6
+ import { useRender } from "@base-ui/react/use-render";
7
+ // src/vendor/reui.io/timeline.tsx
8
+ const TimelineContext = createContext(void 0);
9
+ const useTimeline = () => {
10
+ const context = useContext(TimelineContext);
11
+ if (!context) throw new Error("useTimeline must be used within a Timeline");
12
+ return context;
13
+ };
14
+ function Timeline({ defaultValue = 1, value, onValueChange, orientation = "vertical", className, render, children, ...props }) {
15
+ const [activeStep, setInternalStep] = useState(defaultValue);
16
+ const setActiveStep = useCallback((step) => {
17
+ if (value === void 0) setInternalStep(step);
18
+ onValueChange?.(step);
19
+ }, [value, onValueChange]);
20
+ const currentStep = value ?? activeStep;
21
+ const defaultProps = {
22
+ className: cn("group/timeline flex data-[orientation=horizontal]:w-full data-[orientation=horizontal]:flex-row data-[orientation=vertical]:flex-col", className),
23
+ "data-orientation": orientation,
24
+ "data-slot": "timeline",
25
+ children
26
+ };
27
+ return /* @__PURE__ */ jsx(TimelineContext.Provider, {
28
+ value: {
29
+ activeStep: currentStep,
30
+ setActiveStep
31
+ },
32
+ children: useRender({
33
+ defaultTagName: "div",
34
+ render,
35
+ props: mergeProps(defaultProps, props)
36
+ })
37
+ });
38
+ }
39
+ function TimelineContent({ className, render, children, ...props }) {
40
+ const defaultProps = {
41
+ className: cn("text-muted-foreground text-sm", className),
42
+ "data-slot": "timeline-content",
43
+ children
44
+ };
45
+ return useRender({
46
+ defaultTagName: "div",
47
+ render,
48
+ props: mergeProps(defaultProps, props)
49
+ });
50
+ }
51
+ function TimelineDate({ className, render, children, ...props }) {
52
+ const defaultProps = {
53
+ className: cn("mb-1 block font-medium text-muted-foreground text-xs group-data-[orientation=vertical]/timeline:max-sm:h-4", className),
54
+ "data-slot": "timeline-date",
55
+ children
56
+ };
57
+ return useRender({
58
+ defaultTagName: "time",
59
+ render,
60
+ props: mergeProps(defaultProps, props)
61
+ });
62
+ }
63
+ function TimelineHeader({ className, render, children, ...props }) {
64
+ const defaultProps = {
65
+ className: cn(className),
66
+ "data-slot": "timeline-header",
67
+ children
68
+ };
69
+ return useRender({
70
+ defaultTagName: "div",
71
+ render,
72
+ props: mergeProps(defaultProps, props)
73
+ });
74
+ }
75
+ function TimelineIndicator({ className, children, render, ...props }) {
76
+ const defaultProps = {
77
+ "aria-hidden": true,
78
+ className: cn("group-data-[orientation=horizontal]/timeline:-top-6 group-data-[orientation=horizontal]/timeline:-translate-y-1/2 group-data-[orientation=vertical]/timeline:-left-6 group-data-[orientation=vertical]/timeline:-translate-x-1/2 absolute size-4 rounded-full border-2 border-primary/20 group-data-[orientation=vertical]/timeline:top-0 group-data-[orientation=horizontal]/timeline:left-0 group-data-completed/timeline-item:border-primary", className),
79
+ "data-slot": "timeline-indicator",
80
+ children
81
+ };
82
+ return useRender({
83
+ defaultTagName: "div",
84
+ render,
85
+ props: mergeProps(defaultProps, props)
86
+ });
87
+ }
88
+ function TimelineItem({ step, className, render, children, ...props }) {
89
+ const { activeStep } = useTimeline();
90
+ const defaultProps = {
91
+ className: cn("group/timeline-item relative flex flex-1 flex-col gap-0.5 group-data-[orientation=vertical]/timeline:ms-8 group-data-[orientation=horizontal]/timeline:mt-8 group-data-[orientation=horizontal]/timeline:not-last:pe-8 group-data-[orientation=vertical]/timeline:not-last:pb-6 has-[+[data-completed]]:**:data-[slot=timeline-separator]:bg-primary", className),
92
+ "data-completed": step <= activeStep || void 0,
93
+ "data-slot": "timeline-item",
94
+ children
95
+ };
96
+ return useRender({
97
+ defaultTagName: "div",
98
+ render,
99
+ props: mergeProps(defaultProps, props)
100
+ });
101
+ }
102
+ function TimelineSeparator({ className, render, children, ...props }) {
103
+ const defaultProps = {
104
+ "aria-hidden": true,
105
+ className: cn("group-data-[orientation=horizontal]/timeline:-top-6 group-data-[orientation=horizontal]/timeline:-translate-y-1/2 group-data-[orientation=vertical]/timeline:-left-6 group-data-[orientation=vertical]/timeline:-translate-x-1/2 absolute self-start bg-primary/10 group-last/timeline-item:hidden group-data-[orientation=horizontal]/timeline:h-0.5 group-data-[orientation=vertical]/timeline:h-[calc(100%-1rem-0.25rem)] group-data-[orientation=horizontal]/timeline:w-[calc(100%-1rem-0.25rem)] group-data-[orientation=vertical]/timeline:w-0.5 group-data-[orientation=horizontal]/timeline:translate-x-4.5 group-data-[orientation=vertical]/timeline:translate-y-4.5", className),
106
+ "data-slot": "timeline-separator",
107
+ children
108
+ };
109
+ return useRender({
110
+ defaultTagName: "div",
111
+ render,
112
+ props: mergeProps(defaultProps, props)
113
+ });
114
+ }
115
+ function TimelineTitle({ className, render, children, ...props }) {
116
+ const defaultProps = {
117
+ className: cn("font-medium text-sm", className),
118
+ "data-slot": "timeline-title",
119
+ children
120
+ };
121
+ return useRender({
122
+ defaultTagName: "h3",
123
+ render,
124
+ props: mergeProps(defaultProps, props)
125
+ });
126
+ }
127
+ export { Timeline, TimelineContent, TimelineDate, TimelineHeader, TimelineIndicator, TimelineItem, TimelineSeparator, TimelineTitle };
@@ -0,0 +1,28 @@
1
+ import "./toast.mjs";
2
+ import { Sidebar } from "./sidebar.mjs";
3
+ import { DatePicker, DateRange, DateRangePicker, TimePicker } from "./datetime.mjs";
4
+ import { Dropzone, formatBytes, useDropzone } from "./dropzone.mjs";
5
+ import { Carousel, Image, ImageProps, Lightbox } from "./multimedia.mjs";
6
+ import { Toaster, toast } from "../vendor/shadcn/toast.mjs";
7
+ import { Pagination } from "./pagination.mjs";
8
+ import { Label } from "../vendor/shadcn/label.mjs";
9
+ import { useSidebar } from "../vendor/shadcn/sidebar.mjs";
10
+ import { Input } from "../vendor/shadcn/input.mjs";
11
+ import { Badge } from "../vendor/shadcn/badge.mjs";
12
+ import { Button } from "../vendor/shadcn/button.mjs";
13
+ import { Switch } from "../vendor/shadcn/switch.mjs";
14
+ import { LightboxActions, LightboxBackdrop, LightboxCaptions, LightboxChangeReason, LightboxClose, LightboxContent, LightboxControl, LightboxControlContext, LightboxCounter, LightboxDownload, LightboxImageChangeEventDetails, LightboxImageItem, LightboxItem, LightboxMore, LightboxNext, LightboxOpenEventDetails, LightboxPrevious, LightboxProps, LightboxSlide, LightboxSlides, LightboxThumbnail, LightboxThumbnails, LightboxToolbar, LightboxTrigger, LightboxTriggerProps, LightboxVideoItem, LightboxViewport, LightboxZoom, LightboxZoomButton, useLightbox } from "../vendor/tailored/lightbox.mjs";
15
+ import { Spinner } from "../vendor/shadcn/spinner.mjs";
16
+ import { Skeleton } from "../vendor/shadcn/skeleton.mjs";
17
+ import { Checkbox } from "../vendor/shadcn/checkbox.mjs";
18
+ import { Textarea } from "../vendor/shadcn/textarea.mjs";
19
+ import { Separator } from "../vendor/shadcn/separator.mjs";
20
+ import { Form } from "../vendor/coss/form.mjs";
21
+ import { Calendar } from "../vendor/coss/calendar.mjs";
22
+ import { ScrollArea } from "../vendor/coss/scroll-area.mjs";
23
+ import { IconSwap } from "../vendor/tailored/icon-swap.mjs";
24
+ import { JsonViewer } from "../vendor/tailored/json-viewer.mjs";
25
+ import { CascaderProps, CascaderSingleProps } from "../vendor/reui.io/cascader/cascader.mjs";
26
+ import { CascaderChangeDetails, CascaderLabels, CascaderMode, CascaderNode } from "../vendor/reui.io/cascader/cascader-types.mjs";
27
+ export * from "react-dropzone";
28
+ export { Badge, Button, Calendar, Carousel, type CascaderChangeDetails, type CascaderLabels, type CascaderMode, type CascaderNode, type CascaderProps, type CascaderSingleProps, Checkbox, DatePicker, type DateRange, DateRangePicker, Dropzone, Form, IconSwap, Image, ImageProps, Input, JsonViewer, Label, Lightbox, type LightboxActions, type LightboxBackdrop, type LightboxCaptions, type LightboxChangeReason, type LightboxClose, type LightboxContent, type LightboxControl, type LightboxControlContext, type LightboxCounter, type LightboxDownload, type LightboxImageChangeEventDetails, type LightboxImageItem, type LightboxItem, type LightboxMore, type LightboxNext, type LightboxOpenEventDetails, type LightboxPrevious, type LightboxProps, type LightboxSlide, type LightboxSlides, type LightboxThumbnail, type LightboxThumbnails, type LightboxToolbar, type LightboxTrigger, type LightboxTriggerProps, type LightboxVideoItem, type LightboxViewport, type LightboxZoom, type LightboxZoomButton, Pagination, ScrollArea, Separator, Sidebar, Skeleton, Spinner, Switch, Textarea, TimePicker, Toaster as ToastProvider, formatBytes, toast, useDropzone, type useLightbox, useSidebar };
@@ -4,11 +4,21 @@ import { DialogClose, DialogContent as DialogPopup, DialogDescription, DialogFoo
4
4
  import { Drawer as Drawer$1, DrawerClose, DrawerDescription, DrawerFooter, DrawerHeader, DrawerPanel, DrawerPopup, DrawerTitle, DrawerTrigger } from "../vendor/coss/drawer.mjs";
5
5
  import { Empty as Empty$1, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle } from "../vendor/coss/empty.mjs";
6
6
  import { Table as Table$1, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow } from "../vendor/coss/table.mjs";
7
+ import { CascaderChangeDetails, CascaderLabels, CascaderMode, CascaderNode } from "../vendor/reui.io/cascader/cascader-types.mjs";
8
+ import { Cascader as Cascader$1, CascaderChip, CascaderChips, CascaderContent, CascaderEmpty, CascaderList, CascaderPanel, CascaderProps, CascaderSingleProps, CascaderStatus, CascaderTrigger } from "../vendor/reui.io/cascader/cascader.mjs";
9
+ import { CascaderAction, CascaderFooter, CascaderSubmenu, CascaderSubmenuContent, CascaderSubmenuTrigger } from "../vendor/reui.io/cascader/cascader-footer.mjs";
10
+ import { CascaderGroup, CascaderItemProps, CascaderItems, CascaderLabel, CascaderSeparator } from "../vendor/reui.io/cascader/cascader-item.mjs";
11
+ import { CascaderBack, CascaderBreadcrumb, CascaderInput, CascaderNav, CascaderValue } from "../vendor/reui.io/cascader/cascader-nav.mjs";
12
+ import { CascaderVirtualItems } from "../vendor/reui.io/cascader/cascader-virtual.mjs";
13
+ import { Timeline as Timeline$1, TimelineContent, TimelineDate, TimelineHeader, TimelineIndicator, TimelineItem, TimelineSeparator, TimelineTitle } from "../vendor/reui.io/timeline.mjs";
7
14
  import { Breadcrumb as Breadcrumb$1, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator } from "../vendor/shadcn/breadcrumb.mjs";
15
+ import { Separator } from "../vendor/shadcn/separator.mjs";
8
16
  import { ButtonGroup as ButtonGroup$1, ButtonGroupSeparator, ButtonGroupText } from "../vendor/shadcn/button-group.mjs";
9
17
  import { ComboboxChip, ComboboxChips, ComboboxChipsInput, ComboboxCollection, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxInput, ComboboxItem, ComboboxLabel, ComboboxList, ComboboxSeparator, ComboboxValue } from "../vendor/shadcn/combobox.mjs";
10
18
  import { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger } from "../vendor/shadcn/dropdown-menu.mjs";
19
+ import { Label } from "../vendor/shadcn/label.mjs";
11
20
  import { Field as Field$1, FieldDescription, FieldError, FieldLabel } from "../vendor/shadcn/field.mjs";
21
+ import { Button } from "../vendor/shadcn/button.mjs";
12
22
  import { InputGroup as InputGroup$1, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea } from "../vendor/shadcn/input-group.mjs";
13
23
  import { Kbd as Kbd$1, KbdGroup } from "../vendor/shadcn/kbd.mjs";
14
24
  import { Popover as Popover$1, PopoverContent, PopoverDescription, PopoverTitle, PopoverTrigger } from "../vendor/shadcn/popover.mjs";
@@ -17,31 +27,27 @@ import { RadioGroup, RadioGroupItem } from "../vendor/shadcn/radio-group.mjs";
17
27
  import { SelectContent, SelectGroup, SelectItem, SelectLabel, SelectSeparator, SelectTrigger, SelectValue } from "../vendor/shadcn/select.mjs";
18
28
  import { Tabs as Tabs$1, TabsContent, TabsList, TabsTrigger } from "../vendor/shadcn/tabs.mjs";
19
29
  import { Tooltip as Tooltip$1, TooltipContent, TooltipProvider, TooltipTrigger } from "../vendor/shadcn/tooltip.mjs";
20
- import "./toast.mjs";
30
+ import { Toaster, toast } from "../vendor/shadcn/toast.mjs";
31
+ import { Input } from "../vendor/shadcn/input.mjs";
32
+ import { useSidebar } from "../vendor/shadcn/sidebar.mjs";
21
33
  import { Sidebar } from "./sidebar.mjs";
34
+ import { Calendar } from "../vendor/coss/calendar.mjs";
22
35
  import { DatePicker, DateRange, DateRangePicker, TimePicker } from "./datetime.mjs";
23
- import { Toaster, toast } from "../vendor/shadcn/toast.mjs";
24
36
  import { Dropzone, formatBytes, useDropzone } from "./dropzone.mjs";
37
+ import { LightboxActions, LightboxBackdrop, LightboxCaptions, LightboxChangeReason, LightboxClose, LightboxContent, LightboxControl, LightboxControlContext, LightboxCounter, LightboxDownload, LightboxImageChangeEventDetails, LightboxImageItem, LightboxItem, LightboxMore, LightboxNext, LightboxOpenEventDetails, LightboxPrevious, LightboxProps, LightboxSlide, LightboxSlides, LightboxThumbnail, LightboxThumbnails, LightboxToolbar, LightboxTrigger, LightboxTriggerProps, LightboxVideoItem, LightboxViewport, LightboxZoom, LightboxZoomButton, useLightbox } from "../vendor/tailored/lightbox.mjs";
25
38
  import { Carousel, Image, ImageProps, Lightbox } from "./multimedia.mjs";
26
- import { useSidebar } from "../vendor/shadcn/sidebar.mjs";
27
39
  import { Pagination } from "./pagination.mjs";
28
- import { Label } from "../vendor/shadcn/label.mjs";
29
- import { Input } from "../vendor/shadcn/input.mjs";
30
40
  import { Badge } from "../vendor/shadcn/badge.mjs";
31
- import { LightboxActions, LightboxBackdrop, LightboxCaptions, LightboxChangeReason, LightboxClose, LightboxContent, LightboxControl, LightboxControlContext, LightboxCounter, LightboxDownload, LightboxImageChangeEventDetails, LightboxImageItem, LightboxItem, LightboxMore, LightboxNext, LightboxOpenEventDetails, LightboxPrevious, LightboxProps, LightboxSlide, LightboxSlides, LightboxThumbnail, LightboxThumbnails, LightboxToolbar, LightboxTrigger, LightboxTriggerProps, LightboxVideoItem, LightboxViewport, LightboxZoom, LightboxZoomButton, useLightbox } from "../vendor/tailored/lightbox.mjs";
32
- import { Button } from "../vendor/shadcn/button.mjs";
33
41
  import { Switch } from "../vendor/shadcn/switch.mjs";
34
42
  import { Spinner } from "../vendor/shadcn/spinner.mjs";
35
43
  import { Skeleton } from "../vendor/shadcn/skeleton.mjs";
36
44
  import { Checkbox } from "../vendor/shadcn/checkbox.mjs";
37
45
  import { Textarea } from "../vendor/shadcn/textarea.mjs";
38
- import { Separator } from "../vendor/shadcn/separator.mjs";
39
46
  import { Form } from "../vendor/coss/form.mjs";
40
- import { Calendar } from "../vendor/coss/calendar.mjs";
41
47
  import { ScrollArea } from "../vendor/coss/scroll-area.mjs";
42
48
  import { IconSwap } from "../vendor/tailored/icon-swap.mjs";
43
49
  import { JsonViewer } from "../vendor/tailored/json-viewer.mjs";
44
- import { FileTree, FileTreeNode } from "../vendor/tailored/file-tree.mjs";
50
+ import "./export.mjs";
45
51
  export * from "react-dropzone";
46
52
  /** https://ui.shadcn.com/docs/components/base/kbd */
47
53
  export declare const Kbd: typeof Kbd$1 & {
@@ -143,6 +149,34 @@ export declare const Popover: typeof Popover$1 & {
143
149
  Title: typeof PopoverTitle;
144
150
  Description: typeof PopoverDescription;
145
151
  };
152
+ /** https://reui.io/docs/components/cascader */
153
+ export declare const Cascader: typeof Cascader$1 & {
154
+ Trigger: typeof CascaderTrigger;
155
+ Popup: typeof CascaderContent;
156
+ Panel: typeof CascaderPanel;
157
+ List: typeof CascaderList;
158
+ Empty: typeof CascaderEmpty;
159
+ Status: typeof CascaderStatus;
160
+ Chips: typeof CascaderChips;
161
+ Chip: typeof CascaderChip;
162
+ Nav: typeof CascaderNav;
163
+ Back: typeof CascaderBack;
164
+ Breadcrumb: typeof CascaderBreadcrumb;
165
+ Input: typeof CascaderInput;
166
+ Value: typeof CascaderValue;
167
+ Item: import("react").MemoExoticComponent<({ node, index, depth, showPath, as, expanded, indent, branch: branchProp, selectable: selectableProp, selected: selectedProp, indeterminate: indeterminateProp, selectedCount: selectedCountProp, loading, error, childrenLoading, childrenError, className, children, onClick, onMouseUp, style, ...props }: CascaderItemProps) => import("react").JSX.Element>;
168
+ Items: typeof CascaderItems;
169
+ Group: typeof CascaderGroup;
170
+ Label: typeof CascaderLabel;
171
+ Separator: typeof CascaderSeparator;
172
+ Footer: typeof CascaderFooter;
173
+ Action: typeof CascaderAction;
174
+ Submenu: typeof CascaderSubmenu;
175
+ SubmenuTrigger: typeof CascaderSubmenuTrigger;
176
+ SubmenuContent: typeof CascaderSubmenuContent;
177
+ /** Windowed replacement for `Items` inside `List`. */
178
+ VirtualItems: typeof CascaderVirtualItems;
179
+ };
146
180
  /** https://ui.shadcn.com/docs/components/base/dropdown-menu */
147
181
  export declare const Dropdown: typeof DropdownMenu & {
148
182
  Trigger: typeof DropdownMenuTrigger;
@@ -182,6 +216,16 @@ export declare const Progress: typeof Progress$1 & {
182
216
  Track: typeof ProgressTrack;
183
217
  Indicator: typeof ProgressIndicator;
184
218
  };
219
+ /** https://reui.io/docs/components/timeline */
220
+ export declare const Timeline: typeof Timeline$1 & {
221
+ Item: typeof TimelineItem;
222
+ Header: typeof TimelineHeader;
223
+ Content: typeof TimelineContent;
224
+ Indicator: typeof TimelineIndicator;
225
+ Separator: typeof TimelineSeparator;
226
+ Date: typeof TimelineDate;
227
+ Title: typeof TimelineTitle;
228
+ };
185
229
  /** https://ui.shadcn.com/docs/components/base/breadcrumb */
186
230
  export declare const Breadcrumb: typeof Breadcrumb$1 & {
187
231
  List: typeof BreadcrumbList;
@@ -214,4 +258,4 @@ export declare const InputGroup: typeof InputGroup$1 & {
214
258
  Textarea: typeof InputGroupTextarea;
215
259
  Button: typeof InputGroupButton;
216
260
  };
217
- export { Badge, Button, Calendar, Carousel, Checkbox, DatePicker, type DateRange, DateRangePicker, Dropzone, FileTree, type FileTreeNode, Form, IconSwap, Image, ImageProps, Input, JsonViewer, Label, Lightbox, type LightboxActions, type LightboxBackdrop, type LightboxCaptions, type LightboxChangeReason, type LightboxClose, type LightboxContent, type LightboxControl, type LightboxControlContext, type LightboxCounter, type LightboxDownload, type LightboxImageChangeEventDetails, type LightboxImageItem, type LightboxItem, type LightboxMore, type LightboxNext, type LightboxOpenEventDetails, type LightboxPrevious, type LightboxProps, type LightboxSlide, type LightboxSlides, type LightboxThumbnail, type LightboxThumbnails, type LightboxToolbar, type LightboxTrigger, type LightboxTriggerProps, type LightboxVideoItem, type LightboxViewport, type LightboxZoom, type LightboxZoomButton, Pagination, ScrollArea, Separator, Sidebar, Skeleton, Spinner, Switch, Textarea, TimePicker, Toaster as ToastProvider, formatBytes, toast, useDropzone, type useLightbox, useSidebar };
261
+ export { Badge, Button, Calendar, Carousel, type CascaderChangeDetails, type CascaderLabels, type CascaderMode, type CascaderNode, type CascaderProps, type CascaderSingleProps, Checkbox, DatePicker, type DateRange, DateRangePicker, Dropzone, Form, IconSwap, Image, ImageProps, Input, JsonViewer, Label, Lightbox, type LightboxActions, type LightboxBackdrop, type LightboxCaptions, type LightboxChangeReason, type LightboxClose, type LightboxContent, type LightboxControl, type LightboxControlContext, type LightboxCounter, type LightboxDownload, type LightboxImageChangeEventDetails, type LightboxImageItem, type LightboxItem, type LightboxMore, type LightboxNext, type LightboxOpenEventDetails, type LightboxPrevious, type LightboxProps, type LightboxSlide, type LightboxSlides, type LightboxThumbnail, type LightboxThumbnails, type LightboxToolbar, type LightboxTrigger, type LightboxTriggerProps, type LightboxVideoItem, type LightboxViewport, type LightboxZoom, type LightboxZoomButton, Pagination, ScrollArea, Separator, Sidebar, Skeleton, Spinner, Switch, Textarea, TimePicker, Toaster as ToastProvider, formatBytes, toast, useDropzone, type useLightbox, useSidebar };
@@ -7,6 +7,12 @@ import { Dialog as Dialog$1, DialogClose, DialogContent as DialogPopup, DialogDe
7
7
  import { Drawer as Drawer$1, DrawerClose, DrawerDescription, DrawerFooter, DrawerHeader, DrawerPanel, DrawerPopup, DrawerTitle, DrawerTrigger } from "../vendor/coss/drawer.mjs";
8
8
  import { Empty as Empty$1, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle } from "../vendor/coss/empty.mjs";
9
9
  import { Table as Table$1, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow } from "../vendor/coss/table.mjs";
10
+ import { Cascader as Cascader$1, CascaderChip, CascaderChips, CascaderContent, CascaderEmpty, CascaderList, CascaderPanel, CascaderStatus, CascaderTrigger } from "../vendor/reui.io/cascader/cascader.mjs";
11
+ import { CascaderAction, CascaderFooter, CascaderSubmenu, CascaderSubmenuContent, CascaderSubmenuTrigger } from "../vendor/reui.io/cascader/cascader-footer.mjs";
12
+ import { CascaderGroup, CascaderItem, CascaderItems, CascaderLabel, CascaderSeparator } from "../vendor/reui.io/cascader/cascader-item.mjs";
13
+ import { CascaderBack, CascaderBreadcrumb, CascaderInput, CascaderNav, CascaderValue } from "../vendor/reui.io/cascader/cascader-nav.mjs";
14
+ import { CascaderVirtualItems } from "../vendor/reui.io/cascader/cascader-virtual.mjs";
15
+ import { Timeline as Timeline$1, TimelineContent, TimelineDate, TimelineHeader, TimelineIndicator, TimelineItem, TimelineSeparator, TimelineTitle } from "../vendor/reui.io/timeline.mjs";
10
16
  import { Breadcrumb as Breadcrumb$1, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator } from "../vendor/shadcn/breadcrumb.mjs";
11
17
  import { Separator } from "../vendor/shadcn/separator.mjs";
12
18
  import { ButtonGroup as ButtonGroup$1, ButtonGroupSeparator, ButtonGroupText } from "../vendor/shadcn/button-group.mjs";
@@ -39,7 +45,6 @@ import { Checkbox } from "../vendor/shadcn/checkbox.mjs";
39
45
  import { Form } from "../vendor/coss/form.mjs";
40
46
  import { IconSwap } from "../vendor/tailored/icon-swap.mjs";
41
47
  import { JsonViewer } from "../vendor/tailored/json-viewer.mjs";
42
- import { FileTree } from "../vendor/tailored/file-tree.mjs";
43
48
  // src/widgets/index.ts
44
49
  /** https://ui.shadcn.com/docs/components/base/kbd */
45
50
  const Kbd = /* @__PURE__ */ Object.assign(Kbd$1, { Group: KbdGroup });
@@ -137,6 +142,34 @@ const Popover = /* @__PURE__ */ Object.assign(Popover$1, {
137
142
  Title: PopoverTitle,
138
143
  Description: PopoverDescription
139
144
  });
145
+ /** https://reui.io/docs/components/cascader */
146
+ const Cascader = /* @__PURE__ */ Object.assign(Cascader$1, {
147
+ Trigger: CascaderTrigger,
148
+ Popup: CascaderContent,
149
+ Panel: CascaderPanel,
150
+ List: CascaderList,
151
+ Empty: CascaderEmpty,
152
+ Status: CascaderStatus,
153
+ Chips: CascaderChips,
154
+ Chip: CascaderChip,
155
+ Nav: CascaderNav,
156
+ Back: CascaderBack,
157
+ Breadcrumb: CascaderBreadcrumb,
158
+ Input: CascaderInput,
159
+ Value: CascaderValue,
160
+ Item: CascaderItem,
161
+ Items: CascaderItems,
162
+ Group: CascaderGroup,
163
+ Label: CascaderLabel,
164
+ Separator: CascaderSeparator,
165
+ Footer: CascaderFooter,
166
+ Action: CascaderAction,
167
+ Submenu: CascaderSubmenu,
168
+ SubmenuTrigger: CascaderSubmenuTrigger,
169
+ SubmenuContent: CascaderSubmenuContent,
170
+ /** Windowed replacement for `Items` inside `List`. */
171
+ VirtualItems: CascaderVirtualItems
172
+ });
140
173
  /** https://ui.shadcn.com/docs/components/base/dropdown-menu */
141
174
  const Dropdown = /* @__PURE__ */ Object.assign(DropdownMenu, {
142
175
  Trigger: DropdownMenuTrigger,
@@ -176,6 +209,16 @@ const Progress = /* @__PURE__ */ Object.assign(Progress$1, {
176
209
  Track: ProgressTrack,
177
210
  Indicator: ProgressIndicator
178
211
  });
212
+ /** https://reui.io/docs/components/timeline */
213
+ const Timeline = /* @__PURE__ */ Object.assign(Timeline$1, {
214
+ Item: TimelineItem,
215
+ Header: TimelineHeader,
216
+ Content: TimelineContent,
217
+ Indicator: TimelineIndicator,
218
+ Separator: TimelineSeparator,
219
+ Date: TimelineDate,
220
+ Title: TimelineTitle
221
+ });
179
222
  /** https://ui.shadcn.com/docs/components/base/breadcrumb */
180
223
  const Breadcrumb = /* @__PURE__ */ Object.assign(Breadcrumb$1, {
181
224
  List: BreadcrumbList,
@@ -208,4 +251,4 @@ const InputGroup = /* @__PURE__ */ Object.assign(InputGroup$1, {
208
251
  Textarea: InputGroupTextarea,
209
252
  Button: InputGroupButton
210
253
  });
211
- export { AlertDialog, Badge, Breadcrumb, Button, ButtonGroup, Calendar, Card, Carousel, Checkbox, Combobox, DatePicker, DateRangePicker, Dialog, Drawer, Dropdown, Dropzone, Empty, Field, FileTree, Form, Frame, IconSwap, Image, Input, InputGroup, JsonViewer, Kbd, Label, Lightbox, Pagination, Popover, Progress, Radio, ScrollArea, Select, Separator, Sidebar, Skeleton, Spinner, Switch, Table, Tabs, Textarea, TimePicker, Toaster as ToastProvider, Tooltip, formatBytes, toast, useDropzone, useSidebar };
254
+ export { AlertDialog, Badge, Breadcrumb, Button, ButtonGroup, Calendar, Card, Carousel, Cascader, Checkbox, Combobox, DatePicker, DateRangePicker, Dialog, Drawer, Dropdown, Dropzone, Empty, Field, Form, Frame, IconSwap, Image, Input, InputGroup, JsonViewer, Kbd, Label, Lightbox, Pagination, Popover, Progress, Radio, ScrollArea, Select, Separator, Sidebar, Skeleton, Spinner, Switch, Table, Tabs, Textarea, TimePicker, Timeline, Toaster as ToastProvider, Tooltip, formatBytes, toast, useDropzone, useSidebar };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deftui/react",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/KiriRainCat/deftui.git",
@@ -45,7 +45,6 @@
45
45
  "tw-animate-css": "^1.4.0"
46
46
  },
47
47
  "devDependencies": {
48
- "@base-ui/react": "^1.9.0",
49
48
  "@types/react": "^19.3.0",
50
49
  "@types/react-dom": "^19.3.0",
51
50
  "shadcn": "^4.23.0",
@@ -53,6 +52,7 @@
53
52
  },
54
53
  "peerDependencies": {
55
54
  "@base-ui/react": "^1.9.0",
55
+ "@tanstack/react-virtual": "^3.14.0",
56
56
  "react": "^19.0.0",
57
57
  "react-dom": "^19.0.0",
58
58
  "tailwindcss": "^4.3.0"
@@ -1,21 +0,0 @@
1
- import * as React$1 from "react";
2
- export type FileTreeNode = {
3
- id: string;
4
- name: string;
5
- kind?: "file" | "folder";
6
- children?: FileTreeNode[];
7
- meta?: React$1.ReactNode;
8
- icon?: React$1.ReactNode;
9
- };
10
- export type FileTreeProps = Omit<React$1.HTMLAttributes<HTMLDivElement>, "children" | "onSelect"> & {
11
- nodes: FileTreeNode[];
12
- expandedIds?: string[];
13
- defaultExpandedIds?: string[];
14
- onExpandedChange?: (ids: string[]) => void;
15
- selectedId?: string | null;
16
- defaultSelectedId?: string | null;
17
- onSelect?: (node: FileTreeNode) => void;
18
- label?: string;
19
- };
20
- /** https://ui.tinkererslabs.com/docs/components/file-tree/ */
21
- export declare function FileTree({ nodes, expandedIds, defaultExpandedIds, onExpandedChange, selectedId, defaultSelectedId, onSelect, label, className, ...rootProps }: FileTreeProps): React$1.JSX.Element;
@@ -1,146 +0,0 @@
1
- "use client";
2
- import { cn } from "../shadcn/lib/utils.mjs";
3
- import * as React$1 from "react";
4
- import { jsx, jsxs } from "react/jsx-runtime";
5
- import { ChevronRight, File, Folder, FolderOpen } from "lucide-react";
6
- // src/vendor/tailored/file-tree.tsx
7
- function isFolder(node) {
8
- return node.kind === "folder" || Array.isArray(node.children);
9
- }
10
- function flatten(nodes, expanded, level = 1) {
11
- return nodes.flatMap((node) => {
12
- const folder = isFolder(node);
13
- const open = folder && expanded.has(node.id);
14
- const self = {
15
- node,
16
- level,
17
- isFolder: folder,
18
- isExpanded: open
19
- };
20
- if (!open || !node.children) return [self];
21
- return [self, ...flatten(node.children, expanded, level + 1)];
22
- });
23
- }
24
- /** https://ui.tinkererslabs.com/docs/components/file-tree/ */
25
- function FileTree({ nodes, expandedIds, defaultExpandedIds = [], onExpandedChange, selectedId, defaultSelectedId = null, onSelect, label = "Files", className, ...rootProps }) {
26
- const [uncontrolledExpanded, setUncontrolledExpanded] = React$1.useState(defaultExpandedIds);
27
- const [uncontrolledSelected, setUncontrolledSelected] = React$1.useState(defaultSelectedId);
28
- const expandedList = expandedIds ?? uncontrolledExpanded;
29
- const expanded = React$1.useMemo(() => new Set(expandedList), [expandedList]);
30
- const selected = selectedId === void 0 ? uncontrolledSelected : selectedId;
31
- const rows = React$1.useMemo(() => flatten(nodes, expanded), [nodes, expanded]);
32
- const containerRef = React$1.useRef(null);
33
- const setExpanded = (ids) => {
34
- if (expandedIds === void 0) setUncontrolledExpanded(ids);
35
- onExpandedChange?.(ids);
36
- };
37
- const toggle = (id, open) => {
38
- const shouldOpen = open ?? !expanded.has(id);
39
- if (shouldOpen === expanded.has(id)) return;
40
- setExpanded(shouldOpen ? [...expandedList, id] : expandedList.filter((entry) => entry !== id));
41
- };
42
- const select = (node) => {
43
- if (selectedId === void 0) setUncontrolledSelected(node.id);
44
- onSelect?.(node);
45
- };
46
- const focusRow = (index) => {
47
- const target = rows[index];
48
- if (!target) return;
49
- containerRef.current?.querySelector(`[data-node="${CSS.escape(target.node.id)}"]`)?.focus();
50
- };
51
- const onKeyDown = (event, row, index) => {
52
- switch (event.key) {
53
- case "ArrowDown":
54
- event.preventDefault();
55
- focusRow(Math.min(index + 1, rows.length - 1));
56
- break;
57
- case "ArrowUp":
58
- event.preventDefault();
59
- focusRow(Math.max(index - 1, 0));
60
- break;
61
- case "ArrowRight":
62
- event.preventDefault();
63
- if (row.isFolder && !row.isExpanded) toggle(row.node.id, true);
64
- else if (row.isFolder) focusRow(index + 1);
65
- break;
66
- case "ArrowLeft": {
67
- event.preventDefault();
68
- if (row.isFolder && row.isExpanded) {
69
- toggle(row.node.id, false);
70
- break;
71
- }
72
- const parent = rows.slice(0, index).reverse().findIndex((entry) => entry.level < row.level);
73
- if (parent >= 0) focusRow(index - 1 - parent);
74
- break;
75
- }
76
- case "Home":
77
- event.preventDefault();
78
- focusRow(0);
79
- break;
80
- case "End":
81
- event.preventDefault();
82
- focusRow(rows.length - 1);
83
- break;
84
- case "Enter":
85
- case " ":
86
- event.preventDefault();
87
- if (row.isFolder) toggle(row.node.id);
88
- select(row.node);
89
- }
90
- };
91
- const activeIndex = Math.max(rows.findIndex((row) => row.node.id === selected), 0);
92
- return /* @__PURE__ */ jsx("div", {
93
- ref: containerRef,
94
- "data-slot": "file-tree",
95
- className: cn("border-border bg-card text-card-foreground rounded-[var(--radius)] border p-1.5", className),
96
- ...rootProps,
97
- children: /* @__PURE__ */ jsx("div", {
98
- role: "tree",
99
- "aria-label": label,
100
- children: rows.map((row, index) => {
101
- const isSelected = row.node.id === selected;
102
- const Icon = row.isFolder ? row.isExpanded ? FolderOpen : Folder : File;
103
- return /* @__PURE__ */ jsxs("div", {
104
- role: "treeitem",
105
- "data-node": row.node.id,
106
- "data-slot": "file-tree-item",
107
- "aria-level": row.level,
108
- "aria-selected": isSelected,
109
- "aria-expanded": row.isFolder ? row.isExpanded : void 0,
110
- tabIndex: index === activeIndex ? 0 : -1,
111
- className: cn("focus-visible:ring-ring flex min-h-9 cursor-default items-center gap-1.5 rounded-[calc(var(--radius)-0.35rem)] pr-2 text-sm focus-visible:ring-2 focus-visible:outline-none", isSelected ? "bg-muted font-semibold" : "hover:bg-muted/60 transition-colors duration-150 motion-reduce:transition-none"),
112
- style: { paddingLeft: `${(row.level - 1) * .85 + .35}rem` },
113
- onClick: () => {
114
- if (row.isFolder) toggle(row.node.id);
115
- select(row.node);
116
- },
117
- onKeyDown: (event) => onKeyDown(event, row, index),
118
- children: [
119
- /* @__PURE__ */ jsx("span", {
120
- className: "flex size-4 shrink-0 items-center justify-center",
121
- children: row.isFolder ? /* @__PURE__ */ jsx(ChevronRight, {
122
- "aria-hidden": "true",
123
- size: 13,
124
- className: cn("text-muted-foreground transition-transform duration-150 motion-reduce:transition-none", row.isExpanded && "rotate-90")
125
- }) : null
126
- }),
127
- /* @__PURE__ */ jsx("span", {
128
- "aria-hidden": "true",
129
- className: "text-muted-foreground shrink-0",
130
- children: row.node.icon ?? /* @__PURE__ */ jsx(Icon, { size: 15 })
131
- }),
132
- /* @__PURE__ */ jsx("span", {
133
- className: "min-w-0 flex-1 truncate",
134
- children: row.node.name
135
- }),
136
- row.node.meta ? /* @__PURE__ */ jsx("span", {
137
- className: "text-muted-foreground shrink-0 text-xs",
138
- children: row.node.meta
139
- }) : null
140
- ]
141
- }, row.node.id);
142
- })
143
- })
144
- });
145
- }
146
- export { FileTree };