@gardenfi/garden-book 0.2.31 → 0.3.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 (147) hide show
  1. package/dist/BulletList/BulletList.d.ts +21 -0
  2. package/dist/BulletList/index.d.ts +2 -0
  3. package/dist/BulletList/index.js +31 -0
  4. package/dist/CardList/CardList.d.ts +32 -0
  5. package/dist/CardList/index.d.ts +2 -0
  6. package/dist/CardList/index.js +141 -0
  7. package/dist/Checkbox/Checkbox.js +7 -0
  8. package/dist/Checkbox/RadixCheckbox.d.ts +3 -0
  9. package/dist/Checkbox/RadixCheckbox.js +27 -0
  10. package/dist/Checkbox/index.d.ts +1 -0
  11. package/dist/Checkbox/index.js +4 -5
  12. package/dist/DashboardLayout/DashboardLayout.d.ts +23 -0
  13. package/dist/DashboardLayout/DashboardNavbar.d.ts +11 -0
  14. package/dist/DashboardLayout/DashboardNavbar.js +32 -0
  15. package/dist/DashboardLayout/DashboardSidebar.d.ts +30 -0
  16. package/dist/DashboardLayout/DashboardSidebar.js +139 -0
  17. package/dist/DashboardLayout/MobileMenu.d.ts +11 -0
  18. package/dist/DashboardLayout/MobileMenu.js +126 -0
  19. package/dist/DashboardLayout/PageHeader.d.ts +13 -0
  20. package/dist/DashboardLayout/PageHeader.js +47 -0
  21. package/dist/DashboardLayout/index.d.ts +10 -0
  22. package/dist/DashboardLayout/index.js +93 -0
  23. package/dist/DataTable/DataTable.d.ts +50 -0
  24. package/dist/DataTable/Table.d.ts +7 -0
  25. package/dist/DataTable/Table.js +57 -0
  26. package/dist/DataTable/index.d.ts +2 -0
  27. package/dist/DataTable/index.js +269 -0
  28. package/dist/DataTable/useAnimatedTable.d.ts +8 -0
  29. package/dist/DataTable/useAnimatedTable.js +44 -0
  30. package/dist/DirectionalIconHover/DirectionalIconHover.d.ts +12 -0
  31. package/dist/DirectionalIconHover/index.d.ts +2 -0
  32. package/dist/DirectionalIconHover/index.js +72 -0
  33. package/dist/EmptyState/EmptyState.d.ts +20 -0
  34. package/dist/EmptyState/index.d.ts +2 -0
  35. package/dist/EmptyState/index.js +35 -0
  36. package/dist/ErrorState/ErrorState.d.ts +17 -0
  37. package/dist/ErrorState/errorMessages.d.ts +2 -0
  38. package/dist/ErrorState/errorMessages.js +13 -0
  39. package/dist/ErrorState/index.d.ts +2 -0
  40. package/dist/ErrorState/index.js +37 -0
  41. package/dist/Field/Field.d.ts +14 -0
  42. package/dist/Field/index.d.ts +2 -0
  43. package/dist/Field/index.js +14 -0
  44. package/dist/HamburgerIcon/HamburgerIcon.d.ts +5 -0
  45. package/dist/HamburgerIcon/index.d.ts +2 -0
  46. package/dist/HamburgerIcon/index.js +47 -0
  47. package/dist/InfoTooltip/InfoTooltip.d.ts +22 -0
  48. package/dist/InfoTooltip/index.d.ts +2 -0
  49. package/dist/InfoTooltip/index.js +81 -0
  50. package/dist/Input/Input.d.ts +19 -0
  51. package/dist/Input/index.d.ts +2 -0
  52. package/dist/Input/index.js +113 -0
  53. package/dist/Logo/index.d.ts +0 -1
  54. package/dist/Logo/index.js +8 -10
  55. package/dist/OTPInput/OTPInput.d.ts +11 -0
  56. package/dist/OTPInput/index.d.ts +2 -0
  57. package/dist/OTPInput/index.js +88 -0
  58. package/dist/Pagination/Pagination.d.ts +16 -0
  59. package/dist/Pagination/index.d.ts +2 -0
  60. package/dist/Pagination/index.js +111 -0
  61. package/dist/Portal/Portal.d.ts +8 -0
  62. package/dist/Portal/index.d.ts +2 -0
  63. package/dist/Portal/index.js +11 -0
  64. package/dist/ResponsiveModal/ResponsiveModal.d.ts +14 -0
  65. package/dist/ResponsiveModal/index.d.ts +2 -0
  66. package/dist/ResponsiveModal/index.js +62 -0
  67. package/dist/SelectDropdown/SelectDropdown.d.ts +41 -0
  68. package/dist/SelectDropdown/index.d.ts +2 -0
  69. package/dist/SelectDropdown/index.js +195 -0
  70. package/dist/Skeleton/Skeleton.d.ts +3 -0
  71. package/dist/Skeleton/index.d.ts +2 -0
  72. package/dist/Skeleton/index.js +12 -0
  73. package/dist/StatCard/StatCard.d.ts +20 -0
  74. package/dist/StatCard/index.d.ts +2 -0
  75. package/dist/StatCard/index.js +42 -0
  76. package/dist/StateContainer/StateContainer.d.ts +8 -0
  77. package/dist/StateContainer/index.d.ts +2 -0
  78. package/dist/StateContainer/index.js +15 -0
  79. package/dist/StatusChip/StatusChip.d.ts +11 -0
  80. package/dist/StatusChip/index.d.ts +2 -0
  81. package/dist/StatusChip/index.js +33 -0
  82. package/dist/Switch/Switch.d.ts +3 -0
  83. package/dist/Switch/index.d.ts +1 -0
  84. package/dist/Switch/index.js +31 -0
  85. package/dist/Toast/Toast.d.ts +15 -0
  86. package/dist/Toast/Toast.js +93 -0
  87. package/dist/Toast/Toaster.d.ts +5 -0
  88. package/dist/Toast/Toaster.js +30 -0
  89. package/dist/Toast/index.d.ts +5 -0
  90. package/dist/Toast/index.js +16 -0
  91. package/dist/Toast/useToast.d.ts +46 -0
  92. package/dist/Toast/useToast.js +76 -0
  93. package/dist/ToggleGroup/ToggleGroup.d.ts +15 -0
  94. package/dist/ToggleGroup/index.d.ts +2 -0
  95. package/dist/ToggleGroup/index.js +57 -0
  96. package/dist/Typography/Typography.d.ts +2 -2
  97. package/dist/Viewport/Viewport.d.ts +11 -0
  98. package/dist/Viewport/index.d.ts +2 -0
  99. package/dist/Viewport/index.js +7 -0
  100. package/dist/index.d.ts +24 -0
  101. package/dist/index.js +386 -314
  102. package/dist/node_modules/@floating-ui/core/dist/floating-ui.core.js +532 -0
  103. package/dist/node_modules/@floating-ui/dom/dist/floating-ui.dom.js +403 -0
  104. package/dist/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.js +232 -0
  105. package/dist/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.js +136 -0
  106. package/dist/node_modules/@floating-ui/utils/dist/floating-ui.utils.js +128 -0
  107. package/dist/node_modules/@radix-ui/react-arrow/dist/index.js +24 -0
  108. package/dist/node_modules/@radix-ui/react-checkbox/dist/index.js +251 -0
  109. package/dist/node_modules/@radix-ui/react-collection/dist/index.js +48 -0
  110. package/dist/node_modules/@radix-ui/{react-slot → react-collection/node_modules/@radix-ui/react-slot}/dist/index.js +1 -1
  111. package/dist/node_modules/@radix-ui/react-dialog/dist/index.js +1 -1
  112. package/dist/node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot/dist/index.js +50 -0
  113. package/dist/node_modules/@radix-ui/react-direction/dist/index.js +10 -0
  114. package/dist/node_modules/@radix-ui/react-dismissable-layer/dist/index.js +29 -26
  115. package/dist/node_modules/@radix-ui/react-dropdown-menu/dist/index.js +208 -0
  116. package/dist/node_modules/@radix-ui/react-menu/dist/index.js +624 -0
  117. package/dist/node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-slot/dist/index.js +50 -0
  118. package/dist/node_modules/@radix-ui/react-popper/dist/index.js +221 -0
  119. package/dist/node_modules/@radix-ui/react-primitive/dist/index.js +1 -1
  120. package/dist/node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-slot/dist/index.js +50 -0
  121. package/dist/node_modules/@radix-ui/react-roving-focus/dist/index.js +183 -0
  122. package/dist/node_modules/@radix-ui/react-switch/dist/index.js +132 -0
  123. package/dist/node_modules/@radix-ui/react-toast/dist/index.js +446 -0
  124. package/dist/node_modules/@radix-ui/react-tooltip/dist/index.js +330 -0
  125. package/dist/node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-slot/dist/index.js +11 -0
  126. package/dist/node_modules/@radix-ui/react-use-previous/dist/index.js +8 -0
  127. package/dist/node_modules/@radix-ui/react-use-size/dist/index.js +27 -0
  128. package/dist/node_modules/@radix-ui/react-visually-hidden/dist/index.js +32 -0
  129. package/dist/node_modules/lucide-react/dist/esm/Icon.js +40 -0
  130. package/dist/node_modules/lucide-react/dist/esm/createLucideIcon.js +23 -0
  131. package/dist/node_modules/lucide-react/dist/esm/defaultAttributes.js +20 -0
  132. package/dist/node_modules/lucide-react/dist/esm/icons/arrow-down.js +14 -0
  133. package/dist/node_modules/lucide-react/dist/esm/icons/arrow-up-down.js +16 -0
  134. package/dist/node_modules/lucide-react/dist/esm/icons/arrow-up.js +14 -0
  135. package/dist/node_modules/lucide-react/dist/esm/icons/check.js +11 -0
  136. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-down.js +13 -0
  137. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.js +11 -0
  138. package/dist/node_modules/lucide-react/dist/esm/icons/circle-alert.js +15 -0
  139. package/dist/node_modules/lucide-react/dist/esm/icons/eye-off.js +28 -0
  140. package/dist/node_modules/lucide-react/dist/esm/icons/eye.js +20 -0
  141. package/dist/node_modules/lucide-react/dist/esm/icons/log-out.js +15 -0
  142. package/dist/node_modules/lucide-react/dist/esm/icons/x.js +14 -0
  143. package/dist/node_modules/lucide-react/dist/esm/shared/src/utils.js +11 -0
  144. package/dist/style.css +1 -1
  145. package/package.json +12 -3
  146. package/dist/Logo/Code4renaLogo.d.ts +0 -5
  147. package/dist/Logo/Code4renaLogo.js +0 -45
