@docubook/ui-react 2.0.0-beta.0 → 2.0.0-beta.3

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 +46 -111
  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
package/dist/index.d.ts CHANGED
@@ -1,15 +1,23 @@
1
- export { cn } from './cn.js';
2
- export { Input, InputColor, InputGroup, InputGroupProps, InputProps, InputSize } from './input.js';
3
- export { FnKey, FnKeyIcons, Kbd, KbdProps, KbdSize } from './kbd.js';
4
- export { Toggle, ToggleColor, ToggleGroup, ToggleGroupItem, ToggleGroupProps, ToggleProps, ToggleSize } from './toggle.js';
5
- export { Dropdown, DropdownItem, DropdownItemProps, DropdownLink, DropdownProps } from './dropdown.js';
6
- export { Modal, ModalProps, useModal } from './modal.js';
7
- export { Drawer, DrawerContent, DrawerProps, DrawerSidePanel, DrawerSidePanelProps, DrawerTrigger, DrawerTriggerProps, useDrawerState } from './drawer.js';
8
- export { Accordion, AccordionItem, AccordionProps, Collapse, CollapseProps } from './collapse.js';
9
- export { ThemeControllerToggle, ThemeControllerToggleProps } from './theme-controller.js';
10
- export { Logo, LogoProps, NavMenu, NavMenuItem, NavMenuLink, NavMenuProps, Navbar, NavbarProps } from './navbar.js';
11
- export { Breadcrumb, BreadcrumbItem, BreadcrumbItemProps, BreadcrumbList, BreadcrumbPage, BreadcrumbProps } from './breadcrumbs.js';
12
- export { PaginationDocs, PaginationDocsProps } from './pagination.js';
13
- import 'clsx';
14
- import 'react';
15
- import './types-BZI5Cv8-.js';
1
+ export { cn } from "./utils/cn";
2
+ export { Input, InputGroup } from "./base/input";
3
+ export type { InputProps, InputGroupProps, InputColor, InputSize } from "./base/input";
4
+ export { Kbd, FnKey } from "./base/kbd";
5
+ export type { KbdProps, KbdSize, FnKeyIcons } from "./base/kbd";
6
+ export { Toggle, ToggleGroup } from "./base/toggle";
7
+ export type { ToggleProps, ToggleGroupProps, ToggleGroupItem, ToggleColor, ToggleSize, } from "./base/toggle";
8
+ export { Dropdown, DropdownItem, DropdownLink } from "./base/dropdown";
9
+ export type { DropdownProps, DropdownItemProps } from "./base/dropdown";
10
+ export { Modal, useModal } from "./base/modal";
11
+ export type { ModalProps } from "./base/modal";
12
+ export { Drawer, DrawerTrigger, DrawerSidePanel, DrawerContent, useDrawerState, } from "./base/drawer";
13
+ export type { DrawerProps, DrawerTriggerProps, DrawerSidePanelProps } from "./base/drawer";
14
+ export { Collapse, Accordion } from "./base/collapse";
15
+ export type { CollapseProps, AccordionProps, AccordionItem } from "./base/collapse";
16
+ export { ThemeControllerToggle } from "./base/theme-controller";
17
+ export type { ThemeControllerToggleProps } from "./base/theme-controller";
18
+ export { Navbar, Logo, NavMenu, NavMenuLink } from "./base/navbar";
19
+ export type { NavbarProps, LogoProps, NavMenuItem, NavMenuProps } from "./base/navbar";
20
+ export { Breadcrumb, BreadcrumbItem, BreadcrumbPage, BreadcrumbList } from "./base/breadcrumbs";
21
+ export type { BreadcrumbProps, BreadcrumbItemProps } from "./base/breadcrumbs";
22
+ export { PaginationDocs } from "./base/pagination";
23
+ export type { PaginationDocsProps } from "./base/pagination";
package/dist/index.js CHANGED
@@ -1,84 +1,13 @@
1
- import {
2
- Modal,
3
- useModal
4
- } from "./chunk-5UVG5YY5.js";
5
- import {
6
- Logo,
7
- NavMenu,
8
- NavMenuLink,
9
- Navbar
10
- } from "./chunk-RXFYKKNI.js";
11
- import {
12
- PaginationDocs
13
- } from "./chunk-WY6GLRTT.js";
14
- import {
15
- ThemeControllerToggle
16
- } from "./chunk-PFRBA5BH.js";
17
- import {
18
- Toggle,
19
- ToggleGroup
20
- } from "./chunk-ND7BTYGG.js";
21
- import {
22
- Breadcrumb,
23
- BreadcrumbItem,
24
- BreadcrumbList,
25
- BreadcrumbPage
26
- } from "./chunk-OGI5BHGM.js";
27
- import {
28
- Accordion,
29
- Collapse
30
- } from "./chunk-FQQILPIP.js";
31
- import {
32
- Drawer,
33
- DrawerContent,
34
- DrawerSidePanel,
35
- DrawerTrigger,
36
- useDrawerState
37
- } from "./chunk-OTJGG73E.js";
38
- import {
39
- Dropdown,
40
- DropdownItem,
41
- DropdownLink
42
- } from "./chunk-CNOJNKZ2.js";
43
- import {
44
- Input,
45
- InputGroup
46
- } from "./chunk-SX6DOGUE.js";
47
- import {
48
- FnKey,
49
- Kbd
50
- } from "./chunk-QOGH6NKS.js";
51
- import {
52
- cn
53
- } from "./chunk-GRADTONK.js";
54
- export {
55
- Accordion,
56
- Breadcrumb,
57
- BreadcrumbItem,
58
- BreadcrumbList,
59
- BreadcrumbPage,
60
- Collapse,
61
- Drawer,
62
- DrawerContent,
63
- DrawerSidePanel,
64
- DrawerTrigger,
65
- Dropdown,
66
- DropdownItem,
67
- DropdownLink,
68
- FnKey,
69
- Input,
70
- InputGroup,
71
- Kbd,
72
- Logo,
73
- Modal,
74
- NavMenu,
75
- NavMenuLink,
76
- Navbar,
77
- PaginationDocs,
78
- ThemeControllerToggle,
79
- Toggle,
80
- ToggleGroup,
81
- cn,
82
- useDrawerState,
83
- useModal
84
- };
1
+ import { cn as e } from "./cn.js";
2
+ import { Input as t, InputGroup as n } from "./input.js";
3
+ import { FnKey as r, Kbd as i } from "./kbd.js";
4
+ import { Toggle as a, ToggleGroup as o } from "./toggle.js";
5
+ import { Dropdown as s, DropdownItem as c, DropdownLink as l } from "./dropdown.js";
6
+ import { Modal as u, useModal as d } from "./modal.js";
7
+ import { Drawer as f, DrawerContent as p, DrawerSidePanel as m, DrawerTrigger as h, useDrawerState as g } from "./drawer.js";
8
+ import { Accordion as _, Collapse as v } from "./collapse.js";
9
+ import { ThemeControllerToggle as y } from "./theme-controller.js";
10
+ import { Logo as b, NavMenu as x, NavMenuLink as S, Navbar as C } from "./navbar.js";
11
+ import { Breadcrumb as w, BreadcrumbItem as T, BreadcrumbList as E, BreadcrumbPage as D } from "./breadcrumbs.js";
12
+ import { PaginationDocs as O } from "./pagination.js";
13
+ export { _ as Accordion, w as Breadcrumb, T as BreadcrumbItem, E as BreadcrumbList, D as BreadcrumbPage, v as Collapse, f as Drawer, p as DrawerContent, m as DrawerSidePanel, h as DrawerTrigger, s as Dropdown, c as DropdownItem, l as DropdownLink, r as FnKey, t as Input, n as InputGroup, i as Kbd, b as Logo, u as Modal, x as NavMenu, S as NavMenuLink, C as Navbar, O as PaginationDocs, y as ThemeControllerToggle, a as Toggle, o as ToggleGroup, e as cn, g as useDrawerState, d as useModal };
package/dist/input.js CHANGED
@@ -1,10 +1,22 @@
1
1
  "use client";
