@schemavaults/ui 0.70.0 → 0.72.1
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/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/mark/index.d.ts +4 -0
- package/dist/components/ui/mark/index.js +3 -0
- package/dist/components/ui/mark/index.js.map +1 -0
- package/dist/components/ui/mark/mark-variants.d.ts +6 -0
- package/dist/components/ui/mark/mark-variants.js +22 -0
- package/dist/components/ui/mark/mark-variants.js.map +1 -0
- package/dist/components/ui/mark/mark.d.ts +45 -0
- package/dist/components/ui/mark/mark.js +283 -0
- package/dist/components/ui/mark/mark.js.map +1 -0
- package/dist/components/ui/package-version/index.d.ts +3 -0
- package/dist/components/ui/package-version/index.js +3 -0
- package/dist/components/ui/package-version/index.js.map +1 -0
- package/dist/components/ui/package-version/package-version.d.ts +18 -0
- package/dist/components/ui/package-version/package-version.js +64 -0
- package/dist/components/ui/package-version/package-version.js.map +1 -0
- package/package.json +3 -3
|
@@ -38,6 +38,8 @@ export * from "./toaster";
|
|
|
38
38
|
export type * from "./toaster";
|
|
39
39
|
export * from "./wordmark";
|
|
40
40
|
export type * from "./wordmark";
|
|
41
|
+
export * from "./package-version";
|
|
42
|
+
export type * from "./package-version";
|
|
41
43
|
export * from "./card";
|
|
42
44
|
export type * from "./card";
|
|
43
45
|
export * from "./form";
|
|
@@ -192,3 +194,5 @@ export * from "./date-range-picker";
|
|
|
192
194
|
export type * from "./date-range-picker";
|
|
193
195
|
export * from "./time-picker";
|
|
194
196
|
export type * from "./time-picker";
|
|
197
|
+
export * from "./mark";
|
|
198
|
+
export type * from "./mark";
|
|
@@ -18,6 +18,7 @@ export * from "./label";
|
|
|
18
18
|
export * from "./toast";
|
|
19
19
|
export * from "./toaster";
|
|
20
20
|
export * from "./wordmark";
|
|
21
|
+
export * from "./package-version";
|
|
21
22
|
export * from "./card";
|
|
22
23
|
export * from "./form";
|
|
23
24
|
export * from "./separator";
|
|
@@ -95,4 +96,5 @@ export * from "./calendar";
|
|
|
95
96
|
export * from "./date-picker";
|
|
96
97
|
export * from "./date-range-picker";
|
|
97
98
|
export * from "./time-picker";
|
|
99
|
+
export * from "./mark";
|
|
98
100
|
//# 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":"AAAA,cAAc,UAAU,CAAC;AAGzB,cAAc,uBAAuB,CAAC;AAGtC,cAAc,aAAa,CAAC;AAG5B,cAAc,eAAe,CAAC;AAG9B,cAAc,SAAS,CAAC;AAGxB,cAAc,WAAW,CAAC;AAG1B,cAAc,cAAc,CAAC;AAG7B,cAAc,SAAS,CAAC;AAGxB,cAAc,mBAAmB,CAAC;AAGlC,cAAc,0BAA0B,CAAC;AAGzC,cAAc,UAAU,CAAC;AAGzB,cAAc,SAAS,CAAC;AAGxB,cAAc,kBAAkB,CAAC;AAGjC,cAAc,aAAa,CAAC;AAG5B,cAAc,kCAAkC,CAAC;AAGjD,cAAc,cAAc,CAAC;AAG7B,cAAc,SAAS,CAAC;AAGxB,cAAc,SAAS,CAAC;AAExB,cAAc,WAAW,CAAC;AAG1B,cAAc,YAAY,CAAC;AAG3B,cAAc,mBAAmB,CAAC;AAGlC,cAAc,QAAQ,CAAC;AAGvB,cAAc,QAAQ,CAAC;AAGvB,cAAc,aAAa,CAAC;AAG5B,cAAc,iBAAiB,CAAC;AAGhC,cAAc,WAAW,CAAC;AAG1B,cAAc,mBAAmB,CAAC;AAGlC,cAAc,UAAU,CAAC;AAGzB,cAAc,gBAAgB,CAAC;AAG/B,cAAc,WAAW,CAAC;AAG1B,cAAc,WAAW,CAAC;AAG1B,cAAc,YAAY,CAAC;AAG3B,cAAc,SAAS,CAAC;AAGxB,cAAc,aAAa,CAAC;AAG5B,cAAc,YAAY,CAAC;AAG3B,cAAc,YAAY,CAAC;AAG3B,cAAc,cAAc,CAAC;AAG7B,cAAc,eAAe,CAAC;AAG9B,cAAc,YAAY,CAAC;AAG3B,cAAc,2BAA2B,CAAC;AAG1C,cAAc,kBAAkB,CAAC;AAGjC,cAAc,gBAAgB,CAAC;AAG/B,cAAc,eAAe,CAAC;AAG9B,cAAc,WAAW,CAAC;AAG1B,cAAc,gBAAgB,CAAC;AAG/B,cAAc,cAAc,CAAC;AAG7B,cAAc,SAAS,CAAC;AAGxB,cAAc,UAAU,CAAC;AAGzB,cAAc,eAAe,CAAC;AAG9B,cAAc,qBAAqB,CAAC;AAGpC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,QAAQ,CAAC;AAGvB,cAAc,QAAQ,CAAC;AAGvB,cAAc,UAAU,CAAC;AAGzB,cAAc,UAAU,CAAC;AAGzB,cAAc,gBAAgB,CAAC;AAG/B,cAAc,qBAAqB,CAAC;AAGpC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,SAAS,CAAC;AAGxB,cAAc,cAAc,CAAC;AAG7B,cAAc,cAAc,CAAC;AAG7B,cAAc,OAAO,CAAC;AAGtB,cAAc,eAAe,CAAC;AAG9B,cAAc,WAAW,CAAC;AAG1B,cAAc,UAAU,CAAC;AAGzB,cAAc,eAAe,CAAC;AAG9B,cAAc,aAAa,CAAC;AAG5B,cAAc,YAAY,CAAC;AAG3B,cAAc,UAAU,CAAC;AAGzB,cAAc,gBAAgB,CAAC;AAG/B,cAAc,cAAc,CAAC;AAG7B,cAAc,iBAAiB,CAAC;AAGhC,cAAc,eAAe,CAAC;AAG9B,cAAc,eAAe,CAAC;AAG9B,cAAc,qBAAqB,CAAC;AAGpC,cAAc,WAAW,CAAC;AAG1B,cAAc,UAAU,CAAC;AAGzB,cAAc,QAAQ,CAAC;AAGvB,cAAc,cAAc,CAAC;AAG7B,cAAc,iBAAiB,CAAC;AAGhC,cAAc,aAAa,CAAC;AAG5B,cAAc,gBAAgB,CAAC;AAG/B,cAAc,gBAAgB,CAAC;AAG/B,cAAc,oBAAoB,CAAC;AAGnC,cAAc,aAAa,CAAC;AAG5B,cAAc,aAAa,CAAC;AAG5B,cAAc,qBAAqB,CAAC;AAGpC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,aAAa,CAAC;AAG5B,cAAc,YAAY,CAAC;AAG3B,cAAc,aAAa,CAAC;AAG5B,cAAc,0BAA0B,CAAC;AAGzC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,YAAY,CAAC;AAG3B,cAAc,eAAe,CAAC;AAG9B,cAAc,qBAAqB,CAAC;AAGpC,cAAc,eAAe,CAAC;AAG9B,cAAc,QAAQ,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { Mark, Mark as default, HighlightedText, markVariants, } from "./mark";
|
|
2
|
+
export type { MarkProps, HighlightedTextProps } from "./mark";
|
|
3
|
+
export { markVariantIds, markStyleIds, markSizeIds, } from "./mark-variants";
|
|
4
|
+
export type { MarkVariant, MarkStyle, MarkSize } from "./mark-variants";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/ui/mark/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,IAAI,IAAI,OAAO,EACf,eAAe,EACf,YAAY,GACb,MAAM,QAAQ,CAAC;AAEhB,OAAO,EACL,cAAc,EACd,YAAY,EACZ,WAAW,GACZ,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const markVariantIds: readonly ["default", "primary", "secondary", "info", "success", "warning", "destructive", "accent"];
|
|
2
|
+
export type MarkVariant = (typeof markVariantIds)[number];
|
|
3
|
+
export declare const markStyleIds: readonly ["solid", "soft", "underline", "outline"];
|
|
4
|
+
export type MarkStyle = (typeof markStyleIds)[number];
|
|
5
|
+
export declare const markSizeIds: readonly ["sm", "default", "lg"];
|
|
6
|
+
export type MarkSize = (typeof markSizeIds)[number];
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export const markVariantIds = [
|
|
2
|
+
"default",
|
|
3
|
+
"primary",
|
|
4
|
+
"secondary",
|
|
5
|
+
"info",
|
|
6
|
+
"success",
|
|
7
|
+
"warning",
|
|
8
|
+
"destructive",
|
|
9
|
+
"accent",
|
|
10
|
+
];
|
|
11
|
+
export const markStyleIds = [
|
|
12
|
+
"solid",
|
|
13
|
+
"soft",
|
|
14
|
+
"underline",
|
|
15
|
+
"outline",
|
|
16
|
+
];
|
|
17
|
+
export const markSizeIds = [
|
|
18
|
+
"sm",
|
|
19
|
+
"default",
|
|
20
|
+
"lg",
|
|
21
|
+
];
|
|
22
|
+
//# sourceMappingURL=mark-variants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mark-variants.js","sourceRoot":"","sources":["../../../../src/components/ui/mark/mark-variants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,SAAS;IACT,SAAS;IACT,WAAW;IACX,MAAM;IACN,SAAS;IACT,SAAS;IACT,aAAa;IACb,QAAQ;CAC4B,CAAC;AAGvC,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,OAAO;IACP,MAAM;IACN,WAAW;IACX,SAAS;CAC2B,CAAC;AAGvC,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,IAAI;IACJ,SAAS;IACT,IAAI;CACgC,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { type VariantProps } from "class-variance-authority";
|
|
2
|
+
import { type ComponentProps, type Ref, type ReactElement } from "react";
|
|
3
|
+
import { markSizeIds, markStyleIds, markVariantIds, type MarkSize, type MarkStyle, type MarkVariant } from "./mark-variants";
|
|
4
|
+
declare const markVariants: (props?: ({
|
|
5
|
+
variant?: "default" | "info" | "warning" | "destructive" | "primary" | "accent" | "success" | "secondary" | null | undefined;
|
|
6
|
+
markStyle?: "outline" | "solid" | "underline" | "soft" | null | undefined;
|
|
7
|
+
size?: "sm" | "default" | "lg" | null | undefined;
|
|
8
|
+
rounded?: boolean | null | undefined;
|
|
9
|
+
animate?: boolean | null | undefined;
|
|
10
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
11
|
+
export interface MarkProps extends Omit<ComponentProps<"mark">, "style" | "ref">, VariantProps<typeof markVariants> {
|
|
12
|
+
/**
|
|
13
|
+
* Override the rendered tag. Defaults to the semantic `<mark>` element.
|
|
14
|
+
* Use `"span"` if you need decorative-only highlighting without the
|
|
15
|
+
* implicit ARIA `mark` semantics.
|
|
16
|
+
*/
|
|
17
|
+
as?: "mark" | "span";
|
|
18
|
+
/** Pass-through `style` prop (preserved so consumers can layer custom CSS). */
|
|
19
|
+
style?: ComponentProps<"mark">["style"];
|
|
20
|
+
/** React 19 ref-as-prop. */
|
|
21
|
+
ref?: Ref<HTMLElement>;
|
|
22
|
+
}
|
|
23
|
+
export declare function Mark({ className, variant, markStyle, size, rounded, animate, as, children, ref, ...props }: MarkProps): ReactElement;
|
|
24
|
+
export declare namespace Mark {
|
|
25
|
+
var displayName: string;
|
|
26
|
+
}
|
|
27
|
+
export interface HighlightedTextProps extends Omit<ComponentProps<"span">, "children">, Pick<MarkProps, "variant" | "markStyle" | "size" | "rounded" | "animate"> {
|
|
28
|
+
/** The full text to render. */
|
|
29
|
+
text: string;
|
|
30
|
+
/** A string token (or RegExp) to highlight inside `text`. */
|
|
31
|
+
match: string | RegExp | readonly string[];
|
|
32
|
+
/** When `match` is a string, control case sensitivity. Defaults to false. */
|
|
33
|
+
caseSensitive?: boolean;
|
|
34
|
+
/** When true, only highlight whole-word matches. Defaults to false. */
|
|
35
|
+
wholeWord?: boolean;
|
|
36
|
+
/** Optional class applied to each rendered <Mark>. */
|
|
37
|
+
markClassName?: string;
|
|
38
|
+
}
|
|
39
|
+
export declare function HighlightedText({ text, match, caseSensitive, wholeWord, variant, markStyle, size, rounded, animate, markClassName, className, ...props }: HighlightedTextProps): ReactElement;
|
|
40
|
+
export declare namespace HighlightedText {
|
|
41
|
+
var displayName: string;
|
|
42
|
+
}
|
|
43
|
+
export { markVariants, markVariantIds, markStyleIds, markSizeIds };
|
|
44
|
+
export type { MarkVariant, MarkStyle, MarkSize };
|
|
45
|
+
export default Mark;
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { cva } from "class-variance-authority";
|
|
4
|
+
import { useMemo, } from "react";
|
|
5
|
+
import { cn } from "../../../lib/utils";
|
|
6
|
+
import { markSizeIds, markStyleIds, markVariantIds, } from "./mark-variants";
|
|
7
|
+
const markVariants = cva("inline rounded-sm font-[inherit] decoration-skip-ink-auto transition-colors", {
|
|
8
|
+
variants: {
|
|
9
|
+
variant: {
|
|
10
|
+
// The classic highlighter look — explicit yellow, intentionally not themed.
|
|
11
|
+
default: "",
|
|
12
|
+
primary: "",
|
|
13
|
+
secondary: "",
|
|
14
|
+
info: "",
|
|
15
|
+
success: "",
|
|
16
|
+
warning: "",
|
|
17
|
+
destructive: "",
|
|
18
|
+
accent: "",
|
|
19
|
+
},
|
|
20
|
+
markStyle: {
|
|
21
|
+
solid: "",
|
|
22
|
+
soft: "",
|
|
23
|
+
underline: "bg-transparent border-b-2",
|
|
24
|
+
outline: "bg-transparent border",
|
|
25
|
+
},
|
|
26
|
+
size: {
|
|
27
|
+
sm: "px-0.5 text-[0.95em]",
|
|
28
|
+
default: "px-1 text-[1em]",
|
|
29
|
+
lg: "px-1.5 py-0.5 text-[1.05em] font-medium",
|
|
30
|
+
},
|
|
31
|
+
rounded: {
|
|
32
|
+
true: "rounded-md",
|
|
33
|
+
false: "rounded-sm",
|
|
34
|
+
},
|
|
35
|
+
animate: {
|
|
36
|
+
// Uses tailwindcss-animate's `animate-in` enter utilities, which are
|
|
37
|
+
// registered globally via @schemavaults/theme. The mark fades and
|
|
38
|
+
// slides in from a slight left offset — a natural reveal that does
|
|
39
|
+
// not depend on custom keyframes.
|
|
40
|
+
true: "animate-in fade-in slide-in-from-left-1 duration-500",
|
|
41
|
+
false: "",
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
compoundVariants: [
|
|
45
|
+
// === solid: explicit colors (highlighter feel) ===
|
|
46
|
+
{
|
|
47
|
+
markStyle: "solid",
|
|
48
|
+
variant: "default",
|
|
49
|
+
class: "bg-yellow-200 text-yellow-950 dark:bg-yellow-400/80 dark:text-yellow-950",
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
markStyle: "solid",
|
|
53
|
+
variant: "primary",
|
|
54
|
+
class: "bg-primary text-primary-foreground",
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
markStyle: "solid",
|
|
58
|
+
variant: "secondary",
|
|
59
|
+
class: "bg-secondary text-secondary-foreground",
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
markStyle: "solid",
|
|
63
|
+
variant: "info",
|
|
64
|
+
class: "bg-sky-300 text-sky-950 dark:bg-sky-400/80 dark:text-sky-950",
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
markStyle: "solid",
|
|
68
|
+
variant: "success",
|
|
69
|
+
class: "bg-emerald-300 text-emerald-950 dark:bg-emerald-400/80 dark:text-emerald-950",
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
markStyle: "solid",
|
|
73
|
+
variant: "warning",
|
|
74
|
+
class: "bg-warning text-warning-foreground",
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
markStyle: "solid",
|
|
78
|
+
variant: "destructive",
|
|
79
|
+
class: "bg-destructive text-destructive-foreground",
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
markStyle: "solid",
|
|
83
|
+
variant: "accent",
|
|
84
|
+
class: "bg-accent text-accent-foreground",
|
|
85
|
+
},
|
|
86
|
+
// === soft: subtle tinted background ===
|
|
87
|
+
{
|
|
88
|
+
markStyle: "soft",
|
|
89
|
+
variant: "default",
|
|
90
|
+
class: "bg-yellow-200/50 text-foreground dark:bg-yellow-400/20 dark:text-yellow-100",
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
markStyle: "soft",
|
|
94
|
+
variant: "primary",
|
|
95
|
+
class: "bg-primary/15 text-foreground dark:text-primary-foreground/90",
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
markStyle: "soft",
|
|
99
|
+
variant: "secondary",
|
|
100
|
+
class: "bg-secondary/60 text-secondary-foreground",
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
markStyle: "soft",
|
|
104
|
+
variant: "info",
|
|
105
|
+
class: "bg-sky-300/30 text-foreground dark:text-sky-100",
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
markStyle: "soft",
|
|
109
|
+
variant: "success",
|
|
110
|
+
class: "bg-emerald-300/30 text-foreground dark:text-emerald-100",
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
markStyle: "soft",
|
|
114
|
+
variant: "warning",
|
|
115
|
+
class: "bg-warning/25 text-foreground",
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
markStyle: "soft",
|
|
119
|
+
variant: "destructive",
|
|
120
|
+
class: "bg-destructive/15 text-destructive dark:text-destructive-foreground/90",
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
markStyle: "soft",
|
|
124
|
+
variant: "accent",
|
|
125
|
+
class: "bg-accent/60 text-accent-foreground",
|
|
126
|
+
},
|
|
127
|
+
// === underline: colored bottom border only ===
|
|
128
|
+
{
|
|
129
|
+
markStyle: "underline",
|
|
130
|
+
variant: "default",
|
|
131
|
+
class: "border-yellow-400 text-foreground",
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
markStyle: "underline",
|
|
135
|
+
variant: "primary",
|
|
136
|
+
class: "border-primary text-foreground",
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
markStyle: "underline",
|
|
140
|
+
variant: "secondary",
|
|
141
|
+
class: "border-muted-foreground/60 text-foreground",
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
markStyle: "underline",
|
|
145
|
+
variant: "info",
|
|
146
|
+
class: "border-sky-400 text-foreground",
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
markStyle: "underline",
|
|
150
|
+
variant: "success",
|
|
151
|
+
class: "border-emerald-500 text-foreground",
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
markStyle: "underline",
|
|
155
|
+
variant: "warning",
|
|
156
|
+
class: "border-warning text-foreground",
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
markStyle: "underline",
|
|
160
|
+
variant: "destructive",
|
|
161
|
+
class: "border-destructive text-foreground",
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
markStyle: "underline",
|
|
165
|
+
variant: "accent",
|
|
166
|
+
class: "border-accent-foreground/60 text-foreground",
|
|
167
|
+
},
|
|
168
|
+
// === outline: colored border only ===
|
|
169
|
+
{
|
|
170
|
+
markStyle: "outline",
|
|
171
|
+
variant: "default",
|
|
172
|
+
class: "border-yellow-400 text-yellow-700 dark:text-yellow-300",
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
markStyle: "outline",
|
|
176
|
+
variant: "primary",
|
|
177
|
+
class: "border-primary text-foreground",
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
markStyle: "outline",
|
|
181
|
+
variant: "secondary",
|
|
182
|
+
class: "border-muted-foreground/40 text-muted-foreground",
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
markStyle: "outline",
|
|
186
|
+
variant: "info",
|
|
187
|
+
class: "border-sky-400 text-sky-700 dark:text-sky-300",
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
markStyle: "outline",
|
|
191
|
+
variant: "success",
|
|
192
|
+
class: "border-emerald-500 text-emerald-700 dark:text-emerald-300",
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
markStyle: "outline",
|
|
196
|
+
variant: "warning",
|
|
197
|
+
class: "border-warning text-warning-foreground",
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
markStyle: "outline",
|
|
201
|
+
variant: "destructive",
|
|
202
|
+
class: "border-destructive text-destructive",
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
markStyle: "outline",
|
|
206
|
+
variant: "accent",
|
|
207
|
+
class: "border-accent text-accent-foreground",
|
|
208
|
+
},
|
|
209
|
+
],
|
|
210
|
+
defaultVariants: {
|
|
211
|
+
variant: "default",
|
|
212
|
+
markStyle: "solid",
|
|
213
|
+
size: "default",
|
|
214
|
+
rounded: false,
|
|
215
|
+
animate: false,
|
|
216
|
+
},
|
|
217
|
+
});
|
|
218
|
+
export function Mark({ className, variant, markStyle, size, rounded, animate, as = "mark", children, ref, ...props }) {
|
|
219
|
+
const Comp = as;
|
|
220
|
+
return (_jsx(Comp, { ref: ref, "data-slot": "mark", "data-variant": variant ?? "default", "data-mark-style": markStyle ?? "solid", className: cn(markVariants({ variant, markStyle, size, rounded, animate }), className), ...props, children: children }));
|
|
221
|
+
}
|
|
222
|
+
Mark.displayName = "Mark";
|
|
223
|
+
function escapeRegExp(value) {
|
|
224
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
225
|
+
}
|
|
226
|
+
function buildHighlightRegExp(match, caseSensitive, wholeWord) {
|
|
227
|
+
if (match instanceof RegExp) {
|
|
228
|
+
// Ensure we have the global flag so we can iterate every match.
|
|
229
|
+
const flags = match.flags.includes("g") ? match.flags : `${match.flags}g`;
|
|
230
|
+
return new RegExp(match.source, flags);
|
|
231
|
+
}
|
|
232
|
+
const tokens = (Array.isArray(match) ? match : [match])
|
|
233
|
+
.map((token) => String(token))
|
|
234
|
+
.filter((token) => token.length > 0)
|
|
235
|
+
.map(escapeRegExp);
|
|
236
|
+
if (tokens.length === 0)
|
|
237
|
+
return null;
|
|
238
|
+
const body = tokens.join("|");
|
|
239
|
+
const pattern = wholeWord ? `\\b(?:${body})\\b` : `(?:${body})`;
|
|
240
|
+
return new RegExp(pattern, caseSensitive ? "g" : "gi");
|
|
241
|
+
}
|
|
242
|
+
export function HighlightedText({ text, match, caseSensitive = false, wholeWord = false, variant, markStyle, size, rounded, animate, markClassName, className, ...props }) {
|
|
243
|
+
const segments = useMemo(() => {
|
|
244
|
+
const regex = buildHighlightRegExp(match, caseSensitive, wholeWord);
|
|
245
|
+
if (regex === null)
|
|
246
|
+
return [text];
|
|
247
|
+
const parts = [];
|
|
248
|
+
let lastIndex = 0;
|
|
249
|
+
let key = 0;
|
|
250
|
+
// Defensive guard — RegExp.exec can loop forever on zero-width matches.
|
|
251
|
+
for (const result of text.matchAll(regex)) {
|
|
252
|
+
if (result.index === undefined)
|
|
253
|
+
continue;
|
|
254
|
+
if (result[0].length === 0)
|
|
255
|
+
continue;
|
|
256
|
+
if (result.index > lastIndex) {
|
|
257
|
+
parts.push(text.slice(lastIndex, result.index));
|
|
258
|
+
}
|
|
259
|
+
parts.push(_jsx(Mark, { variant: variant, markStyle: markStyle, size: size, rounded: rounded, animate: animate, className: markClassName, children: result[0] }, `m-${key++}`));
|
|
260
|
+
lastIndex = result.index + result[0].length;
|
|
261
|
+
}
|
|
262
|
+
if (lastIndex < text.length) {
|
|
263
|
+
parts.push(text.slice(lastIndex));
|
|
264
|
+
}
|
|
265
|
+
return parts;
|
|
266
|
+
}, [
|
|
267
|
+
text,
|
|
268
|
+
match,
|
|
269
|
+
caseSensitive,
|
|
270
|
+
wholeWord,
|
|
271
|
+
variant,
|
|
272
|
+
markStyle,
|
|
273
|
+
size,
|
|
274
|
+
rounded,
|
|
275
|
+
animate,
|
|
276
|
+
markClassName,
|
|
277
|
+
]);
|
|
278
|
+
return (_jsx("span", { "data-slot": "highlighted-text", className: className, ...props, children: segments }));
|
|
279
|
+
}
|
|
280
|
+
HighlightedText.displayName = "HighlightedText";
|
|
281
|
+
export { markVariants, markVariantIds, markStyleIds, markSizeIds };
|
|
282
|
+
export default Mark;
|
|
283
|
+
//# sourceMappingURL=mark.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mark.js","sourceRoot":"","sources":["../../../../src/components/ui/mark/mark.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/ui/package-version/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAElC,OAAO,EAAE,cAAc,IAAI,OAAO,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type ReactElement } from "react";
|
|
2
|
+
export interface PackageVersionProps {
|
|
3
|
+
className?: string;
|
|
4
|
+
/**
|
|
5
|
+
* URL to fetch the `package.json` from. Defaults to `/package.json`, which the
|
|
6
|
+
* deployed Storybook site serves from its root (see `.storybook/main.ts`).
|
|
7
|
+
*/
|
|
8
|
+
packageJsonUrl?: string;
|
|
9
|
+
/** Text rendered immediately before the version number. Defaults to `"v"`. */
|
|
10
|
+
prefix?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Fetches the latest semver from `GET /package.json` (the `.version` field) and
|
|
14
|
+
* renders it as a badge. Shows a skeleton while loading and a fallback badge if
|
|
15
|
+
* the request fails or no version is present.
|
|
16
|
+
*/
|
|
17
|
+
export declare function PackageVersion({ className, packageJsonUrl, prefix, }: PackageVersionProps): ReactElement;
|
|
18
|
+
export default PackageVersion;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useState } from "react";
|
|
4
|
+
import { cn } from "../../../lib/utils";
|
|
5
|
+
import { Badge } from "../../ui/badge";
|
|
6
|
+
import { Skeleton } from "../../ui/skeleton";
|
|
7
|
+
function extractVersion(data) {
|
|
8
|
+
if (typeof data === "object" &&
|
|
9
|
+
data !== null &&
|
|
10
|
+
"version" in data &&
|
|
11
|
+
typeof data.version === "string") {
|
|
12
|
+
return data.version;
|
|
13
|
+
}
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Fetches the latest semver from `GET /package.json` (the `.version` field) and
|
|
18
|
+
* renders it as a badge. Shows a skeleton while loading and a fallback badge if
|
|
19
|
+
* the request fails or no version is present.
|
|
20
|
+
*/
|
|
21
|
+
export function PackageVersion({ className, packageJsonUrl = "/package.json", prefix = "v", }) {
|
|
22
|
+
const [state, setState] = useState({
|
|
23
|
+
status: "loading",
|
|
24
|
+
});
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
let cancelled = false;
|
|
27
|
+
async function fetchVersion() {
|
|
28
|
+
const response = await fetch(packageJsonUrl, {
|
|
29
|
+
headers: { Accept: "application/json" },
|
|
30
|
+
});
|
|
31
|
+
if (!response.ok) {
|
|
32
|
+
throw new Error(`Request failed with status ${response.status}`);
|
|
33
|
+
}
|
|
34
|
+
const version = extractVersion(await response.json());
|
|
35
|
+
if (!version) {
|
|
36
|
+
throw new Error("No 'version' field found in package.json");
|
|
37
|
+
}
|
|
38
|
+
return version;
|
|
39
|
+
}
|
|
40
|
+
fetchVersion()
|
|
41
|
+
.then((version) => {
|
|
42
|
+
if (!cancelled) {
|
|
43
|
+
setState({ status: "success", version });
|
|
44
|
+
}
|
|
45
|
+
})
|
|
46
|
+
.catch(() => {
|
|
47
|
+
if (!cancelled) {
|
|
48
|
+
setState({ status: "error" });
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
return () => {
|
|
52
|
+
cancelled = true;
|
|
53
|
+
};
|
|
54
|
+
}, [packageJsonUrl]);
|
|
55
|
+
if (state.status === "loading") {
|
|
56
|
+
return (_jsx(Skeleton, { className: cn("inline-block h-5 w-16 align-middle", className) }));
|
|
57
|
+
}
|
|
58
|
+
if (state.status === "error") {
|
|
59
|
+
return (_jsx(Badge, { variant: "destructive", className: className, children: "version unavailable" }));
|
|
60
|
+
}
|
|
61
|
+
return (_jsxs(Badge, { variant: "secondary", className: cn("font-mono", className), children: [prefix, state.version] }));
|
|
62
|
+
}
|
|
63
|
+
export default PackageVersion;
|
|
64
|
+
//# sourceMappingURL=package-version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-version.js","sourceRoot":"","sources":["../../../../src/components/ui/package-version/package-version.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAqB,MAAM,OAAO,CAAC;AAE/D,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAkBpD,SAAS,cAAc,CAAC,IAAa;IACnC,IACE,OAAO,IAAI,KAAK,QAAQ;QACxB,IAAI,KAAK,IAAI;QACb,SAAS,IAAI,IAAI;QACjB,OAAQ,IAA6B,CAAC,OAAO,KAAK,QAAQ,EAC1D,CAAC;QACD,OAAQ,IAA4B,CAAC,OAAO,CAAC;IAC/C,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,EAC7B,SAAS,EACT,cAAc,GAAG,eAAe,EAChC,MAAM,GAAG,GAAG,GACQ;IACpB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAsB;QACtD,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,SAAS,GAAG,KAAK,CAAC;QAEtB,KAAK,UAAU,YAAY;YACzB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,cAAc,EAAE;gBAC3C,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE;aACxC,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,8BAA8B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YACnE,CAAC;YACD,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;YACtD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC9D,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,YAAY,EAAE;aACX,IAAI,CAAC,CAAC,OAAe,EAAQ,EAAE;YAC9B,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC,CAAC;aACD,KAAK,CAAC,GAAS,EAAE;YAChB,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;YAChC,CAAC;QACH,CAAC,CAAC,CAAC;QAEL,OAAO,GAAS,EAAE;YAChB,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAErB,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,CACL,KAAC,QAAQ,IACP,SAAS,EAAE,EAAE,CAAC,oCAAoC,EAAE,SAAS,CAAC,GAC9D,CACH,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QAC7B,OAAO,CACL,KAAC,KAAK,IAAC,OAAO,EAAC,aAAa,EAAC,SAAS,EAAE,SAAS,oCAEzC,CACT,CAAC;IACJ,CAAC;IAED,OAAO,CACL,MAAC,KAAK,IAAC,OAAO,EAAC,WAAW,EAAC,SAAS,EAAE,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,aAC7D,MAAM,EACN,KAAK,CAAC,OAAO,IACR,CACT,CAAC;AACJ,CAAC;AAED,eAAe,cAAc,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@schemavaults/ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.72.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"description": "React.js UI components for SchemaVaults frontend applications",
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
"autoprefixer": "10.4.21",
|
|
59
59
|
"base64url": "3.0.1",
|
|
60
60
|
"buffer": "6.0.3",
|
|
61
|
-
"bun-types": "1.3.
|
|
61
|
+
"bun-types": "1.3.14",
|
|
62
62
|
"eslint-plugin-storybook": "10.4.0",
|
|
63
63
|
"ignore-loader": "0.1.2",
|
|
64
64
|
"postcss": "8.5.12",
|
|
@@ -133,7 +133,7 @@
|
|
|
133
133
|
"publishConfig": {
|
|
134
134
|
"access": "public"
|
|
135
135
|
},
|
|
136
|
-
"packageManager": "bun@1.3.
|
|
136
|
+
"packageManager": "bun@1.3.14",
|
|
137
137
|
"eslintConfig": {
|
|
138
138
|
"extends": [
|
|
139
139
|
"plugin:storybook/recommended"
|