@kloudlite/design-system
Version:
A design system for building ambitious products.
1,478 lines (1,467 loc) • 57.5 kB
JavaScript
// components/icons.tsx
import {
BellSimple,
Warning,
WarningCircleFill,
Domain,
ArrowLeftLg,
ArrowRightLg,
ArrowUpLg,
ArrowDownLg,
ArrowsDownUp,
Plus,
Trash,
PencilLine,
PencilSimple,
GithubLogoFill,
GitlabLogoFill,
GitBranchFill,
Users,
Check,
ChevronLeft,
ChevronRight,
X,
SmileySad,
InfoFill,
CheckCircleFill,
WarningFill,
WarningOctagonFill,
LockSimple,
XCircleFill,
LockSimpleOpen,
MinusCircle,
Search,
ArrowsCounterClockwise,
ArrowClockwise,
Copy,
GearSix,
QrCode,
WireGuardlogo,
ChevronUpDown,
ChevronDown,
Buildings,
Project,
InfraAsCode,
Container,
File,
TreeStructure,
CirclesFour,
BackingServices,
VirtualMachine,
Database,
ArrowsClockwise,
Info,
Fan,
WarningCircle,
ChecksFill,
CircleNotch,
Circle,
CircleFill,
Spinner,
Globe,
ShieldCheck,
NoOps,
Nodeless,
GitMerge,
PencilLine as PencilLine2,
AWSlogoFill,
GoogleCloudlogo,
ArrowCounterClockwise,
CopySimple,
RecordFill,
CheckCircle,
ArrowLeftLg as ArrowLeftLg2,
EyeSlash,
Eye,
CaretUpFill,
CaretDownFill,
XFill,
HamburgerFill,
CalendarCheckFill,
GearFill,
EnvelopeSimple
} from "@jengaicons/react";
import { jsx } from "react/jsx-runtime";
// components/organisms/headerV2.tsx
import { useRef as useRef4, useState as useState4 } from "react";
// components/atoms/button.tsx
import { AnimatePresence, motion } from "framer-motion";
import React from "react";
// components/utils.tsx
import classNames from "classnames";
import { useMemo } from "react";
import { v4 } from "uuid";
var cn = (...props) => {
return classNames(...props);
};
// components/atoms/button.tsx
import { jsx as jsx2, jsxs } from "react/jsx-runtime";
var ButtonBase = React.forwardRef((props, ref) => {
const {
onClick = () => {
},
to = "",
linkComponent = motion.button,
disabled = false,
suffix,
prefix,
block = false,
type = "button",
variant = "primary",
// noRing,
noRounded = false,
noBorder = false,
sharpLeft = false,
sharpRight = false,
selected = false,
iconOnly = false,
className = "",
content,
size = "md",
loading = false,
tabIndex,
toLabel = "to",
target,
iconSize,
...mprops
} = props;
let Component = linkComponent;
let tempToLabel = toLabel;
let extraProps = {};
if (to) {
if (linkComponent === motion.button) {
Component = motion.a;
tempToLabel = "href";
} else {
Component = linkComponent;
}
}
if (Component === motion.button || Component === motion.a) {
extraProps = {
initial: { scale: 1 },
whileTap: { scale: 0.99 }
};
}
const noRing = false;
return /* @__PURE__ */ jsxs(
Component,
{
...mprops,
...{ [tempToLabel]: to },
disabled,
onClick,
...extraProps,
ref,
type,
tabIndex,
target,
className: cn(
"pulsable kl-flex-nowrap",
{
"kl-w-full": !!block,
"kl-w-fit": !block,
selected
},
{
"kl-pointer-events-none": loading
},
{
"kl-bodyMd-medium": !variant?.includes("plain"),
"kl-bodyMd": variant?.includes("plain")
},
{
"kl-pointer-events-none !kl-text-text-disabled kl-bg-surface-basic-disabled": disabled,
"!kl-border-border-disabled": disabled && ![
"plain",
"primary-plain",
"critical-plain",
"secondary-plain"
].includes(variant)
},
"kl-relative kl-ring-offset-1",
"kl-outline-none",
"kl-flex kl-flex-row kl-gap-lg kl-items-center kl-justify-center",
"disabled:kl-text-text-disabled disabled:kl-bg-surface-basic-disabled",
{
// noRing
"focus-visible:kl-ring-2 focus:kl-ring-border-focus focus:kl-z-10": !noRing
},
{
...!noRounded && {
"kl-rounded-none": sharpLeft && sharpRight,
"kl-rounded-r": sharpLeft && !sharpRight,
"kl-rounded-l": !sharpLeft && sharpRight,
"kl-rounded": !sharpLeft && !sharpRight
}
},
"disabled:kl-pointer-events-none",
{
"kl-border-none": noBorder,
...!noBorder && {
"kl-border-border-default disabled:kl-border-border-disabled": variant === "basic" || variant === "outline" || variant === "secondary-outline",
"kl-border-border-primary disabled:kl-border-border-disabled": variant === "primary" || variant === "primary-outline",
"kl-border-border-secondary disabled:kl-border-border-disabled": variant === "secondary",
"kl-border-border-critical disabled:kl-border-border-disabled": variant === "critical-outline" || variant === "critical",
"kl-border-border-purple": variant === "purple",
"kl-border-border-warning": variant === "warning",
"kl-border-border-tertiary": variant === "tertiary",
"kl-border-none": variant === "plain" || variant === "primary-plain" || variant === "critical-plain" || variant === "secondary-plain",
"kl-border": !(variant === "plain" || variant === "primary-plain" || variant === "critical-plain" || variant === "secondary-plain")
}
},
!disabled ? {
"kl-bg-surface-basic-default hover:kl-bg-surface-basic-hovered active:kl-bg-surface-basic-pressed disabled:kl-bg-surface-basic-default": variant === "basic" && !selected,
"kl-bg-surface-basic-pressed hover:kl-bg-surface-basic-pressed active:kl-bg-surface-basic-pressed disabled:kl-bg-surface-basic-default": variant === "basic" && selected,
"kl-bg-surface-primary-default hover:kl-bg-surface-primary-hovered active:kl-bg-surface-primary-pressed disabled:kl-bg-surface-basic-default": variant === "primary",
"kl-bg-surface-secondary-default hover:kl-bg-surface-secondary-hovered active:kl-bg-surface-secondary-pressed disabled:kl-bg-surface-basic-default": variant === "secondary",
"kl-bg-surface-critical-default hover:kl-bg-surface-critical-hovered active:kl-bg-surface-critical-pressed disabled:kl-bg-surface-basic-default": variant === "critical",
"kl-bg-none hover:kl-bg-surface-critical-subdued active:kl-bg-surface-critical-subdued": variant === "critical-outline",
"kl-bg-none hover:kl-bg-surface-primary-subdued active:kl-bg-surface-primary-subdued": variant === "primary-outline",
"kl-bg-none hover:kl-bg-surface-secondary-subdued active:kl-bg-surface-secondary-subdued": variant === "secondary-outline",
"kl-bg-none hover:kl-bg-surface-basic-hovered active:kl-bg-surface-basic-pressed": variant === "outline",
"kl-bg-surface-basic-pressed kl-shadow-none hover:kl-bg-surface-basic-hovered active:kl-bg-surface-basic-pressed hover:kl-shadow-button": variant === "outline" && selected,
"kl-bg-none kl-shadow-none": (variant === "plain" || variant === "primary-plain" || variant === "secondary-plain" || variant === "critical-plain") && !iconOnly,
"kl-shadow-none active:kl-shadow-button kl-bg-surface-basic-pressed": variant === "plain" && !iconOnly && selected,
"kl-bg-none kl-shadow-none hover:kl-bg-surface-basic-hovered active:kl-bg-surface-basic-pressed active:kl-shadow-button active:kl-shadow-button": variant === "plain" && iconOnly,
"kl-bg-surface-basic-pressed kl-shadow-none hover:kl-bg-surface-basic-hovered active:kl-bg-surface-basic-pressed active:kl-shadow-button": variant === "plain" && iconOnly && selected,
"kl-bg-surface-purple-default hover:kl-bg-surface-purple-hovered active:kl-bg-surface-purple-pressed": variant === "purple",
"kl-bg-surface-tertiary-default hover:kl-bg-surface-tertiary-hovered active:kl-bg-surface-tertiary-pressed": variant === "tertiary",
"kl-bg-surface-warning-default hover:kl-bg-surface-warning-hovered active:kl-bg-surface-warning-pressed": variant === "warning"
} : {},
{
"kl-text-text-default": variant === "basic" || variant === "plain" || variant === "outline",
"kl-text-text-on-primary": variant === "primary" || variant === "critical" || variant === "secondary" || variant === "secondary-outline" || variant === "purple" || variant === "warning",
"kl-text-text-critical": variant === "critical-outline" || variant === "critical-plain",
"kl-text-text-primary": variant === "primary-outline" || variant === "primary-plain",
"kl-text-text-secondary": variant === "secondary-plain",
"kl-text-text-on-secondary": variant === "tertiary"
},
{
"focus:kl-underline": noRing
},
{
"hover:kl-underline": variant === "plain" || variant === "primary-plain" || variant === "critical-plain" || variant === "secondary-plain"
},
{
// icon
...!iconOnly && !(variant === "plain" || variant === "primary-plain" || variant === "critical-plain" || variant === "secondary-plain") && {
"kl-py-md kl-px-lg": size === "sm",
"kl-py-lg kl-px-2xl": size === "md",
"kl-py-xl kl-px-4xl": size === "lg",
"kl-py-2xl kl-px-6xl": size === "xl",
"kl-py-2xl kl-px-9xl": size === "2xl"
}
},
{
...!iconOnly && (variant === "plain" || variant === "primary-plain" || variant === "critical-plain" || variant === "secondary-plain") && {
"kl-px-md kl-py-sm": size === "sm",
"kl-py-sm kl-px-md": size === "md",
"kl-py-md kl-px-lg": size === "lg"
}
},
{
"kl-p-lg !kl-h-[36px] !kl-w-[36px]": iconOnly && (size === "md" || size === "lg"),
"kl-p-md": iconOnly && size === "sm",
"kl-p-sm": iconOnly && size === "xs"
},
className
),
children: [
/* @__PURE__ */ jsx2(AnimatePresence, { children: loading && /* @__PURE__ */ jsx2(
motion.span,
{
initial: { width: 0 },
animate: { width: "auto", paddingRight: 0 },
exit: { width: 0 },
className: cn(
"kl-flex kl-items-center kl-justify-center kl-aspect-square kl-overflow-hidden"
),
children: /* @__PURE__ */ jsx2("span", { className: cn("kl-animate-spin"), children: /* @__PURE__ */ jsx2(Spinner, { color: "currentColor", weight: 2, size: 18 }) })
}
) }),
!!prefix && React.cloneElement(prefix, {
size: iconSize || (iconOnly && size === "lg" ? 20 : 16),
color: "currentColor"
}),
!iconOnly && /* @__PURE__ */ jsx2("span", { className: cn("kl-block kl-truncate"), children: content }),
!!suffix && React.cloneElement(suffix, {
size: iconSize || 16,
color: "currentColor"
})
]
}
);
});
var IconButton = React.forwardRef(
(props, ref) => {
const { icon, block } = props;
return /* @__PURE__ */ jsx2(
ButtonBase,
{
...props,
ref,
iconOnly: true,
content: null,
prefix: icon,
block: !!block
}
);
}
);
var Button = React.forwardRef(
(props, ref) => {
const { block } = props;
return /* @__PURE__ */ jsx2(ButtonBase, { ...props, iconOnly: false, ref, block: !!block });
}
);
// components/atoms/option-list.tsx
import { motion as motion4 } from "framer-motion";
import {
Children,
cloneElement as cloneElement2,
forwardRef as forwardRef4,
useEffect,
useRef as useRef3,
useState as useState3
} from "react";
// components/atoms/_dropdown-primitive.tsx
import * as React2 from "react";
import { composeEventHandlers } from "@radix-ui/primitive";
import { composeRefs } from "@radix-ui/react-compose-refs";
import { createContextScope } from "@radix-ui/react-context";
import { useControllableState } from "@radix-ui/react-use-controllable-state";
import { Primitive } from "@radix-ui/react-primitive";
import * as MenuPrimitive from "@radix-ui/react-menu";
import { createMenuScope } from "@radix-ui/react-menu";
import { useId } from "@radix-ui/react-id";
import { jsx as jsx3 } from "react/jsx-runtime";
var DROPDOWN_MENU_NAME = "DropdownMenu";
var [createDropdownMenuContext, createDropdownMenuScope] = createContextScope(
DROPDOWN_MENU_NAME,
[createMenuScope]
);
var useMenuScope = createMenuScope();
var [DropdownMenuProvider, useDropdownMenuContext] = createDropdownMenuContext(DROPDOWN_MENU_NAME);
var DropdownMenu = (props) => {
const {
__scopeDropdownMenu,
children,
dir,
open: openProp,
defaultOpen,
onOpenChange,
modal = true
} = props;
const menuScope = useMenuScope(__scopeDropdownMenu);
const triggerRef = React2.useRef(null);
const [open = false, setOpen] = useControllableState({
prop: openProp,
defaultProp: defaultOpen,
onChange: onOpenChange
});
return /* @__PURE__ */ jsx3(
DropdownMenuProvider,
{
scope: __scopeDropdownMenu,
triggerId: useId(),
triggerRef,
contentId: useId(),
open,
onOpenChange: setOpen,
onOpenToggle: React2.useCallback(
() => setOpen((prevOpen) => !prevOpen),
[setOpen]
),
modal,
children: /* @__PURE__ */ jsx3(
MenuPrimitive.Root,
{
...menuScope,
open,
onOpenChange: setOpen,
dir,
modal,
children
}
)
}
);
};
DropdownMenu.displayName = DROPDOWN_MENU_NAME;
var TRIGGER_NAME = "DropdownMenuTrigger";
var DropdownMenuTrigger = React2.forwardRef((props, forwardedRef) => {
const { __scopeDropdownMenu, disabled = false, ...triggerProps } = props;
const context = useDropdownMenuContext(TRIGGER_NAME, __scopeDropdownMenu);
const menuScope = useMenuScope(__scopeDropdownMenu);
return /* @__PURE__ */ jsx3(MenuPrimitive.Anchor, { asChild: true, ...menuScope, children: /* @__PURE__ */ jsx3(
Primitive.button,
{
type: "button",
id: context.triggerId,
"aria-haspopup": "menu",
"aria-expanded": context.open,
"aria-controls": context.open ? context.contentId : void 0,
"data-state": context.open ? "open" : "closed",
"data-disabled": disabled ? "" : void 0,
disabled,
...triggerProps,
ref: composeRefs(forwardedRef, context.triggerRef),
onPointerDown: composeEventHandlers(props.onPointerDown, (event) => {
if (!disabled && event.button === 0 && event.ctrlKey === false) {
context.onOpenToggle();
if (!context.open)
event.preventDefault();
}
}),
onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {
if (disabled)
return;
if (["Enter", " "].includes(event.key))
context.onOpenToggle();
if (event.key === "ArrowDown")
context.onOpenChange(true);
if (["Enter", " ", "ArrowDown"].includes(event.key))
event.preventDefault();
})
}
) });
});
DropdownMenuTrigger.displayName = TRIGGER_NAME;
var PORTAL_NAME = "DropdownMenuPortal";
var DropdownMenuPortal = (props) => {
const { __scopeDropdownMenu, ...portalProps } = props;
const menuScope = useMenuScope(__scopeDropdownMenu);
return /* @__PURE__ */ jsx3(MenuPrimitive.Portal, { ...menuScope, ...portalProps });
};
DropdownMenuPortal.displayName = PORTAL_NAME;
var CONTENT_NAME = "DropdownMenuContent";
var DropdownMenuContent = React2.forwardRef((props, forwardedRef) => {
const { __scopeDropdownMenu, ...contentProps } = props;
const context = useDropdownMenuContext(CONTENT_NAME, __scopeDropdownMenu);
const menuScope = useMenuScope(__scopeDropdownMenu);
const hasInteractedOutsideRef = React2.useRef(false);
return /* @__PURE__ */ jsx3(
MenuPrimitive.Content,
{
id: context.contentId,
"aria-labelledby": context.triggerId,
...menuScope,
...contentProps,
ref: forwardedRef,
onCloseAutoFocus: composeEventHandlers(
props.onCloseAutoFocus,
(event) => {
if (!hasInteractedOutsideRef.current)
context.triggerRef.current?.focus();
hasInteractedOutsideRef.current = false;
event.preventDefault();
}
),
onInteractOutside: composeEventHandlers(
props.onInteractOutside,
(event) => {
const originalEvent = event.detail.originalEvent;
const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;
const isRightClick = originalEvent.button === 2 || ctrlLeftClick;
if (!context.modal || isRightClick)
hasInteractedOutsideRef.current = true;
}
),
style: {
...props.style,
// re-namespace exposed content custom properties
...{
"--radix-dropdown-menu-content-transform-origin": "var(--radix-popper-transform-origin)",
"--radix-dropdown-menu-content-available-width": "var(--radix-popper-available-width)",
"--radix-dropdown-menu-content-available-height": "var(--radix-popper-available-height)",
"--radix-dropdown-menu-trigger-width": "var(--radix-popper-anchor-width)",
"--radix-dropdown-menu-trigger-height": "var(--radix-popper-anchor-height)"
}
}
}
);
});
DropdownMenuContent.displayName = CONTENT_NAME;
var GROUP_NAME = "DropdownMenuGroup";
var DropdownMenuGroup = React2.forwardRef((props, forwardedRef) => {
const { __scopeDropdownMenu, ...groupProps } = props;
const menuScope = useMenuScope(__scopeDropdownMenu);
return /* @__PURE__ */ jsx3(MenuPrimitive.Group, { ...menuScope, ...groupProps, ref: forwardedRef });
});
DropdownMenuGroup.displayName = GROUP_NAME;
var LABEL_NAME = "DropdownMenuLabel";
var DropdownMenuLabel = React2.forwardRef((props, forwardedRef) => {
const { __scopeDropdownMenu, ...labelProps } = props;
const menuScope = useMenuScope(__scopeDropdownMenu);
return /* @__PURE__ */ jsx3(MenuPrimitive.Label, { ...menuScope, ...labelProps, ref: forwardedRef });
});
DropdownMenuLabel.displayName = LABEL_NAME;
var ITEM_NAME = "DropdownMenuItem";
var DropdownMenuItem = React2.forwardRef((props, forwardedRef) => {
const { __scopeDropdownMenu, ...itemProps } = props;
const menuScope = useMenuScope(__scopeDropdownMenu);
return /* @__PURE__ */ jsx3(MenuPrimitive.Item, { ...menuScope, ...itemProps, ref: forwardedRef });
});
DropdownMenuItem.displayName = ITEM_NAME;
var CHECKBOX_ITEM_NAME = "DropdownMenuCheckboxItem";
var DropdownMenuCheckboxItem = React2.forwardRef((props, forwardedRef) => {
const { __scopeDropdownMenu, ...checkboxItemProps } = props;
const menuScope = useMenuScope(__scopeDropdownMenu);
return /* @__PURE__ */ jsx3(
MenuPrimitive.CheckboxItem,
{
...menuScope,
...checkboxItemProps,
ref: forwardedRef
}
);
});
DropdownMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;
var RADIO_GROUP_NAME = "DropdownMenuRadioGroup";
var DropdownMenuRadioGroup = React2.forwardRef((props, forwardedRef) => {
const { __scopeDropdownMenu, ...radioGroupProps } = props;
const menuScope = useMenuScope(__scopeDropdownMenu);
return /* @__PURE__ */ jsx3(
MenuPrimitive.RadioGroup,
{
...menuScope,
...radioGroupProps,
ref: forwardedRef
}
);
});
DropdownMenuRadioGroup.displayName = RADIO_GROUP_NAME;
var RADIO_ITEM_NAME = "DropdownMenuRadioItem";
var DropdownMenuRadioItem = React2.forwardRef((props, forwardedRef) => {
const { __scopeDropdownMenu, ...radioItemProps } = props;
const menuScope = useMenuScope(__scopeDropdownMenu);
return /* @__PURE__ */ jsx3(
MenuPrimitive.RadioItem,
{
...menuScope,
...radioItemProps,
ref: forwardedRef
}
);
});
DropdownMenuRadioItem.displayName = RADIO_ITEM_NAME;
var INDICATOR_NAME = "DropdownMenuItemIndicator";
var DropdownMenuItemIndicator = React2.forwardRef((props, forwardedRef) => {
const { __scopeDropdownMenu, ...itemIndicatorProps } = props;
const menuScope = useMenuScope(__scopeDropdownMenu);
return /* @__PURE__ */ jsx3(
MenuPrimitive.ItemIndicator,
{
...menuScope,
...itemIndicatorProps,
ref: forwardedRef
}
);
});
DropdownMenuItemIndicator.displayName = INDICATOR_NAME;
var SEPARATOR_NAME = "DropdownMenuSeparator";
var DropdownMenuSeparator = React2.forwardRef((props, forwardedRef) => {
const { __scopeDropdownMenu, ...separatorProps } = props;
const menuScope = useMenuScope(__scopeDropdownMenu);
return /* @__PURE__ */ jsx3(
MenuPrimitive.Separator,
{
...menuScope,
...separatorProps,
ref: forwardedRef
}
);
});
DropdownMenuSeparator.displayName = SEPARATOR_NAME;
var ARROW_NAME = "DropdownMenuArrow";
var DropdownMenuArrow = React2.forwardRef((props, forwardedRef) => {
const { __scopeDropdownMenu, ...arrowProps } = props;
const menuScope = useMenuScope(__scopeDropdownMenu);
return /* @__PURE__ */ jsx3(MenuPrimitive.Arrow, { ...menuScope, ...arrowProps, ref: forwardedRef });
});
DropdownMenuArrow.displayName = ARROW_NAME;
var SUB_TRIGGER_NAME = "DropdownMenuSubTrigger";
var DropdownMenuSubTrigger = React2.forwardRef((props, forwardedRef) => {
const { __scopeDropdownMenu, ...subTriggerProps } = props;
const menuScope = useMenuScope(__scopeDropdownMenu);
return /* @__PURE__ */ jsx3(
MenuPrimitive.SubTrigger,
{
...menuScope,
...subTriggerProps,
ref: forwardedRef
}
);
});
DropdownMenuSubTrigger.displayName = SUB_TRIGGER_NAME;
var SUB_CONTENT_NAME = "DropdownMenuSubContent";
var DropdownMenuSubContent = React2.forwardRef((props, forwardedRef) => {
const { __scopeDropdownMenu, ...subContentProps } = props;
const menuScope = useMenuScope(__scopeDropdownMenu);
return /* @__PURE__ */ jsx3(
MenuPrimitive.SubContent,
{
...menuScope,
...subContentProps,
ref: forwardedRef,
style: {
...props.style,
// re-namespace exposed content custom properties
...{
"--radix-dropdown-menu-content-transform-origin": "var(--radix-popper-transform-origin)",
"--radix-dropdown-menu-content-available-width": "var(--radix-popper-available-width)",
"--radix-dropdown-menu-content-available-height": "var(--radix-popper-available-height)",
"--radix-dropdown-menu-trigger-width": "var(--radix-popper-anchor-width)",
"--radix-dropdown-menu-trigger-height": "var(--radix-popper-anchor-height)"
}
}
}
);
});
DropdownMenuSubContent.displayName = SUB_CONTENT_NAME;
var Root2 = DropdownMenu;
var Trigger = DropdownMenuTrigger;
var Portal2 = DropdownMenuPortal;
var Content2 = DropdownMenuContent;
var Item2 = DropdownMenuItem;
var CheckboxItem2 = DropdownMenuCheckboxItem;
var RadioGroup2 = DropdownMenuRadioGroup;
var RadioItem2 = DropdownMenuRadioItem;
var ItemIndicator2 = DropdownMenuItemIndicator;
var Separator2 = DropdownMenuSeparator;
// components/atoms/input.tsx
import {
cloneElement,
forwardRef as forwardRef2,
useId as useId2,
useRef as useRef2,
useState
} from "react";
// components/atoms/animate-hide.tsx
import { AnimatePresence as AnimatePresence2, motion as motion2 } from "framer-motion";
import { jsx as jsx4 } from "react/jsx-runtime";
var AnimateHide = ({
children,
show,
initial = false,
className,
onClick
}) => {
return /* @__PURE__ */ jsx4(AnimatePresence2, { initial, children: show && /* @__PURE__ */ jsx4(
motion2.div,
{
onClick,
initial: {
height: 0,
opacity: 0,
y: -5
},
animate: {
height: "auto",
opacity: 1,
y: 0
},
exit: {
opacity: 0,
height: 0,
y: -5
},
className: cn(className, "kl-overflow-hidden"),
children
}
) });
};
var animate_hide_default = AnimateHide;
// components/atoms/input.tsx
import { jsx as jsx5, jsxs as jsxs2 } from "react/jsx-runtime";
var TextInputBase = forwardRef2(
(props, ref) => {
const {
name,
value,
type,
component = "input",
extra,
className = "",
containerClassName = "",
error = false,
disabled = false,
label,
onKeyDown,
autoComplete = "off",
onBlur = () => {
},
onFocus = () => {
},
onChange = () => {
},
message = "",
showclear,
placeholder,
size = "md",
resize = true,
prefix,
suffix,
prefixIcon,
suffixIcon,
id,
tabIndex,
shimmerLoading,
autoFocus,
focusRing = true,
textFieldClassName,
...extraProps
} = props;
const [t, setT] = useState(type || "text");
const Component = component;
const containerRef = useRef2(null);
return /* @__PURE__ */ jsxs2("div", { className: cn("kl-flex kl-flex-col", containerClassName), children: [
(label || extra) && /* @__PURE__ */ jsxs2(
"div",
{
className: cn(
"kl-flex kl-items-center kl-justify-between kl-gap-md",
{
"kl-pb-md": !!label || !!extra
}
),
children: [
/* @__PURE__ */ jsx5(
"label",
{
className: "kl-select-none kl-bodyMd-medium pulsable kl-min-w-[33%] kl-text-text-default",
htmlFor: id,
children: label
}
),
/* @__PURE__ */ jsx5(
"div",
{
className: cn({
"kl-h-4xl pulsable": !!label || !!extra
}),
children: extra && cloneElement(extra)
}
)
]
}
),
/* @__PURE__ */ jsxs2(
"div",
{
ref: containerRef,
className: cn(
"kl-transition-all kl-rounded kl-border kl-flex kl-flex-row kl-items-center kl-relative kl-ring-offset-1 group-data-[theme=dark]/html:kl-ring-offset-0",
{
"kl-text-text-critical kl-bg-surface-critical-subdued kl-border-border-critical": error,
"kl-text-text-default kl-border-border-default kl-bg-surface-basic-input": !error,
"kl-text-text-disabled kl-border-border-disabled kl-bg-surface-basic-input": disabled,
"kl-pr-0": component !== "input"
},
{
"kl-h-[38px]": size === "md" && component === "input",
"kl-h-[48px]": size === "lg" && component === "input",
"kl-h-[60px]": size === "xl" && component === "input"
},
size === "xl" ? "!kl-px-2xl" : "kl-px-lg",
className
),
children: [
!!prefixIcon && /* @__PURE__ */ jsx5(
"div",
{
className: cn("kl-pr-lg kl-bodyMd", {
"kl-text-text-strong": !error && !disabled,
"kl-text-text-critical": error,
"kl-text-text-disabled": disabled
}),
children: cloneElement(prefixIcon, {
size: 16,
color: "currentColor"
})
}
),
!!prefix && /* @__PURE__ */ jsx5("div", { className: "kl-cursor-default", children: prefix }),
/* @__PURE__ */ jsx5(
Component,
{
...type === "number" ? {
pattern: "[0-9]"
} : {},
name,
autoFocus,
type: t,
placeholder,
id,
tabIndex,
className: cn(
"kl-outline-none focus-within:kl-outline-none focus:kl-outline-none focus-visible:kl-outline-none kl-flex-1 kl-w-full kl-h-full",
"kl-rounded kl-bg-transparent",
{
"kl-text-text-critical placeholder:kl-text-text-critical/70": error && !disabled,
"kl-text-text-default": !error && !disabled,
"kl-text-text-disabled": disabled
},
{
"kl-py-xl": size === "lg",
"kl-py-lg": size === "md"
},
{
"kl-resize-none": !resize
},
{
"kl-no-spinner": type === "number"
},
size === "xl" ? "" : "kl-bodyMd",
textFieldClassName
),
value,
onChange: (e) => {
if (onChange) {
onChange(e);
}
},
onFocus: (e) => {
if (focusRing) {
containerRef.current?.classList.add("kl-ring-2");
}
onFocus(e);
},
disabled,
ref,
onKeyDown,
autoComplete,
onBlur: (e) => {
containerRef.current?.classList.remove("kl-ring-2");
onBlur(e);
},
...extraProps
}
),
!!suffix && /* @__PURE__ */ jsx5("div", { className: "kl-cursor-default", children: suffix }),
!!suffixIcon && /* @__PURE__ */ jsx5(
"div",
{
className: cn("kl-pl-lg kl-bodyMd", {
"kl-text-text-critical": error,
"kl-text-text-strong": !error && !disabled,
"kl-text-text-disabled": disabled
}),
children: cloneElement(suffixIcon, {
color: "currentColor",
size: 16
})
}
),
showclear && !disabled && /* @__PURE__ */ jsx5(
"button",
{
"aria-label": "Clear",
type: "button",
tabIndex: -1,
onClick: (e) => {
if (onChange)
onChange({ ...e, target: { value: "" } });
},
className: cn(
"kl-outline-none kl-flex kl-items-center kl-rounded kl-justify-center",
{
"kl-cursor-default": disabled
}
),
children: /* @__PURE__ */ jsx5(X, { size: 16, color: "currentColor" })
}
),
type === "password" && !disabled && /* @__PURE__ */ jsx5(
"button",
{
type: "button",
tabIndex: -1,
onClick: () => {
setT((prev) => prev === "text" ? "password" : "text");
},
className: cn(
"kl-outline-none kl-flex kl-items-center kl-rounded kl-justify-center",
{
"kl-cursor-default": disabled
}
),
children: t === "password" ? /* @__PURE__ */ jsx5(EyeSlash, { size: 16, color: "currentColor" }) : /* @__PURE__ */ jsx5(Eye, { size: 16, color: "currentColor" })
}
)
]
}
),
/* @__PURE__ */ jsx5(animate_hide_default, { show: !!message, children: /* @__PURE__ */ jsx5(
"div",
{
className: cn(
"kl-bodySm pulsable",
{
"kl-text-text-critical": error,
"kl-text-text-default": !error
},
"kl-pt-md"
),
children: message
}
) })
] });
}
);
var TextInput = forwardRef2(
(props, ref) => {
const id = useId2();
return /* @__PURE__ */ jsx5(
TextInputBase,
{
...{ ...props, id, component: "input", type: "text", ref }
}
);
}
);
var TextArea = forwardRef2(
({
autoComplete = "off",
onChange = (_) => {
},
resize = false,
rows = "3",
...etc
}, ref) => {
const id = useId2();
return /* @__PURE__ */ jsx5(
TextInputBase,
{
...{
...etc,
id,
rows,
autoComplete,
onChange,
resize,
component: "textarea",
ref,
type: "text"
}
}
);
}
);
// components/atoms/tabs.tsx
import * as RovingFocusGroup from "@radix-ui/react-roving-focus";
import { AnimatePresence as AnimatePresence3, LayoutGroup, motion as motion3 } from "framer-motion";
import React3, {
forwardRef as forwardRef3,
useId as useId3,
useState as useState2
} from "react";
import { jsx as jsx6, jsxs as jsxs3 } from "react/jsx-runtime";
var TabBase = ({
to = "",
label,
active = false,
fitted = false,
onClick = () => {
},
LinkComponent = "div",
variant = "plain",
size = "md",
prefix,
layoutId,
toLabel = "to"
}) => {
let Component = LinkComponent;
let tempToLabel = toLabel;
let extraProps = {};
if (to) {
if (LinkComponent === "div") {
Component = motion3.a;
tempToLabel = "href";
} else {
Component = LinkComponent;
}
} else {
extraProps = {
role: "button"
};
}
const [hoverd, setHoverd] = useState2(false);
return /* @__PURE__ */ jsxs3(
"div",
{
onMouseEnter: () => {
setHoverd(true);
},
onMouseLeave: () => {
setHoverd(false);
},
className: cn(
"kl-outline-none kl-flex kl-flex-col kl-relative kl-group kl-bodyMd-medium kl-transition-all kl-cursor-pointer hover:kl-text-text-default active:kl-text-text-default",
{
"kl-text-text-default": active,
"kl-text-text-soft": !active,
"kl-rounded-lg hover:kl-bg-surface-basic-hovered active:kl-bg-surface-basic-pressed": variant === "filled"
// 'border border-transparent': variant === 'filled' && !active,
}
),
children: [
/* @__PURE__ */ jsx6(
RovingFocusGroup.Item,
{
asChild: true,
focusable: true,
onKeyDown: (e) => {
if (["Enter", " "].includes(e.key)) {
onClick(e);
}
},
children: /* @__PURE__ */ jsxs3(
Component,
{
...{ [tempToLabel]: to },
...extraProps,
onClick,
className: cn(
"kl-relative kl-z-10 kl-tab-item kl-outline-none",
"kl-ring-offset-0 focus-visible:kl-ring-border-focus focus-visible:kl-ring-2",
// 'focus-visible:shadow-focus',
{
...(!fitted || variant === "filled") && {
"kl-px-2xl kl-py-lg": size === "md",
"kl-px-lg kl-py-md": size === "sm",
"kl-rounded-lg": true
},
...fitted && {
"kl-py-md": variant !== "filled"
}
}
),
children: [
variant === "plain" && /* @__PURE__ */ jsx6("div", { className: "kl-h-md kl-bg-none kl-w-full kl-z-0" }),
/* @__PURE__ */ jsxs3("div", { className: "kl-flex kl-flex-row kl-items-center kl-gap-lg", children: [
!!prefix && React3.cloneElement(prefix, { size: 16, color: "currentColor" }),
typeof label === "function" ? label(active) : label
] }),
active && variant === "plain" && /* @__PURE__ */ jsx6(
motion3.div,
{
layoutId: "underline",
className: cn(
"kl-h-md kl-z-10 kl-absolute kl-left-0 kl-bottom-0 kl-w-full kl-bg-border-primary"
)
}
),
variant === "plain" && hoverd && /* @__PURE__ */ jsx6(
motion3.div,
{
layoutId: "hoverd-underline",
className: "kl-h-md kl-bg-none kl-absolute kl-bottom-0 kl-w-full kl-z-0 kl-left-0 kl-bg-border-default group-active:kl-bg-border-tertiary"
}
),
variant === "plain" && /* @__PURE__ */ jsx6("div", { className: "kl-h-md kl-bg-none kl-w-full kl-z-0" })
]
}
)
}
),
/* @__PURE__ */ jsx6(AnimatePresence3, { children: variant === "filled" && active && /* @__PURE__ */ jsx6(
motion3.div,
{
layoutId,
className: "kl-absolute kl-inset-0 kl-rounded-lg kl-shadow-button kl-border kl-border-border-default kl-bg-surface-basic-default",
transition: { type: "spring", bounce: 0.1, duration: 0.3 }
}
) })
]
}
);
};
var Tab = ({ to, label, prefix, value: _ }) => /* @__PURE__ */ jsx6(TabBase, { to, label, prefix, layoutId: "" });
var Root4 = forwardRef3(
({
variant = "plain",
size = "md",
fitted = false,
onChange = () => {
},
value,
LinkComponent,
className = "",
basePath = "",
children,
toLabel
}, ref) => {
const id = useId3();
return /* @__PURE__ */ jsx6(
RovingFocusGroup.Root,
{
orientation: "horizontal",
loop: true,
className: cn(
"kl-flex kl-flex-row kl-items-center kl-transition-all",
"kl-snap-x",
{
"md:kl-gap-4xl": size === "md" && variant !== "filled",
"kl-gap-lg": size === "sm" || variant === "filled"
},
className
),
ref,
asChild: true,
children: /* @__PURE__ */ jsx6(motion3.div, { layout: true, layoutRoot: true, children: /* @__PURE__ */ jsx6(LayoutGroup, { id, children: React3.Children.map(children, (child) => {
if (!child) {
throw Error("Tab child is required");
}
const tabChild = child;
const tabChildProps = tabChild.props;
return /* @__PURE__ */ jsx6(
"div",
{
className: cn("kl-snap-start", {
"kl-px-xl md:kl-px-0": variant === "plain"
}),
children: /* @__PURE__ */ jsx6(
TabBase,
{
...tabChildProps,
onClick: () => {
onChange?.(tabChildProps.value);
},
layoutId: id,
fitted,
to: basePath + (tabChildProps.to || ""),
active: value === tabChildProps.value,
LinkComponent,
variant,
size,
toLabel
}
)
}
);
}) }) })
}
);
}
);
var Tabs = {
Tab,
Root: Root4
};
var tabs_default = Tabs;
// components/atoms/option-list.tsx
import { jsx as jsx7, jsxs as jsxs4 } from "react/jsx-runtime";
var OptionMenu = Root2;
var OptionMenuTriggerBase = Trigger;
var OptionMenuRadioGroup = RadioGroup2;
var blurElement = (e) => {
e.preventDefault();
const element = e.target;
element.blur();
};
var preventDefaultEvents = {
onMouseMove: (e) => e.preventDefault(),
onMouseEnter: (e) => e.preventDefault(),
onMouseLeave: (e) => blurElement(e),
onPointerLeave: (e) => e.preventDefault(),
onPointerEnter: (e) => e.preventDefault(),
onPointerMove: (e) => e.preventDefault()
// onClick: (e: any) => e.preventDefault(),
};
var OptionMenuTrigger = forwardRef4(
({ children, ...props }, ref) => {
const { open } = props;
return /* @__PURE__ */ jsx7(OptionMenuTriggerBase, { ref, ...props, asChild: true, "is-menu-button": "true", children: cloneElement2(children, {
selected: open
}) });
}
);
OptionMenuTrigger.displayName = "OptionMenuTrigger";
var OptionMenuContent = forwardRef4(
({
className,
sideOffset = 4,
children,
open,
align = "end",
alignOffset,
side,
...props
}, ref) => /* @__PURE__ */ jsx7(Portal2, { children: /* @__PURE__ */ jsx7(
Content2,
{
ref,
sideOffset,
align,
side,
alignOffset,
loop: true,
asChild: true,
...props,
onClick: (e) => e.stopPropagation(),
children: /* @__PURE__ */ jsx7(
"div",
{
className: cn(
"kl-z-50 kl-border kl-border-border-default kl-shadow-popover kl-bg-surface-basic-default kl-rounded kl-min-w-[160px] kl-overflow-hidden kl-origin-top kl-py-lg kl-will-change-[opacity,transform] data-[side=bottom]:kl-animate-slideUpAndFade data-[side=left]:kl-animate-slideRightAndFade data-[side=right]:kl-animate-slideLeftAndFade data-[side=top]:kl-animate-slideDownAndFade",
className
),
children
}
)
}
) })
);
OptionMenuContent.displayName = Content2.displayName;
var OptionItemRaw = forwardRef4(
({
children,
active,
className
}, ref) => {
return /* @__PURE__ */ jsx7(
"div",
{
ref,
className: cn(
"kl-group kl-relative kl-flex kl-flex-row kl-gap-xl kl-items-center kl-bodyMd kl-gap kl-cursor-pointer kl-select-none kl-py-lg kl-px-xl kl-text-text-default kl-outline-none kl-transition-colors focus:kl-bg-surface-basic-hovered hover:kl-bg-surface-basic-hovered data-[disabled]:kl-pointer-events-none data-[disabled]:kl-text-text-disabled",
{
"kl-bg-surface-basic-active": !!active
},
className
),
children
}
);
}
);
var OptionMenuItem = forwardRef4(
({ className, ...props }, ref) => {
return /* @__PURE__ */ jsx7(
Item2,
{
ref,
...preventDefaultEvents,
onSelect: props.onClick,
asChild: true,
children: /* @__PURE__ */ jsx7(
"div",
{
className: cn(
"kl-group kl-relative kl-flex kl-flex-row kl-gap-xl kl-items-center kl-bodyMd kl-gap kl-cursor-pointer kl-select-none kl-py-lg kl-px-xl kl-text-text-default kl-outline-none kl-transition-colors focus:kl-bg-surface-basic-hovered hover:kl-bg-surface-basic-hovered data-[disabled]:kl-pointer-events-none data-[disabled]:kl-text-text-disabled",
{
"kl-bg-surface-basic-active": !!props.active
},
className
),
children: props.children
}
)
}
);
}
);
OptionMenuItem.displayName = Item2.displayName;
var OptionMenuLink = forwardRef4(
({
className,
LinkComponent = "a",
to = "",
toLabel = "to",
target,
rel,
children
}, ref) => {
let tempToLabel = toLabel;
let Component = LinkComponent;
if (to) {
if (LinkComponent === motion4.button) {
Component = "a";
tempToLabel = "href";
} else {
Component = LinkComponent;
}
}
return /* @__PURE__ */ jsx7(
Item2,
{
ref,
className: cn(
"kl-group kl-relative kl-flex kl-flex-row kl-gap-xl kl-items-center kl-bodyMd kl-gap kl-cursor-pointer kl-select-none kl-py-lg kl-px-xl kl-text-text-default kl-outline-none kl-transition-colors focus:kl-bg-surface-basic-hovered hover:kl-bg-surface-basic-hovered data-[disabled]:kl-pointer-events-none data-[disabled]:kl-text-text-disabled",
className
),
asChild: true,
children: /* @__PURE__ */ jsx7(Component, { ...{ [tempToLabel]: to }, target, rel, children })
}
);
}
);
OptionMenuLink.displayName = "OptionMenuLink";
var OptionMenuTextInputItem = forwardRef4(({ onChange, compact = false, ...props }, ref) => {
const searchRef = useRef3(null);
const setSearchFocus = (e) => {
e?.preventDefault();
searchRef.current?.focus();
};
useEffect(() => {
if (searchRef.current) {
searchRef.current.focus();
}
}, []);
return /* @__PURE__ */ jsx7(
"div",
{
className: cn({
"kl-py-lg kl-px-xl": !compact
}),
children: /* @__PURE__ */ jsx7(
Item2,
{
ref,
onSelect: setSearchFocus,
onClick: () => setSearchFocus(),
onPointerUp: setSearchFocus,
onPointerDown: () => setSearchFocus(),
onMouseMove: (e) => e.preventDefault(),
onMouseEnter: (e) => e.preventDefault(),
onMouseLeave: (e) => e.preventDefault(),
onPointerMove: (e) => e.preventDefault(),
onPointerLeave: (e) => e.preventDefault(),
onFocus: () => {
searchRef.current?.focus();
},
asChild: true,
children: /* @__PURE__ */ jsx7(
TextInput,
{
...props,
ref: searchRef,
autoComplete: "off",
onChange,
onFocus: (event) => {
if (props.focusRing) {
event.target?.parentElement?.classList?.add(
"kl-ring-2",
"kl-ring-border-focus"
);
}
},
onBlur: (e) => {
e.target?.parentElement?.classList?.remove(
"kl-ring-2",
"kl-ring-border-focus"
);
},
onKeyDown: (e) => {
if (e.key !== "Escape")
e.stopPropagation();
}
}
)
}
)
}
);
});
OptionMenuTextInputItem.displayName = Item2.displayName;
var OptionMenuCheckboxItem = forwardRef4(
({
className,
showIndicator = true,
children,
checked,
onValueChange,
...props
}, ref) => /* @__PURE__ */ jsxs4(
CheckboxItem2,
{
ref,
className: cn(
"kl-group kl-relative kl-flex kl-flex-row kl-gap-xl kl-items-center kl-bodyMd kl-gap kl-cursor-pointer kl-select-none kl-py-lg kl-px-xl kl-text-text-default kl-outline-none kl-transition-colors focus:kl-bg-surface-basic-hovered hover:kl-bg-surface-basic-hovered data-[disabled]:kl-pointer-events-none data-[disabled]:kl-text-text-disabled",
{
"data-[state=checked]:kl-bg-surface-primary-subdued data-[state=checked]:kl-text-text-primary data-[state=checked]:kl-text-text-darktheme-primary": !showIndicator
},
className
),
checked,
...preventDefaultEvents,
onCheckedChange: onValueChange,
onSelect: props.onClick,
children: [
showIndicator && /* @__PURE__ */ jsx7("span", { className: "kl-w-2xl kl-h-2xl kl-rounded kl-border kl-transition-all kl-flex kl-items-center kl-justify-center kl-border-border-default group-data-[state=checked]:kl-border-border-primary group-data-[state=checked]:kl-bg-surface-primary-default group-data-[disabled]:kl-border-border-disabled group-data-[disabled]:kl-bg-surface-basic-default", children: /* @__PURE__ */ jsx7(ItemIndicator2, { children: /* @__PURE__ */ jsx7(
"svg",
{
width: "14",
height: "14",
viewBox: "0 0 14 14",
fill: "none",
xmlns: "http://www.w3.org/2000/svg",
children: /* @__PURE__ */ jsx7(
"path",
{
d: "M12.25 3.50017L5.25 10.4999L1.75 7.00017",
strokeLinecap: "round",
strokeLinejoin: "round",
className: cn(
"kl-stroke-text-on-primary group-data-[disabled]:kl-stroke-text-disabled"
)
}
)
}
) }) }),
children
]
}
)
);
OptionMenuCheckboxItem.displayName = CheckboxItem2.displayName;
var OptionMenuRadioItem = forwardRef4(
({ className, showIndicator = true, children, value, ...props }, ref) => /* @__PURE__ */ jsxs4(
RadioItem2,
{
ref,
className: cn(
"kl-group kl-relative kl-flex kl-flex-row kl-gap-xl kl-items-center kl-bodyMd kl-gap kl-cursor-pointer kl-select-none kl-py-lg kl-px-xl kl-text-text-default kl-outline-none kl-transition-colors focus:kl-bg-surface-basic-hovered hover:kl-bg-surface-basic-hovered data-[disabled]:kl-pointer-events-none data-[disabled]:kl-text-text-disabled",
{
"data-[state=checked]:kl-bg-surface-primary-subdued data-[state=checked]:kl-text-text-primary": !showIndicator
},
className
),
onSelect: props.onClick,
value,
...preventDefaultEvents,
children: [
showIndicator && /* @__PURE__ */ jsx7(
"span",
{
className: cn(
"kl-w-2xl kl-h-2xl kl-rounded-full kl-border kl-transition-all kl-flex kl-items-center kl-justify-center kl-border-border-default group-data-[state=checked]:kl-border-border-primary group-data-[disabled]:kl-border-border-disabled"
),
children: /* @__PURE__ */ jsx7(ItemIndicator2, { children: /* @__PURE__ */ jsx7(
"div",
{
className: cn(
"kl-block kl-w-lg kl-h-lg kl-rounded-full kl-bg-surface-primary-default group-data-[disabled]:kl-bg-icon-disabled group-data-[disabled]:kl-bg-icon-darktheme-disabled"
)
}
) })
}
),
children
]
}
)
);
OptionMenuRadioItem.displayName = RadioItem2.displayName;
var OptionMenuSeparator = forwardRef4(
({ className, ...props }, ref) => /* @__PURE__ */ jsx7(
Separator2,
{
ref,
className: cn("kl-h-xs kl-bg-border-disabled kl-my-md", className),
...props
}
)
);
OptionMenuS