@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
@@ -0,0 +1,8 @@
1
+ export declare const useAnimatedTable: (loading: boolean, count: number, skeletonCount?: number, layoutKey?: string) => {
2
+ tableRef: import('react').RefObject<HTMLDivElement | null>;
3
+ wrapperRef: import('react').RefObject<HTMLDivElement | null>;
4
+ measuredHeight: number;
5
+ animatedKeys: import('react').RefObject<Set<string>>;
6
+ wasPreloaded: import('react').RefObject<boolean>;
7
+ skeletonCount: number;
8
+ };
@@ -0,0 +1,44 @@
1
+ import { useRef as t, useState as b, useEffect as v, useLayoutEffect as w } from "react";
2
+ const x = (a, h, g = 6, s) => {
3
+ const f = t(null), l = t(null), [d, m] = b(0), r = t(null), n = t(null), p = t(!a && h > 0), H = t(/* @__PURE__ */ new Set());
4
+ return v(() => {
5
+ if (s !== void 0) return;
6
+ const e = f.current;
7
+ if (!e) return;
8
+ const c = new ResizeObserver(() => m(e.offsetHeight));
9
+ return c.observe(e), () => c.disconnect();
10
+ }, [s]), w(() => {
11
+ if (s === void 0) return;
12
+ const e = l.current;
13
+ if (!e) return;
14
+ const c = n.current;
15
+ let u;
16
+ c ? (u = e.offsetHeight, c.cancel(), n.current = null) : u = r.current ?? e.offsetHeight;
17
+ const i = e.offsetHeight;
18
+ if (r.current === null) {
19
+ r.current = i;
20
+ return;
21
+ }
22
+ if (u === i) {
23
+ r.current = i;
24
+ return;
25
+ }
26
+ const o = e.animate(
27
+ [{ height: `${u}px` }, { height: `${i}px` }],
28
+ { duration: 320, easing: "cubic-bezier(0.4, 0, 0.2, 1)" }
29
+ );
30
+ n.current = o, o.onfinish = () => {
31
+ n.current === o && (n.current = null);
32
+ }, r.current = i;
33
+ }, [s]), {
34
+ tableRef: f,
35
+ wrapperRef: l,
36
+ measuredHeight: d,
37
+ animatedKeys: H,
38
+ wasPreloaded: p,
39
+ skeletonCount: g
40
+ };
41
+ };
42
+ export {
43
+ x as useAnimatedTable
44
+ };
@@ -0,0 +1,12 @@
1
+ import { ReactNode } from 'react';
2
+
3
+ export type DirectionalIconHoverProps = {
4
+ icon: ReactNode;
5
+ direction?: "northeast" | "northwest" | "southeast" | "southwest";
6
+ distance?: number;
7
+ duration?: number;
8
+ isHovered?: boolean;
9
+ onHoverChange?: (hovered: boolean) => void;
10
+ className?: string;
11
+ };
12
+ export declare const DirectionalIconHover: ({ icon, direction, distance, duration, isHovered: controlledHovered, onHoverChange, className, }: DirectionalIconHoverProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,2 @@
1
+ export { DirectionalIconHover } from './DirectionalIconHover';
2
+ export type { DirectionalIconHoverProps } from './DirectionalIconHover';
@@ -0,0 +1,72 @@
1
+ import { jsxs as j, jsx as o } from "react/jsx-runtime";
2
+ import { motion as a } from "framer-motion";
3
+ import { useState as v } from "react";
4
+ const M = ({
5
+ icon: s,
6
+ direction: l = "northeast",
7
+ distance: e = 20,
8
+ duration: f = 0.3,
9
+ isHovered: t,
10
+ onHoverChange: i,
11
+ className: m = "gf-h-5 gf-w-5"
12
+ }) => {
13
+ const [X, u] = v(!1), r = t !== void 0 ? t : X, Y = () => {
14
+ t === void 0 && u(!0), i == null || i(!0);
15
+ }, y = () => {
16
+ t === void 0 && u(!1), i == null || i(!1);
17
+ }, p = () => {
18
+ switch (l) {
19
+ case "northeast":
20
+ return { exitX: e, exitY: -e, enterX: -e, enterY: e };
21
+ case "northwest":
22
+ return { exitX: -e, exitY: -e, enterX: e, enterY: e };
23
+ case "southeast":
24
+ return { exitX: e, exitY: e, enterX: -e, enterY: -e };
25
+ case "southwest":
26
+ return { exitX: -e, exitY: e, enterX: e, enterY: -e };
27
+ default:
28
+ return { exitX: e, exitY: -e, enterX: -e, enterY: e };
29
+ }
30
+ }, { exitX: g, exitY: c, enterX: x, enterY: n } = p();
31
+ return /* @__PURE__ */ j(
32
+ "div",
33
+ {
34
+ className: `gf-relative gf-flex gf-items-center gf-justify-center gf-overflow-hidden ${m}`,
35
+ onMouseEnter: t === void 0 ? Y : void 0,
36
+ onMouseLeave: t === void 0 ? y : void 0,
37
+ children: [
38
+ /* @__PURE__ */ o(
39
+ a.div,
40
+ {
41
+ initial: { x: 0, y: 0, opacity: 1 },
42
+ animate: {
43
+ x: r ? g : 0,
44
+ y: r ? c : 0,
45
+ opacity: r ? 0 : 1
46
+ },
47
+ transition: { duration: f, ease: "easeInOut" },
48
+ className: "gf-absolute gf-flex gf-items-center gf-justify-center",
49
+ children: s
50
+ }
51
+ ),
52
+ /* @__PURE__ */ o(
53
+ a.div,
54
+ {
55
+ initial: { x, y: n, opacity: 0 },
56
+ animate: {
57
+ x: r ? 0 : x,
58
+ y: r ? 0 : n,
59
+ opacity: r ? 1 : 0
60
+ },
61
+ transition: { duration: f, ease: "easeInOut" },
62
+ className: "gf-absolute gf-flex gf-items-center gf-justify-center",
63
+ children: s
64
+ }
65
+ )
66
+ ]
67
+ }
68
+ );
69
+ };
70
+ export {
71
+ M as DirectionalIconHover
72
+ };
@@ -0,0 +1,20 @@
1
+ export type EmptyStateAction = {
2
+ label: string;
3
+ onClick: () => void;
4
+ };
5
+ export type EmptyStateContentProps = {
6
+ title: string;
7
+ description?: string;
8
+ action?: EmptyStateAction;
9
+ };
10
+ /**
11
+ * Just the inner content. Render this directly when embedding an empty state
12
+ * inside an existing component shell (e.g., inside a table colspan row). For
13
+ * page-level empty states with the full bg-white/50 card, use EmptyState.
14
+ */
15
+ export declare const EmptyStateContent: ({ title, description, action, }: EmptyStateContentProps) => import("react/jsx-runtime").JSX.Element;
16
+ export type EmptyStateProps = EmptyStateContentProps & {
17
+ className?: string;
18
+ };
19
+ /** Full-page empty state card. Use `EmptyStateContent` directly when embedding inside an existing shell. */
20
+ export declare const EmptyState: ({ className, ...props }: EmptyStateProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,2 @@
1
+ export { EmptyState, EmptyStateContent } from './EmptyState';
2
+ export type { EmptyStateProps, EmptyStateContentProps, EmptyStateAction, } from './EmptyState';
@@ -0,0 +1,35 @@
1
+ import { jsx as e, jsxs as i } from "react/jsx-runtime";
2
+ import { Typography as f } from "../Typography/index.js";
3
+ import { StateContainer as l } from "../StateContainer/index.js";
4
+ const s = ({
5
+ title: t,
6
+ description: r,
7
+ action: g
8
+ }) => /* @__PURE__ */ i("div", { className: "gf-flex gf-flex-col gf-justify-center gf-items-center gf-gap-2 gf-text-center gf-px-6 gf-max-w-md", children: [
9
+ /* @__PURE__ */ i("div", { className: "gf-flex gf-flex-col gf-items-center gf-gap-1", children: [
10
+ /* @__PURE__ */ e(f, { size: "h4", weight: "medium", children: t }),
11
+ r && /* @__PURE__ */ e(
12
+ f,
13
+ {
14
+ size: "h5",
15
+ weight: "regular",
16
+ className: "gf-whitespace-pre-line gf-text-midGrey",
17
+ children: r
18
+ }
19
+ )
20
+ ] }),
21
+ g && /* @__PURE__ */ e(
22
+ f,
23
+ {
24
+ size: "h5",
25
+ weight: "regular",
26
+ className: "gf-text-white gf-mt-1 gf-px-4 gf-py-1.5 gf-rounded-full gf-bg-primaryIris hover:gf-bg-primaryIris/90 gf-transition-colors gf-cursor-pointer",
27
+ onClick: g.onClick,
28
+ children: g.label
29
+ }
30
+ )
31
+ ] }), n = ({ className: t, ...r }) => /* @__PURE__ */ e(l, { className: t, children: /* @__PURE__ */ e(s, { ...r }) });
32
+ export {
33
+ n as EmptyState,
34
+ s as EmptyStateContent
35
+ };
@@ -0,0 +1,17 @@
1
+ export type ErrorStateContentProps = {
2
+ status?: number;
3
+ message?: string;
4
+ onRetry?: () => void;
5
+ };
6
+ /**
7
+ * Inner content (icon, title, description, action button). Render this
8
+ * directly when embedding an error inside an existing component shell
9
+ * (e.g., inside a table colspan row). For page-level errors with the full
10
+ * bg-white/50 card, use ErrorState.
11
+ */
12
+ export declare const ErrorStateContent: ({ status, message, onRetry }: ErrorStateContentProps) => import("react/jsx-runtime").JSX.Element;
13
+ export type ErrorStateProps = ErrorStateContentProps & {
14
+ className?: string;
15
+ };
16
+ /** Full-page error state card. Use `ErrorStateContent` directly when embedding inside an existing shell. */
17
+ export declare const ErrorState: ({ className, ...props }: ErrorStateProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,2 @@
1
+ export declare function getFriendlyTitle(status?: number, message?: string): string;
2
+ export declare function getFriendlyDescription(status?: number, message?: string): string;
@@ -0,0 +1,13 @@
1
+ function o(r, n) {
2
+ const e = (n == null ? void 0 : n.toLowerCase()) ?? "";
3
+ return e.includes("network error") ? "Connection issue" : e.includes("timed out") ? "Request timed out" : r === 401 ? "Session expired" : r === 403 ? "You don't have access to this resource" : r === 404 ? "Not found" : r === 502 || r === 503 ? "Temporarily unavailable" : "Something went wrong";
4
+ }
5
+ function i(r, n) {
6
+ const e = (n == null ? void 0 : n.toLowerCase()) ?? "";
7
+ return e.includes("network error") ? "Check your connection and try again." : e.includes("timed out") ? "The server took too long to respond." : r === 401 ? "Please sign in again to continue." : r === 403 ? "Contact your admin if this seems wrong." : r === 404 ? "We couldn't find what you're looking for." : r === 502 || r === 503 ? "We're working on it. Please try again shortly." : `Try refreshing the page. If the problem persists,
8
+ contact support.`;
9
+ }
10
+ export {
11
+ i as getFriendlyDescription,
12
+ o as getFriendlyTitle
13
+ };
@@ -0,0 +1,2 @@
1
+ export { ErrorState, ErrorStateContent } from './ErrorState';
2
+ export type { ErrorStateProps, ErrorStateContentProps } from './ErrorState';
@@ -0,0 +1,37 @@
1
+ import { jsx as e, jsxs as g } from "react/jsx-runtime";
2
+ import { Typography as t } from "../Typography/index.js";
3
+ import { StateContainer as f } from "../StateContainer/index.js";
4
+ import { getFriendlyTitle as n, getFriendlyDescription as l } from "./errorMessages.js";
5
+ import a from "../node_modules/lucide-react/dist/esm/icons/circle-alert.js";
6
+ const m = ({ status: r, message: i, onRetry: o }) => {
7
+ const c = n(r, i), s = l(r, i);
8
+ return /* @__PURE__ */ g("div", { className: "gf-flex gf-flex-col gf-items-center gf-gap-2 gf-text-center gf-px-6 gf-max-w-md", children: [
9
+ /* @__PURE__ */ e(a, { className: "gf-w-7 gf-h-7 gf-text-primaryIris", strokeWidth: 1.5 }),
10
+ /* @__PURE__ */ g("div", { className: "gf-flex gf-flex-col gf-items-center gf-gap-1", children: [
11
+ /* @__PURE__ */ e(t, { size: "h3", weight: "medium", children: c }),
12
+ /* @__PURE__ */ e(
13
+ t,
14
+ {
15
+ size: "h5",
16
+ weight: "regular",
17
+ className: "gf-whitespace-pre-line gf-text-midGrey",
18
+ children: s
19
+ }
20
+ )
21
+ ] }),
22
+ o && /* @__PURE__ */ e(
23
+ t,
24
+ {
25
+ size: "h5",
26
+ weight: "regular",
27
+ className: "gf-text-white gf-mt-1 gf-px-4 gf-py-1.5 gf-rounded-full gf-bg-primaryIris hover:gf-bg-primaryIris/90 gf-transition-colors gf-cursor-pointer",
28
+ onClick: o,
29
+ children: r === 401 ? "Sign in" : r === 403 ? "Go to Dashboard" : "Try again"
30
+ }
31
+ )
32
+ ] });
33
+ }, b = ({ className: r, ...i }) => /* @__PURE__ */ e(f, { className: r, children: /* @__PURE__ */ e(m, { ...i }) });
34
+ export {
35
+ b as ErrorState,
36
+ m as ErrorStateContent
37
+ };
@@ -0,0 +1,14 @@
1
+ import { ReactNode } from 'react';
2
+ import { SizeVariants, WeightVariants } from '../Typography/Typography';
3
+
4
+ export type FieldProps = {
5
+ label: ReactNode;
6
+ labelSize?: SizeVariants;
7
+ labelWeight?: WeightVariants;
8
+ hint?: ReactNode;
9
+ optional?: boolean;
10
+ children: ReactNode;
11
+ className?: string;
12
+ };
13
+ /** Form field wrapper with a label and optional hint text above the control. */
14
+ export declare const Field: ({ label, labelSize, labelWeight, hint, optional, children, className }: FieldProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,2 @@
1
+ export { Field } from './Field';
2
+ export type { FieldProps } from './Field';
@@ -0,0 +1,14 @@
1
+ import { jsxs as s, jsx as r } from "react/jsx-runtime";
2
+ import { Typography as i } from "../Typography/index.js";
3
+ import { cn as a } from "../utils/index.js";
4
+ const h = ({ label: f, labelSize: e = "h5", labelWeight: m = "medium", hint: g, optional: l, children: t, className: c }) => /* @__PURE__ */ s("div", { className: a("gf-flex gf-flex-col gf-gap-2", c), children: [
5
+ /* @__PURE__ */ s("div", { className: "gf-flex gf-items-center gf-gap-1.5 gf-pl-1.5", children: [
6
+ /* @__PURE__ */ r(i, { size: e, weight: m, children: f }),
7
+ l && /* @__PURE__ */ r(i, { size: e, weight: "regular", className: "gf-text-midGrey", children: "Optional" }),
8
+ g && /* @__PURE__ */ r(i, { size: e, weight: "regular", className: "gf-text-midGrey", children: g })
9
+ ] }),
10
+ t
11
+ ] });
12
+ export {
13
+ h as Field
14
+ };
@@ -0,0 +1,5 @@
1
+ export type HamburgerIconProps = {
2
+ isOpen: boolean;
3
+ };
4
+ /** Animated three-bar icon that morphs into an × when `isOpen` is true. */
5
+ export declare const HamburgerIcon: ({ isOpen }: HamburgerIconProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,2 @@
1
+ export { HamburgerIcon } from './HamburgerIcon';
2
+ export type { HamburgerIconProps } from './HamburgerIcon';
@@ -0,0 +1,47 @@
1
+ import { jsxs as r, jsx as e } from "react/jsx-runtime";
2
+ import { motion as f } from "framer-motion";
3
+ const o = ({ isOpen: a }) => /* @__PURE__ */ r(
4
+ "div",
5
+ {
6
+ className: `gf-z-[9999] gf-flex gf-h-8 gf-w-8 gf-cursor-pointer gf-flex-col gf-justify-center gf-gap-1 gf-rounded-full gf-p-2 gf-backdrop-blur-md gf-transition-all gf-duration-300 gf-ease-in-out ${a ? "gf-bg-white" : "gf-bg-white/50"}`,
7
+ children: [
8
+ /* @__PURE__ */ e(
9
+ f.span,
10
+ {
11
+ animate: a ? { y: 6, rotate: 45 } : { y: 0, rotate: 0 },
12
+ transition: {
13
+ duration: 0.3,
14
+ ease: "easeInOut",
15
+ y: { delay: a ? 0.1 : 0.2 },
16
+ rotate: { delay: a ? 0.2 : 0.1 }
17
+ },
18
+ className: "gf-block gf-h-px gf-w-full gf-origin-center gf-overflow-hidden gf-rounded-full gf-bg-primaryIris"
19
+ }
20
+ ),
21
+ /* @__PURE__ */ e(
22
+ f.span,
23
+ {
24
+ animate: a ? { width: 0, x: 8 } : { width: "100%", x: 0 },
25
+ transition: { duration: 0.2, ease: "easeInOut", delay: a ? 0 : 0.4 },
26
+ className: "gf-block gf-h-px gf-origin-center gf-overflow-hidden gf-rounded-full gf-bg-primaryIris"
27
+ }
28
+ ),
29
+ /* @__PURE__ */ e(
30
+ f.span,
31
+ {
32
+ animate: a ? { y: -4, rotate: -45 } : { y: 0, rotate: 0 },
33
+ transition: {
34
+ duration: 0.3,
35
+ ease: "easeInOut",
36
+ y: { delay: a ? 0.1 : 0.2 },
37
+ rotate: { delay: a ? 0.2 : 0.1 }
38
+ },
39
+ className: "gf-block gf-h-px gf-w-full gf-origin-center gf-overflow-hidden gf-rounded-full gf-bg-primaryIris"
40
+ }
41
+ )
42
+ ]
43
+ }
44
+ );
45
+ export {
46
+ o as HamburgerIcon
47
+ };
@@ -0,0 +1,22 @@
1
+ import { ReactNode } from 'react';
2
+
3
+ type Side = "top" | "right" | "bottom" | "left";
4
+ export type InfoTooltipProps = {
5
+ /** The element that opens the tooltip on hover/focus. */
6
+ trigger: ReactNode;
7
+ /** Tooltip body — typically a short description and a few label/value rows. */
8
+ children: ReactNode;
9
+ side?: Side;
10
+ delayDuration?: number;
11
+ className?: string;
12
+ };
13
+ /**
14
+ * Dashboard-standard rich tooltip — white pill with a soft drop-shadow and a
15
+ * rotated rounded-square notch. Radix's `Arrow` primitive handles positioning
16
+ * so the notch always points at the trigger, even after collision flips/shifts.
17
+ * Notch offset adapts to Radix's actual rendered side (read from `data-side`),
18
+ * so collision-flipped tooltips stay aligned. Collides against `<main>` so it
19
+ * never extends over the sidebar.
20
+ */
21
+ export declare const InfoTooltip: ({ trigger, children, side, delayDuration, className, }: InfoTooltipProps) => import("react/jsx-runtime").JSX.Element;
22
+ export {};
@@ -0,0 +1,2 @@
1
+ export { InfoTooltip } from './InfoTooltip';
2
+ export type { InfoTooltipProps } from './InfoTooltip';
@@ -0,0 +1,81 @@
1
+ import { jsx as f, jsxs as m } from "react/jsx-runtime";
2
+ import { useState as u, useEffect as d, useRef as b } from "react";
3
+ import { Provider as h, Root as x, Trigger as v, Content as y } from "../node_modules/@radix-ui/react-tooltip/dist/index.js";
4
+ import { cn as p } from "../utils/index.js";
5
+ const w = {
6
+ top: "gf-left-1/2 -gf-ml-1.5 -gf-bottom-1",
7
+ bottom: "gf-left-1/2 -gf-ml-1.5 -gf-top-1",
8
+ left: "gf-top-1/2 -gf-mt-1.5 -gf-right-1",
9
+ right: "gf-top-1/2 -gf-mt-1.5 -gf-left-1"
10
+ }, O = ({ side: r, className: i, children: a, collisionBoundary: g }) => {
11
+ const n = b(null), [c, l] = u(r);
12
+ return d(() => {
13
+ const t = n.current;
14
+ if (!t) return;
15
+ const o = () => {
16
+ const s = t.getAttribute("data-side");
17
+ s && l(s);
18
+ };
19
+ o();
20
+ const e = new MutationObserver(o);
21
+ return e.observe(t, { attributes: !0, attributeFilter: ["data-side"] }), () => e.disconnect();
22
+ }, []), /* @__PURE__ */ m(
23
+ y,
24
+ {
25
+ ref: n,
26
+ side: r,
27
+ sideOffset: 10,
28
+ collisionPadding: 12,
29
+ collisionBoundary: g ?? void 0,
30
+ className: p(
31
+ "gf-relative gf-max-w-[260px] gf-rounded-2xl gf-bg-white gf-px-4 gf-py-3 gf-border-0 gf-overflow-visible",
32
+ "gf-shadow-[0_4px_12px_-4px_rgba(85,75,106,0.14)]",
33
+ "gf-text-primaryIris",
34
+ i
35
+ ),
36
+ children: [
37
+ a,
38
+ /* @__PURE__ */ f(
39
+ "span",
40
+ {
41
+ "aria-hidden": !0,
42
+ className: p(
43
+ "gf-absolute gf-block gf-h-3 gf-w-3 gf-rotate-45 gf-rounded-[3px] gf-bg-white",
44
+ w[c]
45
+ )
46
+ }
47
+ )
48
+ ]
49
+ }
50
+ );
51
+ }, B = ({
52
+ trigger: r,
53
+ children: i,
54
+ side: a = "top",
55
+ delayDuration: g = 150,
56
+ className: n
57
+ }) => {
58
+ const [c, l] = u(null), [t, o] = u(!1);
59
+ return d(() => {
60
+ l(document.querySelector("main"));
61
+ }, []), d(() => {
62
+ if (!t) return;
63
+ const e = () => o(!1);
64
+ return document.addEventListener("touchstart", e, { passive: !0 }), () => document.removeEventListener("touchstart", e);
65
+ }, [t]), /* @__PURE__ */ f(h, { delayDuration: g, children: /* @__PURE__ */ m(x, { open: t, onOpenChange: o, children: [
66
+ /* @__PURE__ */ f(
67
+ v,
68
+ {
69
+ asChild: !0,
70
+ onTouchStart: (e) => {
71
+ e.stopPropagation(), o((s) => !s);
72
+ },
73
+ children: r
74
+ }
75
+ ),
76
+ /* @__PURE__ */ f(O, { side: a, className: n, collisionBoundary: c, children: i })
77
+ ] }) });
78
+ };
79
+ export {
80
+ B as InfoTooltip
81
+ };
@@ -0,0 +1,19 @@
1
+ import { ReactNode } from 'react';
2
+ import { SizeVariants, WeightVariants } from '../Typography/Typography';
3
+
4
+ export type InputProps = Omit<React.ComponentProps<"input">, "size"> & {
5
+ label?: ReactNode;
6
+ labelSize?: SizeVariants;
7
+ labelWeight?: WeightVariants;
8
+ hint?: ReactNode;
9
+ optional?: boolean;
10
+ helperText?: ReactNode;
11
+ error?: boolean;
12
+ passwordToggle?: boolean;
13
+ copyable?: boolean;
14
+ adornmentRight?: ReactNode;
15
+ adornmentLeft?: ReactNode;
16
+ containerClassName?: string;
17
+ };
18
+ /** Text input with optional label, helper text, error state, password toggle, and copy button. */
19
+ export declare const Input: import('react').ForwardRefExoticComponent<Omit<InputProps, "ref"> & import('react').RefAttributes<HTMLInputElement>>;
@@ -0,0 +1,2 @@
1
+ export { Input } from './Input';
2
+ export type { InputProps } from './Input';
@@ -0,0 +1,113 @@
1
+ import { jsxs as r, jsx as e } from "react/jsx-runtime";
2
+ import { forwardRef as S, useState as I } from "react";
3
+ import { Typography as s } from "../Typography/index.js";
4
+ import { CopyIcon as T } from "../Icons/CopyIcon.js";
5
+ import { CheckIcon as H } from "../Icons/CheckIcon.js";
6
+ import { cn as f } from "../utils/index.js";
7
+ import q from "../node_modules/lucide-react/dist/esm/icons/eye-off.js";
8
+ import A from "../node_modules/lucide-react/dist/esm/icons/eye.js";
9
+ const X = S(function({
10
+ label: i,
11
+ labelSize: g = "h5",
12
+ labelWeight: C = "medium",
13
+ hint: l,
14
+ optional: v,
15
+ helperText: n,
16
+ error: m,
17
+ passwordToggle: E,
18
+ copyable: p,
19
+ adornmentLeft: d,
20
+ adornmentRight: h,
21
+ containerClassName: k,
22
+ className: b,
23
+ type: x,
24
+ disabled: y,
25
+ value: o,
26
+ ...j
27
+ }, G) {
28
+ const [a, P] = I(!1), [z, u] = I(!1), c = E && x === "password", O = c && a ? "text" : x, w = c || p || h ? /* @__PURE__ */ r("div", { className: "gf-flex gf-items-center gf-gap-1.5", children: [
29
+ c && /* @__PURE__ */ e(
30
+ "button",
31
+ {
32
+ type: "button",
33
+ onClick: () => P((t) => !t),
34
+ className: "gf-flex gf-items-center gf-justify-center",
35
+ title: a ? "Hide" : "Show",
36
+ tabIndex: -1,
37
+ children: a ? /* @__PURE__ */ e(q, { className: "gf-h-4 gf-w-4 gf-text-primaryIris" }) : /* @__PURE__ */ e(A, { className: "gf-h-4 gf-w-4 gf-text-primaryIris" })
38
+ }
39
+ ),
40
+ p && /* @__PURE__ */ e(
41
+ "button",
42
+ {
43
+ type: "button",
44
+ onClick: async () => {
45
+ const t = o == null ? "" : String(o);
46
+ if (t)
47
+ try {
48
+ await navigator.clipboard.writeText(t), u(!0), setTimeout(() => u(!1), 1500);
49
+ } catch {
50
+ }
51
+ },
52
+ className: "gf-flex gf-items-center gf-justify-center",
53
+ title: "Copy",
54
+ tabIndex: -1,
55
+ children: z ? /* @__PURE__ */ e(H, { className: "gf-h-4 gf-w-4 gf-text-primaryIris" }) : /* @__PURE__ */ e(T, { className: "gf-h-4 gf-w-4 gf-text-primaryIris" })
56
+ }
57
+ ),
58
+ h
59
+ ] }) : null, N = /* @__PURE__ */ r(
60
+ "div",
61
+ {
62
+ className: f(
63
+ "gf-flex gf-items-center gf-gap-1.5 gf-bg-white/50 gf-rounded-xl gf-px-4 gf-py-2.5",
64
+ y && "gf-opacity-50 gf-cursor-not-allowed",
65
+ m && "gf-ring-1 gf-ring-primaryError"
66
+ ),
67
+ children: [
68
+ d && /* @__PURE__ */ e("div", { className: "gf-flex gf-items-center gf-shrink-0 gf-pointer-events-none", children: d }),
69
+ /* @__PURE__ */ e(
70
+ "input",
71
+ {
72
+ ref: G,
73
+ type: O,
74
+ disabled: y,
75
+ value: o,
76
+ ...j,
77
+ className: f(
78
+ "gf-flex-1 gf-min-w-0 gf-text-sm gf-text-primaryIris gf-bg-transparent",
79
+ "placeholder:gf-text-midGrey",
80
+ "focus:gf-outline-none",
81
+ "disabled:gf-cursor-not-allowed",
82
+ b
83
+ )
84
+ }
85
+ ),
86
+ w && /* @__PURE__ */ e("div", { className: "gf-flex gf-items-center gf-shrink-0", children: w })
87
+ ]
88
+ }
89
+ );
90
+ return !i && !n ? N : /* @__PURE__ */ r("div", { className: f("gf-flex gf-flex-col gf-gap-1.5", k), children: [
91
+ i && /* @__PURE__ */ r("div", { className: "gf-flex gf-items-center gf-gap-1.5 gf-pl-1.5", children: [
92
+ /* @__PURE__ */ e(s, { size: g, weight: C, children: i }),
93
+ v && /* @__PURE__ */ e(s, { size: g, weight: "regular", className: "gf-text-midGrey", children: "Optional" }),
94
+ l && /* @__PURE__ */ e(s, { size: g, weight: "regular", className: "gf-text-midGrey", children: l })
95
+ ] }),
96
+ N,
97
+ n && /* @__PURE__ */ e(
98
+ s,
99
+ {
100
+ size: "h5",
101
+ weight: "regular",
102
+ className: f(
103
+ "gf-pl-2",
104
+ m ? "gf-text-primaryError" : "gf-text-midGrey"
105
+ ),
106
+ children: n
107
+ }
108
+ )
109
+ ] });
110
+ });
111
+ export {
112
+ X as Input
113
+ };
@@ -35,4 +35,3 @@ export { GardenLogoMarkDark } from './GardenLogoMarkDark';
35
35
  export { GardenLogoMarkLight } from './GardenLogoMarkLight';
36
36
  export { GardenLogoDark } from './GardenLogoDark';
37
37
  export { GardenLogoLight } from './GardenLogoLight';
38
- export { Code4renaLogo } from './Code4renaLogo';