@schemavaults/ui 0.74.0 → 0.76.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/ui/description-list/description-list.d.ts +66 -0
- package/dist/components/ui/description-list/description-list.js +87 -0
- package/dist/components/ui/description-list/description-list.js.map +1 -0
- package/dist/components/ui/description-list/index.d.ts +3 -0
- package/dist/components/ui/description-list/index.js +3 -0
- package/dist/components/ui/description-list/index.js.map +1 -0
- package/dist/components/ui/index.d.ts +4 -0
- package/dist/components/ui/index.js +2 -0
- package/dist/components/ui/index.js.map +1 -1
- package/dist/components/ui/inline-edit/index.d.ts +4 -0
- package/dist/components/ui/inline-edit/index.js +3 -0
- package/dist/components/ui/inline-edit/index.js.map +1 -0
- package/dist/components/ui/inline-edit/inline-edit-variants.d.ts +4 -0
- package/dist/components/ui/inline-edit/inline-edit-variants.js +11 -0
- package/dist/components/ui/inline-edit/inline-edit-variants.js.map +1 -0
- package/dist/components/ui/inline-edit/inline-edit.d.ts +60 -0
- package/dist/components/ui/inline-edit/inline-edit.js +208 -0
- package/dist/components/ui/inline-edit/inline-edit.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { type VariantProps } from "class-variance-authority";
|
|
2
|
+
import type { HTMLAttributes, ReactElement, Ref } from "react";
|
|
3
|
+
export declare const descriptionListLayoutIds: ["stacked", "inline", "grid", "responsive"];
|
|
4
|
+
export type DescriptionListLayoutId = (typeof descriptionListLayoutIds)[number];
|
|
5
|
+
export declare const descriptionListSizeIds: ["sm", "md", "lg"];
|
|
6
|
+
export type DescriptionListSizeId = (typeof descriptionListSizeIds)[number];
|
|
7
|
+
export declare const descriptionListVariantIds: ["default", "card", "muted"];
|
|
8
|
+
export type DescriptionListVariantId = (typeof descriptionListVariantIds)[number];
|
|
9
|
+
declare const descriptionListVariants: (props?: ({
|
|
10
|
+
variant?: "default" | "muted" | "card" | null | undefined;
|
|
11
|
+
size?: "sm" | "lg" | "md" | null | undefined;
|
|
12
|
+
padded?: boolean | null | undefined;
|
|
13
|
+
divided?: boolean | null | undefined;
|
|
14
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
15
|
+
export interface DescriptionListProps extends HTMLAttributes<HTMLDListElement>, Omit<VariantProps<typeof descriptionListVariants>, "padded" | "divided"> {
|
|
16
|
+
/**
|
|
17
|
+
* Controls how each term/details pair is laid out.
|
|
18
|
+
* - `stacked`: dt above dd (default)
|
|
19
|
+
* - `inline`: dt and dd on the same row
|
|
20
|
+
* - `grid`: 1/3 + 2/3 grid columns on all sizes
|
|
21
|
+
* - `responsive`: stacked on mobile, grid on `sm:` and up
|
|
22
|
+
*/
|
|
23
|
+
layout?: DescriptionListLayoutId;
|
|
24
|
+
/**
|
|
25
|
+
* Adds horizontal padding so the list sits nicely inside `card`/`muted`
|
|
26
|
+
* containers. Defaults to true when `variant` is `card` or `muted`.
|
|
27
|
+
*/
|
|
28
|
+
padded?: boolean;
|
|
29
|
+
/** Add a thin divider between consecutive items. */
|
|
30
|
+
divided?: boolean;
|
|
31
|
+
ref?: Ref<HTMLDListElement>;
|
|
32
|
+
}
|
|
33
|
+
declare function DescriptionList({ className, variant, size, layout, padded, divided, ref, ...props }: DescriptionListProps): ReactElement;
|
|
34
|
+
declare namespace DescriptionList {
|
|
35
|
+
var displayName: string;
|
|
36
|
+
}
|
|
37
|
+
declare const descriptionItemVariants: (props?: ({
|
|
38
|
+
layout?: "grid" | "inline" | "stacked" | "responsive" | null | undefined;
|
|
39
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
40
|
+
export interface DescriptionItemProps extends HTMLAttributes<HTMLDivElement>, VariantProps<typeof descriptionItemVariants> {
|
|
41
|
+
ref?: Ref<HTMLDivElement>;
|
|
42
|
+
}
|
|
43
|
+
declare function DescriptionItem({ className, layout, ref, ...props }: DescriptionItemProps): ReactElement;
|
|
44
|
+
declare namespace DescriptionItem {
|
|
45
|
+
var displayName: string;
|
|
46
|
+
}
|
|
47
|
+
export interface DescriptionTermProps extends HTMLAttributes<HTMLElement> {
|
|
48
|
+
ref?: Ref<HTMLElement>;
|
|
49
|
+
}
|
|
50
|
+
declare function DescriptionTerm({ className, ref, ...props }: DescriptionTermProps): ReactElement;
|
|
51
|
+
declare namespace DescriptionTerm {
|
|
52
|
+
var displayName: string;
|
|
53
|
+
}
|
|
54
|
+
export interface DescriptionDetailsProps extends HTMLAttributes<HTMLElement> {
|
|
55
|
+
/**
|
|
56
|
+
* When true, render a skeleton placeholder in place of the value. Useful for
|
|
57
|
+
* async data fetches where the term is known but the value is still loading.
|
|
58
|
+
*/
|
|
59
|
+
loading?: boolean;
|
|
60
|
+
ref?: Ref<HTMLElement>;
|
|
61
|
+
}
|
|
62
|
+
declare function DescriptionDetails({ className, loading, children, ref, ...props }: DescriptionDetailsProps): ReactElement;
|
|
63
|
+
declare namespace DescriptionDetails {
|
|
64
|
+
var displayName: string;
|
|
65
|
+
}
|
|
66
|
+
export { DescriptionList, DescriptionItem, DescriptionTerm, DescriptionDetails, descriptionListVariants, descriptionItemVariants, };
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { cva } from "class-variance-authority";
|
|
4
|
+
import { cn } from "../../../lib/utils";
|
|
5
|
+
import { Skeleton } from "../skeleton/skeleton";
|
|
6
|
+
export const descriptionListLayoutIds = [
|
|
7
|
+
"stacked",
|
|
8
|
+
"inline",
|
|
9
|
+
"grid",
|
|
10
|
+
"responsive",
|
|
11
|
+
];
|
|
12
|
+
export const descriptionListSizeIds = ["sm", "md", "lg"];
|
|
13
|
+
export const descriptionListVariantIds = [
|
|
14
|
+
"default",
|
|
15
|
+
"card",
|
|
16
|
+
"muted",
|
|
17
|
+
];
|
|
18
|
+
const descriptionListVariants = cva("w-full text-foreground", {
|
|
19
|
+
variants: {
|
|
20
|
+
variant: {
|
|
21
|
+
default: "",
|
|
22
|
+
card: "rounded-lg border border-border bg-card text-card-foreground shadow-sm",
|
|
23
|
+
muted: "rounded-lg bg-muted/40",
|
|
24
|
+
},
|
|
25
|
+
size: {
|
|
26
|
+
sm: "text-xs [&_dt]:text-xs [&_dd]:text-xs",
|
|
27
|
+
md: "text-sm [&_dt]:text-sm [&_dd]:text-sm",
|
|
28
|
+
lg: "text-base [&_dt]:text-base [&_dd]:text-base",
|
|
29
|
+
},
|
|
30
|
+
padded: {
|
|
31
|
+
true: "",
|
|
32
|
+
false: "",
|
|
33
|
+
},
|
|
34
|
+
divided: {
|
|
35
|
+
true: "[&>*+*]:border-t [&>*+*]:border-border",
|
|
36
|
+
false: "",
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
compoundVariants: [
|
|
40
|
+
{ variant: "card", padded: true, class: "px-4 py-2" },
|
|
41
|
+
{ variant: "muted", padded: true, class: "px-4 py-2" },
|
|
42
|
+
{ variant: "default", padded: true, class: "py-1" },
|
|
43
|
+
],
|
|
44
|
+
defaultVariants: {
|
|
45
|
+
variant: "default",
|
|
46
|
+
size: "md",
|
|
47
|
+
padded: false,
|
|
48
|
+
divided: false,
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
function DescriptionList({ className, variant = "default", size = "md", layout = "stacked", padded, divided = false, ref, ...props }) {
|
|
52
|
+
const resolvedPadded = padded ?? (variant === "card" || variant === "muted");
|
|
53
|
+
return (_jsx("dl", { ref: ref, "data-slot": "description-list", "data-layout": layout, "data-variant": variant ?? "default", className: cn(descriptionListVariants({
|
|
54
|
+
variant,
|
|
55
|
+
size,
|
|
56
|
+
padded: resolvedPadded,
|
|
57
|
+
divided,
|
|
58
|
+
}), className), ...props }));
|
|
59
|
+
}
|
|
60
|
+
DescriptionList.displayName = "DescriptionList";
|
|
61
|
+
const descriptionItemVariants = cva("", {
|
|
62
|
+
variants: {
|
|
63
|
+
layout: {
|
|
64
|
+
stacked: "flex flex-col gap-1 py-2",
|
|
65
|
+
inline: "flex flex-row items-baseline justify-between gap-4 py-2",
|
|
66
|
+
grid: "grid grid-cols-3 gap-4 py-2",
|
|
67
|
+
responsive: "flex flex-col gap-1 py-2 sm:grid sm:grid-cols-3 sm:gap-4",
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
defaultVariants: {
|
|
71
|
+
layout: "stacked",
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
function DescriptionItem({ className, layout, ref, ...props }) {
|
|
75
|
+
return (_jsx("div", { ref: ref, "data-slot": "description-item", className: cn(descriptionItemVariants({ layout }), className), ...props }));
|
|
76
|
+
}
|
|
77
|
+
DescriptionItem.displayName = "DescriptionItem";
|
|
78
|
+
function DescriptionTerm({ className, ref, ...props }) {
|
|
79
|
+
return (_jsx("dt", { ref: ref, "data-slot": "description-term", className: cn("font-medium text-muted-foreground leading-snug", className), ...props }));
|
|
80
|
+
}
|
|
81
|
+
DescriptionTerm.displayName = "DescriptionTerm";
|
|
82
|
+
function DescriptionDetails({ className, loading = false, children, ref, ...props }) {
|
|
83
|
+
return (_jsx("dd", { ref: ref, "data-slot": "description-details", className: cn("text-foreground leading-snug sm:col-span-2", className), ...props, children: loading ? (_jsx(Skeleton, { "data-slot": "description-details-skeleton", className: "h-4 w-32" })) : (children) }));
|
|
84
|
+
}
|
|
85
|
+
DescriptionDetails.displayName = "DescriptionDetails";
|
|
86
|
+
export { DescriptionList, DescriptionItem, DescriptionTerm, DescriptionDetails, descriptionListVariants, descriptionItemVariants, };
|
|
87
|
+
//# sourceMappingURL=description-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"description-list.js","sourceRoot":"","sources":["../../../../src/components/ui/description-list/description-list.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { DescriptionList, DescriptionItem, DescriptionTerm, DescriptionDetails, descriptionListVariants, descriptionItemVariants, descriptionListLayoutIds, descriptionListSizeIds, descriptionListVariantIds, } from "./description-list";
|
|
2
|
+
export type { DescriptionListProps, DescriptionItemProps, DescriptionTermProps, DescriptionDetailsProps, DescriptionListLayoutId, DescriptionListSizeId, DescriptionListVariantId, } from "./description-list";
|
|
3
|
+
export { DescriptionList as default } from "./description-list";
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { DescriptionList, DescriptionItem, DescriptionTerm, DescriptionDetails, descriptionListVariants, descriptionItemVariants, descriptionListLayoutIds, descriptionListSizeIds, descriptionListVariantIds, } from "./description-list";
|
|
2
|
+
export { DescriptionList as default } from "./description-list";
|
|
3
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/ui/description-list/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAW5B,OAAO,EAAE,eAAe,IAAI,OAAO,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -78,6 +78,8 @@ export * from "./skeleton";
|
|
|
78
78
|
export type * from "./skeleton";
|
|
79
79
|
export * from "./key-value-with-skeleton";
|
|
80
80
|
export type * from "./key-value-with-skeleton";
|
|
81
|
+
export * from "./description-list";
|
|
82
|
+
export type * from "./description-list";
|
|
81
83
|
export * from "./status-blinker";
|
|
82
84
|
export type * from "./status-blinker";
|
|
83
85
|
export * from "./context-menu";
|
|
@@ -200,3 +202,5 @@ export * from "./http-method-badge";
|
|
|
200
202
|
export type * from "./http-method-badge";
|
|
201
203
|
export * from "./browser-frame";
|
|
202
204
|
export type * from "./browser-frame";
|
|
205
|
+
export * from "./inline-edit";
|
|
206
|
+
export type * from "./inline-edit";
|
|
@@ -38,6 +38,7 @@ export * from "./hover-card";
|
|
|
38
38
|
export * from "./radio-group";
|
|
39
39
|
export * from "./skeleton";
|
|
40
40
|
export * from "./key-value-with-skeleton";
|
|
41
|
+
export * from "./description-list";
|
|
41
42
|
export * from "./status-blinker";
|
|
42
43
|
export * from "./context-menu";
|
|
43
44
|
export * from "./inline-menu";
|
|
@@ -99,4 +100,5 @@ export * from "./time-picker";
|
|
|
99
100
|
export * from "./mark";
|
|
100
101
|
export * from "./http-method-badge";
|
|
101
102
|
export * from "./browser-frame";
|
|
103
|
+
export * from "./inline-edit";
|
|
102
104
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { InlineEdit, InlineEdit as default, inlineEditDisplayVariants, inlineEditInputVariants, } from "./inline-edit";
|
|
2
|
+
export type { InlineEditCommitTrigger, InlineEditProps, } from "./inline-edit";
|
|
3
|
+
export { inlineEditSizeIds, inlineEditVariantIds, } from "./inline-edit-variants";
|
|
4
|
+
export type { InlineEditSize, InlineEditVariant, } from "./inline-edit-variants";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/ui/inline-edit/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,UAAU,IAAI,OAAO,EACrB,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,eAAe,CAAC;AAKvB,OAAO,EACL,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare const inlineEditVariantIds: readonly ["default", "ghost", "underline"];
|
|
2
|
+
export type InlineEditVariant = (typeof inlineEditVariantIds)[number];
|
|
3
|
+
export declare const inlineEditSizeIds: readonly ["sm", "default", "lg"];
|
|
4
|
+
export type InlineEditSize = (typeof inlineEditSizeIds)[number];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inline-edit-variants.js","sourceRoot":"","sources":["../../../../src/components/ui/inline-edit/inline-edit-variants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,SAAS;IACT,OAAO;IACP,WAAW;CACyB,CAAC;AAGvC,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,IAAI;IACJ,SAAS;IACT,IAAI;CACgC,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { type VariantProps } from "class-variance-authority";
|
|
2
|
+
import { type HTMLAttributes, type ReactElement, type ReactNode, type Ref } from "react";
|
|
3
|
+
import { inlineEditSizeIds, inlineEditVariantIds, type InlineEditSize, type InlineEditVariant } from "./inline-edit-variants";
|
|
4
|
+
declare const inlineEditDisplayVariants: (props?: ({
|
|
5
|
+
variant?: "default" | "underline" | "ghost" | null | undefined;
|
|
6
|
+
size?: "sm" | "default" | "lg" | null | undefined;
|
|
7
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
8
|
+
declare const inlineEditInputVariants: (props?: ({
|
|
9
|
+
size?: "sm" | "default" | "lg" | null | undefined;
|
|
10
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
11
|
+
export type InlineEditCommitTrigger = "enter" | "blur" | "button";
|
|
12
|
+
export interface InlineEditProps extends Omit<HTMLAttributes<HTMLDivElement>, "onChange" | "defaultValue" | "onBlur">, VariantProps<typeof inlineEditDisplayVariants> {
|
|
13
|
+
/** The current value to display. */
|
|
14
|
+
value: string;
|
|
15
|
+
/** Called when the user commits a new value (Enter, button, or blur). */
|
|
16
|
+
onValueChange?: (next: string, trigger: InlineEditCommitTrigger) => void;
|
|
17
|
+
/** Called when the user cancels editing (Escape or cancel button). */
|
|
18
|
+
onCancel?: (previous: string) => void;
|
|
19
|
+
/** Optional async save handler. When it rejects, the input stays in edit mode. */
|
|
20
|
+
onSave?: (next: string) => Promise<void> | void;
|
|
21
|
+
/** Placeholder shown when the value is empty. */
|
|
22
|
+
placeholder?: string;
|
|
23
|
+
/** Disables interaction; the value still renders. */
|
|
24
|
+
disabled?: boolean;
|
|
25
|
+
/** Use a multi-line textarea instead of a single-line input. */
|
|
26
|
+
multiline?: boolean;
|
|
27
|
+
/** Show explicit confirm/cancel buttons inside the editor. Defaults to true. */
|
|
28
|
+
showActions?: boolean;
|
|
29
|
+
/** Show a small pencil icon affordance next to the display value. Defaults to true. */
|
|
30
|
+
showEditIcon?: boolean;
|
|
31
|
+
/** Commit the value when the input loses focus. Defaults to true. */
|
|
32
|
+
commitOnBlur?: boolean;
|
|
33
|
+
/** Maximum length for the underlying input. */
|
|
34
|
+
maxLength?: number;
|
|
35
|
+
/** Accessible label for the underlying input. */
|
|
36
|
+
inputAriaLabel?: string;
|
|
37
|
+
/** Accessible label for the confirm button. */
|
|
38
|
+
confirmLabel?: string;
|
|
39
|
+
/** Accessible label for the cancel button. */
|
|
40
|
+
cancelLabel?: string;
|
|
41
|
+
/** Externally controlled error message. Skips committing and keeps edit mode open. */
|
|
42
|
+
error?: string | null;
|
|
43
|
+
/** Externally controlled loading state (e.g. when `onSave` is in flight). */
|
|
44
|
+
loading?: boolean;
|
|
45
|
+
/** Renders the editor open on first mount. */
|
|
46
|
+
defaultEditing?: boolean;
|
|
47
|
+
/** Optional ref forwarded to the outer wrapper. */
|
|
48
|
+
ref?: Ref<HTMLDivElement>;
|
|
49
|
+
/** Optional class names applied to the inner input/textarea element. */
|
|
50
|
+
inputClassName?: string;
|
|
51
|
+
/** Optional renderer for the display state. Receives the resolved label. */
|
|
52
|
+
renderDisplay?: (label: ReactNode, value: string) => ReactNode;
|
|
53
|
+
}
|
|
54
|
+
export declare function InlineEdit({ value, onValueChange, onCancel, onSave, placeholder, disabled, multiline, showActions, showEditIcon, commitOnBlur, maxLength, inputAriaLabel, confirmLabel, cancelLabel, error: externalError, loading: externalLoading, defaultEditing, variant, size, className, inputClassName, renderDisplay, ref, onClick, ...rest }: InlineEditProps): ReactElement;
|
|
55
|
+
export declare namespace InlineEdit {
|
|
56
|
+
var displayName: string;
|
|
57
|
+
}
|
|
58
|
+
export { inlineEditDisplayVariants, inlineEditInputVariants, inlineEditSizeIds, inlineEditVariantIds, };
|
|
59
|
+
export type { InlineEditSize, InlineEditVariant };
|
|
60
|
+
export default InlineEdit;
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { cva } from "class-variance-authority";
|
|
4
|
+
import { Check, Pencil, X } from "lucide-react";
|
|
5
|
+
import { useCallback, useEffect, useId, useLayoutEffect, useRef, useState, } from "react";
|
|
6
|
+
import { cn } from "../../../lib/utils";
|
|
7
|
+
import { inlineEditSizeIds, inlineEditVariantIds, } from "./inline-edit-variants";
|
|
8
|
+
const inlineEditDisplayVariants = cva("group/inline-edit inline-flex max-w-full items-center gap-1.5 rounded-md text-foreground transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background data-[disabled=true]:cursor-not-allowed data-[disabled=true]:opacity-60 data-[empty=true]:text-muted-foreground", {
|
|
9
|
+
variants: {
|
|
10
|
+
variant: {
|
|
11
|
+
default: "border border-transparent hover:border-input data-[interactive=true]:hover:bg-accent/40",
|
|
12
|
+
ghost: "border border-transparent data-[interactive=true]:hover:bg-accent/60",
|
|
13
|
+
underline: "rounded-none border-b border-dashed border-transparent data-[interactive=true]:hover:border-input data-[interactive=true]:hover:text-foreground",
|
|
14
|
+
},
|
|
15
|
+
size: {
|
|
16
|
+
sm: "min-h-7 px-1.5 py-0.5 text-xs",
|
|
17
|
+
default: "min-h-9 px-2 py-1 text-sm",
|
|
18
|
+
lg: "min-h-11 px-2.5 py-1.5 text-base",
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
defaultVariants: {
|
|
22
|
+
variant: "default",
|
|
23
|
+
size: "default",
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
const inlineEditInputVariants = cva("w-full bg-transparent text-foreground placeholder:text-muted-foreground focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-60", {
|
|
27
|
+
variants: {
|
|
28
|
+
size: {
|
|
29
|
+
sm: "text-xs",
|
|
30
|
+
default: "text-sm",
|
|
31
|
+
lg: "text-base",
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
defaultVariants: {
|
|
35
|
+
size: "default",
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
const inlineEditContainerVariants = cva("inline-flex max-w-full items-stretch gap-1 rounded-md bg-background ring-2 ring-ring ring-offset-2 ring-offset-background", {
|
|
39
|
+
variants: {
|
|
40
|
+
size: {
|
|
41
|
+
sm: "min-h-7 px-1.5 py-0.5",
|
|
42
|
+
default: "min-h-9 px-2 py-1",
|
|
43
|
+
lg: "min-h-11 px-2.5 py-1.5",
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
defaultVariants: {
|
|
47
|
+
size: "default",
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
const inlineEditActionButtonVariants = cva("inline-flex shrink-0 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-50 data-[role=confirm]:text-emerald-600 data-[role=confirm]:hover:bg-emerald-500/10 data-[role=confirm]:hover:text-emerald-600 data-[role=cancel]:hover:bg-destructive/10 data-[role=cancel]:hover:text-destructive", {
|
|
51
|
+
variants: {
|
|
52
|
+
size: {
|
|
53
|
+
sm: "size-5 [&>svg]:size-3",
|
|
54
|
+
default: "size-6 [&>svg]:size-3.5",
|
|
55
|
+
lg: "size-7 [&>svg]:size-4",
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
defaultVariants: {
|
|
59
|
+
size: "default",
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
function isTextarea(el) {
|
|
63
|
+
return el?.tagName === "TEXTAREA";
|
|
64
|
+
}
|
|
65
|
+
export function InlineEdit({ value, onValueChange, onCancel, onSave, placeholder = "Click to edit", disabled = false, multiline = false, showActions = true, showEditIcon = true, commitOnBlur = true, maxLength, inputAriaLabel, confirmLabel = "Save", cancelLabel = "Cancel", error: externalError = null, loading: externalLoading = false, defaultEditing = false, variant, size, className, inputClassName, renderDisplay, ref, onClick, ...rest }) {
|
|
66
|
+
const [editing, setEditing] = useState(defaultEditing);
|
|
67
|
+
const [draft, setDraft] = useState(value);
|
|
68
|
+
const [internalLoading, setInternalLoading] = useState(false);
|
|
69
|
+
const [internalError, setInternalError] = useState(null);
|
|
70
|
+
const wasJustOpened = useRef(false);
|
|
71
|
+
const inputRef = useRef(null);
|
|
72
|
+
const reactId = useId();
|
|
73
|
+
const errorId = `${reactId}-error`;
|
|
74
|
+
const isLoading = externalLoading || internalLoading;
|
|
75
|
+
const errorMessage = externalError ?? internalError;
|
|
76
|
+
const hasError = errorMessage !== null && errorMessage !== "";
|
|
77
|
+
useEffect(() => {
|
|
78
|
+
if (!editing)
|
|
79
|
+
setDraft(value);
|
|
80
|
+
}, [value, editing]);
|
|
81
|
+
useLayoutEffect(() => {
|
|
82
|
+
if (!editing)
|
|
83
|
+
return;
|
|
84
|
+
const el = inputRef.current;
|
|
85
|
+
if (el === null)
|
|
86
|
+
return;
|
|
87
|
+
if (wasJustOpened.current) {
|
|
88
|
+
wasJustOpened.current = false;
|
|
89
|
+
el.focus();
|
|
90
|
+
try {
|
|
91
|
+
const length = el.value.length;
|
|
92
|
+
el.setSelectionRange(length, length);
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
// setSelectionRange is unsupported on some input types; ignore.
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
if (isTextarea(el)) {
|
|
99
|
+
el.style.height = "auto";
|
|
100
|
+
el.style.height = `${el.scrollHeight}px`;
|
|
101
|
+
}
|
|
102
|
+
}, [editing, draft]);
|
|
103
|
+
const openEditor = useCallback(() => {
|
|
104
|
+
if (disabled)
|
|
105
|
+
return;
|
|
106
|
+
wasJustOpened.current = true;
|
|
107
|
+
setDraft(value);
|
|
108
|
+
setInternalError(null);
|
|
109
|
+
setEditing(true);
|
|
110
|
+
}, [disabled, value]);
|
|
111
|
+
const closeEditor = useCallback(() => {
|
|
112
|
+
setEditing(false);
|
|
113
|
+
setInternalError(null);
|
|
114
|
+
}, []);
|
|
115
|
+
const commit = useCallback(async (trigger) => {
|
|
116
|
+
if (isLoading)
|
|
117
|
+
return;
|
|
118
|
+
const next = draft;
|
|
119
|
+
if (next === value) {
|
|
120
|
+
closeEditor();
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
if (onSave === undefined) {
|
|
124
|
+
onValueChange?.(next, trigger);
|
|
125
|
+
closeEditor();
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
setInternalLoading(true);
|
|
129
|
+
try {
|
|
130
|
+
await onSave(next);
|
|
131
|
+
onValueChange?.(next, trigger);
|
|
132
|
+
closeEditor();
|
|
133
|
+
}
|
|
134
|
+
catch (err) {
|
|
135
|
+
const message = err instanceof Error ? err.message : "Failed to save value";
|
|
136
|
+
setInternalError(message);
|
|
137
|
+
}
|
|
138
|
+
finally {
|
|
139
|
+
setInternalLoading(false);
|
|
140
|
+
}
|
|
141
|
+
}, [closeEditor, draft, isLoading, onSave, onValueChange, value]);
|
|
142
|
+
const cancel = useCallback(() => {
|
|
143
|
+
if (isLoading)
|
|
144
|
+
return;
|
|
145
|
+
setDraft(value);
|
|
146
|
+
onCancel?.(value);
|
|
147
|
+
closeEditor();
|
|
148
|
+
}, [closeEditor, isLoading, onCancel, value]);
|
|
149
|
+
const handleChange = (event) => {
|
|
150
|
+
setDraft(event.target.value);
|
|
151
|
+
if (internalError !== null)
|
|
152
|
+
setInternalError(null);
|
|
153
|
+
};
|
|
154
|
+
const handleKeyDown = (event) => {
|
|
155
|
+
if (event.key === "Escape") {
|
|
156
|
+
event.preventDefault();
|
|
157
|
+
cancel();
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
if (event.key === "Enter") {
|
|
161
|
+
if (multiline && !(event.metaKey || event.ctrlKey))
|
|
162
|
+
return;
|
|
163
|
+
event.preventDefault();
|
|
164
|
+
void commit("enter");
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
const handleBlur = (event) => {
|
|
168
|
+
if (!commitOnBlur)
|
|
169
|
+
return;
|
|
170
|
+
const next = event.relatedTarget;
|
|
171
|
+
const root = event.currentTarget.closest("[data-slot=inline-edit-editor]");
|
|
172
|
+
if (next !== null && root !== null && root.contains(next))
|
|
173
|
+
return;
|
|
174
|
+
void commit("blur");
|
|
175
|
+
};
|
|
176
|
+
const handleDisplayKeyDown = (event) => {
|
|
177
|
+
if (disabled)
|
|
178
|
+
return;
|
|
179
|
+
if (event.key === "Enter" || event.key === " " || event.key === "F2") {
|
|
180
|
+
event.preventDefault();
|
|
181
|
+
openEditor();
|
|
182
|
+
}
|
|
183
|
+
};
|
|
184
|
+
const isEmpty = value.length === 0;
|
|
185
|
+
const displayLabel = isEmpty ? placeholder : value;
|
|
186
|
+
if (editing) {
|
|
187
|
+
return (_jsxs("div", { ref: ref, "data-slot": "inline-edit", "data-state": "editing", className: cn("inline-flex max-w-full flex-col gap-1", className), ...rest, children: [_jsxs("div", { "data-slot": "inline-edit-editor", className: cn(inlineEditContainerVariants({ size }), hasError && "ring-destructive", isLoading && "opacity-80"), children: [multiline ? (_jsx("textarea", { ref: (el) => {
|
|
188
|
+
inputRef.current = el;
|
|
189
|
+
}, "data-slot": "inline-edit-input", value: draft, disabled: isLoading, maxLength: maxLength, "aria-label": inputAriaLabel, "aria-invalid": hasError || undefined, "aria-describedby": hasError ? errorId : undefined, onChange: handleChange, onKeyDown: handleKeyDown, onBlur: handleBlur, rows: 1, className: cn(inlineEditInputVariants({ size }), "resize-none overflow-hidden", inputClassName) })) : (_jsx("input", { ref: (el) => {
|
|
190
|
+
inputRef.current = el;
|
|
191
|
+
}, type: "text", "data-slot": "inline-edit-input", value: draft, disabled: isLoading, maxLength: maxLength, "aria-label": inputAriaLabel, "aria-invalid": hasError || undefined, "aria-describedby": hasError ? errorId : undefined, onChange: handleChange, onKeyDown: handleKeyDown, onBlur: handleBlur, className: cn(inlineEditInputVariants({ size }), inputClassName) })), showActions && (_jsxs("div", { "data-slot": "inline-edit-actions", className: "inline-flex shrink-0 items-center gap-0.5", children: [_jsx("button", { type: "button", "data-role": "cancel", "data-slot": "inline-edit-cancel", "aria-label": cancelLabel, disabled: isLoading, onClick: cancel, className: cn(inlineEditActionButtonVariants({ size })), children: _jsx(X, { "aria-hidden": "true" }) }), _jsx("button", { type: "button", "data-role": "confirm", "data-slot": "inline-edit-confirm", "aria-label": confirmLabel, disabled: isLoading, onClick: () => {
|
|
192
|
+
void commit("button");
|
|
193
|
+
}, className: cn(inlineEditActionButtonVariants({ size })), children: _jsx(Check, { "aria-hidden": "true" }) })] }))] }), hasError && (_jsx("span", { id: errorId, "data-slot": "inline-edit-error", role: "alert", className: "text-xs text-destructive", children: errorMessage }))] }));
|
|
194
|
+
}
|
|
195
|
+
return (_jsxs("button", { ref: ref, type: "button", "data-slot": "inline-edit", "data-state": "idle", "data-empty": isEmpty || undefined, "data-disabled": disabled || undefined, "data-interactive": !disabled || undefined, "aria-label": inputAriaLabel, disabled: disabled, onClick: (event) => {
|
|
196
|
+
onClick?.(event);
|
|
197
|
+
if (event.defaultPrevented)
|
|
198
|
+
return;
|
|
199
|
+
openEditor();
|
|
200
|
+
}, onKeyDown: handleDisplayKeyDown, className: cn(inlineEditDisplayVariants({ variant, size }), "cursor-text text-left", className), ...rest, children: [_jsx("span", { "data-slot": "inline-edit-label", className: cn("min-w-0 flex-1 truncate", multiline && "whitespace-pre-wrap break-words"), children: renderDisplay !== undefined
|
|
201
|
+
? renderDisplay(displayLabel, value)
|
|
202
|
+
: displayLabel }), showEditIcon && !disabled && (_jsx(Pencil, { "aria-hidden": "true", "data-slot": "inline-edit-icon", className: cn("shrink-0 text-muted-foreground opacity-0 transition-opacity group-hover/inline-edit:opacity-100 group-focus-visible/inline-edit:opacity-100", size === "sm" && "size-3", (size === "default" || size === undefined || size === null) &&
|
|
203
|
+
"size-3.5", size === "lg" && "size-4") }))] }));
|
|
204
|
+
}
|
|
205
|
+
InlineEdit.displayName = "InlineEdit";
|
|
206
|
+
export { inlineEditDisplayVariants, inlineEditInputVariants, inlineEditSizeIds, inlineEditVariantIds, };
|
|
207
|
+
export default InlineEdit;
|
|
208
|
+
//# sourceMappingURL=inline-edit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inline-edit.js","sourceRoot":"","sources":["../../../../src/components/ui/inline-edit/inline-edit.tsx"],"names":[],"mappings":"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"}
|