@@ -3,9 +3,9 @@ import { BTCLogo as m } from "./BTCLogo.js";
3
3
  import { CatalogLogo as p } from "./CatalogLogo.js";
4
4
  import { Coinbase as a } from "./Coinbase.js";
5
5
  import { EthereumLogo as g } from "./EthereumLogo.js";
6
- import { GardenExplorer as L } from "./GardenExplorer.js";
6
+ import { GardenExplorer as l } from "./GardenExplorer.js";
7
7
  import { GardenFullLogo as G } from "./GardenFullLogo.js";
8
- import { GardenLogo as C } from "./GardenLogo.js";
8
+ import { GardenLogo as c } from "./GardenLogo.js";
9
9
  import { GardenLogoText as T } from "./GardenLogoText.js";
10
10
  import { GardenStrokeIcon as D } from "./GardenStrokeIcon.js";
11
11
  import { GMXLogo as I } from "./GMXLogo.js";
@@ -30,18 +30,16 @@ import { GardenIcon as mo } from "./GardenIcon.js";
30
30
  import { GardenIconOutline as po } from "./GardenIconOutline.js";
31
31
  import { NFTIcon as ao } from "./NFTIcon.js";
32
32
  import { GardenExplorerAlt as go } from "./GardenExplorerAlt.js";
