@k8o/arte-odyssey 7.0.1 → 8.0.0
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/components/buttons/button/button.d.mts +8 -2
- package/dist/components/buttons/button/button.mjs +25 -18
- package/dist/components/buttons/icon-button/icon-button.d.mts +13 -2
- package/dist/components/buttons/icon-button/icon-button.mjs +74 -15
- package/dist/components/data-display/avatar/avatar.d.mts +2 -2
- package/dist/components/data-display/avatar/avatar.mjs +3 -2
- package/dist/components/data-display/badge/badge.d.mts +2 -2
- package/dist/components/data-display/badge/badge.mjs +5 -3
- package/dist/components/data-display/card/card.mjs +3 -2
- package/dist/components/data-display/card/interactive-card.mjs +3 -2
- package/dist/components/data-display/card/type.d.mts +3 -3
- package/dist/components/data-display/code/code.d.mts +4 -3
- package/dist/components/data-display/code/code.mjs +6 -3
- package/dist/components/data-display/heading/heading.d.mts +3 -4
- package/dist/components/data-display/heading/heading.mjs +14 -13
- package/dist/components/feedback/alert/alert.d.mts +2 -2
- package/dist/components/feedback/alert/alert.mjs +3 -2
- package/dist/components/feedback/progress/progress.d.mts +4 -3
- package/dist/components/feedback/progress/progress.mjs +4 -2
- package/dist/components/feedback/skeleton/skeleton.d.mts +2 -2
- package/dist/components/feedback/skeleton/skeleton.mjs +3 -2
- package/dist/components/feedback/spinner/spinner.d.mts +2 -2
- package/dist/components/feedback/spinner/spinner.mjs +3 -2
- package/dist/components/feedback/toast/toast.mjs +1 -1
- package/dist/components/form/autocomplete/autocomplete.d.mts +3 -7
- package/dist/components/form/autocomplete/autocomplete.mjs +7 -7
- package/dist/components/form/checkbox/checkbox.d.mts +2 -4
- package/dist/components/form/checkbox/checkbox.mjs +6 -5
- package/dist/components/form/checkbox-card/checkbox-card.d.mts +3 -6
- package/dist/components/form/checkbox-card/checkbox-card.mjs +6 -6
- package/dist/components/form/checkbox-group/checkbox-group.d.mts +5 -8
- package/dist/components/form/checkbox-group/checkbox-group.mjs +6 -7
- package/dist/components/form/checkbox-group/index.d.mts +7 -15
- package/dist/components/form/file-field/file-field.d.mts +14 -23
- package/dist/components/form/file-field/file-field.mjs +15 -17
- package/dist/components/form/form-control/form-control.d.mts +8 -8
- package/dist/components/form/form-control/form-control.mjs +10 -10
- package/dist/components/form/number-field/number-field.d.mts +5 -10
- package/dist/components/form/number-field/number-field.mjs +10 -13
- package/dist/components/form/password-input/password-input.d.mts +4 -22
- package/dist/components/form/password-input/password-input.mjs +8 -16
- package/dist/components/form/radio/radio.d.mts +4 -4
- package/dist/components/form/radio/radio.mjs +9 -8
- package/dist/components/form/radio-card/radio-card.d.mts +4 -6
- package/dist/components/form/radio-card/radio-card.mjs +7 -6
- package/dist/components/form/select/select.d.mts +4 -20
- package/dist/components/form/select/select.mjs +4 -10
- package/dist/components/form/slider/slider.d.mts +3 -8
- package/dist/components/form/slider/slider.mjs +8 -10
- package/dist/components/form/switch/switch.d.mts +3 -8
- package/dist/components/form/switch/switch.mjs +10 -11
- package/dist/components/form/text-field/text-field.d.mts +4 -21
- package/dist/components/form/text-field/text-field.mjs +4 -12
- package/dist/components/form/textarea/textarea.d.mts +4 -22
- package/dist/components/form/textarea/textarea.mjs +7 -13
- package/dist/components/index.d.mts +2 -4
- package/dist/components/index.mjs +10 -12
- package/dist/components/layout/separator/separator.d.mts +4 -3
- package/dist/components/layout/separator/separator.mjs +3 -2
- package/dist/components/navigation/anchor/anchor.d.mts +13 -10
- package/dist/components/navigation/anchor/anchor.mjs +13 -11
- package/dist/components/navigation/pagination/pagination.d.mts +1 -1
- package/dist/components/navigation/pagination/pagination.mjs +3 -3
- package/dist/components/overlays/dialog/dialog.mjs +2 -1
- package/dist/components/overlays/drawer/drawer.mjs +2 -1
- package/dist/components/overlays/dropdown-menu/dropdown-menu.mjs +3 -2
- package/dist/components/overlays/dropdown-menu/hooks.d.mts +286 -8
- package/dist/components/overlays/list-box/hooks.d.mts +286 -9
- package/dist/components/overlays/list-box/list-box.mjs +3 -2
- package/dist/components/overlays/popover/hooks.d.mts +24 -33
- package/dist/components/overlays/popover/hooks.mjs +5 -25
- package/dist/components/overlays/popover/popover.d.mts +9 -7
- package/dist/components/overlays/popover/popover.mjs +7 -7
- package/dist/components/overlays/tooltip/index.d.mts +2 -2
- package/dist/components/overlays/tooltip/tooltip.d.mts +11 -3
- package/dist/components/overlays/tooltip/tooltip.mjs +29 -6
- package/dist/helpers/index.mjs +2 -2
- package/dist/helpers/merge-refs.d.mts +6 -0
- package/dist/helpers/merge-refs.mjs +23 -0
- package/dist/hooks/index.mjs +1 -1
- package/dist/index.d.mts +2 -4
- package/dist/index.mjs +15 -17
- package/package.json +9 -9
- package/dist/components/buttons/icon-link/icon-link.d.mts +0 -27
- package/dist/components/buttons/icon-link/icon-link.mjs +0 -24
- package/dist/components/buttons/icon-link/index.d.mts +0 -2
- package/dist/components/buttons/icon-link/index.mjs +0 -2
- package/dist/components/buttons/link-button/index.d.mts +0 -2
- package/dist/components/buttons/link-button/index.mjs +0 -2
- package/dist/components/buttons/link-button/link-button.d.mts +0 -35
- package/dist/components/buttons/link-button/link-button.mjs +0 -34
|
@@ -1,15 +1,21 @@
|
|
|
1
1
|
import { FC, HTMLProps, ReactNode } from "react";
|
|
2
2
|
|
|
3
3
|
//#region src/components/buttons/button/button.d.ts
|
|
4
|
-
|
|
4
|
+
type Props = {
|
|
5
5
|
type?: 'button' | 'submit';
|
|
6
6
|
size?: 'sm' | 'md' | 'lg';
|
|
7
7
|
color?: 'primary' | 'secondary' | 'gray';
|
|
8
8
|
variant?: 'contained' | 'outlined' | 'skeleton';
|
|
9
9
|
fullWidth?: boolean;
|
|
10
|
+
isActive?: boolean;
|
|
10
11
|
startIcon?: ReactNode;
|
|
11
12
|
endIcon?: ReactNode;
|
|
12
13
|
onAction?: () => void | Promise<void>;
|
|
13
|
-
|
|
14
|
+
renderItem?: (props: {
|
|
15
|
+
className: string;
|
|
16
|
+
children: ReactNode;
|
|
17
|
+
}) => ReactNode;
|
|
18
|
+
} & Omit<HTMLProps<HTMLButtonElement>, 'size' | 'type'>;
|
|
19
|
+
declare const Button: FC<Props>;
|
|
14
20
|
//#endregion
|
|
15
21
|
export { Button };
|
|
@@ -3,9 +3,9 @@ import { cn } from "../../../helpers/cn.mjs";
|
|
|
3
3
|
import { Spinner } from "../../feedback/spinner/spinner.mjs";
|
|
4
4
|
import { useTransition } from "react";
|
|
5
5
|
import { useFormStatus } from "react-dom";
|
|
6
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
7
7
|
//#region src/components/buttons/button/button.tsx
|
|
8
|
-
const Button = ({ ref, children, type = "button", size = "md", color = "primary", variant = "contained", disabled = false, fullWidth = false, onAction, onClick, startIcon, endIcon, ...rest }) => {
|
|
8
|
+
const Button = ({ ref, children, type = "button", size = "md", color = "primary", variant = "contained", disabled = false, fullWidth = false, isActive = false, onAction, onClick, startIcon, endIcon, renderItem, ...rest }) => {
|
|
9
9
|
const [transitionPending, startTransition] = useTransition();
|
|
10
10
|
const { pending: formPending } = useFormStatus();
|
|
11
11
|
const isPending = transitionPending || type === "submit" && formPending;
|
|
@@ -17,38 +17,45 @@ const Button = ({ ref, children, type = "button", size = "md", color = "primary"
|
|
|
17
17
|
await onAction();
|
|
18
18
|
});
|
|
19
19
|
} : void 0;
|
|
20
|
-
const resolvedStartIcon = isPending ? /* @__PURE__ */ jsx(Spinner, {
|
|
20
|
+
const resolvedStartIcon = !renderItem && isPending ? /* @__PURE__ */ jsx(Spinner, {
|
|
21
21
|
label: "Loading",
|
|
22
22
|
size: size === "lg" ? "md" : "sm"
|
|
23
23
|
}) : startIcon;
|
|
24
24
|
const hasStartIcon = resolvedStartIcon !== void 0;
|
|
25
25
|
const hasEndIcon = endIcon !== void 0;
|
|
26
|
-
|
|
26
|
+
const baseClassName = cn("rounded-full border-2 text-center font-bold transition-colors", {
|
|
27
|
+
"border-transparent bg-primary-bg text-primary-fg hover:bg-primary-bg-emphasize/80 active:bg-primary-bg-emphasize": variant === "contained" && color === "primary",
|
|
28
|
+
"border-transparent bg-secondary-bg text-secondary-fg hover:bg-secondary-bg-emphasize/80 active:bg-secondary-bg-emphasize": variant === "contained" && color === "secondary",
|
|
29
|
+
"border-transparent bg-bg-subtle text-fg-base hover:bg-bg-mute/80 active:bg-bg-mute": variant === "contained" && color === "gray",
|
|
30
|
+
"border-primary-border bg-bg-base text-primary-fg hover:bg-bg-subtle active:bg-bg-mute": variant === "outlined" && color === "primary",
|
|
31
|
+
"border-secondary-border bg-bg-base text-secondary-fg hover:bg-bg-subtle active:bg-bg-mute": variant === "outlined" && color === "secondary",
|
|
32
|
+
"border-border-base bg-bg-base text-fg-base hover:bg-bg-subtle active:bg-bg-mute": variant === "outlined" && color === "gray",
|
|
33
|
+
"border-transparent bg-transparent text-fg-mute hover:bg-bg-subtle hover:text-fg-base active:bg-bg-mute active:text-fg-base": variant === "skeleton"
|
|
34
|
+
}, "focus-visible:border-transparent focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-border-info", size === "sm" && "px-3 py-1 text-sm", size === "md" && "px-4 py-2 text-md", size === "lg" && "px-6 py-3 text-lg", fullWidth && "w-full", (hasStartIcon || hasEndIcon) && "flex items-center gap-2", hasStartIcon && hasEndIcon ? "justify-between" : hasStartIcon && variant !== "skeleton" ? "justify-center" : hasEndIcon && "justify-between", isActive && "text-fg-info");
|
|
35
|
+
const composedChildren = /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
36
|
+
resolvedStartIcon,
|
|
37
|
+
children,
|
|
38
|
+
endIcon
|
|
39
|
+
] });
|
|
40
|
+
if (renderItem) return renderItem({
|
|
41
|
+
className: baseClassName,
|
|
42
|
+
children: composedChildren
|
|
43
|
+
});
|
|
44
|
+
return /* @__PURE__ */ jsx("button", {
|
|
27
45
|
"aria-busy": isPending || void 0,
|
|
28
|
-
className: cn("cursor-pointer
|
|
29
|
-
"border-transparent bg-primary-bg text-primary-fg hover:bg-primary-bg-emphasize/80 active:bg-primary-bg-emphasize": variant === "contained" && color === "primary",
|
|
30
|
-
"border-transparent bg-secondary-bg text-secondary-fg hover:bg-secondary-bg-emphasize/80 active:bg-secondary-bg-emphasize": variant === "contained" && color === "secondary",
|
|
31
|
-
"border-transparent bg-bg-subtle text-fg-base hover:bg-bg-mute/80 active:bg-bg-mute": variant === "contained" && color === "gray",
|
|
46
|
+
className: cn(baseClassName, "cursor-pointer", {
|
|
32
47
|
"cursor-not-allowed opacity-35 hover:bg-primary-bg active:bg-primary-bg": isDisabled && variant === "contained" && color === "primary",
|
|
33
48
|
"cursor-not-allowed opacity-35 hover:bg-secondary-bg active:bg-secondary-bg": isDisabled && variant === "contained" && color === "secondary",
|
|
34
49
|
"cursor-not-allowed opacity-35 hover:bg-bg-subtle active:bg-bg-subtle": isDisabled && variant === "contained" && color === "gray",
|
|
35
|
-
"border-primary-border bg-bg-base text-primary-fg hover:bg-bg-subtle active:bg-bg-mute": variant === "outlined" && color === "primary",
|
|
36
|
-
"border-secondary-border bg-bg-base text-secondary-fg hover:bg-bg-subtle active:bg-bg-mute": variant === "outlined" && color === "secondary",
|
|
37
|
-
"border-border-base bg-bg-base text-fg-base hover:bg-bg-subtle active:bg-bg-mute": variant === "outlined" && color === "gray",
|
|
38
50
|
"cursor-not-allowed bg-bg-base opacity-35": isDisabled && variant === "outlined",
|
|
39
|
-
"border-transparent bg-transparent text-fg-mute hover:bg-bg-subtle hover:text-fg-base active:bg-bg-mute active:text-fg-base": variant === "skeleton",
|
|
40
51
|
"cursor-not-allowed bg-transparent text-fg-mute opacity-35": isDisabled && variant === "skeleton"
|
|
41
|
-
}
|
|
52
|
+
}),
|
|
42
53
|
disabled: isDisabled,
|
|
43
54
|
onClick: handleClick,
|
|
44
55
|
ref,
|
|
45
56
|
type: type === "submit" ? "submit" : "button",
|
|
46
57
|
...rest,
|
|
47
|
-
children:
|
|
48
|
-
resolvedStartIcon,
|
|
49
|
-
children,
|
|
50
|
-
endIcon
|
|
51
|
-
]
|
|
58
|
+
children: composedChildren
|
|
52
59
|
});
|
|
53
60
|
};
|
|
54
61
|
//#endregion
|
|
@@ -1,12 +1,23 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { TooltipTriggerProps } from "../../overlays/tooltip/tooltip.mjs";
|
|
2
|
+
import { FC, HTMLProps, ReactNode } from "react";
|
|
3
|
+
import { Placement } from "@floating-ui/react";
|
|
2
4
|
|
|
3
5
|
//#region src/components/buttons/icon-button/icon-button.d.ts
|
|
6
|
+
type IconButtonTriggerProps = Partial<TooltipTriggerProps>;
|
|
4
7
|
type Props = {
|
|
5
8
|
size?: 'sm' | 'md' | 'lg';
|
|
6
9
|
bg?: 'transparent' | 'base' | 'primary' | 'secondary';
|
|
7
10
|
label: string;
|
|
11
|
+
tooltipPlacement?: Placement;
|
|
12
|
+
tooltipDisabled?: boolean;
|
|
8
13
|
onAction?: () => void | Promise<void>;
|
|
14
|
+
renderItem?: (props: {
|
|
15
|
+
className: string;
|
|
16
|
+
children: ReactNode;
|
|
17
|
+
'aria-label': string;
|
|
18
|
+
triggerProps: IconButtonTriggerProps;
|
|
19
|
+
}) => ReactNode;
|
|
9
20
|
} & Omit<HTMLProps<HTMLButtonElement>, 'size' | 'type'>;
|
|
10
21
|
declare const IconButton: FC<Props>;
|
|
11
22
|
//#endregion
|
|
12
|
-
export { IconButton };
|
|
23
|
+
export { IconButton, IconButtonTriggerProps };
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { cn } from "../../../helpers/cn.mjs";
|
|
3
|
+
import { Tooltip } from "../../overlays/tooltip/tooltip.mjs";
|
|
4
|
+
import { mergeRefs } from "../../../helpers/merge-refs.mjs";
|
|
3
5
|
import { useTransition } from "react";
|
|
4
6
|
import { useFormStatus } from "react-dom";
|
|
5
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
6
8
|
//#region src/components/buttons/icon-button/icon-button.tsx
|
|
7
|
-
const
|
|
9
|
+
const joinIds = (...ids) => {
|
|
10
|
+
const filtered = ids.filter(Boolean);
|
|
11
|
+
return filtered.length === 0 ? void 0 : filtered.join(" ");
|
|
12
|
+
};
|
|
13
|
+
const IconButton = ({ ref, size = "md", bg = "transparent", label, tooltipPlacement = "bottom", tooltipDisabled = false, children, onAction, onClick, onMouseEnter, onMouseLeave, onFocus, onBlur, disabled, renderItem, "aria-describedby": describedBy, ...props }) => {
|
|
8
14
|
const [transitionPending, startTransition] = useTransition();
|
|
9
15
|
const { pending: formPending } = useFormStatus();
|
|
10
16
|
const isPending = transitionPending || formPending;
|
|
@@ -16,19 +22,72 @@ const IconButton = ({ ref, size = "md", bg = "transparent", label, children, onA
|
|
|
16
22
|
await onAction();
|
|
17
23
|
});
|
|
18
24
|
} : void 0;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
25
|
+
const className = cn("inline-flex rounded-full transition-colors", "focus-visible:border-transparent focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-border-info", (bg === "transparent" || bg === "base") && "hover:bg-bg-subtle active:bg-bg-mute", bg === "base" && "bg-bg-base", bg === "transparent" && "bg-transparent", bg === "primary" && "bg-primary-bg hover:bg-primary-bg-emphasize/80 active:bg-primary-bg-emphasize", bg === "secondary" && "bg-secondary-bg hover:bg-secondary-bg-emphasize/80 active:bg-secondary-bg-emphasize", size === "sm" && "p-1", size === "md" && "p-2", size === "lg" && "p-3", !renderItem && "cursor-pointer", !renderItem && isDisabled && "cursor-not-allowed opacity-50 hover:bg-transparent active:bg-transparent");
|
|
26
|
+
if (tooltipDisabled) {
|
|
27
|
+
if (renderItem) return /* @__PURE__ */ jsx(Fragment$1, { children: renderItem({
|
|
28
|
+
className,
|
|
29
|
+
children,
|
|
30
|
+
"aria-label": label,
|
|
31
|
+
triggerProps: {}
|
|
32
|
+
}) });
|
|
33
|
+
return /* @__PURE__ */ jsx("button", {
|
|
34
|
+
...props,
|
|
35
|
+
"aria-busy": isPending || void 0,
|
|
36
|
+
"aria-describedby": describedBy,
|
|
37
|
+
"aria-label": label,
|
|
38
|
+
className,
|
|
39
|
+
disabled: isDisabled,
|
|
40
|
+
onBlur,
|
|
41
|
+
onClick: handleClick,
|
|
42
|
+
onFocus,
|
|
43
|
+
onMouseEnter,
|
|
44
|
+
onMouseLeave,
|
|
45
|
+
ref,
|
|
46
|
+
type: "button",
|
|
47
|
+
children
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
return /* @__PURE__ */ jsxs(Tooltip.Root, {
|
|
51
|
+
placement: tooltipPlacement,
|
|
52
|
+
children: [/* @__PURE__ */ jsx(Tooltip.Trigger, { renderItem: (triggerProps) => {
|
|
53
|
+
if (renderItem) return /* @__PURE__ */ jsx(Fragment$1, { children: renderItem({
|
|
54
|
+
className,
|
|
55
|
+
children,
|
|
56
|
+
"aria-label": label,
|
|
57
|
+
triggerProps: {
|
|
58
|
+
...triggerProps,
|
|
59
|
+
"aria-describedby": joinIds(describedBy, triggerProps["aria-describedby"])
|
|
60
|
+
}
|
|
61
|
+
}) });
|
|
62
|
+
return /* @__PURE__ */ jsx("button", {
|
|
63
|
+
...props,
|
|
64
|
+
"aria-busy": isPending || void 0,
|
|
65
|
+
"aria-describedby": joinIds(describedBy, triggerProps["aria-describedby"]),
|
|
66
|
+
"aria-label": label,
|
|
67
|
+
className,
|
|
68
|
+
disabled: isDisabled,
|
|
69
|
+
onBlur: (e) => {
|
|
70
|
+
triggerProps.onBlur(e);
|
|
71
|
+
onBlur?.(e);
|
|
72
|
+
},
|
|
73
|
+
onClick: handleClick,
|
|
74
|
+
onFocus: (e) => {
|
|
75
|
+
triggerProps.onFocus(e);
|
|
76
|
+
onFocus?.(e);
|
|
77
|
+
},
|
|
78
|
+
onMouseEnter: (e) => {
|
|
79
|
+
triggerProps.onMouseEnter(e);
|
|
80
|
+
onMouseEnter?.(e);
|
|
81
|
+
},
|
|
82
|
+
onMouseLeave: (e) => {
|
|
83
|
+
triggerProps.onMouseLeave(e);
|
|
84
|
+
onMouseLeave?.(e);
|
|
85
|
+
},
|
|
86
|
+
ref: mergeRefs(ref, triggerProps.ref),
|
|
87
|
+
type: "button",
|
|
88
|
+
children
|
|
89
|
+
});
|
|
90
|
+
} }), /* @__PURE__ */ jsx(Tooltip.Content, { children: label })]
|
|
32
91
|
});
|
|
33
92
|
};
|
|
34
93
|
//#endregion
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FC } from "react";
|
|
1
|
+
import { FC, HTMLAttributes } from "react";
|
|
2
2
|
|
|
3
3
|
//#region src/components/data-display/avatar/avatar.d.ts
|
|
4
4
|
type Props = {
|
|
@@ -7,7 +7,7 @@ type Props = {
|
|
|
7
7
|
name?: string;
|
|
8
8
|
size?: 'sm' | 'md' | 'lg';
|
|
9
9
|
src?: string;
|
|
10
|
-
}
|
|
10
|
+
} & Omit<HTMLAttributes<HTMLSpanElement>, 'role' | 'aria-label'>;
|
|
11
11
|
declare const Avatar: FC<Props>;
|
|
12
12
|
//#endregion
|
|
13
13
|
export { Avatar };
|
|
@@ -8,14 +8,15 @@ const getInitials = (name) => {
|
|
|
8
8
|
const initials = name.trim().split(/\s+/).slice(0, 2).map((part) => part.charAt(0).toUpperCase()).join("");
|
|
9
9
|
return initials === "" ? "?" : initials;
|
|
10
10
|
};
|
|
11
|
-
const Avatar = ({ alt, fallback, name, size = "md", src }) => {
|
|
11
|
+
const Avatar = ({ alt, fallback, name, size = "md", src, className, ...rest }) => {
|
|
12
12
|
const [failedSrc, setFailedSrc] = useState(null);
|
|
13
13
|
const showImage = Boolean(src) && failedSrc !== src;
|
|
14
14
|
const label = alt ?? name ?? "Avatar";
|
|
15
15
|
const imageSize = size === "sm" ? 32 : size === "md" ? 40 : 56;
|
|
16
16
|
return /* @__PURE__ */ jsx("span", {
|
|
17
|
+
...rest,
|
|
17
18
|
"aria-label": label,
|
|
18
|
-
className: cn("inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full border border-border-base bg-bg-mute font-medium text-fg-base", size === "sm" && "size-8 text-xs", size === "md" && "size-10 text-sm", size === "lg" && "size-14 text-lg"),
|
|
19
|
+
className: cn("inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full border border-border-base bg-bg-mute font-medium text-fg-base", size === "sm" && "size-8 text-xs", size === "md" && "size-10 text-sm", size === "lg" && "size-14 text-lg", className),
|
|
19
20
|
role: "img",
|
|
20
21
|
children: showImage ? /* @__PURE__ */ jsx("img", {
|
|
21
22
|
alt: alt ?? "",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FC } from "react";
|
|
1
|
+
import { FC, HTMLAttributes } from "react";
|
|
2
2
|
|
|
3
3
|
//#region src/components/data-display/badge/badge.d.ts
|
|
4
4
|
type Props = {
|
|
@@ -7,7 +7,7 @@ type Props = {
|
|
|
7
7
|
interactive?: boolean;
|
|
8
8
|
tone?: 'neutral' | 'info' | 'success' | 'warning' | 'error';
|
|
9
9
|
variant?: 'solid' | 'outline';
|
|
10
|
-
}
|
|
10
|
+
} & Omit<HTMLAttributes<HTMLElement>, 'children'>;
|
|
11
11
|
declare const Badge: FC<Props>;
|
|
12
12
|
//#endregion
|
|
13
13
|
export { Badge };
|
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
import { cn } from "../../../helpers/cn.mjs";
|
|
2
2
|
import { jsx } from "react/jsx-runtime";
|
|
3
3
|
//#region src/components/data-display/badge/badge.tsx
|
|
4
|
-
const Badge = ({ interactive = false, size = "md", text, tone = "neutral", variant = "solid" }) => {
|
|
4
|
+
const Badge = ({ interactive = false, size = "md", text, tone = "neutral", variant = "solid", className, ...rest }) => {
|
|
5
5
|
const interactiveClassName = cn(interactive && "cursor-pointer focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-border-info", interactive && tone === "neutral" && variant === "solid" && "hover:bg-bg-emphasize active:bg-bg-base", interactive && tone === "neutral" && variant === "outline" && "hover:bg-bg-subtle active:bg-bg-mute", interactive && tone === "info" && variant === "solid" && "hover:bg-bg-info/80 active:bg-bg-info/60", interactive && tone === "info" && variant === "outline" && "hover:bg-bg-info active:bg-bg-info/80", interactive && tone === "success" && variant === "solid" && "hover:bg-bg-success/80 active:bg-bg-success/60", interactive && tone === "success" && variant === "outline" && "hover:bg-bg-success active:bg-bg-success/80", interactive && tone === "warning" && variant === "solid" && "hover:bg-bg-warning/80 active:bg-bg-warning/60", interactive && tone === "warning" && variant === "outline" && "hover:bg-bg-warning active:bg-bg-warning/80", interactive && tone === "error" && variant === "solid" && "hover:bg-bg-error/80 active:bg-bg-error/60", interactive && tone === "error" && variant === "outline" && "hover:bg-bg-error active:bg-bg-error/80");
|
|
6
6
|
const badgeClassName = cn("inline-flex items-center rounded-full border font-medium transition-colors", size === "sm" && "px-2 py-0.5 text-xs", size === "md" && "px-2.5 py-1 text-xs", tone === "neutral" && variant === "solid" && "border-border-mute bg-bg-mute text-fg-base", tone === "neutral" && variant === "outline" && "border-border-base bg-bg-base text-fg-base", tone === "info" && variant === "solid" && "border-border-info bg-bg-info text-fg-info", tone === "info" && variant === "outline" && "border-border-info bg-bg-base text-fg-info", tone === "success" && variant === "solid" && "border-border-success bg-bg-success text-fg-success", tone === "success" && variant === "outline" && "border-border-success bg-bg-base text-fg-success", tone === "warning" && variant === "solid" && "border-border-warning bg-bg-warning text-fg-warning", tone === "warning" && variant === "outline" && "border-border-warning bg-bg-base text-fg-warning", tone === "error" && variant === "solid" && "border-border-error bg-bg-error text-fg-error", tone === "error" && variant === "outline" && "border-border-error bg-bg-base text-fg-error", interactiveClassName);
|
|
7
7
|
if (interactive) return /* @__PURE__ */ jsx("button", {
|
|
8
|
-
|
|
8
|
+
...rest,
|
|
9
|
+
className: cn(badgeClassName, className),
|
|
9
10
|
type: "button",
|
|
10
11
|
children: text
|
|
11
12
|
});
|
|
12
13
|
return /* @__PURE__ */ jsx("span", {
|
|
13
|
-
|
|
14
|
+
...rest,
|
|
15
|
+
className: cn(badgeClassName, className),
|
|
14
16
|
children: text
|
|
15
17
|
});
|
|
16
18
|
};
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { cn } from "../../../helpers/cn.mjs";
|
|
2
2
|
import { jsx } from "react/jsx-runtime";
|
|
3
3
|
//#region src/components/data-display/card/card.tsx
|
|
4
|
-
const Card = ({ children, width = "full", appearance = "shadow" }) => /* @__PURE__ */ jsx("div", {
|
|
5
|
-
|
|
4
|
+
const Card = ({ children, width = "full", appearance = "shadow", className, ...rest }) => /* @__PURE__ */ jsx("div", {
|
|
5
|
+
...rest,
|
|
6
|
+
className: cn("rounded-xl", appearance === "shadow" && "shadow-sm", appearance === "bordered" && "border border-border-mute", width === "full" && "w-full", width === "fit" && "w-fit", "bg-bg-base", className),
|
|
6
7
|
children
|
|
7
8
|
});
|
|
8
9
|
//#endregion
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { cn } from "../../../helpers/cn.mjs";
|
|
2
2
|
import { jsx } from "react/jsx-runtime";
|
|
3
3
|
//#region src/components/data-display/card/interactive-card.tsx
|
|
4
|
-
const InteractiveCard = ({ children, width = "full", appearance = "shadow" }) => /* @__PURE__ */ jsx("div", {
|
|
5
|
-
|
|
4
|
+
const InteractiveCard = ({ children, width = "full", appearance = "shadow", className, ...rest }) => /* @__PURE__ */ jsx("div", {
|
|
5
|
+
...rest,
|
|
6
|
+
className: cn("rounded-xl transition-transform hover:scale-[1.02] active:scale-[0.98]", appearance === "shadow" && "shadow-sm", appearance === "bordered" && "border border-border-mute", width === "full" && "w-full", width === "fit" && "w-fit", "bg-bg-base", className),
|
|
6
7
|
children
|
|
7
8
|
});
|
|
8
9
|
//#endregion
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { HTMLAttributes } from "react";
|
|
2
2
|
|
|
3
3
|
//#region src/components/data-display/card/type.d.ts
|
|
4
|
-
type CardProps =
|
|
4
|
+
type CardProps = {
|
|
5
5
|
width?: 'full' | 'fit';
|
|
6
6
|
appearance?: 'shadow' | 'bordered';
|
|
7
|
-
}>;
|
|
7
|
+
} & HTMLAttributes<HTMLDivElement>;
|
|
8
8
|
//#endregion
|
|
9
9
|
export { CardProps };
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { FC } from "react";
|
|
1
|
+
import { FC, HTMLAttributes } from "react";
|
|
2
2
|
|
|
3
3
|
//#region src/components/data-display/code/code.d.ts
|
|
4
|
-
|
|
4
|
+
type Props = {
|
|
5
5
|
children: string;
|
|
6
|
-
}>;
|
|
6
|
+
} & Omit<HTMLAttributes<HTMLElement>, 'children'>;
|
|
7
|
+
declare const Code: FC<Props>;
|
|
7
8
|
//#endregion
|
|
8
9
|
export { Code };
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
+
import { cn } from "../../../helpers/cn.mjs";
|
|
1
2
|
import { findAllColors } from "../../../helpers/color/find-all-colors.mjs";
|
|
2
3
|
import { Fragment } from "react";
|
|
3
4
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
5
|
//#region src/components/data-display/code/code.tsx
|
|
5
|
-
const Code = ({ children }) => {
|
|
6
|
+
const Code = ({ children, className, ...rest }) => {
|
|
6
7
|
const colors = findAllColors(children);
|
|
7
8
|
if (colors.length === 0) return /* @__PURE__ */ jsx("code", {
|
|
8
|
-
|
|
9
|
+
...rest,
|
|
10
|
+
className: cn("bg-bg-mute m-0.5 rounded-md px-1.5 sm:py-0.5", className),
|
|
9
11
|
children
|
|
10
12
|
});
|
|
11
13
|
const parts = [];
|
|
@@ -22,7 +24,8 @@ const Code = ({ children }) => {
|
|
|
22
24
|
}
|
|
23
25
|
if (lastIndex < children.length) parts.push(children.slice(lastIndex));
|
|
24
26
|
return /* @__PURE__ */ jsx("code", {
|
|
25
|
-
|
|
27
|
+
...rest,
|
|
28
|
+
className: cn("bg-bg-mute m-0.5 inline-flex items-center gap-1 rounded-md px-1.5 sm:py-0.5", className),
|
|
26
29
|
children: parts
|
|
27
30
|
});
|
|
28
31
|
};
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import { FC,
|
|
1
|
+
import { FC, HTMLAttributes } from "react";
|
|
2
2
|
|
|
3
3
|
//#region src/components/data-display/heading/heading.d.ts
|
|
4
|
-
type Props =
|
|
5
|
-
id?: string;
|
|
4
|
+
type Props = {
|
|
6
5
|
type: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';
|
|
7
6
|
lineClamp?: number;
|
|
8
|
-
}>;
|
|
7
|
+
} & HTMLAttributes<HTMLHeadingElement>;
|
|
9
8
|
declare const Heading: FC<Props>;
|
|
10
9
|
//#endregion
|
|
11
10
|
export { Heading };
|
|
@@ -1,35 +1,36 @@
|
|
|
1
1
|
import { cn } from "../../../helpers/cn.mjs";
|
|
2
2
|
import { jsx } from "react/jsx-runtime";
|
|
3
3
|
//#region src/components/data-display/heading/heading.tsx
|
|
4
|
-
const Heading = ({ children,
|
|
4
|
+
const Heading = ({ children, type, lineClamp, className, ...rest }) => {
|
|
5
|
+
const lineClampClass = { [`line-clamp-${lineClamp?.toString() ?? ""}`]: lineClamp };
|
|
5
6
|
if (type === "h1") return /* @__PURE__ */ jsx("h1", {
|
|
6
|
-
|
|
7
|
-
|
|
7
|
+
...rest,
|
|
8
|
+
className: cn("font-bold text-2xl md:text-3xl", lineClampClass, className),
|
|
8
9
|
children
|
|
9
10
|
});
|
|
10
11
|
if (type === "h2") return /* @__PURE__ */ jsx("h2", {
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
...rest,
|
|
13
|
+
className: cn("font-bold text-xl md:text-2xl", lineClampClass, className),
|
|
13
14
|
children
|
|
14
15
|
});
|
|
15
16
|
if (type === "h3") return /* @__PURE__ */ jsx("h3", {
|
|
16
|
-
|
|
17
|
-
|
|
17
|
+
...rest,
|
|
18
|
+
className: cn("font-bold text-lg md:text-xl", lineClampClass, className),
|
|
18
19
|
children
|
|
19
20
|
});
|
|
20
21
|
if (type === "h4") return /* @__PURE__ */ jsx("h4", {
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
...rest,
|
|
23
|
+
className: cn("font-bold text-md md:text-lg", lineClampClass, className),
|
|
23
24
|
children
|
|
24
25
|
});
|
|
25
26
|
if (type === "h5") return /* @__PURE__ */ jsx("h5", {
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
...rest,
|
|
28
|
+
className: cn("font-bold text-sm md:text-md", lineClampClass, className),
|
|
28
29
|
children
|
|
29
30
|
});
|
|
30
31
|
return /* @__PURE__ */ jsx("h6", {
|
|
31
|
-
|
|
32
|
-
|
|
32
|
+
...rest,
|
|
33
|
+
className: cn("font-bold text-xs md:text-sm", lineClampClass, className),
|
|
33
34
|
children
|
|
34
35
|
});
|
|
35
36
|
};
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { Status } from "../../../types/variables.mjs";
|
|
2
|
-
import { FC } from "react";
|
|
2
|
+
import { FC, HTMLAttributes } from "react";
|
|
3
3
|
|
|
4
4
|
//#region src/components/feedback/alert/alert.d.ts
|
|
5
5
|
type Props = {
|
|
6
6
|
status: Status;
|
|
7
7
|
message: string | string[];
|
|
8
|
-
}
|
|
8
|
+
} & Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'role'>;
|
|
9
9
|
declare const Alert: FC<Props>;
|
|
10
10
|
//#endregion
|
|
11
11
|
export { Alert };
|
|
@@ -8,8 +8,9 @@ const STATUS_LABEL = {
|
|
|
8
8
|
warning: "警告",
|
|
9
9
|
error: "エラー"
|
|
10
10
|
};
|
|
11
|
-
const Alert = ({ status, message }) => /* @__PURE__ */ jsxs("div", {
|
|
12
|
-
|
|
11
|
+
const Alert = ({ status, message, className, ...rest }) => /* @__PURE__ */ jsxs("div", {
|
|
12
|
+
...rest,
|
|
13
|
+
className: cn("flex items-center gap-3 rounded-lg p-4", status === "success" && "bg-bg-success", status === "info" && "bg-bg-info", status === "warning" && "bg-bg-warning", status === "error" && "bg-bg-error", className),
|
|
13
14
|
role: status === "error" || status === "warning" ? "alert" : "status",
|
|
14
15
|
children: [/* @__PURE__ */ jsxs("span", {
|
|
15
16
|
className: cn(status === "success" && "text-fg-success", status === "info" && "text-fg-info", status === "warning" && "text-fg-warning", status === "error" && "text-fg-error"),
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import { FC } from "react";
|
|
1
|
+
import { FC, HTMLAttributes } from "react";
|
|
2
2
|
|
|
3
3
|
//#region src/components/feedback/progress/progress.d.ts
|
|
4
|
-
|
|
4
|
+
type Props = {
|
|
5
5
|
progress: number;
|
|
6
6
|
maxProgress: number;
|
|
7
7
|
minProgress?: number;
|
|
8
8
|
label?: string;
|
|
9
|
-
}>;
|
|
9
|
+
} & Omit<HTMLAttributes<HTMLDivElement>, 'children'>;
|
|
10
|
+
declare const Progress: FC<Props>;
|
|
10
11
|
//#endregion
|
|
11
12
|
export { Progress };
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import { cn } from "../../../helpers/cn.mjs";
|
|
1
2
|
import { toPrecision } from "../../../helpers/number/to-precision.mjs";
|
|
2
3
|
import { jsx } from "react/jsx-runtime";
|
|
3
4
|
//#region src/components/feedback/progress/progress.tsx
|
|
4
|
-
const Progress = ({ progress, maxProgress, minProgress = 0, label }) => /* @__PURE__ */ jsx("div", {
|
|
5
|
-
|
|
5
|
+
const Progress = ({ progress, maxProgress, minProgress = 0, label, className, ...rest }) => /* @__PURE__ */ jsx("div", {
|
|
6
|
+
...rest,
|
|
7
|
+
className: cn("bg-bg-emphasize w-full rounded-full", className),
|
|
6
8
|
children: /* @__PURE__ */ jsx("div", {
|
|
7
9
|
"aria-label": label ?? `${toPrecision(progress / maxProgress).toString()}%`,
|
|
8
10
|
"aria-valuemax": maxProgress,
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { FC } from "react";
|
|
1
|
+
import { FC, HTMLAttributes } from "react";
|
|
2
2
|
|
|
3
3
|
//#region src/components/feedback/skeleton/skeleton.d.ts
|
|
4
4
|
type Props = {
|
|
5
5
|
animate?: boolean;
|
|
6
6
|
shape?: 'rect' | 'circle';
|
|
7
7
|
size?: 'sm' | 'md' | 'lg';
|
|
8
|
-
}
|
|
8
|
+
} & Omit<HTMLAttributes<HTMLDivElement>, 'children'>;
|
|
9
9
|
declare const Skeleton: FC<Props>;
|
|
10
10
|
//#endregion
|
|
11
11
|
export { Skeleton };
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { cn } from "../../../helpers/cn.mjs";
|
|
2
2
|
import { jsx } from "react/jsx-runtime";
|
|
3
3
|
//#region src/components/feedback/skeleton/skeleton.tsx
|
|
4
|
-
const Skeleton = ({ animate = true, shape = "rect", size = "md" }) => /* @__PURE__ */ jsx("div", {
|
|
4
|
+
const Skeleton = ({ animate = true, shape = "rect", size = "md", className, ...rest }) => /* @__PURE__ */ jsx("div", {
|
|
5
|
+
...rest,
|
|
5
6
|
"aria-hidden": true,
|
|
6
|
-
className: cn("bg-bg-mute", animate && "animate-pulse", shape === "rect" && "rounded-lg", shape === "rect" && size === "sm" && "h-3 w-24", shape === "rect" && size === "md" && "h-4 w-40", shape === "rect" && size === "lg" && "h-5 w-56", shape === "circle" && "rounded-full", shape === "circle" && size === "sm" && "size-8", shape === "circle" && size === "md" && "size-12", shape === "circle" && size === "lg" && "size-16")
|
|
7
|
+
className: cn("bg-bg-mute", animate && "animate-pulse", shape === "rect" && "rounded-lg", shape === "rect" && size === "sm" && "h-3 w-24", shape === "rect" && size === "md" && "h-4 w-40", shape === "rect" && size === "lg" && "h-5 w-56", shape === "circle" && "rounded-full", shape === "circle" && size === "sm" && "size-8", shape === "circle" && size === "md" && "size-12", shape === "circle" && size === "lg" && "size-16", className)
|
|
7
8
|
});
|
|
8
9
|
//#endregion
|
|
9
10
|
export { Skeleton };
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { FC } from "react";
|
|
1
|
+
import { FC, OutputHTMLAttributes } from "react";
|
|
2
2
|
|
|
3
3
|
//#region src/components/feedback/spinner/spinner.d.ts
|
|
4
4
|
type Props = {
|
|
5
5
|
label?: string;
|
|
6
6
|
size?: 'sm' | 'md' | 'lg';
|
|
7
|
-
}
|
|
7
|
+
} & Omit<OutputHTMLAttributes<HTMLOutputElement>, 'children' | 'aria-label'>;
|
|
8
8
|
declare const Spinner: FC<Props>;
|
|
9
9
|
//#endregion
|
|
10
10
|
export { Spinner };
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { cn } from "../../../helpers/cn.mjs";
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
//#region src/components/feedback/spinner/spinner.tsx
|
|
4
|
-
const Spinner = ({ label = "Loading", size = "md" }) => /* @__PURE__ */ jsxs("output", {
|
|
4
|
+
const Spinner = ({ label = "Loading", size = "md", className, ...rest }) => /* @__PURE__ */ jsxs("output", {
|
|
5
|
+
...rest,
|
|
5
6
|
"aria-label": label,
|
|
6
7
|
"aria-live": "polite",
|
|
7
|
-
className: "inline-flex items-center justify-center",
|
|
8
|
+
className: cn("inline-flex items-center justify-center", className),
|
|
8
9
|
children: [/* @__PURE__ */ jsx("span", {
|
|
9
10
|
"aria-hidden": true,
|
|
10
11
|
className: cn("inline-block animate-spin rounded-full border-4 border-border-base border-t-primary-border", size === "sm" && "size-4", size === "md" && "size-6", size === "lg" && "size-8")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { Alert } from "../alert/alert.mjs";
|
|
3
2
|
import { useToast } from "./context.mjs";
|
|
3
|
+
import { Alert } from "../alert/alert.mjs";
|
|
4
4
|
import { useTimeout } from "../../../hooks/timeout/index.mjs";
|
|
5
5
|
import { useCallback } from "react";
|
|
6
6
|
import { jsx } from "react/jsx-runtime";
|
|
@@ -1,16 +1,12 @@
|
|
|
1
1
|
import { Option } from "../../../types/variables.mjs";
|
|
2
|
-
import { FC } from "react";
|
|
2
|
+
import { FC, InputHTMLAttributes } from "react";
|
|
3
3
|
|
|
4
4
|
//#region src/components/form/autocomplete/autocomplete.d.ts
|
|
5
5
|
type BaseProps = {
|
|
6
6
|
id: string;
|
|
7
|
-
|
|
8
|
-
describedbyId: string | undefined;
|
|
9
|
-
isInvalid: boolean;
|
|
10
|
-
isDisabled: boolean;
|
|
11
|
-
isRequired: boolean;
|
|
7
|
+
invalid?: boolean;
|
|
12
8
|
options: readonly Option[];
|
|
13
|
-
}
|
|
9
|
+
} & Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'role' | 'className' | 'value' | 'onChange' | 'defaultValue' | 'children' | 'id' | 'autoComplete' | 'aria-autocomplete' | 'aria-controls' | 'aria-expanded'>;
|
|
14
10
|
type ControlledProps = {
|
|
15
11
|
value: string[];
|
|
16
12
|
onChange: (value: string[]) => void;
|