2
- import {
3
- Input,
4
- InputGroup
5
- } from "./chunk-SX6DOGUE.js";
6
- import "./chunk-GRADTONK.js";
7
- export {
8
- Input,
9
- InputGroup
10
- };
2
+ import { cn as e } from "./cn.js";
3
+ import { forwardRef as t } from "react";
4
+ import { jsx as n } from "react/jsx-runtime";
5
+ //#region src/base/input.tsx
6
+ var r = t(({ className: t, color: r, inputSize: i, ghost: a, ...o }, s) => /* @__PURE__ */ n("input", {
7
+ ref: s,
8
+ className: e("input", a && "input-ghost", r && `input-${r}`, i && `input-${i}`, t),
9
+ ...o
10
+ }));
11
+ r.displayName = "Input";
12
+ var i = t(({ children: t, className: r, ...i }, a) => /* @__PURE__ */ n("label", {
13
+ ref: a,
14
+ className: e("input", r),
15
+ ...i,
16
+ children: t
17
+ }));
18
+ i.displayName = "InputGroup";
19
+ //#endregion
20
+ export { r as Input, i as InputGroup };
21
+
22
+ //# sourceMappingURL=input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.js","names":[],"sources":["../src/base/input.tsx"],"sourcesContent":["\"use client\";\nimport { forwardRef } from \"react\";\nimport { cn } from \"../utils/cn\";\nimport type { Color, Size } from \"../utils/types\";\n\ntype InputColor = Color;\ntype InputSize = Size | \"xl\";\n\ninterface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {\n color?: InputColor;\n inputSize?: InputSize;\n ghost?: boolean;\n}\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\n ({ className, color, inputSize, ghost, ...props }, ref) => (\n <input\n ref={ref}\n className={cn(\n \"input\",\n ghost && \"input-ghost\",\n color && `input-${color}`,\n inputSize && `input-${inputSize}`,\n className\n )}\n {...props}\n />\n )\n);\nInput.displayName = \"Input\";\n\ninterface InputGroupProps extends React.LabelHTMLAttributes<HTMLLabelElement> {\n children: React.ReactNode;\n}\n\nexport const InputGroup = forwardRef<HTMLLabelElement, InputGroupProps>(\n ({ children, className, ...props }, ref) => (\n <label ref={ref} className={cn(\"input\", className)} {...props}>\n {children}\n </label>\n )\n);\nInputGroup.displayName = \"InputGroup\";\n\nexport type { InputProps, InputGroupProps, InputColor, InputSize };\n"],"mappings":";;;;;AAcA,IAAa,IAAQ,GAClB,EAAE,cAAW,UAAO,cAAW,UAAO,GAAG,KAAS,MACjD,kBAAC,SAAD;CACO;CACL,WAAW,EACT,SACA,KAAS,eACT,KAAS,SAAS,KAClB,KAAa,SAAS,KACtB,CACF;CACA,GAAI;AACL,CAAA,CAEL;AACA,EAAM,cAAc;AAMpB,IAAa,IAAa,GACvB,EAAE,aAAU,cAAW,GAAG,KAAS,MAClC,kBAAC,SAAD;CAAY;CAAK,WAAW,EAAG,SAAS,CAAS;CAAG,GAAI;CACrD;AACI,CAAA,CAEX;AACA,EAAW,cAAc"}
package/dist/kbd.js CHANGED
@@ -1,10 +1,76 @@
1
1
  "use client";
