@docubook/ui-react 2.0.0-alpha.2 → 2.0.0-beta.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.
- package/dist/base/breadcrumbs.d.ts +15 -0
- package/dist/{collapse.d.ts → base/collapse.d.ts} +5 -7
- package/dist/base/drawer.d.ts +41 -0
- package/dist/base/dropdown.d.ts +16 -0
- package/dist/base/input.d.ts +14 -0
- package/dist/base/kbd.d.ts +39 -0
- package/dist/base/modal.d.ts +14 -0
- package/dist/base/navbar.d.ts +32 -0
- package/dist/base/pagination.d.ts +17 -0
- package/dist/base/theme-controller.d.ts +17 -0
- package/dist/{toggle.d.ts → base/toggle.d.ts} +6 -8
- package/dist/breadcrumbs.js +28 -13
- package/dist/breadcrumbs.js.map +1 -0
- package/dist/cn.js +10 -6
- package/dist/cn.js.map +1 -0
- package/dist/collapse.js +76 -11
- package/dist/collapse.js.map +1 -0
- package/dist/drawer.js +69 -15
- package/dist/drawer.js.map +1 -0
- package/dist/dropdown.js +52 -11
- package/dist/dropdown.js.map +1 -0
- package/dist/index.d.ts +23 -15
- package/dist/index.js +13 -84
- package/dist/input.js +21 -9
- package/dist/input.js.map +1 -0
- package/dist/kbd.js +74 -8
- package/dist/kbd.js.map +1 -0
- package/dist/modal.js +34 -9
- package/dist/modal.js.map +1 -0
- package/dist/navbar.js +53 -13
- package/dist/navbar.js.map +1 -0
- package/dist/pagination.js +60 -7
- package/dist/pagination.js.map +1 -0
- package/dist/theme-controller.js +50 -7
- package/dist/theme-controller.js.map +1 -0
- package/dist/toggle.js +65 -9
- package/dist/toggle.js.map +1 -0
- package/dist/utils/cn.d.ts +2 -0
- package/dist/utils/types.d.ts +4 -0
- package/package.json +44 -109
- package/dist/breadcrumbs.cjs +0 -13
- package/dist/breadcrumbs.d.cts +0 -19
- package/dist/breadcrumbs.d.ts +0 -19
- package/dist/chunk-2DFF5NEL.cjs +0 -45
- package/dist/chunk-5SA5UPFQ.cjs +0 -66
- package/dist/chunk-5UVG5YY5.js +0 -49
- package/dist/chunk-6B7U7IWT.cjs +0 -53
- package/dist/chunk-BHHZBMD4.cjs +0 -101
- package/dist/chunk-CK4TY6B7.cjs +0 -89
- package/dist/chunk-CNOJNKZ2.js +0 -89
- package/dist/chunk-FQQILPIP.js +0 -133
- package/dist/chunk-GRADTONK.js +0 -45
- package/dist/chunk-HTH2UTCL.cjs +0 -49
- package/dist/chunk-MWJV72OM.cjs +0 -41
- package/dist/chunk-ND7BTYGG.js +0 -123
- package/dist/chunk-OGI5BHGM.js +0 -25
- package/dist/chunk-OO3HHTPV.cjs +0 -123
- package/dist/chunk-OTJGG73E.js +0 -101
- package/dist/chunk-PFRBA5BH.js +0 -66
- package/dist/chunk-QOGH6NKS.js +0 -45
- package/dist/chunk-RDRDPR67.cjs +0 -25
- package/dist/chunk-REZ4W4BZ.cjs +0 -92
- package/dist/chunk-RXFYKKNI.js +0 -53
- package/dist/chunk-SV4L2FGT.cjs +0 -133
- package/dist/chunk-SX6DOGUE.js +0 -41
- package/dist/chunk-TDFVUBGO.cjs +0 -45
- package/dist/chunk-WY6GLRTT.js +0 -92
- package/dist/cn.cjs +0 -6
- package/dist/cn.d.cts +0 -5
- package/dist/cn.d.ts +0 -5
- package/dist/collapse.cjs +0 -12
- package/dist/collapse.d.cts +0 -31
- package/dist/drawer.cjs +0 -16
- package/dist/drawer.d.cts +0 -44
- package/dist/drawer.d.ts +0 -44
- package/dist/dropdown.cjs +0 -12
- package/dist/dropdown.d.cts +0 -20
- package/dist/dropdown.d.ts +0 -20
- package/dist/index.cjs +0 -84
- package/dist/index.d.cts +0 -15
- package/dist/input.cjs +0 -10
- package/dist/input.d.cts +0 -17
- package/dist/input.d.ts +0 -17
- package/dist/kbd.cjs +0 -10
- package/dist/kbd.d.cts +0 -43
- package/dist/kbd.d.ts +0 -43
- package/dist/modal.cjs +0 -10
- package/dist/modal.d.cts +0 -17
- package/dist/modal.d.ts +0 -17
- package/dist/navbar.cjs +0 -13
- package/dist/navbar.d.cts +0 -36
- package/dist/navbar.d.ts +0 -36
- package/dist/pagination.cjs +0 -7
- package/dist/pagination.d.cts +0 -21
- package/dist/pagination.d.ts +0 -21
- package/dist/theme-controller.cjs +0 -8
- package/dist/theme-controller.d.cts +0 -21
- package/dist/theme-controller.d.ts +0 -21
- package/dist/toggle.cjs +0 -10
- package/dist/toggle.d.cts +0 -35
- package/dist/types-BZI5Cv8-.d.cts +0 -6
- package/dist/types-BZI5Cv8-.d.ts +0 -6
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
export interface BreadcrumbProps {
|
|
3
|
+
children: ReactNode;
|
|
4
|
+
className?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface BreadcrumbItemProps {
|
|
7
|
+
children: ReactNode;
|
|
8
|
+
className?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function Breadcrumb({ children, className }: BreadcrumbProps): import("react").JSX.Element;
|
|
11
|
+
export declare function BreadcrumbItem({ children, className }: BreadcrumbItemProps): import("react").JSX.Element;
|
|
12
|
+
export declare function BreadcrumbPage({ children, className }: BreadcrumbItemProps): import("react").JSX.Element;
|
|
13
|
+
export declare function BreadcrumbList({ children }: {
|
|
14
|
+
children: React.ReactNode;
|
|
15
|
+
}): import("react").JSX.Element;
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { ReactNode } from 'react';
|
|
3
|
-
|
|
1
|
+
import { type ReactNode } from "react";
|
|
4
2
|
type CollapseVariant = "arrow" | "plus";
|
|
5
3
|
interface CollapseProps {
|
|
6
4
|
title: ReactNode;
|
|
@@ -13,7 +11,7 @@ interface CollapseProps {
|
|
|
13
11
|
contentClassName?: string;
|
|
14
12
|
disabled?: boolean;
|
|
15
13
|
}
|
|
16
|
-
declare function Collapse({ title, children, defaultOpen, onOpenChange, variant, className, titleClassName, contentClassName, disabled, }: CollapseProps): react.JSX.Element;
|
|
14
|
+
export declare function Collapse({ title, children, defaultOpen, onOpenChange, variant, className, titleClassName, contentClassName, disabled, }: CollapseProps): import("react").JSX.Element;
|
|
17
15
|
interface AccordionItem {
|
|
18
16
|
id: string;
|
|
19
17
|
title: ReactNode;
|
|
@@ -26,6 +24,6 @@ interface AccordionProps {
|
|
|
26
24
|
className?: string;
|
|
27
25
|
allowMultiple?: boolean;
|
|
28
26
|
}
|
|
29
|
-
declare function Accordion({ items, defaultOpen, variant, className, allowMultiple, }: AccordionProps): react.JSX.Element;
|
|
30
|
-
|
|
31
|
-
export
|
|
27
|
+
export declare function Accordion({ items, defaultOpen, variant, className, allowMultiple, }: AccordionProps): import("react").JSX.Element;
|
|
28
|
+
export type { CollapseProps, CollapseVariant, AccordionItem, AccordionProps };
|
|
29
|
+
export default Collapse;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
import type { Side } from "../utils/types";
|
|
3
|
+
interface DrawerProps {
|
|
4
|
+
id: string;
|
|
5
|
+
children: ReactNode;
|
|
6
|
+
defaultOpen?: boolean;
|
|
7
|
+
side?: Side;
|
|
8
|
+
breakpoint?: string;
|
|
9
|
+
withOverlay?: boolean;
|
|
10
|
+
overlayClassName?: string;
|
|
11
|
+
sideClassName?: string;
|
|
12
|
+
contentClassName?: string;
|
|
13
|
+
className?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare function Drawer({ id, children, defaultOpen, side, breakpoint, withOverlay, overlayClassName, sideClassName, contentClassName, className, }: DrawerProps): import("react").JSX.Element;
|
|
16
|
+
export declare function useDrawerState(initialState?: boolean): {
|
|
17
|
+
isOpen: boolean;
|
|
18
|
+
open: () => void;
|
|
19
|
+
close: () => void;
|
|
20
|
+
toggle: () => void;
|
|
21
|
+
};
|
|
22
|
+
interface DrawerTriggerProps {
|
|
23
|
+
drawerId: string;
|
|
24
|
+
children: ReactNode;
|
|
25
|
+
className?: string;
|
|
26
|
+
}
|
|
27
|
+
export declare function DrawerTrigger({ drawerId, children, className }: DrawerTriggerProps): import("react").JSX.Element;
|
|
28
|
+
interface DrawerSidePanelProps {
|
|
29
|
+
id: string;
|
|
30
|
+
children: ReactNode;
|
|
31
|
+
side?: Side;
|
|
32
|
+
withOverlay?: boolean;
|
|
33
|
+
overlayClassName?: string;
|
|
34
|
+
className?: string;
|
|
35
|
+
}
|
|
36
|
+
export declare function DrawerSidePanel({ id, children, side, withOverlay, overlayClassName, className, }: DrawerSidePanelProps): import("react").JSX.Element;
|
|
37
|
+
export declare function DrawerContent({ children, className, }: {
|
|
38
|
+
children: React.ReactNode;
|
|
39
|
+
className?: string;
|
|
40
|
+
}): import("react").JSX.Element;
|
|
41
|
+
export type { DrawerProps, DrawerTriggerProps, DrawerSidePanelProps };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type HTMLAttributes, type ReactNode } from "react";
|
|
2
|
+
export interface DropdownProps extends HTMLAttributes<HTMLDetailsElement> {
|
|
3
|
+
align?: "start" | "end";
|
|
4
|
+
disabled?: boolean;
|
|
5
|
+
trigger?: ReactNode;
|
|
6
|
+
children?: ReactNode;
|
|
7
|
+
menuClassName?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare const Dropdown: import("react").ForwardRefExoticComponent<DropdownProps & import("react").RefAttributes<HTMLDetailsElement>>;
|
|
10
|
+
export interface DropdownItemProps extends HTMLAttributes<HTMLLIElement> {
|
|
11
|
+
children?: ReactNode;
|
|
12
|
+
}
|
|
13
|
+
export declare const DropdownItem: import("react").ForwardRefExoticComponent<DropdownItemProps & import("react").RefAttributes<HTMLLIElement>>;
|
|
14
|
+
export declare const DropdownLink: import("react").ForwardRefExoticComponent<HTMLAttributes<HTMLAnchorElement> & {
|
|
15
|
+
href?: string;
|
|
16
|
+
} & import("react").RefAttributes<HTMLAnchorElement>>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Color, Size } from "../utils/types";
|
|
2
|
+
type InputColor = Color;
|
|
3
|
+
type InputSize = Size | "xl";
|
|
4
|
+
interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {
|
|
5
|
+
color?: InputColor;
|
|
6
|
+
inputSize?: InputSize;
|
|
7
|
+
ghost?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare const Input: import("react").ForwardRefExoticComponent<InputProps & import("react").RefAttributes<HTMLInputElement>>;
|
|
10
|
+
interface InputGroupProps extends React.LabelHTMLAttributes<HTMLLabelElement> {
|
|
11
|
+
children: React.ReactNode;
|
|
12
|
+
}
|
|
13
|
+
export declare const InputGroup: import("react").ForwardRefExoticComponent<InputGroupProps & import("react").RefAttributes<HTMLLabelElement>>;
|
|
14
|
+
export type { InputProps, InputGroupProps, InputColor, InputSize };
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { Size } from "../utils/types";
|
|
2
|
+
type KbdSize = Size | "xl";
|
|
3
|
+
interface KbdProps extends React.HTMLAttributes<HTMLElement> {
|
|
4
|
+
children: React.ReactNode;
|
|
5
|
+
size?: KbdSize;
|
|
6
|
+
}
|
|
7
|
+
export declare const Kbd: import("react").ForwardRefExoticComponent<KbdProps & import("react").RefAttributes<HTMLElement>>;
|
|
8
|
+
export type { KbdProps, KbdSize };
|
|
9
|
+
type IconComponent = React.ComponentType<{
|
|
10
|
+
size?: number;
|
|
11
|
+
}>;
|
|
12
|
+
export interface FnKeyIcons {
|
|
13
|
+
Command?: IconComponent;
|
|
14
|
+
Option?: IconComponent;
|
|
15
|
+
ArrowBigUp?: IconComponent;
|
|
16
|
+
CircleArrowOutUpLeft?: IconComponent;
|
|
17
|
+
Space?: IconComponent;
|
|
18
|
+
Delete?: IconComponent;
|
|
19
|
+
ArrowRightToLine?: IconComponent;
|
|
20
|
+
ChevronUp?: IconComponent;
|
|
21
|
+
ChevronDown?: IconComponent;
|
|
22
|
+
ChevronLeft?: IconComponent;
|
|
23
|
+
ChevronRight?: IconComponent;
|
|
24
|
+
}
|
|
25
|
+
export declare const FnKey: {
|
|
26
|
+
configure(icons: FnKeyIcons): void;
|
|
27
|
+
Cmd: () => import("react").JSX.Element;
|
|
28
|
+
Option: () => import("react").JSX.Element;
|
|
29
|
+
Ctrl: () => import("react").JSX.Element;
|
|
30
|
+
Shift: () => import("react").JSX.Element;
|
|
31
|
+
Esc: () => import("react").JSX.Element;
|
|
32
|
+
Space: () => import("react").JSX.Element;
|
|
33
|
+
Delete: () => import("react").JSX.Element;
|
|
34
|
+
Tab: () => import("react").JSX.Element;
|
|
35
|
+
Up: () => import("react").JSX.Element;
|
|
36
|
+
Down: () => import("react").JSX.Element;
|
|
37
|
+
Left: () => import("react").JSX.Element;
|
|
38
|
+
Right: () => import("react").JSX.Element;
|
|
39
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Placement } from "../utils/types";
|
|
2
|
+
interface ModalProps extends React.DialogHTMLAttributes<HTMLDialogElement> {
|
|
3
|
+
children: React.ReactNode;
|
|
4
|
+
closeOnBackdrop?: boolean;
|
|
5
|
+
placement?: Placement;
|
|
6
|
+
boxClassName?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const Modal: import("react").ForwardRefExoticComponent<ModalProps & import("react").RefAttributes<HTMLDialogElement>>;
|
|
9
|
+
export declare function useModal(): {
|
|
10
|
+
ref: import("react").RefObject<HTMLDialogElement | null>;
|
|
11
|
+
open: () => void;
|
|
12
|
+
close: () => void | undefined;
|
|
13
|
+
};
|
|
14
|
+
export type { ModalProps };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { ReactNode, CSSProperties } from "react";
|
|
2
|
+
export interface NavbarProps {
|
|
3
|
+
id?: string;
|
|
4
|
+
children?: ReactNode;
|
|
5
|
+
className?: string;
|
|
6
|
+
style?: CSSProperties;
|
|
7
|
+
}
|
|
8
|
+
export interface LogoProps {
|
|
9
|
+
src?: string;
|
|
10
|
+
alt?: string;
|
|
11
|
+
text?: string;
|
|
12
|
+
href?: string;
|
|
13
|
+
className?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface NavMenuItem {
|
|
16
|
+
title: string;
|
|
17
|
+
href: string;
|
|
18
|
+
isExternal?: boolean;
|
|
19
|
+
}
|
|
20
|
+
export interface NavMenuProps {
|
|
21
|
+
items: NavMenuItem[];
|
|
22
|
+
activePath?: string;
|
|
23
|
+
className?: string;
|
|
24
|
+
}
|
|
25
|
+
export declare function Navbar({ id, children, className, style }: NavbarProps): import("react").JSX.Element;
|
|
26
|
+
export declare function Logo({ src, alt, text, href, className }: LogoProps): import("react").JSX.Element;
|
|
27
|
+
export declare function NavMenu({ items, activePath, className }: NavMenuProps): import("react").JSX.Element;
|
|
28
|
+
export declare function NavMenuLink({ item, isActive, className, }: {
|
|
29
|
+
item: NavMenuItem;
|
|
30
|
+
isActive?: boolean;
|
|
31
|
+
className?: string;
|
|
32
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
export interface PaginationDocsProps {
|
|
3
|
+
prev?: {
|
|
4
|
+
href: string;
|
|
5
|
+
title: string;
|
|
6
|
+
};
|
|
7
|
+
next?: {
|
|
8
|
+
href: string;
|
|
9
|
+
title: string;
|
|
10
|
+
description?: string;
|
|
11
|
+
};
|
|
12
|
+
className?: string;
|
|
13
|
+
prevIcon?: ReactNode;
|
|
14
|
+
nextIcon?: ReactNode;
|
|
15
|
+
linkClassName?: string;
|
|
16
|
+
}
|
|
17
|
+
export declare function PaginationDocs({ prev, next, className, prevIcon, nextIcon, linkClassName, }: PaginationDocsProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
import type { Size } from "../utils/types";
|
|
3
|
+
export interface ThemeControllerToggleProps {
|
|
4
|
+
defaultTheme?: string;
|
|
5
|
+
lightTheme?: string;
|
|
6
|
+
darkTheme?: string;
|
|
7
|
+
onThemeChange?: (theme: string) => void;
|
|
8
|
+
className?: string;
|
|
9
|
+
label?: ReactNode;
|
|
10
|
+
size?: Size;
|
|
11
|
+
children?: (state: {
|
|
12
|
+
isDark: boolean;
|
|
13
|
+
checked: boolean;
|
|
14
|
+
toggle: (checked: boolean) => void;
|
|
15
|
+
}) => ReactNode;
|
|
16
|
+
}
|
|
17
|
+
export declare function ThemeControllerToggle({ defaultTheme, lightTheme, darkTheme, onThemeChange, className, label, size, children, }: ThemeControllerToggleProps): import("react").JSX.Element;
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
import { C as Color, a as Size } from './types-BZI5Cv8-.js';
|
|
4
|
-
|
|
1
|
+
import type { InputHTMLAttributes, ReactNode } from "react";
|
|
2
|
+
import type { Color, Size } from "../utils/types";
|
|
5
3
|
type ToggleColor = Color;
|
|
6
4
|
type ToggleSize = Size;
|
|
7
5
|
interface ToggleProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "type" | "size"> {
|
|
@@ -14,7 +12,7 @@ interface ToggleProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "type"
|
|
|
14
12
|
labelClassName?: string;
|
|
15
13
|
descriptionClassName?: string;
|
|
16
14
|
}
|
|
17
|
-
declare const Toggle: react.ForwardRefExoticComponent<ToggleProps & react.RefAttributes<HTMLInputElement>>;
|
|
15
|
+
declare const Toggle: import("react").ForwardRefExoticComponent<ToggleProps & import("react").RefAttributes<HTMLInputElement>>;
|
|
18
16
|
interface ToggleGroupItem {
|
|
19
17
|
value: string;
|
|
20
18
|
label: ReactNode;
|
|
@@ -30,6 +28,6 @@ interface ToggleGroupProps {
|
|
|
30
28
|
controlled?: boolean;
|
|
31
29
|
className?: string;
|
|
32
30
|
}
|
|
33
|
-
declare function ToggleGroup({ items, value, defaultValue, onChange, color, size, controlled, className, }: ToggleGroupProps): react.JSX.Element;
|
|
34
|
-
|
|
35
|
-
export {
|
|
31
|
+
export declare function ToggleGroup({ items, value, defaultValue, onChange, color, size, controlled, className, }: ToggleGroupProps): import("react").JSX.Element;
|
|
32
|
+
export { Toggle };
|
|
33
|
+
export type { ToggleProps, ToggleGroupProps, ToggleGroupItem, ToggleColor, ToggleSize };
|
package/dist/breadcrumbs.js
CHANGED
|
@@ -1,13 +1,28 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
1
|
+
import { cn as e } from "./cn.js";
|
|
2
|
+
import { Fragment as t, jsx as n } from "react/jsx-runtime";
|
|
3
|
+
//#region src/base/breadcrumbs.tsx
|
|
4
|
+
function r({ children: t, className: r }) {
|
|
5
|
+
return /* @__PURE__ */ n("div", {
|
|
6
|
+
className: e("breadcrumbs text-sm", r),
|
|
7
|
+
children: /* @__PURE__ */ n("ul", { children: t })
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
function i({ children: t, className: r }) {
|
|
11
|
+
return /* @__PURE__ */ n("li", {
|
|
12
|
+
className: e(r),
|
|
13
|
+
children: t
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
function a({ children: t, className: r }) {
|
|
17
|
+
return /* @__PURE__ */ n("span", {
|
|
18
|
+
className: e(r),
|
|
19
|
+
children: t
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
function o({ children: e }) {
|
|
23
|
+
return /* @__PURE__ */ n(t, { children: e });
|
|
24
|
+
}
|
|
25
|
+
//#endregion
|
|
26
|
+
export { r as Breadcrumb, i as BreadcrumbItem, o as BreadcrumbList, a as BreadcrumbPage };
|
|
27
|
+
|
|
28
|
+
//# sourceMappingURL=breadcrumbs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"breadcrumbs.js","names":[],"sources":["../src/base/breadcrumbs.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../utils/cn\";\n\nexport interface BreadcrumbProps {\n children: ReactNode;\n className?: string;\n}\nexport interface BreadcrumbItemProps {\n children: ReactNode;\n className?: string;\n}\n\nexport function Breadcrumb({ children, className }: BreadcrumbProps) {\n return (\n <div className={cn(\"breadcrumbs text-sm\", className)}>\n <ul>{children}</ul>\n </div>\n );\n}\n\nexport function BreadcrumbItem({ children, className }: BreadcrumbItemProps) {\n return <li className={cn(className)}>{children}</li>;\n}\n\nexport function BreadcrumbPage({ children, className }: BreadcrumbItemProps) {\n return <span className={cn(className)}>{children}</span>;\n}\n\nexport function BreadcrumbList({ children }: { children: React.ReactNode }) {\n return <>{children}</>;\n}\n"],"mappings":";;;AAYA,SAAgB,EAAW,EAAE,aAAU,gBAA8B;CACnE,OACE,kBAAC,OAAD;EAAK,WAAW,EAAG,uBAAuB,CAAS;EACjD,UAAA,kBAAC,MAAD,EAAK,YAAa,CAAA;CACf,CAAA;AAET;AAEA,SAAgB,EAAe,EAAE,aAAU,gBAAkC;CAC3E,OAAO,kBAAC,MAAD;EAAI,WAAW,EAAG,CAAS;EAAI;CAAa,CAAA;AACrD;AAEA,SAAgB,EAAe,EAAE,aAAU,gBAAkC;CAC3E,OAAO,kBAAC,QAAD;EAAM,WAAW,EAAG,CAAS;EAAI;CAAe,CAAA;AACzD;AAEA,SAAgB,EAAe,EAAE,eAA2C;CAC1E,OAAO,kBAAA,GAAA,EAAG,YAAW,CAAA;AACvB"}
|
package/dist/cn.js
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
}
|
|
1
|
+
import { clsx as e } from "clsx";
|
|
2
|
+
import { twMerge as t } from "tailwind-merge";
|
|
3
|
+
//#region src/utils/cn.ts
|
|
4
|
+
function n(...n) {
|
|
5
|
+
return t(e(n));
|
|
6
|
+
}
|
|
7
|
+
//#endregion
|
|
8
|
+
export { n as cn };
|
|
9
|
+
|
|
10
|
+
//# sourceMappingURL=cn.js.map
|
package/dist/cn.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cn.js","names":[],"sources":["../src/utils/cn.ts"],"sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n"],"mappings":";;;AAGA,SAAgB,EAAG,GAAG,GAA8B;CAClD,OAAO,EAAQ,EAAK,CAAM,CAAC;AAC7B"}
|
package/dist/collapse.js
CHANGED
|
@@ -1,12 +1,77 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
2
|
+
import { cn as e } from "./cn.js";
|
|
3
|
+
import { useState as t } from "react";
|
|
4
|
+
import { jsx as n, jsxs as r } from "react/jsx-runtime";
|
|
5
|
+
//#region src/base/collapse.tsx
|
|
6
|
+
function i({ title: i, children: a, defaultOpen: o = !1, onOpenChange: s, variant: c = "arrow", className: l, titleClassName: u, contentClassName: d, disabled: f = !1 }) {
|
|
7
|
+
let [p, m] = t(o), h = () => {
|
|
8
|
+
if (f) return;
|
|
9
|
+
let e = !p;
|
|
10
|
+
m(e), s?.(e);
|
|
11
|
+
};
|
|
12
|
+
return /* @__PURE__ */ r("div", {
|
|
13
|
+
className: e("bg-base-100 border-base-200 collapse rounded-lg border", p && "collapse-open", !p && "collapse-close", c === "arrow" ? "collapse-arrow" : "collapse-plus", f && "cursor-not-allowed opacity-50", l),
|
|
14
|
+
children: [
|
|
15
|
+
/* @__PURE__ */ n("input", {
|
|
16
|
+
type: "checkbox",
|
|
17
|
+
checked: p,
|
|
18
|
+
onChange: h,
|
|
19
|
+
disabled: f,
|
|
20
|
+
"aria-expanded": p
|
|
21
|
+
}),
|
|
22
|
+
/* @__PURE__ */ n("div", {
|
|
23
|
+
className: e("collapse-title text-base-content cursor-pointer font-medium", u),
|
|
24
|
+
onClick: h,
|
|
25
|
+
role: "button",
|
|
26
|
+
tabIndex: f ? -1 : 0,
|
|
27
|
+
onKeyDown: (e) => {
|
|
28
|
+
!f && (e.key === "Enter" || e.key === " ") && (e.preventDefault(), h());
|
|
29
|
+
},
|
|
30
|
+
children: i
|
|
31
|
+
}),
|
|
32
|
+
/* @__PURE__ */ n("div", {
|
|
33
|
+
className: e("collapse-content text-base-content/80", d),
|
|
34
|
+
children: a
|
|
35
|
+
})
|
|
36
|
+
]
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
function a({ items: i, defaultOpen: a, variant: o = "arrow", className: s, allowMultiple: c = !1 }) {
|
|
40
|
+
let [l, u] = t(a ? /* @__PURE__ */ new Set([a]) : /* @__PURE__ */ new Set()), d = (e) => {
|
|
41
|
+
u((t) => {
|
|
42
|
+
let n = new Set(t);
|
|
43
|
+
return n.has(e) ? n.delete(e) : (c || n.clear(), n.add(e)), n;
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
return /* @__PURE__ */ n("div", {
|
|
47
|
+
className: e("flex flex-col gap-3", s),
|
|
48
|
+
children: i.map((t) => /* @__PURE__ */ r("div", {
|
|
49
|
+
className: e("bg-base-100 border-base-200 collapse rounded-lg border", l.has(t.id) && "collapse-open", !l.has(t.id) && "collapse-close", o === "arrow" ? "collapse-arrow" : "collapse-plus"),
|
|
50
|
+
children: [
|
|
51
|
+
/* @__PURE__ */ n("input", {
|
|
52
|
+
type: "checkbox",
|
|
53
|
+
checked: l.has(t.id),
|
|
54
|
+
onChange: () => d(t.id)
|
|
55
|
+
}),
|
|
56
|
+
/* @__PURE__ */ n("div", {
|
|
57
|
+
className: "collapse-title text-base-content cursor-pointer font-medium",
|
|
58
|
+
onClick: () => d(t.id),
|
|
59
|
+
role: "button",
|
|
60
|
+
tabIndex: 0,
|
|
61
|
+
onKeyDown: (e) => {
|
|
62
|
+
(e.key === "Enter" || e.key === " ") && (e.preventDefault(), d(t.id));
|
|
63
|
+
},
|
|
64
|
+
children: t.title
|
|
65
|
+
}),
|
|
66
|
+
/* @__PURE__ */ n("div", {
|
|
67
|
+
className: "collapse-content text-base-content/80",
|
|
68
|
+
children: t.content
|
|
69
|
+
})
|
|
70
|
+
]
|
|
71
|
+
}, t.id))
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
//#endregion
|
|
75
|
+
export { a as Accordion, i as Collapse, i as default };
|
|
76
|
+
|
|
77
|
+
//# sourceMappingURL=collapse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collapse.js","names":[],"sources":["../src/base/collapse.tsx"],"sourcesContent":["\"use client\";\n\nimport { cn } from \"../utils/cn\";\nimport { useState, type ReactNode } from \"react\";\n\ntype CollapseVariant = \"arrow\" | \"plus\";\n\ninterface CollapseProps {\n title: ReactNode;\n children: ReactNode;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n variant?: CollapseVariant;\n className?: string;\n titleClassName?: string;\n contentClassName?: string;\n disabled?: boolean;\n}\n\nexport function Collapse({\n title,\n children,\n defaultOpen = false,\n onOpenChange,\n variant = \"arrow\",\n className,\n titleClassName,\n contentClassName,\n disabled = false,\n}: CollapseProps) {\n const [isOpen, setIsOpen] = useState(defaultOpen);\n\n const handleToggle = () => {\n if (disabled) return;\n const next = !isOpen;\n setIsOpen(next);\n onOpenChange?.(next);\n };\n\n return (\n <div\n className={cn(\n \"bg-base-100 border-base-200 collapse rounded-lg border\",\n isOpen && \"collapse-open\",\n !isOpen && \"collapse-close\",\n variant === \"arrow\" ? \"collapse-arrow\" : \"collapse-plus\",\n disabled && \"cursor-not-allowed opacity-50\",\n className\n )}\n >\n <input\n type=\"checkbox\"\n checked={isOpen}\n onChange={handleToggle}\n disabled={disabled}\n aria-expanded={isOpen}\n />\n <div\n className={cn(\n \"collapse-title text-base-content cursor-pointer font-medium\",\n titleClassName\n )}\n onClick={handleToggle}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n onKeyDown={(e) => {\n if (!disabled && (e.key === \"Enter\" || e.key === \" \")) {\n e.preventDefault();\n handleToggle();\n }\n }}\n >\n {title}\n </div>\n <div className={cn(\"collapse-content text-base-content/80\", contentClassName)}>\n {children}\n </div>\n </div>\n );\n}\n\ninterface AccordionItem {\n id: string;\n title: ReactNode;\n content: ReactNode;\n}\n\ninterface AccordionProps {\n items: AccordionItem[];\n defaultOpen?: string;\n variant?: CollapseVariant;\n className?: string;\n allowMultiple?: boolean;\n}\n\nexport function Accordion({\n items,\n defaultOpen,\n variant = \"arrow\",\n className,\n allowMultiple = false,\n}: AccordionProps) {\n const [openIds, setOpenIds] = useState<Set<string>>(\n defaultOpen ? new Set([defaultOpen]) : new Set()\n );\n\n const toggle = (id: string) => {\n setOpenIds((prev) => {\n const next = new Set(prev);\n if (next.has(id)) {\n next.delete(id);\n } else {\n if (!allowMultiple) next.clear();\n next.add(id);\n }\n return next;\n });\n };\n\n return (\n <div className={cn(\"flex flex-col gap-3\", className)}>\n {items.map((item) => (\n <div\n key={item.id}\n className={cn(\n \"bg-base-100 border-base-200 collapse rounded-lg border\",\n openIds.has(item.id) && \"collapse-open\",\n !openIds.has(item.id) && \"collapse-close\",\n variant === \"arrow\" ? \"collapse-arrow\" : \"collapse-plus\"\n )}\n >\n <input type=\"checkbox\" checked={openIds.has(item.id)} onChange={() => toggle(item.id)} />\n <div\n className=\"collapse-title text-base-content cursor-pointer font-medium\"\n onClick={() => toggle(item.id)}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n toggle(item.id);\n }\n }}\n >\n {item.title}\n </div>\n <div className=\"collapse-content text-base-content/80\">{item.content}</div>\n </div>\n ))}\n </div>\n );\n}\n\nexport type { CollapseProps, CollapseVariant, AccordionItem, AccordionProps };\nexport default Collapse;\n"],"mappings":";;;;;AAmBA,SAAgB,EAAS,EACvB,UACA,aACA,iBAAc,IACd,iBACA,aAAU,SACV,cACA,mBACA,qBACA,cAAW,MACK;CAChB,IAAM,CAAC,GAAQ,KAAa,EAAS,CAAW,GAE1C,UAAqB;EACzB,IAAI,GAAU;EACd,IAAM,IAAO,CAAC;EAEd,AADA,EAAU,CAAI,GACd,IAAe,CAAI;CACrB;CAEA,OACE,kBAAC,OAAD;EACE,WAAW,EACT,0DACA,KAAU,iBACV,CAAC,KAAU,kBACX,MAAY,UAAU,mBAAmB,iBACzC,KAAY,iCACZ,CACF;EARF,UAAA;GAUE,kBAAC,SAAD;IACE,MAAK;IACL,SAAS;IACT,UAAU;IACA;IACV,iBAAe;GAChB,CAAA;GACD,kBAAC,OAAD;IACE,WAAW,EACT,+DACA,CACF;IACA,SAAS;IACT,MAAK;IACL,UAAU,IAAW,KAAK;IAC1B,YAAY,MAAM;KAChB,AAAI,CAAC,MAAa,EAAE,QAAQ,WAAW,EAAE,QAAQ,SAC/C,EAAE,eAAe,GACjB,EAAa;IAEjB;IAEC,UAAA;GACE,CAAA;GACL,kBAAC,OAAD;IAAK,WAAW,EAAG,yCAAyC,CAAgB;IACzE;GACE,CAAA;EACF;;AAET;AAgBA,SAAgB,EAAU,EACxB,UACA,gBACA,aAAU,SACV,cACA,mBAAgB,MACC;CACjB,IAAM,CAAC,GAAS,KAAc,EAC5B,oBAAc,IAAI,IAAI,CAAC,CAAW,CAAC,oBAAI,IAAI,IAAI,CACjD,GAEM,KAAU,MAAe;EAC7B,GAAY,MAAS;GACnB,IAAM,IAAO,IAAI,IAAI,CAAI;GAOzB,OANI,EAAK,IAAI,CAAE,IACb,EAAK,OAAO,CAAE,KAET,KAAe,EAAK,MAAM,GAC/B,EAAK,IAAI,CAAE,IAEN;EACT,CAAC;CACH;CAEA,OACE,kBAAC,OAAD;EAAK,WAAW,EAAG,uBAAuB,CAAS;EAChD,UAAA,EAAM,KAAK,MACV,kBAAC,OAAD;GAEE,WAAW,EACT,0DACA,EAAQ,IAAI,EAAK,EAAE,KAAK,iBACxB,CAAC,EAAQ,IAAI,EAAK,EAAE,KAAK,kBACzB,MAAY,UAAU,mBAAmB,eAC3C;GAPF,UAAA;IASE,kBAAC,SAAD;KAAO,MAAK;KAAW,SAAS,EAAQ,IAAI,EAAK,EAAE;KAAG,gBAAgB,EAAO,EAAK,EAAE;IAAI,CAAA;IACxF,kBAAC,OAAD;KACE,WAAU;KACV,eAAe,EAAO,EAAK,EAAE;KAC7B,MAAK;KACL,UAAU;KACV,YAAY,MAAM;MAChB,CAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,SACjC,EAAE,eAAe,GACjB,EAAO,EAAK,EAAE;KAElB;KAEC,UAAA,EAAK;IACH,CAAA;IACL,kBAAC,OAAD;KAAK,WAAU;KAAyC,UAAA,EAAK;IAAa,CAAA;GACvE;EAxBE,GAAA,EAAK,EAwBP,CACN;CACE,CAAA;AAET"}
|
package/dist/drawer.js
CHANGED
|
@@ -1,16 +1,70 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
2
|
+
import { cn as e } from "./cn.js";
|
|
3
|
+
import { useState as t } from "react";
|
|
4
|
+
import { jsx as n, jsxs as r } from "react/jsx-runtime";
|
|
5
|
+
//#region src/base/drawer.tsx
|
|
6
|
+
function i({ id: i, children: a, defaultOpen: o = !1, side: s = "left", breakpoint: c = "lg", withOverlay: l = !0, overlayClassName: u, sideClassName: d, contentClassName: f, className: p }) {
|
|
7
|
+
let [m, h] = t(o);
|
|
8
|
+
return /* @__PURE__ */ r("div", {
|
|
9
|
+
className: e("drawer", c && `${c}:drawer-open`, s === "right" && "drawer-end", p),
|
|
10
|
+
children: [
|
|
11
|
+
/* @__PURE__ */ n("input", {
|
|
12
|
+
id: i,
|
|
13
|
+
type: "checkbox",
|
|
14
|
+
className: "drawer-toggle",
|
|
15
|
+
checked: m,
|
|
16
|
+
onChange: () => h(!m),
|
|
17
|
+
"aria-label": "Toggle drawer"
|
|
18
|
+
}),
|
|
19
|
+
/* @__PURE__ */ n("div", {
|
|
20
|
+
className: e("drawer-content flex flex-col", f),
|
|
21
|
+
children: a
|
|
22
|
+
}),
|
|
23
|
+
/* @__PURE__ */ n("div", {
|
|
24
|
+
className: e("drawer-side", d),
|
|
25
|
+
children: l && /* @__PURE__ */ n("label", {
|
|
26
|
+
htmlFor: i,
|
|
27
|
+
"aria-label": "Close sidebar",
|
|
28
|
+
className: e("drawer-overlay", u),
|
|
29
|
+
onClick: () => h(!1)
|
|
30
|
+
})
|
|
31
|
+
})
|
|
32
|
+
]
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
function a(e = !1) {
|
|
36
|
+
let [n, r] = t(e);
|
|
37
|
+
return {
|
|
38
|
+
isOpen: n,
|
|
39
|
+
open: () => r(!0),
|
|
40
|
+
close: () => r(!1),
|
|
41
|
+
toggle: () => r((e) => !e)
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
function o({ drawerId: t, children: r, className: i }) {
|
|
45
|
+
return /* @__PURE__ */ n("label", {
|
|
46
|
+
htmlFor: t,
|
|
47
|
+
className: e("label cursor-pointer", i),
|
|
48
|
+
children: r
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
function s({ id: t, children: i, side: a = "left", withOverlay: o = !0, overlayClassName: s, className: c }) {
|
|
52
|
+
return /* @__PURE__ */ r("div", {
|
|
53
|
+
className: e("drawer-side", a === "right" && "drawer-end", c),
|
|
54
|
+
children: [o && /* @__PURE__ */ n("label", {
|
|
55
|
+
htmlFor: t,
|
|
56
|
+
"aria-label": "Close sidebar",
|
|
57
|
+
className: e("drawer-overlay", s)
|
|
58
|
+
}), i]
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
function c({ children: t, className: r }) {
|
|
62
|
+
return /* @__PURE__ */ n("div", {
|
|
63
|
+
className: e("drawer-content", r),
|
|
64
|
+
children: t
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
//#endregion
|
|
68
|
+
export { i as Drawer, c as DrawerContent, s as DrawerSidePanel, o as DrawerTrigger, a as useDrawerState };
|
|
69
|
+
|
|
70
|
+
//# sourceMappingURL=drawer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drawer.js","names":[],"sources":["../src/base/drawer.tsx"],"sourcesContent":["\"use client\";\n\nimport { cn } from \"../utils/cn\";\nimport { useState, type ReactNode } from \"react\";\nimport type { Side } from \"../utils/types\";\n\ninterface DrawerProps {\n id: string;\n children: ReactNode;\n defaultOpen?: boolean;\n side?: Side;\n breakpoint?: string;\n withOverlay?: boolean;\n overlayClassName?: string;\n sideClassName?: string;\n contentClassName?: string;\n className?: string;\n}\n\nexport function Drawer({\n id,\n children,\n defaultOpen = false,\n side = \"left\",\n breakpoint = \"lg\",\n withOverlay = true,\n overlayClassName,\n sideClassName,\n contentClassName,\n className,\n}: DrawerProps) {\n const [isOpen, setIsOpen] = useState(defaultOpen);\n return (\n <div\n className={cn(\n \"drawer\",\n breakpoint && `${breakpoint}:drawer-open`,\n side === \"right\" && \"drawer-end\",\n className\n )}\n >\n <input\n id={id}\n type=\"checkbox\"\n className=\"drawer-toggle\"\n checked={isOpen}\n onChange={() => setIsOpen(!isOpen)}\n aria-label=\"Toggle drawer\"\n />\n <div className={cn(\"drawer-content flex flex-col\", contentClassName)}>{children}</div>\n <div className={cn(\"drawer-side\", sideClassName)}>\n {withOverlay && (\n <label\n htmlFor={id}\n aria-label=\"Close sidebar\"\n className={cn(\"drawer-overlay\", overlayClassName)}\n onClick={() => setIsOpen(false)}\n />\n )}\n </div>\n </div>\n );\n}\n\nexport function useDrawerState(initialState = false) {\n const [isOpen, setIsOpen] = useState(initialState);\n return {\n isOpen,\n open: () => setIsOpen(true),\n close: () => setIsOpen(false),\n toggle: () => setIsOpen((prev) => !prev),\n };\n}\n\ninterface DrawerTriggerProps {\n drawerId: string;\n children: ReactNode;\n className?: string;\n}\n\nexport function DrawerTrigger({ drawerId, children, className }: DrawerTriggerProps) {\n return (\n <label htmlFor={drawerId} className={cn(\"label cursor-pointer\", className)}>\n {children}\n </label>\n );\n}\n\ninterface DrawerSidePanelProps {\n id: string;\n children: ReactNode;\n side?: Side;\n withOverlay?: boolean;\n overlayClassName?: string;\n className?: string;\n}\n\nexport function DrawerSidePanel({\n id,\n children,\n side = \"left\",\n withOverlay = true,\n overlayClassName,\n className,\n}: DrawerSidePanelProps) {\n return (\n <div className={cn(\"drawer-side\", side === \"right\" && \"drawer-end\", className)}>\n {withOverlay && (\n <label\n htmlFor={id}\n aria-label=\"Close sidebar\"\n className={cn(\"drawer-overlay\", overlayClassName)}\n />\n )}\n {children}\n </div>\n );\n}\n\nexport function DrawerContent({\n children,\n className,\n}: {\n children: React.ReactNode;\n className?: string;\n}) {\n return <div className={cn(\"drawer-content\", className)}>{children}</div>;\n}\n\nexport type { DrawerProps, DrawerTriggerProps, DrawerSidePanelProps };\n"],"mappings":";;;;;AAmBA,SAAgB,EAAO,EACrB,OACA,aACA,iBAAc,IACd,UAAO,QACP,gBAAa,MACb,iBAAc,IACd,qBACA,kBACA,qBACA,gBACc;CACd,IAAM,CAAC,GAAQ,KAAa,EAAS,CAAW;CAChD,OACE,kBAAC,OAAD;EACE,WAAW,EACT,UACA,KAAc,GAAG,EAAW,eAC5B,MAAS,WAAW,cACpB,CACF;EANF,UAAA;GAQE,kBAAC,SAAD;IACM;IACJ,MAAK;IACL,WAAU;IACV,SAAS;IACT,gBAAgB,EAAU,CAAC,CAAM;IACjC,cAAW;GACZ,CAAA;GACD,kBAAC,OAAD;IAAK,WAAW,EAAG,gCAAgC,CAAgB;IAAI;GAAc,CAAA;GACrF,kBAAC,OAAD;IAAK,WAAW,EAAG,eAAe,CAAa;IAC5C,UAAA,KACC,kBAAC,SAAD;KACE,SAAS;KACT,cAAW;KACX,WAAW,EAAG,kBAAkB,CAAgB;KAChD,eAAe,EAAU,EAAK;IAC/B,CAAA;GAEA,CAAA;EACF;;AAET;AAEA,SAAgB,EAAe,IAAe,IAAO;CACnD,IAAM,CAAC,GAAQ,KAAa,EAAS,CAAY;CACjD,OAAO;EACL;EACA,YAAY,EAAU,EAAI;EAC1B,aAAa,EAAU,EAAK;EAC5B,cAAc,GAAW,MAAS,CAAC,CAAI;CACzC;AACF;AAQA,SAAgB,EAAc,EAAE,aAAU,aAAU,gBAAiC;CACnF,OACE,kBAAC,SAAD;EAAO,SAAS;EAAU,WAAW,EAAG,wBAAwB,CAAS;EACtE;CACI,CAAA;AAEX;AAWA,SAAgB,EAAgB,EAC9B,OACA,aACA,UAAO,QACP,iBAAc,IACd,qBACA,gBACuB;CACvB,OACE,kBAAC,OAAD;EAAK,WAAW,EAAG,eAAe,MAAS,WAAW,cAAc,CAAS;EAA7E,UAAA,CACG,KACC,kBAAC,SAAD;GACE,SAAS;GACT,cAAW;GACX,WAAW,EAAG,kBAAkB,CAAgB;EACjD,CAAA,GAEF,CACE;;AAET;AAEA,SAAgB,EAAc,EAC5B,aACA,gBAIC;CACD,OAAO,kBAAC,OAAD;EAAK,WAAW,EAAG,kBAAkB,CAAS;EAAI;CAAc,CAAA;AACzE"}
|
package/dist/dropdown.js
CHANGED
|
@@ -1,12 +1,53 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
2
|
+
import { cn as e } from "./cn.js";
|
|
3
|
+
import { forwardRef as t, useEffect as n, useRef as r } from "react";
|
|
4
|
+
import { jsx as i, jsxs as a } from "react/jsx-runtime";
|
|
5
|
+
//#region src/base/dropdown.tsx
|
|
6
|
+
var o = t(({ className: t, align: o = "start", disabled: s = !1, trigger: c, children: l, menuClassName: u, ...d }, f) => {
|
|
7
|
+
let p = r(null);
|
|
8
|
+
return n(() => {
|
|
9
|
+
let e = (e) => {
|
|
10
|
+
p.current && !p.current.contains(e.target) && (p.current.open = !1);
|
|
11
|
+
};
|
|
12
|
+
return document.addEventListener("click", e), () => document.removeEventListener("click", e);
|
|
13
|
+
}, []), /* @__PURE__ */ a("details", {
|
|
14
|
+
ref: (e) => {
|
|
15
|
+
p.current = e, typeof f == "function" ? f(e) : f && (f.current = e);
|
|
16
|
+
},
|
|
17
|
+
className: e("relative", s && "pointer-events-none opacity-50", t),
|
|
18
|
+
...d,
|
|
19
|
+
children: [/* @__PURE__ */ i("summary", {
|
|
20
|
+
className: "cursor-pointer",
|
|
21
|
+
style: { listStyle: "none" },
|
|
22
|
+
children: c
|
|
23
|
+
}), /* @__PURE__ */ i("ul", {
|
|
24
|
+
className: e("bg-base-100 rounded-box border-base-300 absolute z-50 mt-1 min-w-[240px] space-y-1 border p-2 shadow-lg", o === "end" ? "right-0" : "left-0", u),
|
|
25
|
+
children: l
|
|
26
|
+
})]
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
o.displayName = "Dropdown";
|
|
30
|
+
var s = t(({ className: t, children: n, ...r }, a) => /* @__PURE__ */ i("li", {
|
|
31
|
+
ref: a,
|
|
32
|
+
className: e("hover:bg-base-200 text-base-content/80 hover:text-base-content relative flex cursor-pointer items-center gap-2 rounded px-2 py-2 text-sm transition-colors outline-none", t),
|
|
33
|
+
role: "menuitem",
|
|
34
|
+
...r,
|
|
35
|
+
children: n
|
|
36
|
+
}));
|
|
37
|
+
s.displayName = "DropdownItem";
|
|
38
|
+
var c = t(({ className: t, children: n, href: r, ...a }, o) => /* @__PURE__ */ i("li", {
|
|
39
|
+
role: "menuitem",
|
|
40
|
+
className: "hover:bg-base-200 text-base-content/80 hover:text-base-content relative flex cursor-pointer items-center gap-2 rounded px-2 py-2 text-sm transition-colors outline-none",
|
|
41
|
+
children: /* @__PURE__ */ i("a", {
|
|
42
|
+
ref: o,
|
|
43
|
+
href: r,
|
|
44
|
+
className: e("text-inherit no-underline", t),
|
|
45
|
+
...a,
|
|
46
|
+
children: n
|
|
47
|
+
})
|
|
48
|
+
}));
|
|
49
|
+
c.displayName = "DropdownLink";
|
|
50
|
+
//#endregion
|
|
51
|
+
export { o as Dropdown, s as DropdownItem, c as DropdownLink };
|
|
52
|
+
|
|
53
|
+
//# sourceMappingURL=dropdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dropdown.js","names":[],"sources":["../src/base/dropdown.tsx"],"sourcesContent":["\"use client\";\n\nimport { type HTMLAttributes, type ReactNode, forwardRef, useRef, useEffect } from \"react\";\nimport { cn } from \"../utils/cn\";\n\nexport interface DropdownProps extends HTMLAttributes<HTMLDetailsElement> {\n align?: \"start\" | \"end\";\n disabled?: boolean;\n trigger?: ReactNode;\n children?: ReactNode;\n menuClassName?: string;\n}\n\nexport const Dropdown = forwardRef<HTMLDetailsElement, DropdownProps>(\n (\n { className, align = \"start\", disabled = false, trigger, children, menuClassName, ...props },\n ref\n ) => {\n const detailsRef = useRef<HTMLDetailsElement>(null);\n\n useEffect(() => {\n const handler = (e: MouseEvent) => {\n if (detailsRef.current && !detailsRef.current.contains(e.target as Node)) {\n detailsRef.current.open = false;\n }\n };\n document.addEventListener(\"click\", handler);\n return () => document.removeEventListener(\"click\", handler);\n }, []);\n\n return (\n <details\n ref={(el) => {\n (detailsRef as React.MutableRefObject<HTMLDetailsElement | null>).current = el;\n if (typeof ref === \"function\") ref(el);\n else if (ref) ref.current = el;\n }}\n className={cn(\"relative\", disabled && \"pointer-events-none opacity-50\", className)}\n {...props}\n >\n <summary className=\"cursor-pointer\" style={{ listStyle: \"none\" }}>\n {trigger}\n </summary>\n <ul\n className={cn(\n \"bg-base-100 rounded-box border-base-300 absolute z-50 mt-1 min-w-[240px] space-y-1 border p-2 shadow-lg\",\n align === \"end\" ? \"right-0\" : \"left-0\",\n menuClassName\n )}\n >\n {children}\n </ul>\n </details>\n );\n }\n);\nDropdown.displayName = \"Dropdown\";\n\nexport interface DropdownItemProps extends HTMLAttributes<HTMLLIElement> {\n children?: ReactNode;\n}\n\nexport const DropdownItem = forwardRef<HTMLLIElement, DropdownItemProps>(\n ({ className, children, ...props }, ref) => (\n <li\n ref={ref}\n className={cn(\n \"hover:bg-base-200 text-base-content/80 hover:text-base-content relative flex cursor-pointer items-center gap-2 rounded px-2 py-2 text-sm transition-colors outline-none\",\n className\n )}\n role=\"menuitem\"\n {...props}\n >\n {children}\n </li>\n )\n);\nDropdownItem.displayName = \"DropdownItem\";\n\nexport const DropdownLink = forwardRef<\n HTMLAnchorElement,\n HTMLAttributes<HTMLAnchorElement> & { href?: string }\n>(({ className, children, href, ...props }, ref) => (\n <li\n role=\"menuitem\"\n className=\"hover:bg-base-200 text-base-content/80 hover:text-base-content relative flex cursor-pointer items-center gap-2 rounded px-2 py-2 text-sm transition-colors outline-none\"\n >\n <a ref={ref} href={href} className={cn(\"text-inherit no-underline\", className)} {...props}>\n {children}\n </a>\n </li>\n));\nDropdownLink.displayName = \"DropdownLink\";\n"],"mappings":";;;;;AAaA,IAAa,IAAW,GAEpB,EAAE,cAAW,WAAQ,SAAS,cAAW,IAAO,YAAS,aAAU,kBAAe,GAAG,KACrF,MACG;CACH,IAAM,IAAa,EAA2B,IAAI;CAYlD,OAVA,QAAgB;EACd,IAAM,KAAW,MAAkB;GACjC,AAAI,EAAW,WAAW,CAAC,EAAW,QAAQ,SAAS,EAAE,MAAc,MACrE,EAAW,QAAQ,OAAO;EAE9B;EAEA,OADA,SAAS,iBAAiB,SAAS,CAAO,SAC7B,SAAS,oBAAoB,SAAS,CAAO;CAC5D,GAAG,CAAC,CAAC,GAGH,kBAAC,WAAD;EACE,MAAM,MAAO;GAEX,AADA,EAAkE,UAAU,GACxE,OAAO,KAAQ,aAAY,EAAI,CAAE,IAC5B,MAAK,EAAI,UAAU;EAC9B;EACA,WAAW,EAAG,YAAY,KAAY,kCAAkC,CAAS;EACjF,GAAI;EAPN,UAAA,CASE,kBAAC,WAAD;GAAS,WAAU;GAAiB,OAAO,EAAE,WAAW,OAAO;GAC5D,UAAA;EACM,CAAA,GACT,kBAAC,MAAD;GACE,WAAW,EACT,2GACA,MAAU,QAAQ,YAAY,UAC9B,CACF;GAEC;EACC,CAAA,CACG;;AAEb,CACF;AACA,EAAS,cAAc;AAMvB,IAAa,IAAe,GACzB,EAAE,cAAW,aAAU,GAAG,KAAS,MAClC,kBAAC,MAAD;CACO;CACL,WAAW,EACT,2KACA,CACF;CACA,MAAK;CACL,GAAI;CAEH;AACC,CAAA,CAER;AACA,EAAa,cAAc;AAE3B,IAAa,IAAe,GAGzB,EAAE,cAAW,aAAU,SAAM,GAAG,KAAS,MAC1C,kBAAC,MAAD;CACE,MAAK;CACL,WAAU;CAEV,UAAA,kBAAC,KAAD;EAAQ;EAAW;EAAM,WAAW,EAAG,6BAA6B,CAAS;EAAG,GAAI;EACjF;CACA,CAAA;AACD,CAAA,CACL;AACD,EAAa,cAAc"}
|