@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.
- package/dist/BulletList/BulletList.d.ts +21 -0
- package/dist/BulletList/index.d.ts +2 -0
- package/dist/BulletList/index.js +31 -0
- package/dist/CardList/CardList.d.ts +32 -0
- package/dist/CardList/index.d.ts +2 -0
- package/dist/CardList/index.js +141 -0
- package/dist/Checkbox/Checkbox.js +7 -0
- package/dist/Checkbox/RadixCheckbox.d.ts +3 -0
- package/dist/Checkbox/RadixCheckbox.js +27 -0
- package/dist/Checkbox/index.d.ts +1 -0
- package/dist/Checkbox/index.js +4 -5
- package/dist/DashboardLayout/DashboardLayout.d.ts +23 -0
- package/dist/DashboardLayout/DashboardNavbar.d.ts +11 -0
- package/dist/DashboardLayout/DashboardNavbar.js +32 -0
- package/dist/DashboardLayout/DashboardSidebar.d.ts +30 -0
- package/dist/DashboardLayout/DashboardSidebar.js +139 -0
- package/dist/DashboardLayout/MobileMenu.d.ts +11 -0
- package/dist/DashboardLayout/MobileMenu.js +126 -0
- package/dist/DashboardLayout/PageHeader.d.ts +13 -0
- package/dist/DashboardLayout/PageHeader.js +47 -0
- package/dist/DashboardLayout/index.d.ts +10 -0
- package/dist/DashboardLayout/index.js +93 -0
- package/dist/DataTable/DataTable.d.ts +50 -0
- package/dist/DataTable/Table.d.ts +7 -0
- package/dist/DataTable/Table.js +57 -0
- package/dist/DataTable/index.d.ts +2 -0
- package/dist/DataTable/index.js +269 -0
- package/dist/DataTable/useAnimatedTable.d.ts +8 -0
- package/dist/DataTable/useAnimatedTable.js +44 -0
- package/dist/DirectionalIconHover/DirectionalIconHover.d.ts +12 -0
- package/dist/DirectionalIconHover/index.d.ts +2 -0
- package/dist/DirectionalIconHover/index.js +72 -0
- package/dist/EmptyState/EmptyState.d.ts +20 -0
- package/dist/EmptyState/index.d.ts +2 -0
- package/dist/EmptyState/index.js +35 -0
- package/dist/ErrorState/ErrorState.d.ts +17 -0
- package/dist/ErrorState/errorMessages.d.ts +2 -0
- package/dist/ErrorState/errorMessages.js +13 -0
- package/dist/ErrorState/index.d.ts +2 -0
- package/dist/ErrorState/index.js +37 -0
- package/dist/Field/Field.d.ts +14 -0
- package/dist/Field/index.d.ts +2 -0
- package/dist/Field/index.js +14 -0
- package/dist/HamburgerIcon/HamburgerIcon.d.ts +5 -0
- package/dist/HamburgerIcon/index.d.ts +2 -0
- package/dist/HamburgerIcon/index.js +47 -0
- package/dist/InfoTooltip/InfoTooltip.d.ts +22 -0
- package/dist/InfoTooltip/index.d.ts +2 -0
- package/dist/InfoTooltip/index.js +81 -0
- package/dist/Input/Input.d.ts +19 -0
- package/dist/Input/index.d.ts +2 -0
- package/dist/Input/index.js +113 -0
- package/dist/Logo/index.d.ts +0 -1
- package/dist/Logo/index.js +8 -10
- package/dist/OTPInput/OTPInput.d.ts +11 -0
- package/dist/OTPInput/index.d.ts +2 -0
- package/dist/OTPInput/index.js +88 -0
- package/dist/Pagination/Pagination.d.ts +16 -0
- package/dist/Pagination/index.d.ts +2 -0
- package/dist/Pagination/index.js +111 -0
- package/dist/Portal/Portal.d.ts +8 -0
- package/dist/Portal/index.d.ts +2 -0
- package/dist/Portal/index.js +11 -0
- package/dist/ResponsiveModal/ResponsiveModal.d.ts +14 -0
- package/dist/ResponsiveModal/index.d.ts +2 -0
- package/dist/ResponsiveModal/index.js +62 -0
- package/dist/SelectDropdown/SelectDropdown.d.ts +41 -0
- package/dist/SelectDropdown/index.d.ts +2 -0
- package/dist/SelectDropdown/index.js +195 -0
- package/dist/Skeleton/Skeleton.d.ts +3 -0
- package/dist/Skeleton/index.d.ts +2 -0
- package/dist/Skeleton/index.js +12 -0
- package/dist/StatCard/StatCard.d.ts +20 -0
- package/dist/StatCard/index.d.ts +2 -0
- package/dist/StatCard/index.js +42 -0
- package/dist/StateContainer/StateContainer.d.ts +8 -0
- package/dist/StateContainer/index.d.ts +2 -0
- package/dist/StateContainer/index.js +15 -0
- package/dist/StatusChip/StatusChip.d.ts +11 -0
- package/dist/StatusChip/index.d.ts +2 -0
- package/dist/StatusChip/index.js +33 -0
- package/dist/Switch/Switch.d.ts +3 -0
- package/dist/Switch/index.d.ts +1 -0
- package/dist/Switch/index.js +31 -0
- package/dist/Toast/Toast.d.ts +15 -0
- package/dist/Toast/Toast.js +93 -0
- package/dist/Toast/Toaster.d.ts +5 -0
- package/dist/Toast/Toaster.js +30 -0
- package/dist/Toast/index.d.ts +5 -0
- package/dist/Toast/index.js +16 -0
- package/dist/Toast/useToast.d.ts +46 -0
- package/dist/Toast/useToast.js +76 -0
- package/dist/ToggleGroup/ToggleGroup.d.ts +15 -0
- package/dist/ToggleGroup/index.d.ts +2 -0
- package/dist/ToggleGroup/index.js +57 -0
- package/dist/Typography/Typography.d.ts +2 -2
- package/dist/Viewport/Viewport.d.ts +11 -0
- package/dist/Viewport/index.d.ts +2 -0
- package/dist/Viewport/index.js +7 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.js +386 -314
- package/dist/node_modules/@floating-ui/core/dist/floating-ui.core.js +532 -0
- package/dist/node_modules/@floating-ui/dom/dist/floating-ui.dom.js +403 -0
- package/dist/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.js +232 -0
- package/dist/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.js +136 -0
- package/dist/node_modules/@floating-ui/utils/dist/floating-ui.utils.js +128 -0
- package/dist/node_modules/@radix-ui/react-arrow/dist/index.js +24 -0
- package/dist/node_modules/@radix-ui/react-checkbox/dist/index.js +251 -0
- package/dist/node_modules/@radix-ui/react-collection/dist/index.js +48 -0
- package/dist/node_modules/@radix-ui/{react-slot → react-collection/node_modules/@radix-ui/react-slot}/dist/index.js +1 -1
- package/dist/node_modules/@radix-ui/react-dialog/dist/index.js +1 -1
- package/dist/node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot/dist/index.js +50 -0
- package/dist/node_modules/@radix-ui/react-direction/dist/index.js +10 -0
- package/dist/node_modules/@radix-ui/react-dismissable-layer/dist/index.js +29 -26
- package/dist/node_modules/@radix-ui/react-dropdown-menu/dist/index.js +208 -0
- package/dist/node_modules/@radix-ui/react-menu/dist/index.js +624 -0
- package/dist/node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-slot/dist/index.js +50 -0
- package/dist/node_modules/@radix-ui/react-popper/dist/index.js +221 -0
- package/dist/node_modules/@radix-ui/react-primitive/dist/index.js +1 -1
- package/dist/node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-slot/dist/index.js +50 -0
- package/dist/node_modules/@radix-ui/react-roving-focus/dist/index.js +183 -0
- package/dist/node_modules/@radix-ui/react-switch/dist/index.js +132 -0
- package/dist/node_modules/@radix-ui/react-toast/dist/index.js +446 -0
- package/dist/node_modules/@radix-ui/react-tooltip/dist/index.js +330 -0
- package/dist/node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-slot/dist/index.js +11 -0
- package/dist/node_modules/@radix-ui/react-use-previous/dist/index.js +8 -0
- package/dist/node_modules/@radix-ui/react-use-size/dist/index.js +27 -0
- package/dist/node_modules/@radix-ui/react-visually-hidden/dist/index.js +32 -0
- package/dist/node_modules/lucide-react/dist/esm/Icon.js +40 -0
- package/dist/node_modules/lucide-react/dist/esm/createLucideIcon.js +23 -0
- package/dist/node_modules/lucide-react/dist/esm/defaultAttributes.js +20 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/arrow-down.js +14 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/arrow-up-down.js +16 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/arrow-up.js +14 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/check.js +11 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-down.js +13 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.js +11 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-alert.js +15 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/eye-off.js +28 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/eye.js +20 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/log-out.js +15 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/x.js +14 -0
- package/dist/node_modules/lucide-react/dist/esm/shared/src/utils.js +11 -0
- package/dist/style.css +1 -1
- package/package.json +12 -3
- package/dist/Logo/Code4renaLogo.d.ts +0 -5
- 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,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,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,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,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,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,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,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,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
|
+
};
|
package/dist/Logo/index.d.ts
CHANGED
|
@@ -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';
|