33
- import { GardenDocs as lo } from "./GardenDocs.js";
33
+ import { GardenDocs as Lo } from "./GardenDocs.js";
34
34
  import { GardenLogoMarkDark as io } from "./GardenLogoMarkDark.js";
35
- import { GardenLogoMarkLight as co } from "./GardenLogoMarkLight.js";
35
+ import { GardenLogoMarkLight as Co } from "./GardenLogoMarkLight.js";
36
36
  import { GardenLogoDark as ko } from "./GardenLogoDark.js";
37
37
  import { GardenLogoLight as uo } from "./GardenLogoLight.js";
38
- import { Code4renaLogo as ho } from "./Code4renaLogo.js";
39
38
  export {
40
39
  e as ArbitrumLogo,
41
40
  m as BTCLogo,
42
41
  q as Camelot,
43
42
  p as CatalogLogo,
44
- ho as Code4renaLogo,
45
43
  a as Coinbase,
46
44
  v as DLCBTC,
47
45
  V as Debridge,
@@ -49,17 +47,17 @@ export {
49
47
  g as EthereumLogo,
50
48
  H as GMX,
51
49
  I as GMXLogo,
52
- lo as GardenDocs,
53
- L as GardenExplorer,
50
+ Lo as GardenDocs,
51
+ l as GardenExplorer,
54
52
  go as GardenExplorerAlt,
55
53
  G as GardenFullLogo,
56
54
  mo as GardenIcon,
57
55
  po as GardenIconOutline,
58
- C as GardenLogo,
56
+ c as GardenLogo,
59
57
  ko as GardenLogoDark,
60
58
  uo as GardenLogoLight,
61
59
  io as GardenLogoMarkDark,
62
- co as GardenLogoMarkLight,
60
+ Co as GardenLogoMarkLight,
63
61
  T as GardenLogoText,
64
62
  D as GardenStrokeIcon,
65
63
  ao as NFTIcon,
@@ -0,0 +1,11 @@
1
+ export type OTPInputProps = {
2
+ value: string;
3
+ onChange: (value: string) => void;
4
+ onComplete?: (value: string) => void;
5
+ disabled?: boolean;
6
+ autoFocus?: boolean;
7
+ className?: string;
8
+ length?: number;
9
+ white?: boolean;
10
+ };
11
+ export declare const OTPInput: ({ value, onChange, onComplete, disabled, autoFocus, className, length, white, }: OTPInputProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,2 @@
1
+ export { OTPInput } from './OTPInput';
2
+ export type { OTPInputProps } from './OTPInput';
@@ -0,0 +1,88 @@
1
+ import { jsx as R } from "react/jsx-runtime";
2
+ import { useState as T, useRef as l, useEffect as m } from "react";
3
+ import { cn as h } from "../utils/index.js";
4
+ const L = ({
5
+ value: p,
6
+ onChange: g,
7
+ onComplete: w,
8
+ disabled: a = !1,
9
+ autoFocus: y = !0,
10
+ className: k,
11
+ length: c = 6,
12
+ white: A = !1
13
+ }) => {
14
+ const [o, i] = T(Array(c).fill("")), s = l([]), D = l(!1), O = l(p), j = l(w);
15
+ m(() => {
16
+ j.current = w;
17
+ }, [w]), m(() => {
18
+ if (p === "" && O.current !== "" && o.some((t) => t !== "")) {
19
+ const t = setTimeout(() => {
20
+ i(Array(c).fill("")), D.current = !1;
21
+ }, 0);
22
+ return () => clearTimeout(t);
23
+ }
24
+ O.current = p;
25
+ }, [p, c, o]), m(() => {
26
+ var t;
27
+ y && s.current[0] && !a && ((t = s.current[0]) == null || t.focus());
28
+ }, [y, a]), m(() => {
29
+ const t = o.join("");
30
+ t.length === c && j.current && !a && !D.current && (D.current = !0, j.current(t));
31
+ }, [o, c, a]);
32
+ const I = (t, r) => {
33
+ var u;
34
+ const e = r.replace(/\D/g, "");
35
+ if (e.length > 1) return;
36
+ const n = [...o];
37
+ n[t] = e, i(n), g(n.join("")), e && t < c - 1 && ((u = s.current[t + 1]) == null || u.focus());
38
+ }, P = (t, r) => {
39
+ var e, n, u;
40
+ if (r.key === "Backspace") {
41
+ if (o[t]) {
42
+ const f = [...o];
43
+ f[t] = "", i(f), g(f.join(""));
44
+ } else if (t > 0) {
45
+ const f = [...o];
46
+ f[t - 1] = "", i(f), g(f.join("")), (e = s.current[t - 1]) == null || e.focus();
47
+ }
48
+ } else r.key === "ArrowLeft" && t > 0 ? (n = s.current[t - 1]) == null || n.focus() : r.key === "ArrowRight" && t < c - 1 && ((u = s.current[t + 1]) == null || u.focus());
49
+ }, S = (t) => {
50
+ var u;
51
+ t.preventDefault();
52
+ const r = t.clipboardData.getData("text").replace(/\D/g, "").slice(0, c);
53
+ if (r.length === 0) return;
54
+ const e = [...o];
55
+ for (let f = 0; f < c; f++)
56
+ e[f] = r[f] || "";
57
+ i(e), g(e.join(""));
58
+ const n = Math.min(r.length - 1, c - 1);
59
+ (u = s.current[n]) == null || u.focus();
60
+ };
61
+ return /* @__PURE__ */ R("div", { className: h("gf-flex gf-gap-3 gf-items-center gf-w-full", k), children: o.map((t, r) => /* @__PURE__ */ R(
62
+ "input",
63
+ {
64
+ ref: (e) => {
65
+ s.current[r] = e;
66
+ },
67
+ type: "text",
68
+ inputMode: "numeric",
69
+ maxLength: 1,
70
+ value: t,
71
+ onChange: (e) => I(r, e.target.value),
72
+ onKeyDown: (e) => P(r, e),
73
+ onPaste: S,
74
+ disabled: a,
75
+ autoFocus: y && r === 0,
76
+ className: h(
77
+ "gf-flex-1 gf-min-w-0 gf-h-11 gf-text-center gf-text-[20px] gf-text-primaryIris gf-rounded-lg gf-bg-white/70",
78
+ "focus:gf-outline-none focus:gf-ring-0 focus:gf-ring-offset-0",
79
+ "disabled:gf-opacity-50 disabled:gf-cursor-not-allowed",
80
+ A && "gf-bg-white/50"
81
+ )
82
+ },
83
+ r
84
+ )) });
85
+ };
86
+ export {
87
+ L as OTPInput
88
+ };
@@ -0,0 +1,16 @@
1
+ import { FC } from 'react';
2
+
3
+ export type PaginationProps = {
4
+ currentPage: number;
5
+ totalPages: number;
6
+ onPageChange: (page: number) => void;
7
+ /** Disables all controls (e.g. while a page request is in flight). */
8
+ disabled?: boolean;
9
+ /** Max numbered buttons to show before ellipsis. Default 5. */
10
+ maxVisiblePages?: number;
11
+ className?: string;
12
+ };
13
+ /** Page navigation with prev/next arrows, numbered buttons, and ellipsis for large ranges. Returns null when `totalPages ≤ 1`. */
14
+ export declare const Pagination: ({ currentPage, totalPages, onPageChange, disabled, maxVisiblePages, className, }: PaginationProps) => import("react/jsx-runtime").JSX.Element | null;
15
+ /** Skeleton placeholder matching the Pagination layout while page data loads. */
16
+ export declare const SkeletonPagination: FC;
@@ -0,0 +1,2 @@
1
+ export { Pagination, SkeletonPagination } from './Pagination';
2
+ export type { PaginationProps } from './Pagination';
@@ -0,0 +1,111 @@
1
+ import { jsxs as p, jsx as e } from "react/jsx-runtime";
2
+ import { KeyboardLeftIcon as d } from "../Icons/KeyboardLeftIcon.js";
3
+ import { KeyboardRightIcon as a } from "../Icons/KeyboardRightIcon.js";
4
+ import { Typography as o } from "../Typography/index.js";
5
+ import { cn as c } from "../utils/index.js";
6
+ const x = (f, g, s = 5) => {
7
+ if (f <= s)
8
+ return Array.from({ length: f }, (t, h) => h + 1);
9
+ const i = [], l = Math.floor(s / 2);
10
+ let r = Math.max(1, g - l), n = Math.min(f, g + l);
11
+ g <= l ? n = s : g > f - l && (r = f - s + 1), r > 1 && (i.push(1), r > 2 && i.push("..."));
12
+ for (let t = r; t <= n; t++) i.push(t);
13
+ return n < f && (n < f - 1 && i.push("..."), i.push(f)), i;
14
+ }, M = ({
15
+ currentPage: f,
16
+ totalPages: g,
17
+ onPageChange: s,
18
+ disabled: i = !1,
19
+ maxVisiblePages: l = 5,
20
+ className: r
21
+ }) => {
22
+ if (g <= 1) return null;
23
+ const n = f <= 1 || i, t = f >= g || i, h = x(g, f, l), y = () => {
24
+ n || s(f - 1);
25
+ }, u = () => {
26
+ t || s(f + 1);
27
+ };
28
+ return /* @__PURE__ */ p(
29
+ "div",
30
+ {
31
+ className: c(
32
+ "gf-flex gf-gap-1 gf-justify-center gf-items-center sm:gf-mt-1 gf-mb-8",
33
+ r
34
+ ),
35
+ children: [
36
+ /* @__PURE__ */ e(
37
+ d,
38
+ {
39
+ className: c(
40
+ "gf-w-5 sm:gf-w-6 gf-h-5 sm:gf-h-6 gf-py-[5px] sm:gf-py-1.5 gf-cursor-pointer",
41
+ n && "gf-opacity-50 gf-cursor-not-allowed"
42
+ ),
43
+ onClick: y
44
+ }
45
+ ),
46
+ /* @__PURE__ */ e("div", { className: "gf-flex gf-gap-px", children: h.map(
47
+ (m, w) => m === "..." ? /* @__PURE__ */ e(
48
+ o,
49
+ {
50
+ size: "h5",
51
+ breakpoints: { sm: "h4", md: "h3" },
52
+ className: "gf-p-1.5 gf-min-w-6 sm:gf-min-w-7 gf-h-6 sm:gf-h-7 gf-flex gf-items-center gf-justify-center",
53
+ children: "..."
54
+ },
55
+ `ellipsis-${w}`
56
+ ) : /* @__PURE__ */ e(
57
+ "button",
58
+ {
59
+ onClick: () => m !== f && s(m),
60
+ disabled: i,
61
+ className: c(
62
+ "gf-p-1.5 gf-min-w-6 sm:gf-min-w-7 gf-h-6 sm:gf-h-7 gf-rounded-full gf-flex gf-items-center gf-justify-center",
63
+ f === m && "gf-bg-white/50"
64
+ ),
65
+ children: /* @__PURE__ */ e(
66
+ o,
67
+ {
68
+ size: "h5",
69
+ breakpoints: { sm: "h4", md: "h3" },
70
+ weight: f === m ? "medium" : "regular",
71
+ children: m
72
+ }
73
+ )
74
+ },
75
+ m
76
+ )
77
+ ) }),
78
+ /* @__PURE__ */ e(
79
+ a,
80
+ {
81
+ className: c(
82
+ "gf-w-5 sm:gf-w-6 gf-h-5 sm:gf-h-6 gf-py-[5px] sm:gf-py-1.5 gf-cursor-pointer",
83
+ t && "gf-opacity-50 gf-cursor-not-allowed"
84
+ ),
85
+ onClick: u
86
+ }
87
+ )
88
+ ]
89
+ }
90
+ );
91
+ }, z = () => /* @__PURE__ */ p("div", { className: "gf-flex gf-gap-1 gf-justify-center gf-items-center gf-mt-1 gf-mb-8", children: [
92
+ /* @__PURE__ */ e(d, { className: "gf-w-6 gf-h-6 gf-py-1.5 gf-opacity-50" }),
93
+ /* @__PURE__ */ p("div", { className: "gf-flex gf-gap-1", children: [
94
+ /* @__PURE__ */ e("div", { className: "gf-p-1.5 gf-min-w-7 gf-min-h-7 gf-rounded-full gf-flex gf-items-center gf-justify-center gf-bg-white/30 gf-animate-pulse" }),
95
+ /* @__PURE__ */ e("span", { className: "gf-py-1.5 gf-min-w-[22px] gf-h-7 gf-flex gf-items-center gf-justify-center", children: "..." }),
96
+ [0, 1, 2].map((f) => /* @__PURE__ */ e(
97
+ "div",
98
+ {
99
+ className: "gf-p-1.5 gf-min-w-7 gf-min-h-7 gf-rounded-full gf-flex gf-items-center gf-justify-center gf-bg-white/30 gf-animate-pulse"
100
+ },
101
+ f
102
+ )),
103
+ /* @__PURE__ */ e("span", { className: "gf-py-1.5 gf-min-w-[22px] gf-h-7 gf-flex gf-items-center gf-justify-center", children: "..." }),
104
+ /* @__PURE__ */ e("div", { className: "gf-p-1.5 gf-min-w-7 gf-min-h-7 gf-rounded-full gf-flex gf-items-center gf-justify-center gf-bg-white/30 gf-animate-pulse" })
105
+ ] }),
106
+ /* @__PURE__ */ e(a, { className: "gf-w-6 gf-h-6 gf-py-1.5 gf-opacity-50" })
107
+ ] });
108
+ export {
109
+ M as Pagination,
110
+ z as SkeletonPagination
111
+ };
@@ -0,0 +1,8 @@
1
+ import { ReactNode } from 'react';
2
+
3
+ export type PortalProps = {
4
+ children: ReactNode;
5
+ container?: HTMLElement | null;
6
+ };
7
+ /** SSR-safe React portal. Delays mount until after hydration to avoid document access on the server. */
8
+ export declare const Portal: ({ children, container }: PortalProps) => import('react').ReactPortal | null;
@@ -0,0 +1,2 @@
1
+ export { Portal } from './Portal';
2
+ export type { PortalProps } from './Portal';
@@ -0,0 +1,11 @@
1
+ import { useState as u, useEffect as n } from "react";
2
+ import { createPortal as f } from "react-dom";
3
+ const a = ({ children: t, container: e }) => {
4
+ const [o, r] = u(!1);
5
+ return n(() => {
6
+ r(!0);
7
+ }, []), o ? f(t, e ?? document.body) : null;
8
+ };
9
+ export {
10
+ a as Portal
11
+ };
@@ -0,0 +1,14 @@
1
+ import { FC, ReactNode } from 'react';
2
+
3
+ type OpacityVariants = "extra-light" | "light" | "medium" | "semi-dark" | "full";
4
+ export type ResponsiveModalProps = {
5
+ open: boolean;
6
+ onClose: () => void;
7
+ label?: string;
8
+ children: ReactNode;
9
+ opacityLevel?: OpacityVariants;
10
+ className?: string;
11
+ };
12
+ /** Modal on desktop, vaul BottomSheet on mobile. Reads viewport from `ViewportProvider`. Portals into `document.body`. */
13
+ export declare const ResponsiveModal: FC<ResponsiveModalProps>;
14
+ export {};
@@ -0,0 +1,2 @@
1
+ export { ResponsiveModal } from './ResponsiveModal';
2
+ export type { ResponsiveModalProps } from './ResponsiveModal';
@@ -0,0 +1,62 @@
1
+ import { jsx as e, jsxs as f } from "react/jsx-runtime";
2
+ import { useState as u, useEffect as d } from "react";
3
+ import { createPortal as m } from "react-dom";
4
+ import { Modal as s } from "../Modal/index.js";
5
+ import { BottomSheet as h } from "../BottomSheet/index.js";
6
+ import { Typography as w } from "../Typography/index.js";
7
+ import { CloseIcon as n } from "../Icons/CloseIcon.js";
8
+ import { useViewport as x } from "../Viewport/index.js";
9
+ import { cn as b } from "../utils/index.js";
10
+ const B = ({
11
+ open: t,
12
+ onClose: r,
13
+ label: o,
14
+ children: i,
15
+ opacityLevel: l = "medium",
16
+ className: g
17
+ }) => {
18
+ const c = x() === "mobile", [a, p] = u(!1);
19
+ return d(() => {
20
+ p(!0);
21
+ }, []), a ? c ? t ? m(
22
+ /* @__PURE__ */ e(h, { open: t, onOpenChange: r, children: i }),
23
+ document.body
24
+ ) : null : m(
25
+ /* @__PURE__ */ e(s, { open: t, onClose: r, children: /* @__PURE__ */ f(
26
+ s.Children,
27
+ {
28
+ opacityLevel: l,
29
+ className: b(
30
+ "gf-relative gf-flex gf-w-[500px] gf-flex-col gf-gap-4 gf-rounded-2xl gf-p-4",
31
+ g
32
+ ),
33
+ children: [
34
+ o && /* @__PURE__ */ f("div", { className: "gf-flex gf-items-center gf-justify-between", children: [
35
+ /* @__PURE__ */ e(w, { size: "h4", weight: "medium", children: o }),
36
+ /* @__PURE__ */ e(
37
+ n,
38
+ {
39
+ className: "gf-h-3 gf-w-3 gf-fill-primaryIris gf-cursor-pointer",
40
+ onClick: r
41
+ }
42
+ )
43
+ ] }),
44
+ !o && /* @__PURE__ */ e(
45
+ "button",
46
+ {
47
+ onClick: r,
48
+ className: "gf-absolute gf-right-4 gf-top-4 gf-cursor-pointer gf-text-white/50 gf-transition-colors hover:gf-text-white",
49
+ "aria-label": "Close",
50
+ children: /* @__PURE__ */ e(n, { className: "gf-h-4 gf-w-4" })
51
+ }
52
+ ),
53
+ i
54
+ ]
55
+ }
56
+ ) }),
57
+ document.body
58
+ ) : null;
59
+ };
60
+ export {
61
+ B as ResponsiveModal
62
+ };
@@ -0,0 +1,41 @@
1
+ import { ReactNode } from 'react';
2
+
3
+ export type SelectDropdownItem<V extends string> = {
4
+ value: V;
5
+ label: ReactNode;
6
+ icon?: ReactNode;
7
+ disabled?: boolean;
8
+ };
9
+ export type SelectDropdownProps<V extends string> = {
10
+ items: SelectDropdownItem<V>[];
11
+ value: V;
12
+ onChange: (value: V) => void;
13
+ placeholder?: string;
14
+ /** Insert a 1px separator after each listed value. */
15
+ separatorsAfter?: V[];
16
+ /** Reset action rendered as a pill at the top of the panel (e.g. "Clear filter"). */
17
+ clearAction?: {
18
+ label: string;
19
+ value: V;
20
+ };
21
+ align?: "start" | "end";
22
+ disabled?: boolean;
23
+ /** Extra classes for the floating panel (width / max-height / min-width). */
24
+ contentClassName?: string;
25
+ /** Extra classes for the trigger button. */
26
+ triggerClassName?: string;
27
+ /** Extra classes for the outer wrapper (e.g. "w-full" to make the trigger fill its row). */
28
+ wrapperClassName?: string;
29
+ /** Optional leading icon rendered inside the trigger before the label. */
30
+ triggerIcon?: ReactNode;
31
+ /** Typography size for trigger + item labels. Default `"h5"`. */
32
+ labelSize?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6";
33
+ /** Tailwind `from-*` class for the scroll-overflow gradient fades. Default `"gf-from-white"`. */
34
+ scrollGradientColor?: string;
35
+ };
36
+ /**
37
+ * Glassmorphic select — no background, no border, just backdrop-blur on the
38
+ * panel. Built from scratch (no shadcn DropdownMenu) so the blur actually
39
+ * shows through to the page content behind it.
40
+ */
41
+ export declare const SelectDropdown: <V extends string>({ items, value, onChange, placeholder, separatorsAfter, clearAction, align, disabled, contentClassName, triggerClassName, wrapperClassName, triggerIcon, labelSize, scrollGradientColor, }: SelectDropdownProps<V>) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,2 @@
1
+ export { SelectDropdown } from './SelectDropdown';
2
+ export type { SelectDropdownProps, SelectDropdownItem } from './SelectDropdown';
@@ -0,0 +1,195 @@
1
+ import { jsxs as c, jsx as t } from "react/jsx-runtime";
2
+ import { useState as m, useRef as w, useCallback as J, useLayoutEffect as M, useEffect as B, Fragment as Q } from "react";
3
+ import { AnimatePresence as U, motion as V } from "framer-motion";
4
+ import { Typography as E } from "../Typography/index.js";
5
+ import { Portal as X } from "../Portal/index.js";
6
+ import { cn as f } from "../utils/index.js";
7
+ import Y from "../node_modules/lucide-react/dist/esm/icons/chevron-down.js";
8
+ const ie = ({
9
+ items: d,
10
+ value: b,
11
+ onChange: L,
12
+ placeholder: H = "",
13
+ separatorsAfter: v,
14
+ clearAction: u,
15
+ align: x = "start",
16
+ disabled: $,
17
+ contentClassName: D,
18
+ triggerClassName: O,
19
+ wrapperClassName: W,
20
+ triggerIcon: z,
21
+ labelSize: R = "h5",
22
+ scrollGradientColor: S = "gf-from-white"
23
+ }) => {
24
+ const [n, l] = m(!1), T = w(null), P = w(null), a = w(null), C = w(null), [p, F] = m({ top: 0, width: 0 }), [K, G] = m(!1), [q, _] = m(!1), y = d.find((e) => e.value === b) ?? null, I = (y == null ? void 0 : y.label) ?? H, h = J(() => {
25
+ const e = C.current;
26
+ e && (G(e.scrollTop > 0), _(e.scrollTop + e.clientHeight < e.scrollHeight - 1));
27
+ }, []);
28
+ return M(() => {
29
+ if (!n) return;
30
+ const e = (g = !1) => {
31
+ const s = P.current;
32
+ if (!s) return;
33
+ const r = s.getBoundingClientRect();
34
+ if (r.bottom < 0 || r.top > window.innerHeight) {
35
+ l(!1);
36
+ return;
37
+ }
38
+ const j = r.bottom + 6, N = x === "end" ? void 0 : r.left, k = x === "end" ? window.innerWidth - r.right : void 0;
39
+ g && a.current ? (a.current.style.top = `${j}px`, N !== void 0 && (a.current.style.left = `${N}px`), k !== void 0 && (a.current.style.right = `${k}px`)) : F({ top: j, left: N, right: k, width: r.width });
40
+ };
41
+ e();
42
+ const i = () => e(!1), o = () => e(!0);
43
+ return window.addEventListener("resize", i), window.addEventListener("scroll", o, !0), () => {
44
+ window.removeEventListener("resize", i), window.removeEventListener("scroll", o, !0);
45
+ };
46
+ }, [n, x]), B(() => {
47
+ if (!n) {
48
+ G(!1), _(!1);
49
+ return;
50
+ }
51
+ h();
52
+ const e = setTimeout(h, 50);
53
+ return () => clearTimeout(e);
54
+ }, [n, d, h]), B(() => {
55
+ if (!n) return;
56
+ const e = (o) => {
57
+ var s, r;
58
+ const g = o.target;
59
+ (s = T.current) != null && s.contains(g) || (r = a.current) != null && r.contains(g) || l(!1);
60
+ }, i = (o) => {
61
+ o.key === "Escape" && l(!1);
62
+ };
63
+ return document.addEventListener("mousedown", e), document.addEventListener("keydown", i), () => {
64
+ document.removeEventListener("mousedown", e), document.removeEventListener("keydown", i);
65
+ };
66
+ }, [n]), /* @__PURE__ */ c("div", { ref: T, className: f("gf-relative gf-inline-block", W), children: [
67
+ /* @__PURE__ */ c(
68
+ "button",
69
+ {
70
+ ref: P,
71
+ type: "button",
72
+ disabled: $,
73
+ onClick: () => l((e) => !e),
74
+ "aria-haspopup": "listbox",
75
+ "aria-expanded": n,
76
+ className: f(
77
+ "gf-flex gf-items-center gf-gap-1.5 gf-py-2 gf-px-3 gf-rounded-full gf-bg-white/70 focus:gf-outline-none gf-transition-colors disabled:gf-cursor-not-allowed",
78
+ O
79
+ ),
80
+ children: [
81
+ z && /* @__PURE__ */ t("span", { className: "gf-flex gf-items-center gf-shrink-0", children: z }),
82
+ /* @__PURE__ */ t(
83
+ E,
84
+ {
85
+ size: R,
86
+ weight: "regular",
87
+ className: "gf-truncate gf-flex-1 gf-text-left",
88
+ children: I
89
+ }
90
+ ),
91
+ /* @__PURE__ */ t(
92
+ Y,
93
+ {
94
+ className: f(
95
+ "gf-h-3.5 gf-w-3.5 gf-text-primaryIris gf-flex-shrink-0 gf-transition-transform",
96
+ n && "gf-rotate-180"
97
+ )
98
+ }
99
+ )
100
+ ]
101
+ }
102
+ ),
103
+ /* @__PURE__ */ t(X, { children: /* @__PURE__ */ t(U, { children: n && /* @__PURE__ */ t(
104
+ V.div,
105
+ {
106
+ ref: a,
107
+ role: "listbox",
108
+ initial: { opacity: 0, y: -4 },
109
+ animate: { opacity: 1, y: 0 },
110
+ exit: { opacity: 0, y: -4 },
111
+ transition: { duration: 0.15, ease: "easeOut" },
112
+ style: {
113
+ position: "fixed",
114
+ top: p.top,
115
+ left: p.left,
116
+ right: p.right,
117
+ minWidth: p.width || void 0
118
+ },
119
+ className: "gf-z-[60] gf-rounded-xl gf-min-w-28 gf-bg-white/30 gf-backdrop-blur-lg [-webkit-backdrop-filter:blur(12px)] gf-overflow-hidden gf-shadow-[0_8px_24px_-12px_rgba(71,60,117,0.2)]",
120
+ children: /* @__PURE__ */ c("div", { className: "gf-relative", children: [
121
+ K && /* @__PURE__ */ t(
122
+ "div",
123
+ {
124
+ className: f("gf-absolute gf-top-0 gf-left-0 gf-right-0 gf-h-8 gf-pointer-events-none gf-z-10 gf-bg-gradient-to-b gf-to-transparent", S)
125
+ }
126
+ ),
127
+ /* @__PURE__ */ c("div", { className: "gf-relative", children: [
128
+ /* @__PURE__ */ t(
129
+ "div",
130
+ {
131
+ ref: C,
132
+ onScroll: h,
133
+ className: f("gf-py-2 gf-overflow-y-auto gf-max-h-96 [scrollbar-width:none] [&::-webkit-scrollbar]:gf-hidden", D),
134
+ children: d.map((e, i) => {
135
+ const o = e.value === b, g = i === d.length - 1, s = (v == null ? void 0 : v.includes(e.value)) && !g;
136
+ return /* @__PURE__ */ c(Q, { children: [
137
+ /* @__PURE__ */ c(
138
+ "button",
139
+ {
140
+ type: "button",
141
+ role: "option",
142
+ "aria-selected": o,
143
+ disabled: e.disabled,
144
+ onClick: () => {
145
+ e.disabled || (L(e.value), l(!1));
146
+ },
147
+ className: f(
148
+ "gf-w-full gf-flex gf-items-center gf-gap-3 gf-px-4 gf-py-2 gf-text-sm gf-transition-colors",
149
+ e.disabled ? "gf-opacity-35 gf-cursor-default gf-pointer-events-none" : "hover:gf-bg-white/50 gf-cursor-pointer"
150
+ ),
151
+ children: [
152
+ e.icon && /* @__PURE__ */ t("span", { className: "gf-flex-shrink-0 gf-flex gf-items-center", children: e.icon }),
153
+ /* @__PURE__ */ t(
154
+ E,
155
+ {
156
+ size: R,
157
+ weight: "regular",
158
+ className: "gf-truncate gf-flex-1 gf-text-left",
159
+ children: e.label
160
+ }
161
+ )
162
+ ]
163
+ }
164
+ ),
165
+ s && /* @__PURE__ */ t("div", { className: "gf-h-px gf-bg-white/40 gf-my-1 gf-mx-3" })
166
+ ] }, e.value);
167
+ })
168
+ }
169
+ ),
170
+ q && /* @__PURE__ */ t(
171
+ "div",
172
+ {
173
+ className: f("gf-absolute gf-bottom-0 gf-left-0 gf-right-0 gf-h-8 gf-pointer-events-none gf-z-10 gf-bg-gradient-to-t gf-to-transparent", S)
174
+ }
175
+ )
176
+ ] }),
177
+ u && b !== u.value && /* @__PURE__ */ t("div", { className: "gf-px-2.5 gf-pb-2 gf-pt-1", children: /* @__PURE__ */ t(
178
+ "button",
179
+ {
180
+ type: "button",
181
+ onClick: () => {
182
+ L(u.value), l(!1);
183
+ },
184
+ className: "gf-flex gf-items-center gf-justify-center gf-w-full gf-rounded-full gf-bg-white/70 hover:gf-bg-white/80 gf-py-1.5 gf-px-3 gf-cursor-pointer gf-transition-colors",
185
+ children: /* @__PURE__ */ t(E, { size: "h5", weight: "regular", children: u.label })
186
+ }
187
+ ) })
188
+ ] })
189
+ }
190
+ ) }) })
191
+ ] });
192
+ };
193
+ export {
194
+ ie as SelectDropdown
195
+ };
@@ -0,0 +1,3 @@
1
+ export interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {
2
+ }
3
+ export declare const Skeleton: ({ className, ...props }: SkeletonProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,2 @@
1
+ export { Skeleton } from './Skeleton';
2
+ export type { SkeletonProps } from './Skeleton';
@@ -0,0 +1,12 @@
1
+ import { jsx as o } from "react/jsx-runtime";
2
+ import { cn as t } from "../utils/index.js";
3
+ const n = ({ className: e, ...r }) => /* @__PURE__ */ o(
4
+ "div",
5
+ {
6
+ className: t("gf-animate-pulse gf-rounded-md gf-bg-light-grey/50", e),
7
+ ...r
8
+ }
9
+ );
10
+ export {
11
+ n as Skeleton
12
+ };