@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.
Files changed (102) hide show
  1. package/dist/base/breadcrumbs.d.ts +15 -0
  2. package/dist/{collapse.d.ts → base/collapse.d.ts} +5 -7
  3. package/dist/base/drawer.d.ts +41 -0
  4. package/dist/base/dropdown.d.ts +16 -0
  5. package/dist/base/input.d.ts +14 -0
  6. package/dist/base/kbd.d.ts +39 -0
  7. package/dist/base/modal.d.ts +14 -0
  8. package/dist/base/navbar.d.ts +32 -0
  9. package/dist/base/pagination.d.ts +17 -0
  10. package/dist/base/theme-controller.d.ts +17 -0
  11. package/dist/{toggle.d.ts → base/toggle.d.ts} +6 -8
  12. package/dist/breadcrumbs.js +28 -13
  13. package/dist/breadcrumbs.js.map +1 -0
  14. package/dist/cn.js +10 -6
  15. package/dist/cn.js.map +1 -0
  16. package/dist/collapse.js +76 -11
  17. package/dist/collapse.js.map +1 -0
  18. package/dist/drawer.js +69 -15
  19. package/dist/drawer.js.map +1 -0
  20. package/dist/dropdown.js +52 -11
  21. package/dist/dropdown.js.map +1 -0
  22. package/dist/index.d.ts +23 -15
  23. package/dist/index.js +13 -84
  24. package/dist/input.js +21 -9
  25. package/dist/input.js.map +1 -0
  26. package/dist/kbd.js +74 -8
  27. package/dist/kbd.js.map +1 -0
  28. package/dist/modal.js +34 -9
  29. package/dist/modal.js.map +1 -0
  30. package/dist/navbar.js +53 -13
  31. package/dist/navbar.js.map +1 -0
  32. package/dist/pagination.js +60 -7
  33. package/dist/pagination.js.map +1 -0
  34. package/dist/theme-controller.js +50 -7
  35. package/dist/theme-controller.js.map +1 -0
  36. package/dist/toggle.js +65 -9
  37. package/dist/toggle.js.map +1 -0
  38. package/dist/utils/cn.d.ts +2 -0
  39. package/dist/utils/types.d.ts +4 -0
  40. package/package.json +44 -109
  41. package/dist/breadcrumbs.cjs +0 -13
  42. package/dist/breadcrumbs.d.cts +0 -19
  43. package/dist/breadcrumbs.d.ts +0 -19
  44. package/dist/chunk-2DFF5NEL.cjs +0 -45
  45. package/dist/chunk-5SA5UPFQ.cjs +0 -66
  46. package/dist/chunk-5UVG5YY5.js +0 -49
  47. package/dist/chunk-6B7U7IWT.cjs +0 -53
  48. package/dist/chunk-BHHZBMD4.cjs +0 -101
  49. package/dist/chunk-CK4TY6B7.cjs +0 -89
  50. package/dist/chunk-CNOJNKZ2.js +0 -89
  51. package/dist/chunk-FQQILPIP.js +0 -133
  52. package/dist/chunk-GRADTONK.js +0 -45
  53. package/dist/chunk-HTH2UTCL.cjs +0 -49
  54. package/dist/chunk-MWJV72OM.cjs +0 -41
  55. package/dist/chunk-ND7BTYGG.js +0 -123
  56. package/dist/chunk-OGI5BHGM.js +0 -25
  57. package/dist/chunk-OO3HHTPV.cjs +0 -123
  58. package/dist/chunk-OTJGG73E.js +0 -101
  59. package/dist/chunk-PFRBA5BH.js +0 -66
  60. package/dist/chunk-QOGH6NKS.js +0 -45
  61. package/dist/chunk-RDRDPR67.cjs +0 -25
  62. package/dist/chunk-REZ4W4BZ.cjs +0 -92
  63. package/dist/chunk-RXFYKKNI.js +0 -53
  64. package/dist/chunk-SV4L2FGT.cjs +0 -133
  65. package/dist/chunk-SX6DOGUE.js +0 -41
  66. package/dist/chunk-TDFVUBGO.cjs +0 -45
  67. package/dist/chunk-WY6GLRTT.js +0 -92
  68. package/dist/cn.cjs +0 -6
  69. package/dist/cn.d.cts +0 -5
  70. package/dist/cn.d.ts +0 -5
  71. package/dist/collapse.cjs +0 -12
  72. package/dist/collapse.d.cts +0 -31
  73. package/dist/drawer.cjs +0 -16
  74. package/dist/drawer.d.cts +0 -44
  75. package/dist/drawer.d.ts +0 -44
  76. package/dist/dropdown.cjs +0 -12
  77. package/dist/dropdown.d.cts +0 -20
  78. package/dist/dropdown.d.ts +0 -20
  79. package/dist/index.cjs +0 -84
  80. package/dist/index.d.cts +0 -15
  81. package/dist/input.cjs +0 -10
  82. package/dist/input.d.cts +0 -17
  83. package/dist/input.d.ts +0 -17
  84. package/dist/kbd.cjs +0 -10
  85. package/dist/kbd.d.cts +0 -43
  86. package/dist/kbd.d.ts +0 -43
  87. package/dist/modal.cjs +0 -10
  88. package/dist/modal.d.cts +0 -17
  89. package/dist/modal.d.ts +0 -17
  90. package/dist/navbar.cjs +0 -13
  91. package/dist/navbar.d.cts +0 -36
  92. package/dist/navbar.d.ts +0 -36
  93. package/dist/pagination.cjs +0 -7
  94. package/dist/pagination.d.cts +0 -21
  95. package/dist/pagination.d.ts +0 -21
  96. package/dist/theme-controller.cjs +0 -8
  97. package/dist/theme-controller.d.cts +0 -21
  98. package/dist/theme-controller.d.ts +0 -21
  99. package/dist/toggle.cjs +0 -10
  100. package/dist/toggle.d.cts +0 -35
  101. package/dist/types-BZI5Cv8-.d.cts +0 -6
  102. 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 * as react from 'react';
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 { Accordion, type AccordionItem, type AccordionProps, Collapse, type CollapseProps, type CollapseVariant, Collapse as default };
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 * as react from 'react';
2
- import { InputHTMLAttributes, ReactNode } from 'react';
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 { Toggle, type ToggleColor, ToggleGroup, type ToggleGroupItem, type ToggleGroupProps, type ToggleProps, type ToggleSize };
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 };
@@ -1,13 +1,28 @@
1
- import {
2
- Breadcrumb,
3
- BreadcrumbItem,
4
- BreadcrumbList,
5
- BreadcrumbPage
6
- } from "./chunk-OGI5BHGM.js";
7
- import "./chunk-GRADTONK.js";
8
- export {
9
- Breadcrumb,
10
- BreadcrumbItem,
11
- BreadcrumbList,
12
- BreadcrumbPage
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
- cn
3
- } from "./chunk-GRADTONK.js";
4
- export {
5
- cn
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
- Accordion,
4
- Collapse,
5
- collapse_default
6
- } from "./chunk-FQQILPIP.js";
7
- import "./chunk-GRADTONK.js";
8
- export {
9
- Accordion,
10
- Collapse,
11
- collapse_default as default
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
- Drawer,
4
- DrawerContent,
5
- DrawerSidePanel,
6
- DrawerTrigger,
7
- useDrawerState
8
- } from "./chunk-OTJGG73E.js";
9
- import "./chunk-GRADTONK.js";
10
- export {
11
- Drawer,
12
- DrawerContent,
13
- DrawerSidePanel,
14
- DrawerTrigger,
15
- useDrawerState
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
- Dropdown,
4
- DropdownItem,
5
- DropdownLink
6
- } from "./chunk-CNOJNKZ2.js";
7
- import "./chunk-GRADTONK.js";
8
- export {
9
- Dropdown,
10
- DropdownItem,
11
- DropdownLink
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"}