@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.
- package/dist/index.d.mts +4 -3
- package/dist/index.mjs +2 -3
- package/dist/vendor/README.md +2 -1
- package/dist/vendor/reui.io/cascader/cascader-async.d.mts +20 -0
- package/dist/vendor/reui.io/cascader/cascader-async.mjs +578 -0
- package/dist/vendor/reui.io/cascader/cascader-context.d.mts +12 -0
- package/dist/vendor/reui.io/cascader/cascader-context.mjs +56 -0
- package/dist/vendor/reui.io/cascader/cascader-footer.d.mts +60 -0
- package/dist/vendor/reui.io/cascader/cascader-footer.mjs +445 -0
- package/dist/vendor/reui.io/cascader/cascader-i18n.mjs +64 -0
- package/dist/vendor/reui.io/cascader/cascader-item.d.mts +92 -0
- package/dist/vendor/reui.io/cascader/cascader-item.mjs +533 -0
- package/dist/vendor/reui.io/cascader/cascader-lib.d.mts +3 -0
- package/dist/vendor/reui.io/cascader/cascader-lib.mjs +688 -0
- package/dist/vendor/reui.io/cascader/cascader-nav.d.mts +56 -0
- package/dist/vendor/reui.io/cascader/cascader-nav.mjs +310 -0
- package/dist/vendor/reui.io/cascader/cascader-types.d.mts +140 -0
- package/dist/vendor/reui.io/cascader/cascader-virtual.d.mts +18 -0
- package/dist/vendor/reui.io/cascader/cascader-virtual.mjs +159 -0
- package/dist/vendor/reui.io/cascader/cascader.d.mts +299 -0
- package/dist/vendor/reui.io/cascader/cascader.mjs +1470 -0
- package/dist/vendor/reui.io/timeline.d.mts +21 -0
- package/dist/vendor/reui.io/timeline.mjs +127 -0
- package/dist/widgets/export.d.mts +28 -0
- package/dist/widgets/index.d.mts +55 -11
- package/dist/widgets/index.mjs +45 -2
- package/package.json +2 -2
- package/dist/vendor/tailored/file-tree.d.mts +0 -21
- 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 };
|
package/dist/widgets/index.d.mts
CHANGED
|
@@ -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 "
|
|
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
|
|
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,
|
|
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 };
|
package/dist/widgets/index.mjs
CHANGED
|
@@ -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,
|
|
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.
|
|
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 };
|