2
- import {
3
- FnKey,
4
- Kbd
5
- } from "./chunk-QOGH6NKS.js";
6
- import "./chunk-GRADTONK.js";
7
- export {
8
- FnKey,
9
- Kbd
2
+ import { cn as e } from "./cn.js";
3
+ import { forwardRef as t } from "react";
4
+ import { jsx as n } from "react/jsx-runtime";
5
+ //#region src/base/kbd.tsx
6
+ var r = t(({ children: t, className: r, size: i, ...a }, o) => /* @__PURE__ */ n("kbd", {
7
+ ref: o,
8
+ className: e("kbd", i && `kbd-${i}`, r),
9
+ ...a,
10
+ children: t
11
+ }));
12
+ r.displayName = "Kbd";
13
+ var i = {}, a = 12;
14
+ function o({ icon: e, entity: t }) {
15
+ return e ? /* @__PURE__ */ n(e, { size: a }) : /* @__PURE__ */ n("span", {
16
+ style: { fontSize: a },
17
+ children: t
18
+ });
19
+ }
20
+ var s = {
21
+ configure(e) {
22
+ i = e;
23
+ },
24
+ Cmd: () => /* @__PURE__ */ n(o, {
25
+ icon: i.Command,
26
+ entity: "⌘"
27
+ }),
28
+ Option: () => /* @__PURE__ */ n(o, {
29
+ icon: i.Option,
30
+ entity: "⌥"
31
+ }),
32
+ Ctrl: () => /* @__PURE__ */ n(o, {
33
+ icon: i.ChevronUp,
34
+ entity: "⌃"
35
+ }),
36
+ Shift: () => /* @__PURE__ */ n(o, {
37
+ icon: i.ArrowBigUp,
38
+ entity: "⇧"
39
+ }),
40
+ Esc: () => /* @__PURE__ */ n(o, {
41
+ icon: i.CircleArrowOutUpLeft,
42
+ entity: "⎋"
43
+ }),
44
+ Space: () => /* @__PURE__ */ n(o, {
45
+ icon: i.Space,
46
+ entity: "␣"
47
+ }),
48
+ Delete: () => /* @__PURE__ */ n(o, {
49
+ icon: i.Delete,
50
+ entity: "⌫"
51
+ }),
52
+ Tab: () => /* @__PURE__ */ n(o, {
53
+ icon: i.ArrowRightToLine,
54
+ entity: "⇥"
55
+ }),
56
+ Up: () => /* @__PURE__ */ n(o, {
57
+ icon: i.ChevronUp,
58
+ entity: "↑"
59
+ }),
60
+ Down: () => /* @__PURE__ */ n(o, {
61
+ icon: i.ChevronDown,
62
+ entity: "↓"
63
+ }),
64
+ Left: () => /* @__PURE__ */ n(o, {
65
+ icon: i.ChevronLeft,
66
+ entity: "←"
67
+ }),
68
+ Right: () => /* @__PURE__ */ n(o, {
69
+ icon: i.ChevronRight,
70
+ entity: "→"
71
+ })
10
72
  };
73
+ //#endregion
74
+ export { s as FnKey, r as Kbd };
75
+
76
+ //# sourceMappingURL=kbd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kbd.js","names":[],"sources":["../src/base/kbd.tsx"],"sourcesContent":["\"use client\";\nimport { forwardRef } from \"react\";\nimport { cn } from \"../utils/cn\";\nimport type { Size } from \"../utils/types\";\n\ntype KbdSize = Size | \"xl\";\n\ninterface KbdProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n size?: KbdSize;\n}\n\nexport const Kbd = forwardRef<HTMLElement, KbdProps>(\n ({ children, className, size, ...props }, ref) => (\n <kbd ref={ref} className={cn(\"kbd\", size && `kbd-${size}`, className)} {...props}>\n {children}\n </kbd>\n )\n);\nKbd.displayName = \"Kbd\";\n\nexport type { KbdProps, KbdSize };\n\ntype IconComponent = React.ComponentType<{ size?: number }>;\n\nexport interface FnKeyIcons {\n Command?: IconComponent;\n Option?: IconComponent;\n ArrowBigUp?: IconComponent;\n CircleArrowOutUpLeft?: IconComponent;\n Space?: IconComponent;\n Delete?: IconComponent;\n ArrowRightToLine?: IconComponent;\n ChevronUp?: IconComponent;\n ChevronDown?: IconComponent;\n ChevronLeft?: IconComponent;\n ChevronRight?: IconComponent;\n}\n\nlet _icons: FnKeyIcons = {};\n\nconst iconSize = 12;\n\nfunction Key({ icon: Icon, entity }: { icon?: IconComponent; entity: string }): React.ReactElement {\n if (Icon) return <Icon size={iconSize} />;\n return <span style={{ fontSize: iconSize }}>{entity}</span>;\n}\n\nexport const FnKey = {\n configure(icons: FnKeyIcons): void {\n _icons = icons;\n },\n Cmd: () => <Key icon={_icons.Command} entity=\"⌘\" />,\n Option: () => <Key icon={_icons.Option} entity=\"⌥\" />,\n Ctrl: () => <Key icon={_icons.ChevronUp} entity=\"⌃\" />,\n Shift: () => <Key icon={_icons.ArrowBigUp} entity=\"⇧\" />,\n Esc: () => <Key icon={_icons.CircleArrowOutUpLeft} entity=\"⎋\" />,\n Space: () => <Key icon={_icons.Space} entity=\"␣\" />,\n Delete: () => <Key icon={_icons.Delete} entity=\"⌫\" />,\n Tab: () => <Key icon={_icons.ArrowRightToLine} entity=\"⇥\" />,\n Up: () => <Key icon={_icons.ChevronUp} entity=\"↑\" />,\n Down: () => <Key icon={_icons.ChevronDown} entity=\"↓\" />,\n Left: () => <Key icon={_icons.ChevronLeft} entity=\"←\" />,\n Right: () => <Key icon={_icons.ChevronRight} entity=\"→\" />,\n};\n"],"mappings":";;;;;AAYA,IAAa,IAAM,GAChB,EAAE,aAAU,cAAW,SAAM,GAAG,KAAS,MACxC,kBAAC,OAAD;CAAU;CAAK,WAAW,EAAG,OAAO,KAAQ,OAAO,KAAQ,CAAS;CAAG,GAAI;CACxE;AACE,CAAA,CAET;AACA,EAAI,cAAc;AAoBlB,IAAI,IAAqB,CAAC,GAEpB,IAAW;AAEjB,SAAS,EAAI,EAAE,MAAM,GAAM,aAAwE;CAEjG,OADI,IAAa,kBAAC,GAAD,EAAM,MAAM,EAAW,CAAA,IACjC,kBAAC,QAAD;EAAM,OAAO,EAAE,UAAU,EAAS;EAAI,UAAA;CAAa,CAAA;AAC5D;AAEA,IAAa,IAAQ;CACnB,UAAU,GAAyB;EACjC,IAAS;CACX;CACA,WAAW,kBAAC,GAAD;EAAK,MAAM,EAAO;EAAS,QAAO;CAAK,CAAA;CAClD,cAAc,kBAAC,GAAD;EAAK,MAAM,EAAO;EAAQ,QAAO;CAAK,CAAA;CACpD,YAAY,kBAAC,GAAD;EAAK,MAAM,EAAO;EAAW,QAAO;CAAK,CAAA;CACrD,aAAa,kBAAC,GAAD;EAAK,MAAM,EAAO;EAAY,QAAO;CAAK,CAAA;CACvD,WAAW,kBAAC,GAAD;EAAK,MAAM,EAAO;EAAsB,QAAO;CAAK,CAAA;CAC/D,aAAa,kBAAC,GAAD;EAAK,MAAM,EAAO;EAAO,QAAO;CAAK,CAAA;CAClD,cAAc,kBAAC,GAAD;EAAK,MAAM,EAAO;EAAQ,QAAO;CAAK,CAAA;CACpD,WAAW,kBAAC,GAAD;EAAK,MAAM,EAAO;EAAkB,QAAO;CAAK,CAAA;CAC3D,UAAU,kBAAC,GAAD;EAAK,MAAM,EAAO;EAAW,QAAO;CAAK,CAAA;CACnD,YAAY,kBAAC,GAAD;EAAK,MAAM,EAAO;EAAa,QAAO;CAAK,CAAA;CACvD,YAAY,kBAAC,GAAD;EAAK,MAAM,EAAO;EAAa,QAAO;CAAK,CAAA;CACvD,aAAa,kBAAC,GAAD;EAAK,MAAM,EAAO;EAAc,QAAO;CAAK,CAAA;AAC3D"}
package/dist/modal.js CHANGED
@@ -1,10 +1,35 @@
1
1
  "use client";
2
- import {
3
- Modal,
4
- useModal
5
- } from "./chunk-5UVG5YY5.js";
6
- import "./chunk-GRADTONK.js";
7
- export {
8
- Modal,
9
- useModal
10
- };
2
+ import { cn as e } from "./cn.js";
3
+ import { forwardRef as t, useCallback as n, useRef as r } from "react";
4
+ import { jsx as i, jsxs as a } from "react/jsx-runtime";
5
+ //#region src/base/modal.tsx
6
+ var o = t(({ children: t, className: n, closeOnBackdrop: r = !0, placement: o, boxClassName: s, ...c }, l) => /* @__PURE__ */ a("dialog", {
7
+ ref: l,
8
+ className: e("modal", o && `modal-${o}`, n),
9
+ ...c,
10
+ children: [/* @__PURE__ */ i("div", {
11
+ className: e("modal-box", s),
12
+ children: t
13
+ }), r && /* @__PURE__ */ i("form", {
14
+ method: "dialog",
15
+ className: "modal-backdrop",
16
+ children: /* @__PURE__ */ i("button", { children: "esc" })
17
+ })]
18
+ }));
19
+ o.displayName = "Modal";
20
+ function s() {
21
+ let e = r(null);
22
+ return {
23
+ ref: e,
24
+ open: n(() => {
25
+ e.current?.showModal(), setTimeout(() => {
26
+ e.current?.querySelector("input, [autofocus]")?.focus();
27
+ }, 0);
28
+ }, []),
29
+ close: n(() => e.current?.close(), [])
30
+ };
31
+ }
32
+ //#endregion
33
+ export { o as Modal, s as useModal };
34
+
35
+ //# sourceMappingURL=modal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modal.js","names":[],"sources":["../src/base/modal.tsx"],"sourcesContent":["\"use client\";\n\nimport { forwardRef, useRef, useCallback } from \"react\";\nimport { cn } from \"../utils/cn\";\nimport type { Placement } from \"../utils/types\";\n\ninterface ModalProps extends React.DialogHTMLAttributes<HTMLDialogElement> {\n children: React.ReactNode;\n closeOnBackdrop?: boolean;\n placement?: Placement;\n boxClassName?: string;\n}\n\nexport const Modal = forwardRef<HTMLDialogElement, ModalProps>(\n ({ children, className, closeOnBackdrop = true, placement, boxClassName, ...props }, ref) => (\n <dialog\n ref={ref}\n className={cn(\"modal\", placement && `modal-${placement}`, className)}\n {...props}\n >\n <div className={cn(\"modal-box\", boxClassName)}>{children}</div>\n {closeOnBackdrop && (\n <form method=\"dialog\" className=\"modal-backdrop\">\n <button>esc</button>\n </form>\n )}\n </dialog>\n )\n);\nModal.displayName = \"Modal\";\n\nexport function useModal() {\n const ref = useRef<HTMLDialogElement>(null);\n const open = useCallback(() => {\n ref.current?.showModal();\n setTimeout(() => {\n ref.current?.querySelector<HTMLElement>(\"input, [autofocus]\")?.focus();\n }, 0);\n }, []);\n const close = useCallback(() => ref.current?.close(), []);\n return { ref, open, close };\n}\n\nexport type { ModalProps };\n"],"mappings":";;;;;AAaA,IAAa,IAAQ,GAClB,EAAE,aAAU,cAAW,qBAAkB,IAAM,cAAW,iBAAc,GAAG,KAAS,MACnF,kBAAC,UAAD;CACO;CACL,WAAW,EAAG,SAAS,KAAa,SAAS,KAAa,CAAS;CACnE,GAAI;CAHN,UAAA,CAKE,kBAAC,OAAD;EAAK,WAAW,EAAG,aAAa,CAAY;EAAI;CAAc,CAAA,GAC7D,KACC,kBAAC,QAAD;EAAM,QAAO;EAAS,WAAU;EAC9B,UAAA,kBAAC,UAAD,EAAA,UAAQ,MAAW,CAAA;CACf,CAAA,CAEF;AAEZ,CAAA,CAAA;AACA,EAAM,cAAc;AAEpB,SAAgB,IAAW;CACzB,IAAM,IAAM,EAA0B,IAAI;CAQ1C,OAAO;EAAE;EAAK,MAPD,QAAkB;GAE7B,AADA,EAAI,SAAS,UAAU,GACvB,iBAAiB;IACf,EAAI,SAAS,cAA2B,oBAAoB,CAAC,EAAE,MAAM;GACvE,GAAG,CAAC;EACN,GAAG,CAAC,CAEU;EAAM,OADN,QAAkB,EAAI,SAAS,MAAM,GAAG,CAAC,CACnC;CAAM;AAC5B"}
package/dist/navbar.js CHANGED
@@ -1,13 +1,53 @@
1
- import {
2
- Logo,
3
- NavMenu,
4
- NavMenuLink,
5
- Navbar
6
- } from "./chunk-RXFYKKNI.js";
7
- import "./chunk-GRADTONK.js";
8
- export {
9
- Logo,
10
- NavMenu,
11
- NavMenuLink,
12
- Navbar
13
- };
1
+ import { cn as e } from "./cn.js";
2
+ import { jsx as t, jsxs as n } from "react/jsx-runtime";
3
+ //#region src/base/navbar.tsx
4
+ function r({ id: n, children: r, className: i, style: a }) {
5
+ return /* @__PURE__ */ t("nav", {
6
+ id: n,
7
+ className: e("navbar", i),
8
+ style: a,
9
+ children: r
10
+ });
11
+ }
12
+ function i({ src: r, alt: i, text: a, href: o = "/", className: s }) {
13
+ return /* @__PURE__ */ n("a", {
14
+ href: o,
15
+ className: e("flex items-center gap-2", s),
16
+ children: [r ? /* @__PURE__ */ t("img", {
17
+ src: r,
18
+ alt: i || a || "Logo",
19
+ className: "h-8 w-8"
20
+ }) : null, a && /* @__PURE__ */ t("span", {
21
+ className: "text-xl font-bold",
22
+ children: a
23
+ })]
24
+ });
25
+ }
26
+ function a({ items: n, activePath: r, className: i }) {
27
+ return /* @__PURE__ */ t("ul", {
28
+ className: e("menu menu-horizontal gap-1", i),
29
+ children: n.map((n) => {
30
+ let i = r ? n.href === "/" ? r === "/" : r === n.href || r.startsWith(n.href + "/") : !1;
31
+ return /* @__PURE__ */ t("li", { children: /* @__PURE__ */ t("a", {
32
+ href: n.href,
33
+ className: e(i && "active"),
34
+ target: n.isExternal ? "_blank" : void 0,
35
+ rel: n.isExternal ? "noopener noreferrer" : void 0,
36
+ children: n.title
37
+ }) }, n.href);
38
+ })
39
+ });
40
+ }
41
+ function o({ item: n, isActive: r, className: i }) {
42
+ return /* @__PURE__ */ t("a", {
43
+ href: n.href,
44
+ className: e(r && "active", i),
45
+ target: n.isExternal ? "_blank" : void 0,
46
+ rel: n.isExternal ? "noopener noreferrer" : void 0,
47
+ children: n.title
48
+ });
49
+ }
50
+ //#endregion
51
+ export { i as Logo, a as NavMenu, o as NavMenuLink, r as Navbar };
52
+
53
+ //# sourceMappingURL=navbar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navbar.js","names":[],"sources":["../src/base/navbar.tsx"],"sourcesContent":["import type { ReactNode, CSSProperties } from \"react\";\nimport { cn } from \"../utils/cn\";\n\nexport interface NavbarProps {\n id?: string;\n children?: ReactNode;\n className?: string;\n style?: CSSProperties;\n}\nexport interface LogoProps {\n src?: string;\n alt?: string;\n text?: string;\n href?: string;\n className?: string;\n}\nexport interface NavMenuItem {\n title: string;\n href: string;\n isExternal?: boolean;\n}\nexport interface NavMenuProps {\n items: NavMenuItem[];\n activePath?: string;\n className?: string;\n}\n\nexport function Navbar({ id, children, className, style }: NavbarProps) {\n return (\n <nav id={id} className={cn(\"navbar\", className)} style={style}>\n {children}\n </nav>\n );\n}\n\nexport function Logo({ src, alt, text, href = \"/\", className }: LogoProps) {\n return (\n <a href={href} className={cn(\"flex items-center gap-2\", className)}>\n {src ? <img src={src} alt={alt || text || \"Logo\"} className=\"h-8 w-8\" /> : null}\n {text && <span className=\"text-xl font-bold\">{text}</span>}\n </a>\n );\n}\n\nexport function NavMenu({ items, activePath, className }: NavMenuProps) {\n return (\n <ul className={cn(\"menu menu-horizontal gap-1\", className)}>\n {items.map((item) => {\n const isActive = activePath\n ? item.href === \"/\"\n ? activePath === \"/\"\n : activePath === item.href || activePath.startsWith(item.href + \"/\")\n : false;\n return (\n <li key={item.href}>\n <a\n href={item.href}\n className={cn(isActive && \"active\")}\n target={item.isExternal ? \"_blank\" : undefined}\n rel={item.isExternal ? \"noopener noreferrer\" : undefined}\n >\n {item.title}\n </a>\n </li>\n );\n })}\n </ul>\n );\n}\n\nexport function NavMenuLink({\n item,\n isActive,\n className,\n}: {\n item: NavMenuItem;\n isActive?: boolean;\n className?: string;\n}) {\n return (\n <a\n href={item.href}\n className={cn(isActive && \"active\", className)}\n target={item.isExternal ? \"_blank\" : undefined}\n rel={item.isExternal ? \"noopener noreferrer\" : undefined}\n >\n {item.title}\n </a>\n );\n}\n"],"mappings":";;;AA2BA,SAAgB,EAAO,EAAE,OAAI,aAAU,cAAW,YAAsB;CACtE,OACE,kBAAC,OAAD;EAAS;EAAI,WAAW,EAAG,UAAU,CAAS;EAAU;EACrD;CACE,CAAA;AAET;AAEA,SAAgB,EAAK,EAAE,QAAK,QAAK,SAAM,UAAO,KAAK,gBAAwB;CACzE,OACE,kBAAC,KAAD;EAAS;EAAM,WAAW,EAAG,2BAA2B,CAAS;EAAjE,UAAA,CACG,IAAM,kBAAC,OAAD;GAAU;GAAK,KAAK,KAAO,KAAQ;GAAQ,WAAU;EAAW,CAAA,IAAI,MAC1E,KAAQ,kBAAC,QAAD;GAAM,WAAU;GAAqB,UAAA;EAAW,CAAA,CACxD;;AAEP;AAEA,SAAgB,EAAQ,EAAE,UAAO,eAAY,gBAA2B;CACtE,OACE,kBAAC,MAAD;EAAI,WAAW,EAAG,8BAA8B,CAAS;EACtD,UAAA,EAAM,KAAK,MAAS;GACnB,IAAM,IAAW,IACb,EAAK,SAAS,MACZ,MAAe,MACf,MAAe,EAAK,QAAQ,EAAW,WAAW,EAAK,OAAO,GAAG,IACnE;GACJ,OACE,kBAAC,MAAD,EAAA,UACE,kBAAC,KAAD;IACE,MAAM,EAAK;IACX,WAAW,EAAG,KAAY,QAAQ;IAClC,QAAQ,EAAK,aAAa,WAAW,KAAA;IACrC,KAAK,EAAK,aAAa,wBAAwB,KAAA;IAE9C,UAAA,EAAK;GACL,CAAA,EACD,GATK,EAAK,IASV;EAER,CAAC;CACC,CAAA;AAER;AAEA,SAAgB,EAAY,EAC1B,SACA,aACA,gBAKC;CACD,OACE,kBAAC,KAAD;EACE,MAAM,EAAK;EACX,WAAW,EAAG,KAAY,UAAU,CAAS;EAC7C,QAAQ,EAAK,aAAa,WAAW,KAAA;EACrC,KAAK,EAAK,aAAa,wBAAwB,KAAA;EAE9C,UAAA,EAAK;CACL,CAAA;AAEP"}
@@ -1,7 +1,60 @@
1
- import {
2
- PaginationDocs
3
- } from "./chunk-WY6GLRTT.js";
4
- import "./chunk-GRADTONK.js";
5
- export {
6
- PaginationDocs
7
- };
1
+ import { cn as e } from "./cn.js";
2
+ import { jsx as t, jsxs as n } from "react/jsx-runtime";
3
+ //#region src/base/pagination.tsx
4
+ function r({ prev: r, next: i, className: a, prevIcon: o, nextIcon: s, linkClassName: c }) {
5
+ return /* @__PURE__ */ n("nav", {
6
+ id: "pagination",
7
+ "aria-label": "Pagination",
8
+ className: e("bg-base-200/50 flex w-full gap-1 rounded-2xl p-1", a),
9
+ children: [r && /* @__PURE__ */ n("a", {
10
+ href: r.href,
11
+ rel: "prev",
12
+ "data-component-part": "pagination-prev",
13
+ className: e("group text-muted-foreground hover:bg-base-200/60 hover:text-base-content flex items-center justify-start gap-1.5 rounded-xl px-3 py-3 text-sm no-underline transition-colors", i && "w-[calc(30%-2px)]", c),
14
+ children: [o && /* @__PURE__ */ t("span", {
15
+ className: "flex shrink-0 items-center",
16
+ children: o
17
+ }), /* @__PURE__ */ t("span", {
18
+ "data-component-part": "pagination-label",
19
+ children: "Previous"
20
+ })]
21
+ }), i && /* @__PURE__ */ t("a", {
22
+ href: i.href,
23
+ rel: "next",
24
+ "data-component-part": "pagination-next",
25
+ className: e("group min-w-0 rounded-xl no-underline", r ? "w-[calc(70%-2px)]" : "w-full sm:ml-auto sm:w-1/2", c),
26
+ children: /* @__PURE__ */ n("div", {
27
+ className: "bg-primary/15 hover:bg-primary/20 hover:ring-primary/30 flex h-16 flex-1 items-center justify-end rounded-xl transition-shadow hover:ring-1",
28
+ children: [
29
+ /* @__PURE__ */ n("div", {
30
+ className: "flex min-w-0 flex-col items-end justify-center px-5",
31
+ children: [/* @__PURE__ */ t("div", {
32
+ "data-component-part": "pagination-title",
33
+ className: "text-primary w-full truncate text-right text-sm font-semibold",
34
+ children: i.title
35
+ }), i.description && /* @__PURE__ */ t("span", {
36
+ "data-component-part": "pagination-description",
37
+ className: "text-primary/75 hidden w-full max-w-72 truncate text-right text-xs sm:block",
38
+ children: i.description
39
+ })]
40
+ }),
41
+ /* @__PURE__ */ t("div", { className: "bg-primary/20 h-8 w-px" }),
42
+ /* @__PURE__ */ n("div", {
43
+ className: "text-primary/75 flex items-center gap-1.5 pr-3 pl-5 text-sm",
44
+ children: [/* @__PURE__ */ t("span", {
45
+ "data-component-part": "pagination-label",
46
+ children: "Next"
47
+ }), s && /* @__PURE__ */ t("span", {
48
+ className: "flex shrink-0 items-center",
49
+ children: s
50
+ })]
51
+ })
52
+ ]
53
+ })
54
+ })]
55
+ });
56
+ }
57
+ //#endregion
58
+ export { r as PaginationDocs };
59
+
60
+ //# sourceMappingURL=pagination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.js","names":[],"sources":["../src/base/pagination.tsx"],"sourcesContent":["import { cn } from \"../utils/cn\";\nimport type { ReactNode } from \"react\";\n\nexport interface PaginationDocsProps {\n prev?: { href: string; title: string };\n next?: { href: string; title: string; description?: string };\n className?: string;\n prevIcon?: ReactNode;\n nextIcon?: ReactNode;\n linkClassName?: string;\n}\n\nexport function PaginationDocs({\n prev,\n next,\n className,\n prevIcon,\n nextIcon,\n linkClassName,\n}: PaginationDocsProps) {\n return (\n <nav\n id=\"pagination\"\n aria-label=\"Pagination\"\n className={cn(\"bg-base-200/50 flex w-full gap-1 rounded-2xl p-1\", className)}\n >\n {prev && (\n <a\n href={prev.href}\n rel=\"prev\"\n data-component-part=\"pagination-prev\"\n className={cn(\n \"group text-muted-foreground hover:bg-base-200/60 hover:text-base-content flex items-center justify-start gap-1.5 rounded-xl px-3 py-3 text-sm no-underline transition-colors\",\n // 30/70 split with next; calc subtracts half the gap so the two\n // cards plus gap-1 fill the pill exactly. No min-w-0: the card\n // floors at its content width, so a narrow screen never crushes\n // the icon/text into the next card.\n next && \"w-[calc(30%-2px)]\",\n linkClassName\n )}\n >\n {prevIcon && <span className=\"flex shrink-0 items-center\">{prevIcon}</span>}\n <span data-component-part=\"pagination-label\">Previous</span>\n </a>\n )}\n {next && (\n <a\n href={next.href}\n rel=\"next\"\n data-component-part=\"pagination-next\"\n className={cn(\n \"group min-w-0 rounded-xl no-underline\",\n // Next-only (e.g. docs index): full width on mobile, half the\n // container above 640px — pushed right like a forward button.\n // With prev: calc-based 70% (minus half the gap) so the pair\n // always fills the pill without overlapping.\n prev ? \"w-[calc(70%-2px)]\" : \"w-full sm:ml-auto sm:w-1/2\",\n linkClassName\n )}\n >\n <div className=\"bg-primary/15 hover:bg-primary/20 hover:ring-primary/30 flex h-16 flex-1 items-center justify-end rounded-xl transition-shadow hover:ring-1\">\n <div className=\"flex min-w-0 flex-col items-end justify-center px-5\">\n <div\n data-component-part=\"pagination-title\"\n className=\"text-primary w-full truncate text-right text-sm font-semibold\"\n >\n {next.title}\n </div>\n {next.description && (\n <span\n data-component-part=\"pagination-description\"\n className=\"text-primary/75 hidden w-full max-w-72 truncate text-right text-xs sm:block\"\n >\n {next.description}\n </span>\n )}\n </div>\n <div className=\"bg-primary/20 h-8 w-px\" />\n <div className=\"text-primary/75 flex items-center gap-1.5 pr-3 pl-5 text-sm\">\n <span data-component-part=\"pagination-label\">Next</span>\n {nextIcon && <span className=\"flex shrink-0 items-center\">{nextIcon}</span>}\n </div>\n </div>\n </a>\n )}\n </nav>\n );\n}\n"],"mappings":";;;AAYA,SAAgB,EAAe,EAC7B,SACA,SACA,cACA,aACA,aACA,oBACsB;CACtB,OACE,kBAAC,OAAD;EACE,IAAG;EACH,cAAW;EACX,WAAW,EAAG,oDAAoD,CAAS;EAH7E,UAAA,CAKG,KACC,kBAAC,KAAD;GACE,MAAM,EAAK;GACX,KAAI;GACJ,uBAAoB;GACpB,WAAW,EACT,gLAKA,KAAQ,qBACR,CACF;GAZF,UAAA,CAcG,KAAY,kBAAC,QAAD;IAAM,WAAU;IAA8B,UAAA;GAAe,CAAA,GAC1E,kBAAC,QAAD;IAAM,uBAAoB;IAAmB,UAAA;GAAc,CAAA,CAC1D;EAEJ,CAAA,GAAA,KACC,kBAAC,KAAD;GACE,MAAM,EAAK;GACX,KAAI;GACJ,uBAAoB;GACpB,WAAW,EACT,yCAKA,IAAO,sBAAsB,8BAC7B,CACF;GAEA,UAAA,kBAAC,OAAD;IAAK,WAAU;IAAf,UAAA;KACE,kBAAC,OAAD;MAAK,WAAU;MAAf,UAAA,CACE,kBAAC,OAAD;OACE,uBAAoB;OACpB,WAAU;OAET,UAAA,EAAK;MACH,CAAA,GACJ,EAAK,eACJ,kBAAC,QAAD;OACE,uBAAoB;OACpB,WAAU;OAET,UAAA,EAAK;MACF,CAAA,CAEL;;KACL,kBAAC,OAAD,EAAK,WAAU,yBAA0B,CAAA;KACzC,kBAAC,OAAD;MAAK,WAAU;MAAf,UAAA,CACE,kBAAC,QAAD;OAAM,uBAAoB;OAAmB,UAAA;MAAU,CAAA,GACtD,KAAY,kBAAC,QAAD;OAAM,WAAU;OAA8B,UAAA;MAAe,CAAA,CACvE;;IACF;;EACJ,CAAA,CAEF;;AAET"}
@@ -1,8 +1,51 @@
1
1
  "use client";
2
- import {
3
- ThemeControllerToggle
4
- } from "./chunk-PFRBA5BH.js";
5
- import "./chunk-GRADTONK.js";
6
- export {
7
- ThemeControllerToggle
8
- };
2
+ import { cn as e } from "./cn.js";
3
+ import { useEffect as t, useRef as n, useState as r } from "react";
4
+ import { jsx as i, jsxs as a } from "react/jsx-runtime";
5
+ //#region src/base/theme-controller.tsx
6
+ function o(e) {
7
+ typeof document < "u" && document.documentElement.classList.toggle("dark", e === "dark");
8
+ }
9
+ function s(e) {
10
+ let r = n(!1);
11
+ t(() => {
12
+ r.current ||= (o(e), !0);
13
+ }, [e]);
14
+ }
15
+ function c({ defaultTheme: t = "light", lightTheme: n = "light", darkTheme: c = "dark", onThemeChange: l, className: u, label: d, size: f = "md", children: p }) {
16
+ let [m, h] = r(() => typeof window > "u" ? !1 : (localStorage.getItem("theme") || t) === c);
17
+ s(m ? c : n);
18
+ let g = (e) => {
19
+ let t = e ? c : n;
20
+ h(e), o(t), localStorage.setItem("theme", t), l?.(t);
21
+ };
22
+ if (p) return /* @__PURE__ */ i("div", {
23
+ className: u,
24
+ children: p({
25
+ isDark: m,
26
+ checked: m,
27
+ toggle: g
28
+ })
29
+ });
30
+ let _ = /* @__PURE__ */ i("input", {
31
+ type: "checkbox",
32
+ className: e("toggle theme-controller", `toggle-${f}`),
33
+ checked: m,
34
+ value: c,
35
+ onChange: (e) => g(e.target.checked)
36
+ });
37
+ return d ? /* @__PURE__ */ a("label", {
38
+ className: e("flex cursor-pointer items-center gap-3", u),
39
+ children: [_, /* @__PURE__ */ i("span", {
40
+ className: "text-base-content",
41
+ children: d
42
+ })]
43
+ }) : /* @__PURE__ */ i("div", {
44
+ className: u,
45
+ children: _
46
+ });
47
+ }
48
+ //#endregion
49
+ export { c as ThemeControllerToggle };
50
+
51
+ //# sourceMappingURL=theme-controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-controller.js","names":[],"sources":["../src/base/theme-controller.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useRef, useState, type ReactNode } from \"react\";\nimport { cn } from \"../utils/cn\";\nimport type { Size } from \"../utils/types\";\n\nfunction applyTheme(theme: string) {\n if (typeof document !== \"undefined\") {\n document.documentElement.classList.toggle(\"dark\", theme === \"dark\");\n }\n}\n\nfunction useApplyThemeOnMount(theme: string) {\n const applied = useRef(false);\n useEffect(() => {\n if (!applied.current) {\n applyTheme(theme);\n applied.current = true;\n }\n }, [theme]);\n}\n\n// --- ThemeControllerToggle ---\n\nexport interface ThemeControllerToggleProps {\n defaultTheme?: string;\n lightTheme?: string;\n darkTheme?: string;\n onThemeChange?: (theme: string) => void;\n className?: string;\n label?: ReactNode;\n size?: Size;\n children?: (state: {\n isDark: boolean;\n checked: boolean;\n toggle: (checked: boolean) => void;\n }) => ReactNode;\n}\n\nexport function ThemeControllerToggle({\n defaultTheme = \"light\",\n lightTheme = \"light\",\n darkTheme = \"dark\",\n onThemeChange,\n className,\n label,\n size = \"md\",\n children,\n}: ThemeControllerToggleProps) {\n const [checked, setChecked] = useState(() => {\n if (typeof window === \"undefined\") return false;\n return (localStorage.getItem(\"theme\") || defaultTheme) === darkTheme;\n });\n useApplyThemeOnMount(checked ? darkTheme : lightTheme);\n\n const handleChange = (newChecked: boolean) => {\n const newTheme = newChecked ? darkTheme : lightTheme;\n setChecked(newChecked);\n applyTheme(newTheme);\n localStorage.setItem(\"theme\", newTheme);\n onThemeChange?.(newTheme);\n };\n\n if (children) {\n return (\n <div className={className}>\n {children({ isDark: checked, checked, toggle: handleChange })}\n </div>\n );\n }\n\n const toggleEl = (\n <input\n type=\"checkbox\"\n className={cn(\"toggle theme-controller\", `toggle-${size}`)}\n checked={checked}\n value={darkTheme}\n onChange={(e) => handleChange(e.target.checked)}\n />\n );\n\n if (!label) return <div className={className}>{toggleEl}</div>;\n return (\n <label className={cn(\"flex cursor-pointer items-center gap-3\", className)}>\n {toggleEl}\n <span className=\"text-base-content\">{label}</span>\n </label>\n );\n}\n"],"mappings":";;;;;AAMA,SAAS,EAAW,GAAe;CACjC,AAAI,OAAO,WAAa,OACtB,SAAS,gBAAgB,UAAU,OAAO,QAAQ,MAAU,MAAM;AAEtE;AAEA,SAAS,EAAqB,GAAe;CAC3C,IAAM,IAAU,EAAO,EAAK;CAC5B,QAAgB;EACd,AAEE,EAAQ,aADR,EAAW,CAAK,GACE;CAEtB,GAAG,CAAC,CAAK,CAAC;AACZ;AAmBA,SAAgB,EAAsB,EACpC,kBAAe,SACf,gBAAa,SACb,eAAY,QACZ,kBACA,cACA,UACA,UAAO,MACP,eAC6B;CAC7B,IAAM,CAAC,GAAS,KAAc,QACxB,OAAO,SAAW,MAAoB,MAClC,aAAa,QAAQ,OAAO,KAAK,OAAkB,CAC5D;CACD,EAAqB,IAAU,IAAY,CAAU;CAErD,IAAM,KAAgB,MAAwB;EAC5C,IAAM,IAAW,IAAa,IAAY;EAI1C,AAHA,EAAW,CAAU,GACrB,EAAW,CAAQ,GACnB,aAAa,QAAQ,SAAS,CAAQ,GACtC,IAAgB,CAAQ;CAC1B;CAEA,IAAI,GACF,OACE,kBAAC,OAAD;EAAgB;EACb,UAAA,EAAS;GAAE,QAAQ;GAAS;GAAS,QAAQ;EAAa,CAAC;CACzD,CAAA;CAIT,IAAM,IACJ,kBAAC,SAAD;EACE,MAAK;EACL,WAAW,EAAG,2BAA2B,UAAU,GAAM;EAChD;EACT,OAAO;EACP,WAAW,MAAM,EAAa,EAAE,OAAO,OAAO;CAC/C,CAAA;CAIH,OADK,IAEH,kBAAC,SAAD;EAAO,WAAW,EAAG,0CAA0C,CAAS;EAAxE,UAAA,CACG,GACD,kBAAC,QAAD;GAAM,WAAU;GAAqB,UAAA;EAAY,CAAA,CAC5C;MALU,kBAAC,OAAD;EAAgB;EAAY,UAAA;CAAc,CAAA;AAO/D"}
package/dist/toggle.js CHANGED
@@ -1,10 +1,66 @@
1
1
  "use client";
2
- import {
3
- Toggle,
4
- ToggleGroup
5
- } from "./chunk-ND7BTYGG.js";
6
- import "./chunk-GRADTONK.js";
7
- export {
8
- Toggle,
9
- ToggleGroup
10
- };
2
+ import { cn as e } from "./cn.js";
3
+ import { forwardRef as t, useEffect as n, useState as r } from "react";
4
+ import { jsx as i, jsxs as a } from "react/jsx-runtime";
5
+ //#region src/base/toggle.tsx
6
+ var o = t(function({ color: t = "primary", size: r = "md", label: o, description: s, indeterminate: c = !1, containerClassName: l, labelClassName: u, descriptionClassName: d, className: f, disabled: p, checked: m, defaultChecked: h, onChange: g, ..._ }, v) {
7
+ n(() => {
8
+ if (c && v) {
9
+ let e = v.current;
10
+ e && (e.indeterminate = !0);
11
+ }
12
+ }, [v, c]);
13
+ let y = /* @__PURE__ */ i("input", {
14
+ ref: v,
15
+ type: "checkbox",
16
+ className: e(`toggle-${t}`, `toggle-${r}`, f),
17
+ disabled: p,
18
+ checked: m,
19
+ defaultChecked: h,
20
+ onChange: g,
21
+ "data-indeterminate": c,
22
+ ..._
23
+ });
24
+ return o ? /* @__PURE__ */ a("label", {
25
+ className: e("flex items-start gap-3", p && "cursor-not-allowed opacity-50", l),
26
+ children: [/* @__PURE__ */ i("div", {
27
+ className: "flex items-center pt-0.5",
28
+ children: y
29
+ }), /* @__PURE__ */ a("div", {
30
+ className: "flex flex-col gap-0.5",
31
+ children: [/* @__PURE__ */ i("span", {
32
+ className: e("text-base-content cursor-pointer", u),
33
+ children: o
34
+ }), s && /* @__PURE__ */ i("span", {
35
+ className: e("text-base-content/60 text-sm", d),
36
+ children: s
37
+ })]
38
+ })]
39
+ }) : y;
40
+ });
41
+ function s({ items: t, value: n, defaultValue: o = [], onChange: s, color: c = "primary", size: l = "md", controlled: u = !1, className: d }) {
42
+ let [f, p] = r(o), m = u ? n ?? f : f, h = (e) => {
43
+ let t = m.includes(e) ? m.filter((t) => t !== e) : [...m, e];
44
+ u || p(t), s?.(t);
45
+ };
46
+ return /* @__PURE__ */ i("div", {
47
+ className: e("flex flex-col gap-3", d),
48
+ children: t.map((t) => /* @__PURE__ */ a("label", {
49
+ className: e("flex items-center gap-3", t.disabled && "cursor-not-allowed opacity-50"),
50
+ children: [/* @__PURE__ */ i("input", {
51
+ type: "checkbox",
52
+ className: e(`toggle-${c}`, `toggle-${l}`),
53
+ checked: m.includes(t.value),
54
+ disabled: t.disabled,
55
+ onChange: () => !t.disabled && h(t.value)
56
+ }), /* @__PURE__ */ i("span", {
57
+ className: "text-base-content cursor-pointer",
58
+ children: t.label
59
+ })]
60
+ }, t.value))
61
+ });
62
+ }
63
+ //#endregion
64
+ export { o as Toggle, s as ToggleGroup };
65
+
66
+ //# sourceMappingURL=toggle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toggle.js","names":[],"sources":["../src/base/toggle.tsx"],"sourcesContent":["\"use client\";\n\nimport { cn } from \"../utils/cn\";\nimport type { InputHTMLAttributes, ReactNode } from \"react\";\nimport { forwardRef, useState, useEffect } from \"react\";\nimport type { Color, Size } from \"../utils/types\";\n\ntype ToggleColor = Color;\ntype ToggleSize = Size;\n\ninterface ToggleProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"type\" | \"size\"> {\n color?: ToggleColor;\n size?: ToggleSize;\n label?: ReactNode;\n description?: ReactNode;\n indeterminate?: boolean;\n containerClassName?: string;\n labelClassName?: string;\n descriptionClassName?: string;\n}\n\nconst Toggle = forwardRef<HTMLInputElement, ToggleProps>(function Toggle(\n {\n color = \"primary\",\n size = \"md\",\n label,\n description,\n indeterminate = false,\n containerClassName,\n labelClassName,\n descriptionClassName,\n className,\n disabled,\n checked,\n defaultChecked,\n onChange,\n ...props\n },\n ref\n) {\n useEffect(() => {\n if (indeterminate && ref) {\n const input = (ref as React.RefObject<HTMLInputElement>).current;\n if (input) input.indeterminate = true;\n }\n }, [ref, indeterminate]);\n\n const toggleEl = (\n <input\n ref={ref}\n type=\"checkbox\"\n className={cn(`toggle-${color}`, `toggle-${size}`, className)}\n disabled={disabled}\n checked={checked}\n defaultChecked={defaultChecked}\n onChange={onChange}\n data-indeterminate={indeterminate}\n {...props}\n />\n );\n\n if (!label) return toggleEl;\n\n return (\n <label\n className={cn(\n \"flex items-start gap-3\",\n disabled && \"cursor-not-allowed opacity-50\",\n containerClassName\n )}\n >\n <div className=\"flex items-center pt-0.5\">{toggleEl}</div>\n <div className=\"flex flex-col gap-0.5\">\n <span className={cn(\"text-base-content cursor-pointer\", labelClassName)}>{label}</span>\n {description && (\n <span className={cn(\"text-base-content/60 text-sm\", descriptionClassName)}>\n {description}\n </span>\n )}\n </div>\n </label>\n );\n});\n\ninterface ToggleGroupItem {\n value: string;\n label: ReactNode;\n disabled?: boolean;\n}\n\ninterface ToggleGroupProps {\n items: ToggleGroupItem[];\n value?: string[];\n defaultValue?: string[];\n onChange?: (value: string[]) => void;\n color?: ToggleColor;\n size?: ToggleSize;\n controlled?: boolean;\n className?: string;\n}\n\nexport function ToggleGroup({\n items,\n value,\n defaultValue = [],\n onChange,\n color = \"primary\",\n size = \"md\",\n controlled = false,\n className,\n}: ToggleGroupProps) {\n const [internalValue, setInternalValue] = useState<string[]>(defaultValue);\n const selectedValues = controlled ? (value ?? internalValue) : internalValue;\n\n const toggle = (itemValue: string) => {\n const next = selectedValues.includes(itemValue)\n ? selectedValues.filter((v) => v !== itemValue)\n : [...selectedValues, itemValue];\n if (!controlled) setInternalValue(next);\n onChange?.(next);\n };\n\n return (\n <div className={cn(\"flex flex-col gap-3\", className)}>\n {items.map((item) => (\n <label\n key={item.value}\n className={cn(\n \"flex items-center gap-3\",\n item.disabled && \"cursor-not-allowed opacity-50\"\n )}\n >\n <input\n type=\"checkbox\"\n className={cn(`toggle-${color}`, `toggle-${size}`)}\n checked={selectedValues.includes(item.value)}\n disabled={item.disabled}\n onChange={() => !item.disabled && toggle(item.value)}\n />\n <span className=\"text-base-content cursor-pointer\">{item.label}</span>\n </label>\n ))}\n </div>\n );\n}\n\nexport { Toggle };\nexport type { ToggleProps, ToggleGroupProps, ToggleGroupItem, ToggleColor, ToggleSize };\n"],"mappings":";;;;;AAqBA,IAAM,IAAS,EAA0C,SACvD,EACE,WAAQ,WACR,UAAO,MACP,UACA,gBACA,mBAAgB,IAChB,uBACA,mBACA,yBACA,cACA,aACA,YACA,mBACA,aACA,GAAG,KAEL,GACA;CACA,QAAgB;EACd,IAAI,KAAiB,GAAK;GACxB,IAAM,IAAS,EAA0C;GACzD,AAAI,MAAO,EAAM,gBAAgB;EACnC;CACF,GAAG,CAAC,GAAK,CAAa,CAAC;CAEvB,IAAM,IACJ,kBAAC,SAAD;EACO;EACL,MAAK;EACL,WAAW,EAAG,UAAU,KAAS,UAAU,KAAQ,CAAS;EAClD;EACD;EACO;EACN;EACV,sBAAoB;EACpB,GAAI;CACL,CAAA;CAKH,OAFK,IAGH,kBAAC,SAAD;EACE,WAAW,EACT,0BACA,KAAY,iCACZ,CACF;EALF,UAAA,CAOE,kBAAC,OAAD;GAAK,WAAU;GAA4B,UAAA;EAAc,CAAA,GACzD,kBAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACE,kBAAC,QAAD;IAAM,WAAW,EAAG,oCAAoC,CAAc;IAAI,UAAA;GAAY,CAAA,GACrF,KACC,kBAAC,QAAD;IAAM,WAAW,EAAG,gCAAgC,CAAoB;IACrE,UAAA;GACG,CAAA,CAEL;EACA,CAAA,CAAA;MAnBU;AAqBrB,CAAC;AAmBD,SAAgB,EAAY,EAC1B,UACA,UACA,kBAAe,CAAC,GAChB,aACA,WAAQ,WACR,UAAO,MACP,gBAAa,IACb,gBACmB;CACnB,IAAM,CAAC,GAAe,KAAoB,EAAmB,CAAY,GACnE,IAAiB,IAAc,KAAS,IAAiB,GAEzD,KAAU,MAAsB;EACpC,IAAM,IAAO,EAAe,SAAS,CAAS,IAC1C,EAAe,QAAQ,MAAM,MAAM,CAAS,IAC5C,CAAC,GAAG,GAAgB,CAAS;EAEjC,AADK,KAAY,EAAiB,CAAI,GACtC,IAAW,CAAI;CACjB;CAEA,OACE,kBAAC,OAAD;EAAK,WAAW,EAAG,uBAAuB,CAAS;EAChD,UAAA,EAAM,KAAK,MACV,kBAAC,SAAD;GAEE,WAAW,EACT,2BACA,EAAK,YAAY,+BACnB;GALF,UAAA,CAOE,kBAAC,SAAD;IACE,MAAK;IACL,WAAW,EAAG,UAAU,KAAS,UAAU,GAAM;IACjD,SAAS,EAAe,SAAS,EAAK,KAAK;IAC3C,UAAU,EAAK;IACf,gBAAgB,CAAC,EAAK,YAAY,EAAO,EAAK,KAAK;GACpD,CAAA,GACD,kBAAC,QAAD;IAAM,WAAU;IAAoC,UAAA,EAAK;GAAY,CAAA,CAChE;EAdA,GAAA,EAAK,KAcL,CACR;CACE,CAAA;AAET"}
@@ -0,0 +1,2 @@
1
+ import { type ClassValue } from "clsx";
2
+ export declare function cn(...inputs: ClassValue[]): string;