@haklex/rich-editor-ui 0.0.109 → 0.1.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/color-picker/color-math.d.ts +29 -0
- package/dist/components/color-picker/color-math.d.ts.map +1 -0
- package/dist/components/color-picker/index.d.ts.map +1 -1
- package/dist/components/color-picker/picker-view.d.ts +9 -0
- package/dist/components/color-picker/picker-view.d.ts.map +1 -0
- package/dist/components/color-picker/styles.css.d.ts +23 -0
- package/dist/components/color-picker/styles.css.d.ts.map +1 -1
- package/dist/index.mjs +370 -31
- package/dist/rich-editor-ui.css +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export interface RGBA {
|
|
2
|
+
a: number;
|
|
3
|
+
b: number;
|
|
4
|
+
g: number;
|
|
5
|
+
r: number;
|
|
6
|
+
}
|
|
7
|
+
export interface HSVA {
|
|
8
|
+
a: number;
|
|
9
|
+
h: number;
|
|
10
|
+
s: number;
|
|
11
|
+
v: number;
|
|
12
|
+
}
|
|
13
|
+
export declare const clamp: (n: number, min: number, max: number) => number;
|
|
14
|
+
export declare function hsvToRgb(h: number, s: number, v: number): {
|
|
15
|
+
r: number;
|
|
16
|
+
g: number;
|
|
17
|
+
b: number;
|
|
18
|
+
};
|
|
19
|
+
export declare function rgbToHsv(r: number, g: number, b: number): {
|
|
20
|
+
h: number;
|
|
21
|
+
s: number;
|
|
22
|
+
v: number;
|
|
23
|
+
};
|
|
24
|
+
export declare function hsvaToHex(hsva: HSVA): string;
|
|
25
|
+
export declare function hsvaToCss(hsva: HSVA): string;
|
|
26
|
+
export declare function parseHex(input: string): RGBA | null;
|
|
27
|
+
export declare function hexToHsva(input: string): HSVA | null;
|
|
28
|
+
export declare function huePreviewHex(h: number): string;
|
|
29
|
+
//# sourceMappingURL=color-math.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"color-math.d.ts","sourceRoot":"","sources":["../../../src/components/color-picker/color-math.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,IAAI;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,IAAI;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,eAAO,MAAM,KAAK,GAAI,GAAG,MAAM,EAAE,KAAK,MAAM,EAAE,KAAK,MAAM,KAAG,MACzB,CAAC;AAMpC,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAmB7F;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAiB7F;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAI5C;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAK5C;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAiBnD;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAKpD;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE/C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/color-picker/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/color-picker/index.tsx"],"names":[],"mappings":"AAqBA,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED,wBAAgB,WAAW,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,gBAAgB,2CAkFlF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
interface PickerViewProps {
|
|
2
|
+
initialColor: string;
|
|
3
|
+
onApply: (hex: string) => void;
|
|
4
|
+
onBack: () => void;
|
|
5
|
+
onCancel: () => void;
|
|
6
|
+
}
|
|
7
|
+
export declare function PickerView({ initialColor, onApply, onCancel, onBack }: PickerViewProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=picker-view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"picker-view.d.ts","sourceRoot":"","sources":["../../../src/components/color-picker/picker-view.tsx"],"names":[],"mappings":"AAcA,UAAU,eAAe;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAeD,wBAAgB,UAAU,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,eAAe,2CA0MtF"}
|
|
@@ -8,4 +8,27 @@ export declare const grid: string;
|
|
|
8
8
|
export declare const swatch: string;
|
|
9
9
|
export declare const swatchDot: string;
|
|
10
10
|
export declare const swatchCheck: string;
|
|
11
|
+
export declare const addSwatchDot: string;
|
|
12
|
+
export declare const addSwatchIcon: string;
|
|
13
|
+
export declare const pickerView: string;
|
|
14
|
+
export declare const backButton: string;
|
|
15
|
+
export declare const backIcon: string;
|
|
16
|
+
export declare const satSquare: string;
|
|
17
|
+
export declare const satOverlayX: string;
|
|
18
|
+
export declare const satOverlayY: string;
|
|
19
|
+
export declare const satThumb: string;
|
|
20
|
+
export declare const hueTrack: string;
|
|
21
|
+
export declare const alphaTrack: string;
|
|
22
|
+
export declare const alphaGradient: string;
|
|
23
|
+
export declare const sliderThumb: string;
|
|
24
|
+
export declare const hexRow: string;
|
|
25
|
+
export declare const hexInput: string;
|
|
26
|
+
export declare const hexInputInvalid: string;
|
|
27
|
+
export declare const iconButton: string;
|
|
28
|
+
export declare const icon: string;
|
|
29
|
+
export declare const previewPair: string;
|
|
30
|
+
export declare const previewCell: string;
|
|
31
|
+
export declare const actionRow: string;
|
|
32
|
+
export declare const actionButton: string;
|
|
33
|
+
export declare const actionButtonPrimary: string;
|
|
11
34
|
//# sourceMappingURL=styles.css.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.css.d.ts","sourceRoot":"","sources":["../../../src/components/color-picker/styles.css.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,OAAO,QAgBlB,
|
|
1
|
+
{"version":3,"file":"styles.css.d.ts","sourceRoot":"","sources":["../../../src/components/color-picker/styles.css.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,OAAO,QAgBlB,CAAC;AAEH,eAAO,MAAM,YAAY,QAIvB,CAAC;AAEH,eAAO,MAAM,aAAa,QAIxB,CAAC;AAEH,eAAO,MAAM,UAAU,QAKrB,CAAC;AAEH,eAAO,MAAM,cAAc,QAIzB,CAAC;AAEH,eAAO,MAAM,KAAK,QAQhB,CAAC;AAEH,eAAO,MAAM,IAAI,QAIf,CAAC;AAEH,eAAO,MAAM,MAAM,QAgBjB,CAAC;AAEH,eAAO,MAAM,SAAS,QAKpB,CAAC;AAEH,eAAO,MAAM,WAAW,QAKtB,CAAC;AAEH,eAAO,MAAM,YAAY,QAUvB,CAAC;AAEH,eAAO,MAAM,aAAa,QAIxB,CAAC;AAEH,eAAO,MAAM,UAAU,QAIrB,CAAC;AAEH,eAAO,MAAM,UAAU,QAkBrB,CAAC;AAEH,eAAO,MAAM,QAAQ,QAGnB,CAAC;AAEH,eAAO,MAAM,SAAS,QASpB,CAAC;AAEH,eAAO,MAAM,WAAW,QAKtB,CAAC;AAEH,eAAO,MAAM,WAAW,QAKtB,CAAC;AAEH,eAAO,MAAM,QAAQ,QASnB,CAAC;AAEH,eAAO,MAAM,QAAQ,QAUnB,CAAC;AAEH,eAAO,MAAM,UAAU,QAUrB,CAAC;AAEH,eAAO,MAAM,aAAa,QAIxB,CAAC;AAEH,eAAO,MAAM,WAAW,QAUtB,CAAC;AAEH,eAAO,MAAM,MAAM,QAIjB,CAAC;AAEH,eAAO,MAAM,QAAQ,QAgBnB,CAAC;AAEH,eAAO,MAAM,eAAe,QAK1B,CAAC;AAEH,eAAO,MAAM,UAAU,QAiBrB,CAAC;AAEH,eAAO,MAAM,IAAI,QAGf,CAAC;AAEH,eAAO,MAAM,WAAW,QAQtB,CAAC;AAEH,eAAO,MAAM,WAAW,QAEtB,CAAC;AAEH,eAAO,MAAM,SAAS,QAIpB,CAAC;AAEH,eAAO,MAAM,YAAY,QAavB,CAAC;AAEH,eAAO,MAAM,mBAAmB,QAO9B,CAAC"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
2
|
-
import { AlertCircle, AlertTriangle, Info, Check, Copy, ChevronDown, ChevronRight, X, ChevronUp } from "lucide-react";
|
|
2
|
+
import { AlertCircle, AlertTriangle, Info, Check, Copy, ChevronDown, ChevronRight, ArrowLeft, Pipette, Plus, X, ChevronUp } from "lucide-react";
|
|
3
3
|
import { useState, useRef, useCallback, useEffect, forwardRef, useImperativeHandle, useMemo, createContext, use, createElement, useSyncExternalStore } from "react";
|
|
4
4
|
import { Collapsible as Collapsible$1 } from "@base-ui/react/collapsible";
|
|
5
5
|
import { Popover as Popover$1 } from "@base-ui/react/popover";
|
|
@@ -116,7 +116,7 @@ var createRuntimeFn = (config) => {
|
|
|
116
116
|
};
|
|
117
117
|
var semanticClassNames = { actionBar: "re-ui-action-bar", actionButton: "re-ui-action-btn", actionButtonEnd: "re-ui-action-btn--end", actionButtonDanger: "re-ui-action-btn--danger", actionButtonIcon: "re-ui-action-btn--icon" };
|
|
118
118
|
var actionBar = "_73ej2i0";
|
|
119
|
-
var actionButton = createRuntimeFn({ defaultClassName: "_73ej2i1", variantClassNames: { variant: { ghost: "_73ej2i2", solid: "_73ej2i3", outline: "_73ej2i4", accent: "_73ej2i5" }, size: { sm: "_73ej2i6", md: "_73ej2i7", lg: "_73ej2i8" }, icon: { true: "_73ej2i9", false: "_73ej2ia" }, end: { true: "_73ej2ib", false: "_73ej2ic" }, danger: { true: "_73ej2id", false: "_73ej2ie" }, rounded: { true: "_73ej2if", false: "_73ej2ig" } }, defaultVariants: { variant: "ghost", size: "sm", icon: false, end: false, danger: false, rounded: false }, compoundVariants: [[{ icon: true, size: "sm" }, "_73ej2ih"], [{ icon: true, size: "md" }, "_73ej2ii"], [{ icon: true, size: "lg" }, "_73ej2ij"], [{ rounded: true, icon: true }, "_73ej2ik"], [{ danger: true }, "_73ej2il"]] });
|
|
119
|
+
var actionButton$1 = createRuntimeFn({ defaultClassName: "_73ej2i1", variantClassNames: { variant: { ghost: "_73ej2i2", solid: "_73ej2i3", outline: "_73ej2i4", accent: "_73ej2i5" }, size: { sm: "_73ej2i6", md: "_73ej2i7", lg: "_73ej2i8" }, icon: { true: "_73ej2i9", false: "_73ej2ia" }, end: { true: "_73ej2ib", false: "_73ej2ic" }, danger: { true: "_73ej2id", false: "_73ej2ie" }, rounded: { true: "_73ej2if", false: "_73ej2ig" } }, defaultVariants: { variant: "ghost", size: "sm", icon: false, end: false, danger: false, rounded: false }, compoundVariants: [[{ icon: true, size: "sm" }, "_73ej2ih"], [{ icon: true, size: "md" }, "_73ej2ii"], [{ icon: true, size: "lg" }, "_73ej2ij"], [{ rounded: true, icon: true }, "_73ej2ik"], [{ danger: true }, "_73ej2il"]] });
|
|
120
120
|
function ActionBar({ className, gap, style, ...props }) {
|
|
121
121
|
return /* @__PURE__ */ jsx(
|
|
122
122
|
"div",
|
|
@@ -132,7 +132,7 @@ function ActionButton({
|
|
|
132
132
|
size,
|
|
133
133
|
end = false,
|
|
134
134
|
danger = false,
|
|
135
|
-
icon = false,
|
|
135
|
+
icon: icon2 = false,
|
|
136
136
|
rounded = false,
|
|
137
137
|
className,
|
|
138
138
|
type = "button",
|
|
@@ -141,8 +141,8 @@ function ActionButton({
|
|
|
141
141
|
const semanticParts = [semanticClassNames.actionButton];
|
|
142
142
|
if (end) semanticParts.push(semanticClassNames.actionButtonEnd);
|
|
143
143
|
if (danger) semanticParts.push(semanticClassNames.actionButtonDanger);
|
|
144
|
-
if (
|
|
145
|
-
const recipeClass = actionButton({ variant, size, end, danger, icon, rounded });
|
|
144
|
+
if (icon2) semanticParts.push(semanticClassNames.actionButtonIcon);
|
|
145
|
+
const recipeClass = actionButton$1({ variant, size, end, danger, icon: icon2, rounded });
|
|
146
146
|
return /* @__PURE__ */ jsx(
|
|
147
147
|
"button",
|
|
148
148
|
{
|
|
@@ -153,7 +153,7 @@ function ActionButton({
|
|
|
153
153
|
);
|
|
154
154
|
}
|
|
155
155
|
function getActionButtonClassName(options) {
|
|
156
|
-
return `${actionButton(options)} ${semanticClassNames.actionButton}`;
|
|
156
|
+
return `${actionButton$1(options)} ${semanticClassNames.actionButton}`;
|
|
157
157
|
}
|
|
158
158
|
var alert = createRuntimeFn({ defaultClassName: "_15r7gwx0", variantClassNames: { variant: { info: "_15r7gwx1", warning: "_15r7gwx2", error: "_15r7gwx3" } }, defaultVariants: { variant: "info" }, compoundVariants: [] });
|
|
159
159
|
var alertContent = "_15r7gwx4";
|
|
@@ -743,6 +743,70 @@ function PopoverDescription({
|
|
|
743
743
|
}
|
|
744
744
|
);
|
|
745
745
|
}
|
|
746
|
+
const clamp = (n, min, max) => n < min ? min : n > max ? max : n;
|
|
747
|
+
const to255 = (n) => Math.round(clamp(n, 0, 1) * 255);
|
|
748
|
+
const pad2 = (n) => n.toString(16).padStart(2, "0");
|
|
749
|
+
function hsvToRgb(h, s, v) {
|
|
750
|
+
const hh = (h % 360 + 360) % 360 / 60;
|
|
751
|
+
const ss = clamp(s, 0, 1);
|
|
752
|
+
const vv = clamp(v, 0, 1);
|
|
753
|
+
const c = vv * ss;
|
|
754
|
+
const x = c * (1 - Math.abs(hh % 2 - 1));
|
|
755
|
+
const m = vv - c;
|
|
756
|
+
let r;
|
|
757
|
+
let g;
|
|
758
|
+
let b;
|
|
759
|
+
if (hh < 1) [r, g, b] = [c, x, 0];
|
|
760
|
+
else if (hh < 2) [r, g, b] = [x, c, 0];
|
|
761
|
+
else if (hh < 3) [r, g, b] = [0, c, x];
|
|
762
|
+
else if (hh < 4) [r, g, b] = [0, x, c];
|
|
763
|
+
else if (hh < 5) [r, g, b] = [x, 0, c];
|
|
764
|
+
else [r, g, b] = [c, 0, x];
|
|
765
|
+
return { r: r + m, g: g + m, b: b + m };
|
|
766
|
+
}
|
|
767
|
+
function rgbToHsv(r, g, b) {
|
|
768
|
+
const max = Math.max(r, g, b);
|
|
769
|
+
const min = Math.min(r, g, b);
|
|
770
|
+
const d = max - min;
|
|
771
|
+
const v = max;
|
|
772
|
+
const s = max === 0 ? 0 : d / max;
|
|
773
|
+
let h = 0;
|
|
774
|
+
if (d !== 0) {
|
|
775
|
+
if (max === r) h = (g - b) / d % 6;
|
|
776
|
+
else if (max === g) h = (b - r) / d + 2;
|
|
777
|
+
else h = (r - g) / d + 4;
|
|
778
|
+
h *= 60;
|
|
779
|
+
if (h < 0) h += 360;
|
|
780
|
+
}
|
|
781
|
+
return { h, s, v };
|
|
782
|
+
}
|
|
783
|
+
function hsvaToHex(hsva) {
|
|
784
|
+
const { r, g, b } = hsvToRgb(hsva.h, hsva.s, hsva.v);
|
|
785
|
+
const hex = `#${pad2(to255(r))}${pad2(to255(g))}${pad2(to255(b))}`;
|
|
786
|
+
return hsva.a < 1 ? `${hex}${pad2(to255(hsva.a))}` : hex;
|
|
787
|
+
}
|
|
788
|
+
function parseHex(input) {
|
|
789
|
+
let s = input.trim().replace(/^#/, "");
|
|
790
|
+
if (!/^[\da-f]+$/i.test(s)) return null;
|
|
791
|
+
if (s.length === 3 || s.length === 4) {
|
|
792
|
+
s = s.split("").map((c) => c + c).join("");
|
|
793
|
+
}
|
|
794
|
+
if (s.length !== 6 && s.length !== 8) return null;
|
|
795
|
+
const r = Number.parseInt(s.slice(0, 2), 16) / 255;
|
|
796
|
+
const g = Number.parseInt(s.slice(2, 4), 16) / 255;
|
|
797
|
+
const b = Number.parseInt(s.slice(4, 6), 16) / 255;
|
|
798
|
+
const a = s.length === 8 ? Number.parseInt(s.slice(6, 8), 16) / 255 : 1;
|
|
799
|
+
return { r, g, b, a };
|
|
800
|
+
}
|
|
801
|
+
function hexToHsva(input) {
|
|
802
|
+
const rgba = parseHex(input);
|
|
803
|
+
if (!rgba) return null;
|
|
804
|
+
const { h, s, v } = rgbToHsv(rgba.r, rgba.g, rgba.b);
|
|
805
|
+
return { h, s, v, a: rgba.a };
|
|
806
|
+
}
|
|
807
|
+
function huePreviewHex(h) {
|
|
808
|
+
return hsvaToHex({ h, s: 1, v: 1, a: 1 });
|
|
809
|
+
}
|
|
746
810
|
var trigger = "_17r50hf1";
|
|
747
811
|
var triggerLabel = "_17r50hf2";
|
|
748
812
|
var triggerLetter = "_17r50hf3";
|
|
@@ -753,6 +817,246 @@ var grid = "_17r50hf7";
|
|
|
753
817
|
var swatch = "_17r50hf8";
|
|
754
818
|
var swatchDot = "_17r50hf9";
|
|
755
819
|
var swatchCheck = "_17r50hfa";
|
|
820
|
+
var addSwatchDot = "_17r50hfb";
|
|
821
|
+
var addSwatchIcon = "_17r50hfc";
|
|
822
|
+
var pickerView = "_17r50hfd";
|
|
823
|
+
var backButton = "_17r50hfe";
|
|
824
|
+
var backIcon = "_17r50hff";
|
|
825
|
+
var satSquare = "_17r50hfg";
|
|
826
|
+
var satOverlayX = "_17r50hfh";
|
|
827
|
+
var satOverlayY = "_17r50hfi";
|
|
828
|
+
var satThumb = "_17r50hfj";
|
|
829
|
+
var hueTrack = "_17r50hfk";
|
|
830
|
+
var alphaTrack = "_17r50hfl";
|
|
831
|
+
var alphaGradient = "_17r50hfm";
|
|
832
|
+
var sliderThumb = "_17r50hfn";
|
|
833
|
+
var hexRow = "_17r50hfo";
|
|
834
|
+
var hexInput = "_17r50hfp";
|
|
835
|
+
var hexInputInvalid = "_17r50hfq";
|
|
836
|
+
var iconButton = "_17r50hfr";
|
|
837
|
+
var icon = "_17r50hfs";
|
|
838
|
+
var previewPair = "_17r50hft";
|
|
839
|
+
var previewCell = "_17r50hfu";
|
|
840
|
+
var actionRow = "_17r50hfv";
|
|
841
|
+
var actionButton = "_17r50hfw";
|
|
842
|
+
var actionButtonPrimary = "_17r50hfx";
|
|
843
|
+
const FALLBACK = { h: 0, s: 0, v: 0, a: 1 };
|
|
844
|
+
function seedHsva(input) {
|
|
845
|
+
if (!input || input === "inherit" || input === "currentColor") return FALLBACK;
|
|
846
|
+
return hexToHsva(input) ?? FALLBACK;
|
|
847
|
+
}
|
|
848
|
+
function PickerView({ initialColor, onApply, onCancel, onBack }) {
|
|
849
|
+
const [hsva, setHsva] = useState(() => seedHsva(initialColor));
|
|
850
|
+
const [hexDraft, setHexDraft] = useState(() => hsvaToHex(seedHsva(initialColor)));
|
|
851
|
+
const [hexInvalid, setHexInvalid] = useState(false);
|
|
852
|
+
const [hasEyeDropper, setHasEyeDropper] = useState(false);
|
|
853
|
+
const oldColorRef = useRef(initialColor);
|
|
854
|
+
const satRef = useRef(null);
|
|
855
|
+
const hueRef = useRef(null);
|
|
856
|
+
const alphaRef = useRef(null);
|
|
857
|
+
useEffect(() => {
|
|
858
|
+
setHasEyeDropper(
|
|
859
|
+
typeof window !== "undefined" && "EyeDropper" in window
|
|
860
|
+
);
|
|
861
|
+
}, []);
|
|
862
|
+
useEffect(() => {
|
|
863
|
+
if (document.activeElement?.tagName !== "INPUT") {
|
|
864
|
+
setHexDraft(hsvaToHex(hsva));
|
|
865
|
+
setHexInvalid(false);
|
|
866
|
+
}
|
|
867
|
+
}, [hsva]);
|
|
868
|
+
const currentHex = hsvaToHex(hsva);
|
|
869
|
+
const updateFromPointer = (target, ev) => {
|
|
870
|
+
const el = target === "sat" ? satRef.current : target === "hue" ? hueRef.current : alphaRef.current;
|
|
871
|
+
if (!el) return;
|
|
872
|
+
const rect = el.getBoundingClientRect();
|
|
873
|
+
const x = clamp((ev.clientX - rect.left) / rect.width, 0, 1);
|
|
874
|
+
const y = clamp((ev.clientY - rect.top) / rect.height, 0, 1);
|
|
875
|
+
setHsva((prev) => {
|
|
876
|
+
if (target === "sat") return { ...prev, s: x, v: 1 - y };
|
|
877
|
+
if (target === "hue") return { ...prev, h: x * 360 };
|
|
878
|
+
return { ...prev, a: x };
|
|
879
|
+
});
|
|
880
|
+
};
|
|
881
|
+
const startDrag = (target) => (ev) => {
|
|
882
|
+
ev.preventDefault();
|
|
883
|
+
ev.currentTarget.setPointerCapture(ev.pointerId);
|
|
884
|
+
updateFromPointer(target, ev);
|
|
885
|
+
};
|
|
886
|
+
const onMove = (target) => (ev) => {
|
|
887
|
+
if (ev.buttons === 0) return;
|
|
888
|
+
updateFromPointer(target, ev);
|
|
889
|
+
};
|
|
890
|
+
const onHexChange = (value) => {
|
|
891
|
+
setHexDraft(value);
|
|
892
|
+
const parsed = parseHex(value);
|
|
893
|
+
if (!parsed) {
|
|
894
|
+
setHexInvalid(true);
|
|
895
|
+
return;
|
|
896
|
+
}
|
|
897
|
+
setHexInvalid(false);
|
|
898
|
+
const { h, s, v } = rgbToHsv(parsed.r, parsed.g, parsed.b);
|
|
899
|
+
setHsva({ h, s, v, a: parsed.a });
|
|
900
|
+
};
|
|
901
|
+
const onHexBlur = () => {
|
|
902
|
+
if (hexInvalid) {
|
|
903
|
+
setHexDraft(currentHex);
|
|
904
|
+
setHexInvalid(false);
|
|
905
|
+
}
|
|
906
|
+
};
|
|
907
|
+
const openEyeDropper = async () => {
|
|
908
|
+
const Ctor = window.EyeDropper;
|
|
909
|
+
if (!Ctor) return;
|
|
910
|
+
try {
|
|
911
|
+
const result = await new Ctor().open();
|
|
912
|
+
const parsed = parseHex(result.sRGBHex);
|
|
913
|
+
if (!parsed) return;
|
|
914
|
+
const { h, s, v } = rgbToHsv(parsed.r, parsed.g, parsed.b);
|
|
915
|
+
setHsva((prev) => ({ h, s, v, a: prev.a }));
|
|
916
|
+
} catch {
|
|
917
|
+
}
|
|
918
|
+
};
|
|
919
|
+
const handleApply = () => onApply(currentHex);
|
|
920
|
+
const hueHex = huePreviewHex(hsva.h);
|
|
921
|
+
const previewNewCss = hsvaToHex(hsva);
|
|
922
|
+
const previewOldCss = oldColorRef.current === "inherit" || !oldColorRef.current ? "transparent" : oldColorRef.current;
|
|
923
|
+
return /* @__PURE__ */ jsxs("div", { className: pickerView, children: [
|
|
924
|
+
/* @__PURE__ */ jsxs(
|
|
925
|
+
"button",
|
|
926
|
+
{
|
|
927
|
+
"aria-label": "Back to presets",
|
|
928
|
+
className: backButton,
|
|
929
|
+
type: "button",
|
|
930
|
+
onClick: onBack,
|
|
931
|
+
onMouseDown: (e) => e.preventDefault(),
|
|
932
|
+
children: [
|
|
933
|
+
/* @__PURE__ */ jsx(ArrowLeft, { className: backIcon }),
|
|
934
|
+
/* @__PURE__ */ jsx("span", { children: "Back" })
|
|
935
|
+
]
|
|
936
|
+
}
|
|
937
|
+
),
|
|
938
|
+
/* @__PURE__ */ jsxs(
|
|
939
|
+
"div",
|
|
940
|
+
{
|
|
941
|
+
className: satSquare,
|
|
942
|
+
ref: satRef,
|
|
943
|
+
style: { backgroundColor: hueHex },
|
|
944
|
+
onPointerDown: startDrag("sat"),
|
|
945
|
+
onPointerMove: onMove("sat"),
|
|
946
|
+
children: [
|
|
947
|
+
/* @__PURE__ */ jsx("div", { className: satOverlayX }),
|
|
948
|
+
/* @__PURE__ */ jsx("div", { className: satOverlayY }),
|
|
949
|
+
/* @__PURE__ */ jsx(
|
|
950
|
+
"div",
|
|
951
|
+
{
|
|
952
|
+
className: satThumb,
|
|
953
|
+
style: {
|
|
954
|
+
left: `${hsva.s * 100}%`,
|
|
955
|
+
top: `${(1 - hsva.v) * 100}%`,
|
|
956
|
+
backgroundColor: hsvaToHex({ ...hsva, a: 1 })
|
|
957
|
+
}
|
|
958
|
+
}
|
|
959
|
+
)
|
|
960
|
+
]
|
|
961
|
+
}
|
|
962
|
+
),
|
|
963
|
+
/* @__PURE__ */ jsx(
|
|
964
|
+
"div",
|
|
965
|
+
{
|
|
966
|
+
className: hueTrack,
|
|
967
|
+
ref: hueRef,
|
|
968
|
+
onPointerDown: startDrag("hue"),
|
|
969
|
+
onPointerMove: onMove("hue"),
|
|
970
|
+
children: /* @__PURE__ */ jsx(
|
|
971
|
+
"div",
|
|
972
|
+
{
|
|
973
|
+
className: sliderThumb,
|
|
974
|
+
style: { left: `${hsva.h / 360 * 100}%`, backgroundColor: hueHex }
|
|
975
|
+
}
|
|
976
|
+
)
|
|
977
|
+
}
|
|
978
|
+
),
|
|
979
|
+
/* @__PURE__ */ jsxs(
|
|
980
|
+
"div",
|
|
981
|
+
{
|
|
982
|
+
className: alphaTrack,
|
|
983
|
+
ref: alphaRef,
|
|
984
|
+
onPointerDown: startDrag("alpha"),
|
|
985
|
+
onPointerMove: onMove("alpha"),
|
|
986
|
+
children: [
|
|
987
|
+
/* @__PURE__ */ jsx(
|
|
988
|
+
"div",
|
|
989
|
+
{
|
|
990
|
+
className: alphaGradient,
|
|
991
|
+
style: {
|
|
992
|
+
background: `linear-gradient(to right, transparent, ${hsvaToHex({ ...hsva, a: 1 })})`
|
|
993
|
+
}
|
|
994
|
+
}
|
|
995
|
+
),
|
|
996
|
+
/* @__PURE__ */ jsx(
|
|
997
|
+
"div",
|
|
998
|
+
{
|
|
999
|
+
className: sliderThumb,
|
|
1000
|
+
style: { left: `${hsva.a * 100}%`, backgroundColor: currentHex }
|
|
1001
|
+
}
|
|
1002
|
+
)
|
|
1003
|
+
]
|
|
1004
|
+
}
|
|
1005
|
+
),
|
|
1006
|
+
/* @__PURE__ */ jsxs("div", { className: hexRow, children: [
|
|
1007
|
+
/* @__PURE__ */ jsx(
|
|
1008
|
+
"input",
|
|
1009
|
+
{
|
|
1010
|
+
"aria-invalid": hexInvalid || void 0,
|
|
1011
|
+
"aria-label": "Hex color",
|
|
1012
|
+
className: `${hexInput}${hexInvalid ? ` ${hexInputInvalid}` : ""}`,
|
|
1013
|
+
spellCheck: false,
|
|
1014
|
+
type: "text",
|
|
1015
|
+
value: hexDraft,
|
|
1016
|
+
onBlur: onHexBlur,
|
|
1017
|
+
onChange: (e) => onHexChange(e.target.value)
|
|
1018
|
+
}
|
|
1019
|
+
),
|
|
1020
|
+
hasEyeDropper && /* @__PURE__ */ jsx(
|
|
1021
|
+
"button",
|
|
1022
|
+
{
|
|
1023
|
+
"aria-label": "Pick color from screen",
|
|
1024
|
+
className: iconButton,
|
|
1025
|
+
type: "button",
|
|
1026
|
+
onClick: openEyeDropper,
|
|
1027
|
+
onMouseDown: (e) => e.preventDefault(),
|
|
1028
|
+
children: /* @__PURE__ */ jsx(Pipette, { className: icon })
|
|
1029
|
+
}
|
|
1030
|
+
),
|
|
1031
|
+
/* @__PURE__ */ jsxs("div", { "aria-hidden": true, className: previewPair, children: [
|
|
1032
|
+
/* @__PURE__ */ jsx("div", { className: previewCell, style: { backgroundColor: previewOldCss } }),
|
|
1033
|
+
/* @__PURE__ */ jsx("div", { className: previewCell, style: { backgroundColor: previewNewCss } })
|
|
1034
|
+
] })
|
|
1035
|
+
] }),
|
|
1036
|
+
/* @__PURE__ */ jsxs("div", { className: actionRow, children: [
|
|
1037
|
+
/* @__PURE__ */ jsx(
|
|
1038
|
+
"button",
|
|
1039
|
+
{
|
|
1040
|
+
className: actionButton,
|
|
1041
|
+
type: "button",
|
|
1042
|
+
onClick: onCancel,
|
|
1043
|
+
onMouseDown: (e) => e.preventDefault(),
|
|
1044
|
+
children: "Cancel"
|
|
1045
|
+
}
|
|
1046
|
+
),
|
|
1047
|
+
/* @__PURE__ */ jsx(
|
|
1048
|
+
"button",
|
|
1049
|
+
{
|
|
1050
|
+
className: `${actionButton} ${actionButtonPrimary}`,
|
|
1051
|
+
type: "button",
|
|
1052
|
+
onClick: handleApply,
|
|
1053
|
+
onMouseDown: (e) => e.preventDefault(),
|
|
1054
|
+
children: "Apply"
|
|
1055
|
+
}
|
|
1056
|
+
)
|
|
1057
|
+
] })
|
|
1058
|
+
] });
|
|
1059
|
+
}
|
|
756
1060
|
const TEXT_COLORS = [
|
|
757
1061
|
{ name: "Default", value: "inherit" },
|
|
758
1062
|
{ name: "Gray", value: "#6b7280" },
|
|
@@ -763,11 +1067,27 @@ const TEXT_COLORS = [
|
|
|
763
1067
|
{ name: "Teal", value: "#14b8a6" },
|
|
764
1068
|
{ name: "Blue", value: "#3b82f6" },
|
|
765
1069
|
{ name: "Indigo", value: "#6366f1" },
|
|
1070
|
+
{ name: "Purple", value: "#a855f7" },
|
|
766
1071
|
{ name: "Pink", value: "#ec4899" }
|
|
767
1072
|
];
|
|
768
1073
|
function ColorPicker({ currentColor, onSelect, className }) {
|
|
1074
|
+
const [open, setOpen] = useState(false);
|
|
1075
|
+
const [view, setView] = useState("preset");
|
|
769
1076
|
const displayColor = currentColor === "inherit" || !currentColor ? "currentColor" : currentColor;
|
|
770
|
-
|
|
1077
|
+
const handleOpenChange = (next) => {
|
|
1078
|
+
setOpen(next);
|
|
1079
|
+
if (!next) setView("preset");
|
|
1080
|
+
};
|
|
1081
|
+
const handlePreset = (value) => {
|
|
1082
|
+
onSelect(value);
|
|
1083
|
+
handleOpenChange(false);
|
|
1084
|
+
};
|
|
1085
|
+
const handleApply = (hex) => {
|
|
1086
|
+
onSelect(hex);
|
|
1087
|
+
handleOpenChange(false);
|
|
1088
|
+
};
|
|
1089
|
+
const handleCancel = () => handleOpenChange(false);
|
|
1090
|
+
return /* @__PURE__ */ jsxs(Popover, { open, onOpenChange: handleOpenChange, children: [
|
|
771
1091
|
/* @__PURE__ */ jsxs(
|
|
772
1092
|
PopoverTrigger,
|
|
773
1093
|
{
|
|
@@ -782,31 +1102,50 @@ function ColorPicker({ currentColor, onSelect, className }) {
|
|
|
782
1102
|
]
|
|
783
1103
|
}
|
|
784
1104
|
),
|
|
785
|
-
/* @__PURE__ */ jsx(PopoverPanel, { className: panel, side: "bottom", sideOffset: 6, children: /* @__PURE__ */
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
1105
|
+
/* @__PURE__ */ jsx(PopoverPanel, { className: panel, side: "bottom", sideOffset: 6, children: view === "preset" ? /* @__PURE__ */ jsxs("div", { className: grid, children: [
|
|
1106
|
+
TEXT_COLORS.map((color) => /* @__PURE__ */ jsxs(
|
|
1107
|
+
"button",
|
|
1108
|
+
{
|
|
1109
|
+
"aria-label": color.name,
|
|
1110
|
+
className: swatch,
|
|
1111
|
+
type: "button",
|
|
1112
|
+
onClick: () => handlePreset(color.value),
|
|
1113
|
+
onMouseDown: (e) => e.preventDefault(),
|
|
1114
|
+
children: [
|
|
1115
|
+
/* @__PURE__ */ jsx(
|
|
1116
|
+
"span",
|
|
1117
|
+
{
|
|
1118
|
+
className: swatchDot,
|
|
1119
|
+
style: {
|
|
1120
|
+
backgroundColor: color.value === "inherit" ? "currentColor" : color.value
|
|
1121
|
+
}
|
|
802
1122
|
}
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
1123
|
+
),
|
|
1124
|
+
currentColor === color.value && /* @__PURE__ */ jsx(Check, { className: swatchCheck })
|
|
1125
|
+
]
|
|
1126
|
+
},
|
|
1127
|
+
color.value
|
|
1128
|
+
)),
|
|
1129
|
+
/* @__PURE__ */ jsx(
|
|
1130
|
+
"button",
|
|
1131
|
+
{
|
|
1132
|
+
"aria-label": "Custom color",
|
|
1133
|
+
className: swatch,
|
|
1134
|
+
type: "button",
|
|
1135
|
+
onClick: () => setView("picker"),
|
|
1136
|
+
onMouseDown: (e) => e.preventDefault(),
|
|
1137
|
+
children: /* @__PURE__ */ jsx("span", { className: addSwatchDot, children: /* @__PURE__ */ jsx(Plus, { className: addSwatchIcon }) })
|
|
1138
|
+
}
|
|
1139
|
+
)
|
|
1140
|
+
] }) : /* @__PURE__ */ jsx(
|
|
1141
|
+
PickerView,
|
|
1142
|
+
{
|
|
1143
|
+
initialColor: currentColor,
|
|
1144
|
+
onApply: handleApply,
|
|
1145
|
+
onBack: () => setView("preset"),
|
|
1146
|
+
onCancel: handleCancel
|
|
1147
|
+
}
|
|
1148
|
+
) })
|
|
810
1149
|
] });
|
|
811
1150
|
}
|
|
812
1151
|
var popup$4 = "_2buwsh0";
|
package/dist/rich-editor-ui.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
:root{--rc-text: #000;--rc-text-secondary: #262626;--rc-text-tertiary: #737373;--rc-text-quaternary: #a3a3a3;--rc-bg: #ffffff;--rc-bg-secondary: #fafafa;--rc-bg-tertiary: #f5f5f5;--rc-fill: #e8e8e8;--rc-fill-secondary: #eeeeee;--rc-fill-tertiary: #f5f5f5;--rc-fill-quaternary: #fafafa;--rc-border: #f5f5f5;--rc-accent: #2563eb;--rc-accent-light: #2563eb20;--rc-link: #2563eb;--rc-code-text: #404040;--rc-code-bg: #f5f5f5;--rc-hr-border: #e5e5e5;--rc-quote-border: #2563eb;--rc-quote-bg: #f5f5f5;--rc-alert-info: #006bb7;--rc-alert-warning: #cc5500;--rc-alert-tip: #11cc00;--rc-alert-caution: #cc0011;--rc-alert-important: #5500cc;--rc-max-width: 700px;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .06);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.1), 0 4px 6px -4px rgba(0,0,0,.1);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.04), 0 4px 16px rgba(0,0,0,.08);--rc-space-xs: 4px;--rc-space-sm: 8px;--rc-space-md: 16px;--rc-space-lg: 24px;--rc-space-xl: 32px;--rc-font-family-sans: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-family-kai: "楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono: "SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs: .625em;--rc-font-size-xs: .75em;--rc-font-size-sm: .8125em;--rc-font-size-md: .875em;--rc-font-size-lg: 1.25em;--rc-font-size-base: 16px;--rc-font-size-small: 14px;--rc-line-height: 1.7;--rc-line-height-tight: 1.4;--rc-font-family: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm: 4px;--rc-radius-md: 8px;--rc-radius-lg: 12px}:root.dark{--rc-text: #fafafa;--rc-text-secondary: #a3a3a3;--rc-text-tertiary: #737373;--rc-text-quaternary: #525252;--rc-bg: #0a0a0a;--rc-bg-secondary: #171717;--rc-bg-tertiary: #262626;--rc-fill: #2a2a2a;--rc-fill-secondary: #222222;--rc-fill-tertiary: #1a1a1a;--rc-fill-quaternary: #141414;--rc-border: #262626;--rc-accent: #60a5fa;--rc-accent-light: #60a5fa20;--rc-link: #60a5fa;--rc-code-text: #d4d4d4;--rc-code-bg: #262626;--rc-hr-border: #262626;--rc-quote-border: #60a5fa;--rc-quote-bg: #262626;--rc-alert-info: #7db9e5;--rc-alert-warning: #da864a;--rc-alert-tip: #54da48;--rc-alert-caution: #e16973;--rc-alert-important: #9966e0;--rc-max-width: 700px;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .45), 0 2px 8px rgba(0, 0, 0, .3);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.4), 0 4px 6px -4px rgba(0,0,0,.35);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.25), 0 4px 16px rgba(0,0,0,.4);--rc-space-xs: 4px;--rc-space-sm: 8px;--rc-space-md: 16px;--rc-space-lg: 24px;--rc-space-xl: 32px;--rc-font-family-sans: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-family-kai: "楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono: "SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs: .625em;--rc-font-size-xs: .75em;--rc-font-size-sm: .8125em;--rc-font-size-md: .875em;--rc-font-size-lg: 1.25em;--rc-font-size-base: 16px;--rc-font-size-small: 14px;--rc-line-height: 1.7;--rc-line-height-tight: 1.4;--rc-font-family: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm: 4px;--rc-radius-md: 8px;--rc-radius-lg: 12px}[data-theme=dark]{--rc-text: #fafafa;--rc-text-secondary: #a3a3a3;--rc-text-tertiary: #737373;--rc-text-quaternary: #525252;--rc-bg: #0a0a0a;--rc-bg-secondary: #171717;--rc-bg-tertiary: #262626;--rc-fill: #2a2a2a;--rc-fill-secondary: #222222;--rc-fill-tertiary: #1a1a1a;--rc-fill-quaternary: #141414;--rc-border: #262626;--rc-accent: #60a5fa;--rc-accent-light: #60a5fa20;--rc-link: #60a5fa;--rc-code-text: #d4d4d4;--rc-code-bg: #262626;--rc-hr-border: #262626;--rc-quote-border: #60a5fa;--rc-quote-bg: #262626;--rc-alert-info: #7db9e5;--rc-alert-warning: #da864a;--rc-alert-tip: #54da48;--rc-alert-caution: #e16973;--rc-alert-important: #9966e0;--rc-max-width: 700px;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .45), 0 2px 8px rgba(0, 0, 0, .3);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.4), 0 4px 6px -4px rgba(0,0,0,.35);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.25), 0 4px 16px rgba(0,0,0,.4);--rc-space-xs: 4px;--rc-space-sm: 8px;--rc-space-md: 16px;--rc-space-lg: 24px;--rc-space-xl: 32px;--rc-font-family-sans: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-family-kai: "楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono: "SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs: .625em;--rc-font-size-xs: .75em;--rc-font-size-sm: .8125em;--rc-font-size-md: .875em;--rc-font-size-lg: 1.25em;--rc-font-size-base: 16px;--rc-font-size-small: 14px;--rc-line-height: 1.7;--rc-line-height-tight: 1.4;--rc-font-family: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm: 4px;--rc-radius-md: 8px;--rc-radius-lg: 12px}._4yrh350{--rc-text: #000;--rc-text-secondary: #262626;--rc-text-tertiary: #737373;--rc-text-quaternary: #a3a3a3;--rc-bg: #ffffff;--rc-bg-secondary: #fafafa;--rc-bg-tertiary: #f5f5f5;--rc-fill: #e8e8e8;--rc-fill-secondary: #eeeeee;--rc-fill-tertiary: #f5f5f5;--rc-fill-quaternary: #fafafa;--rc-border: #f5f5f5;--rc-accent: #2563eb;--rc-accent-light: #2563eb20;--rc-link: #2563eb;--rc-code-text: #404040;--rc-code-bg: #f5f5f5;--rc-hr-border: #e5e5e5;--rc-quote-border: #2563eb;--rc-quote-bg: #f5f5f5;--rc-alert-info: #006bb7;--rc-alert-warning: #cc5500;--rc-alert-tip: #11cc00;--rc-alert-caution: #cc0011;--rc-alert-important: #5500cc;--rc-max-width: 700px;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .06);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.1), 0 4px 6px -4px rgba(0,0,0,.1);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.04), 0 4px 16px rgba(0,0,0,.08);--rc-space-xs: 4px;--rc-space-sm: 8px;--rc-space-md: 16px;--rc-space-lg: 24px;--rc-space-xl: 32px;--rc-font-family-sans: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-family-kai: "楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono: "SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs: .625em;--rc-font-size-xs: .75em;--rc-font-size-sm: .8125em;--rc-font-size-md: .875em;--rc-font-size-lg: 1.25em;--rc-font-size-base: 16px;--rc-font-size-small: 14px;--rc-line-height: 1.7;--rc-line-height-tight: 1.4;--rc-font-family: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm: 4px;--rc-radius-md: 8px;--rc-radius-lg: 12px}._4yrh351{--rc-text: #000;--rc-text-secondary: #262626;--rc-text-tertiary: #737373;--rc-text-quaternary: #a3a3a3;--rc-bg: #ffffff;--rc-bg-secondary: #fafafa;--rc-bg-tertiary: #f5f5f5;--rc-fill: #e8e8e8;--rc-fill-secondary: #eeeeee;--rc-fill-tertiary: #f5f5f5;--rc-fill-quaternary: #fafafa;--rc-border: #f5f5f5;--rc-accent: #2563eb;--rc-accent-light: #2563eb20;--rc-link: #2563eb;--rc-code-text: #404040;--rc-code-bg: #f5f5f5;--rc-hr-border: #e5e5e5;--rc-quote-border: #2563eb;--rc-quote-bg: #f5f5f5;--rc-alert-info: #006bb7;--rc-alert-warning: #cc5500;--rc-alert-tip: #11cc00;--rc-alert-caution: #cc0011;--rc-alert-important: #5500cc;--rc-max-width: 700px;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .06);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.1), 0 4px 6px -4px rgba(0,0,0,.1);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.04), 0 4px 16px rgba(0,0,0,.08);--rc-space-xs: 4px;--rc-space-sm: 8px;--rc-space-md: 16px;--rc-space-lg: 24px;--rc-space-xl: 32px;--rc-font-family-sans: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-family-kai: "楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono: "SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs: .625em;--rc-font-size-xs: .75em;--rc-font-size-sm: .8125em;--rc-font-size-md: .875em;--rc-font-size-lg: 1.25em;--rc-font-size-base: 16px;--rc-font-size-small: 14px;--rc-line-height: 1.8;--rc-line-height-tight: 1.4;--rc-font-family: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-radius-sm: 4px;--rc-radius-md: 8px;--rc-radius-lg: 12px}._4yrh352{--rc-text: #000;--rc-text-secondary: #262626;--rc-text-tertiary: #737373;--rc-text-quaternary: #a3a3a3;--rc-bg: #ffffff;--rc-bg-secondary: #fafafa;--rc-bg-tertiary: #f5f5f5;--rc-fill: #e8e8e8;--rc-fill-secondary: #eeeeee;--rc-fill-tertiary: #f5f5f5;--rc-fill-quaternary: #fafafa;--rc-border: #f5f5f5;--rc-accent: #2563eb;--rc-accent-light: #2563eb20;--rc-link: #2563eb;--rc-code-text: #404040;--rc-code-bg: #f5f5f5;--rc-hr-border: #e5e5e5;--rc-quote-border: #a3a3a3;--rc-quote-bg: #fafafa;--rc-alert-info: #006bb7;--rc-alert-warning: #cc5500;--rc-alert-tip: #11cc00;--rc-alert-caution: #cc0011;--rc-alert-important: #5500cc;--rc-max-width: none;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .06);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.1), 0 4px 6px -4px rgba(0,0,0,.1);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.04), 0 4px 16px rgba(0,0,0,.08);--rc-space-xs: 2px;--rc-space-sm: 4px;--rc-space-md: 10px;--rc-space-lg: 16px;--rc-space-xl: 20px;--rc-font-family-sans: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-family-kai: "楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono: "SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs: .625em;--rc-font-size-xs: .75em;--rc-font-size-sm: .8125em;--rc-font-size-md: .875em;--rc-font-size-lg: 1.25em;--rc-font-size-base: 14px;--rc-font-size-small: 12px;--rc-line-height: 1.5;--rc-line-height-tight: 1.3;--rc-font-family: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm: 3px;--rc-radius-md: 6px;--rc-radius-lg: 12px}.dark ._4yrh350,[data-theme=dark] ._4yrh350,.dark._4yrh350,[data-theme=dark]._4yrh350,.dark ._4yrh351,[data-theme=dark] ._4yrh351,.dark._4yrh351,[data-theme=dark]._4yrh351,.dark ._4yrh352,[data-theme=dark] ._4yrh352,.dark._4yrh352,[data-theme=dark]._4yrh352{--rc-text: #fafafa;--rc-text-secondary: #a3a3a3;--rc-text-tertiary: #737373;--rc-text-quaternary: #525252;--rc-bg: #0a0a0a;--rc-bg-secondary: #171717;--rc-bg-tertiary: #262626;--rc-fill: #2a2a2a;--rc-fill-secondary: #222222;--rc-fill-tertiary: #1a1a1a;--rc-fill-quaternary: #141414;--rc-border: #262626;--rc-accent: #60a5fa;--rc-accent-light: #60a5fa20;--rc-link: #60a5fa;--rc-code-text: #d4d4d4;--rc-code-bg: #262626;--rc-hr-border: #262626;--rc-quote-border: #60a5fa;--rc-quote-bg: #262626;--rc-alert-info: #7db9e5;--rc-alert-warning: #da864a;--rc-alert-tip: #54da48;--rc-alert-caution: #e16973;--rc-alert-important: #9966e0;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .45), 0 2px 8px rgba(0, 0, 0, .3);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.4), 0 4px 6px -4px rgba(0,0,0,.35);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.25), 0 4px 16px rgba(0,0,0,.4)}._73ej2i0{display:flex;align-items:center;justify-content:flex-end;gap:4px}._73ej2i1{display:inline-flex;align-items:center;justify-content:center;appearance:none;border:none;background:none;cursor:pointer;font-family:inherit;transition:color .15s ease,background-color .15s ease;outline:none}._73ej2i1:focus-visible{box-shadow:0 0 0 2px var(--rc-accent-light)}._73ej2i1:disabled{opacity:.45;cursor:not-allowed}._73ej2i2{color:inherit}._73ej2i2:hover:not(:disabled){background-color:var(--rc-fill-secondary)}._73ej2i3{background-color:var(--rc-text);color:var(--rc-bg);transition:background-color .15s ease,border-color .15s ease,color .15s ease}._73ej2i3:hover:not(:disabled){background-color:color-mix(in srgb,var(--rc-text) 86%,transparent)}._73ej2i4{background:var(--rc-bg);color:var(--rc-text-secondary);border:1px solid var(--rc-border);transition:background-color .15s ease,border-color .15s ease,color .15s ease}._73ej2i4:hover:not(:disabled){background:var(--rc-fill-secondary);color:var(--rc-text)}._73ej2i5{background-color:var(--rc-accent);color:#fff}._73ej2i5:hover:not(:disabled){filter:brightness(.9)}._73ej2i5:disabled{opacity:.5;cursor:default;pointer-events:none}._73ej2i6{gap:6px;font-size:var(--rc-font-size-sm);font-weight:500;padding:4px 8px;border-radius:var(--rc-radius-sm);height:24px;white-space:nowrap}._73ej2i7{gap:6px;font-size:var(--rc-font-size-sm);font-weight:500;padding:4px 10px;border-radius:var(--rc-radius-md);height:28px;line-height:1.4;white-space:nowrap}._73ej2i8{gap:8px;font-size:var(--rc-font-size-small);font-weight:600;padding:0 14px;border-radius:var(--rc-radius-md);height:36px;white-space:nowrap}._73ej2ib{margin-left:auto}._73ej2ih{font-size:var(--rc-font-size-small);width:24px;height:24px;padding:0;gap:0;color:color-mix(in srgb,var(--rc-text-secondary) 60%,transparent)}._73ej2ih:hover:not(:disabled){color:var(--rc-text);background-color:var(--rc-fill-secondary)}._73ej2ih:disabled{opacity:.3;pointer-events:none}._73ej2ii{font-size:var(--rc-font-size-base);padding:6px;border-radius:var(--rc-radius-md);height:auto;width:auto;gap:0;color:var(--rc-text-secondary)}._73ej2ii:hover:not(:disabled){color:var(--rc-text);background-color:color-mix(in srgb,var(--rc-text) 8%,transparent)}._73ej2ii:disabled{opacity:.3;cursor:default}._73ej2ii:disabled:hover{background:none;color:var(--rc-text-secondary)}._73ej2ij{font-size:20px;padding:8px;border-radius:var(--rc-radius-md);height:auto;width:auto;gap:0;color:var(--rc-text-secondary)}._73ej2ij:hover:not(:disabled){color:var(--rc-text);background-color:color-mix(in srgb,var(--rc-text) 8%,transparent)}._73ej2ij:disabled{opacity:.3;cursor:default}._73ej2ij:disabled:hover{background:none;color:var(--rc-text-secondary)}._73ej2ik{border-radius:50%}._73ej2il:hover:not(:disabled){color:var(--rc-alert-caution);background-color:color-mix(in srgb,var(--rc-alert-caution) 10%,transparent)}.re-ui-action-btn--icon svg{width:1em;height:1em}._15r7gwx0{display:flex;align-items:flex-start;gap:8px;padding:8px 12px;border-radius:8px;font-size:13px;line-height:1.5;border:1px solid transparent}._15r7gwx1{background-color:#3b82f60f;border-color:#3b82f63d;color:#1e40af}._15r7gwx2{background-color:#f59e0b0f;border-color:#f59e0b3d;color:#92400e}._15r7gwx3{background-color:#ef44440f;border-color:#ef44443d;color:#991b1b}._15r7gwx4{flex:1;min-width:0}._15r7gwx5{width:16px;height:16px;flex-shrink:0;margin-top:2px}._15r7gwx6{flex-shrink:0;margin-left:auto}.iryuae0{position:relative}.iryuae1{display:flex}.iryuae2{position:relative;padding:.625rem 1rem;font-size:var(--rc-font-size-md);font-weight:500;transition:color .2s;cursor:pointer;border:none;background:none;color:var(--rc-text-secondary);outline:none}.iryuae2:hover{color:color-mix(in srgb,currentColor 80%,transparent)}.iryuae2:focus-visible{outline:2px solid var(--rc-accent);outline-offset:2px}.iryuae3{color:var(--rc-text)}.iryuae4{position:absolute;bottom:0;left:0;right:0;height:1px;background-color:var(--rc-border)}.iryuae5{position:absolute;bottom:0;height:2px;background-color:var(--rc-text);transition:left .3s ease-in-out,width .3s ease-in-out}._1b25hgb0{width:100%;resize:none;overflow:hidden;border:1px solid var(--rc-border);border-radius:var(--rc-radius-md);padding:8px 12px;font-size:14px;line-height:1.5;outline:none;background:var(--rc-bg);color:var(--rc-text);font-family:inherit}._1b25hgb0:focus{border-color:var(--rc-text-quaternary)}._1b25hgb0::placeholder{color:var(--rc-text-quaternary)}._1b25hgb1{overflow-y:auto}._1vt0sm10{display:inline-flex;align-items:center;border-radius:9999px;font-weight:500;white-space:nowrap;line-height:1}._1vt0sm11{background-color:var(--rc-fill-tertiary);color:var(--rc-text-tertiary)}._1vt0sm12{background-color:#22c55e1a;color:#16a34a}._1vt0sm13{background-color:#ef44441a;color:#dc2626}._1vt0sm14{background-color:#f59e0b1a;color:#d97706}._1vt0sm15{background-color:#3b82f61a;color:#2563eb}._1vt0sm16{font-size:11px;padding:2px 6px;gap:3px}._1vt0sm17{font-size:12px;padding:3px 8px;gap:4px}@keyframes _10muorc0{0%{transform:scale(1)}40%{transform:scale(.85)}to{transform:scale(1)}}@keyframes _10muorc1{0%{box-shadow:0 0 color-mix(in srgb,var(--rc-accent) 40%,transparent)}to{box-shadow:0 0 0 6px transparent}}._10muorc2{display:inline-flex;align-items:flex-start;gap:.75rem;border-radius:.5rem;padding:.25rem;text-align:left;border:none;background:none;cursor:pointer;font-family:inherit;font-size:inherit;color:inherit}._10muorc2:focus-visible{outline:2px solid var(--rc-accent);outline-offset:2px}._10muorc3{cursor:not-allowed;opacity:.5}._10muorc4{position:relative;display:flex;width:1.125rem;height:1.125rem;flex-shrink:0;align-items:center;justify-content:center;border-radius:.3rem;border-width:2px;border-style:solid;transition:all .3s cubic-bezier(.34,1.56,.64,1);box-sizing:border-box}._10muorc5{border-color:color-mix(in srgb,var(--rc-text-secondary) 50%,transparent);background-color:transparent}._10muorc6{border-color:var(--rc-accent);background-color:var(--rc-accent)}._10muorc7{animation:_10muorc0 .4s ease-out}._10muorc8{width:.75rem;height:.75rem;transition:all .3s cubic-bezier(.34,1.56,.64,1)}._10muorc9{opacity:1;transform:scale(1)}._10muorca{opacity:0;transform:scale(.5)}._10muorcb{position:absolute;inset:0;border-radius:.3rem;pointer-events:none}._10muorcc{animation:_10muorc1 .4s ease-out}._10muorcd{display:flex;flex-direction:column;gap:.125rem}._10muorce{font-size:var(--rc-font-size-md);font-weight:500;line-height:1.25;color:var(--rc-text);transition:color .2s}._10muorcf{color:var(--rc-text-secondary)}._10muorcg{font-size:var(--rc-font-size-xs);line-height:1.25;color:var(--rc-text-secondary)}._1gq8hf90{--rr-code-accent: #737373;position:relative;margin:1.5rem 0;border-radius:.5rem;overflow:hidden;font-size:var(--rc-font-size-md);font-family:var(--rc-font-mono);line-height:1.65}._1gq8hf91{position:absolute;bottom:.75rem;right:.75rem;z-index:1;display:flex;align-items:center;gap:.375rem;font-size:var(--rc-font-size-md);opacity:.6;pointer-events:none}._1gq8hf92{appearance:none;position:absolute;right:.5rem;top:.5rem;z-index:3;display:flex;align-items:center;justify-content:center;padding:.375rem;border-radius:.375rem;border:1px solid color-mix(in srgb,var(--rr-code-accent) 5%,transparent);background:color-mix(in srgb,var(--rr-code-accent) 80%,transparent);color:#fff;cursor:pointer;opacity:0;transition:opacity .2s ease;backdrop-filter:blur(8px)}._1gq8hf90:hover ._1gq8hf92{opacity:1}._1gq8hf93{position:relative;background:color-mix(in srgb,var(--rr-code-accent) 5%,transparent);padding:0}._1gq8hf94{padding-block:12px}._1gq8hf95{position:relative;width:100%;overflow:auto}._1gq8hf96{max-height:50vh;overflow:hidden}._1gq8hf97{position:absolute;bottom:0;left:0;right:0;display:flex;justify-content:center;padding:.5rem 0 .75rem;background:linear-gradient(to bottom,transparent 0%,var(--bg, var(--rc-bg-secondary)) 80%);pointer-events:none}._1gq8hf98{appearance:none;border:none;background:none;cursor:pointer;display:flex;align-items:center;gap:.5rem;font-size:var(--rc-font-size-xs);color:inherit;opacity:.7;pointer-events:auto}._1gq8hf98:hover{opacity:1}._1gq8hf99{counter-reset:shiki-line 0}._1gq8hf99 .line{counter-increment:shiki-line 1}._1gq8hf99 .line:before{content:counter(shiki-line);color:transparent;text-align:right;box-sizing:border-box;width:2em;display:inline-block;position:sticky;left:0}._1gq8hf9a .line:before{color:inherit;opacity:.4;width:5em;padding-right:2em}._1gq8hf90 pre{margin:0!important;padding:0!important;border-radius:0;font-size:1em;overflow-x:auto}._1gq8hf90 pre code{display:flex;flex-direction:column;font-family:var(--rc-font-mono)!important;line-height:inherit}._1gq8hf90 .shiki,._1gq8hf90 code,._1gq8hf90 pre{background:transparent!important;line-height:inherit}[data-theme=dark] ._1gq8hf90 .shiki-themes,[data-theme=dark] ._1gq8hf90 .shiki-themes span{color:var(--shiki-dark)!important;font-style:var(--shiki-dark-font-style)!important;font-weight:var(--shiki-dark-font-weight)!important;text-decoration:var(--shiki-dark-text-decoration)!important}._1gq8hf90 .line{display:block;padding:0 1.25rem}._1gq8hf90 .line>span:last-child{margin-right:1.25rem}._1gq8hf90 .line:after{content:" "}._1hdi6a90{display:flex;align-items:center;gap:6px;cursor:pointer;border:none;background:none;padding:0;color:var(--rc-text-tertiary);font-size:inherit;font-family:inherit;width:100%;text-align:left}._1hdi6a90:hover{color:var(--rc-text-secondary)}._1hdi6a91{transition:transform .2s ease;width:14px;height:14px;flex-shrink:0}[data-panel-open] ._1hdi6a91{transform:rotate(90deg)}._1hdi6a92{overflow:hidden;interpolate-size:allow-keywords;height:var(--collapsible-panel-height);transition:height .2s cubic-bezier(.4,0,.2,1)}._1hdi6a92[data-closed],._1hdi6a92[data-starting-style],._1hdi6a92[data-ending-style]{height:0}@keyframes f2q44l0{0%{opacity:0;transform:translateY(2px) scale(.96)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes f2q44l1{0%{opacity:1;transform:translateY(0) scale(1)}to{opacity:0;transform:translateY(2px) scale(.96)}}.f2q44l2{z-index:50;width:288px;border-radius:.5rem;border:1px solid var(--rc-border);padding:1rem;background-color:var(--rc-bg);box-shadow:var(--rc-shadow-modal);outline:none;transition:opacity .15s ease-out,transform .15s ease-out;font-family:var(--rc-font-family-sans)}.f2q44l2[data-open]{animation:f2q44l0 .15s ease-out}.f2q44l2[data-ending-style]{opacity:0;transform:translateY(2px) scale(.96)}.f2q44l2[data-closed]{animation:f2q44l1 .15s ease-in}.f2q44l3{width:10px;height:10px;transform-origin:center}.f2q44l3>polygon{fill:var(--rc-bg)}.f2q44l3>polyline{stroke:var(--rc-border);fill:none}.f2q44l4{font-size:var(--rc-font-size-md);font-weight:600;line-height:1;color:var(--rc-text)}.f2q44l5{font-size:var(--rc-font-size-md);line-height:1.25rem;color:var(--rc-text-secondary);margin-top:.25rem}@keyframes _17r50hf0{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}._17r50hf1{display:flex;align-items:center;gap:2px;height:32px;padding:0 6px;border:none;background:none;border-radius:8px;cursor:pointer;color:var(--rc-text-secondary);transition:color .1s,background-color .1s}._17r50hf1:hover{color:var(--rc-text);background-color:color-mix(in srgb,var(--rc-text) 4%,transparent)}._17r50hf2{display:flex;flex-direction:column;align-items:center}._17r50hf3{font-size:var(--rc-font-size-xs);font-weight:600;line-height:1}._17r50hf4{margin-top:2px;height:2px;width:14px;border-radius:1px}._17r50hf5{width:12px;height:12px;transition:transform .15s}._17r50hf6{padding:8px;width:auto}._17r50hf6[data-open]{animation:_17r50hf0 .12s ease-out}._17r50hf7{display:grid;grid-template-columns:repeat(5,1fr);gap:4px}._17r50hf8{position:relative;display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;background:none;border-radius:8px;cursor:pointer;padding:0;transition:background-color .1s}._17r50hf8:hover{background-color:color-mix(in srgb,var(--rc-text) 4%,transparent)}._17r50hf9{width:16px;height:16px;border-radius:50%;border:1px solid color-mix(in srgb,var(--rc-text) 10%,transparent)}._17r50hfa{position:absolute;width:10px;height:10px;color:var(--rc-bg)}@keyframes _1sxaacb0{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes _1sxaacb1{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.95)}}._1sxaacb2{height:1px;background-color:var(--rc-hr-border);margin:.25rem -.25rem}._1sxaacb3{font-size:var(--rc-font-size-xs);font-weight:500;line-height:1.4;color:var(--rc-text-tertiary);padding:.25rem .375rem}._2buwsh0{min-width:8rem;border-radius:var(--rc-radius-lg);padding:var(--rc-space-xs);background-color:var(--rc-bg);box-shadow:0 0 0 1px color-mix(in srgb,var(--rc-text) 10%,transparent),var(--rc-shadow-menu);outline:none;color:var(--rc-text);font-family:var(--rc-font-family-sans);font-size:var(--rc-font-size-small);z-index:50;max-height:min(var(--available-height),16rem);overflow-x:hidden;overflow-y:auto;transform-origin:var(--transform-origin);transition:opacity .1s ease-out,transform .1s ease-out}._2buwsh0[data-open]{animation:_1sxaacb0 .1s ease-out}._2buwsh0[data-starting-style],._2buwsh0[data-ending-style]{opacity:0;transform:scale(.95)}._2buwsh0[data-closed]{animation:_1sxaacb1 .1s ease-in;overflow:hidden}._2buwsh1{display:flex;align-items:center;gap:.375rem;border-radius:var(--rc-radius-md);padding:var(--rc-space-xs) var(--rc-space-md) var(--rc-space-xs) var(--rc-space-sm);font-size:var(--rc-font-size-small);line-height:1.35;outline:none;user-select:none;cursor:default;color:var(--rc-text);position:relative;transition:background-color .1s ease,color .1s ease}._2buwsh1[data-highlighted]{background-color:var(--rc-fill-secondary);color:var(--rc-text)}._2buwsh1[data-disabled]{opacity:.5;pointer-events:none}._2buwsh1 svg{pointer-events:none;flex-shrink:0;width:1rem;height:1rem;color:var(--rc-text-secondary);transition:color .1s ease}._2buwsh1[data-highlighted] svg{color:var(--rc-text)}._2buwsh2{font-size:var(--rc-font-size-small);color:var(--rc-text-secondary);text-align:center}@keyframes vwlngv0{0%{opacity:0}to{opacity:1}}@keyframes vwlngv1{0%{opacity:1}to{opacity:0}}@keyframes vwlngv2{0%{opacity:0;transform:translate(-50%,-48%) scale(.95)}to{opacity:1;transform:translate(-50%,-50%) scale(1)}}@keyframes vwlngv3{0%{opacity:1;transform:translate(-50%,-50%) scale(1)}to{opacity:0;transform:translate(-50%,-48%) scale(.95)}}@keyframes vwlngvd{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes vwlngve{0%{transform:translateY(0)}to{transform:translateY(100%)}}.vwlngv4{position:fixed;inset:0;z-index:50;background-color:#000c}.vwlngv4[data-open]{animation:vwlngv0 .25s ease-out}.vwlngv4[data-closed]{animation:vwlngv1 .2s ease-in}.vwlngv5{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);z-index:50;display:grid;width:100%;max-width:calc(100% - 2rem);gap:0;border-radius:var(--rc-radius-lg);border:1px solid var(--rc-border);padding:0;font-family:var(--rc-font-family-sans);line-height:1.43;color:var(--rc-text);background-color:var(--rc-bg);box-shadow:var(--rc-shadow-modal);outline:none}.vwlngv5[data-open]{animation:vwlngv2 .15s ease-out}.vwlngv5[data-closed]{animation:vwlngv3 .1s ease-in}.vwlngv6{position:absolute;top:1.25rem;right:1.5rem;display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:.25rem;border:none;background:none;cursor:pointer;opacity:.7;color:var(--rc-text-secondary);transition:opacity .2s ease,color .2s ease}.vwlngv6:hover{opacity:1;color:var(--rc-text)}.vwlngv6:focus-visible{outline:none;box-shadow:0 0 0 2px var(--rc-bg),0 0 0 4px var(--rc-text-secondary)}.vwlngv6:disabled{pointer-events:none;opacity:.5}.vwlngv6 svg{width:16px;height:16px;pointer-events:none;flex-shrink:0}.vwlngv7{display:flex;align-items:flex-start;gap:.75rem;padding:1.25rem 1.5rem .75rem}.vwlngv8{display:flex;flex-direction:column;gap:.375rem;flex:1;min-width:0;text-align:center}.vwlngv9{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:.25rem;border:none;background:none;cursor:pointer;opacity:.7;color:var(--rc-text-secondary);flex-shrink:0;transition:opacity .2s ease,color .2s ease}.vwlngv9:hover{opacity:1;color:var(--rc-text)}.vwlngv9:focus-visible{outline:none;box-shadow:0 0 0 2px var(--rc-bg),0 0 0 4px var(--rc-text-secondary)}.vwlngv9 svg{width:16px;height:16px;pointer-events:none;flex-shrink:0}.vwlngva{display:flex;flex-direction:column-reverse;gap:.5rem;padding:.75rem 1.5rem 1.25rem}.vwlngvb{font-family:var(--rc-font-family);font-size:1.125em;font-weight:600;line-height:1.33;letter-spacing:-.015em;color:var(--rc-text)}.vwlngvc{font-family:var(--rc-font-family);font-size:var(--rc-font-size-md);line-height:1.43;color:var(--rc-text-secondary)}.vwlngvf{position:fixed;inset:0;z-index:50;background-color:#00000080;transition:opacity .2s ease}.vwlngvg{position:fixed;bottom:0;left:0;right:0;z-index:50;display:flex;flex-direction:column;max-height:85vh;border-top-left-radius:12px;border-top-right-radius:12px;background-color:var(--rc-bg);color:var(--rc-text);font-family:var(--rc-font-family-sans);box-shadow:0 -4px 24px #00000026;will-change:transform}.vwlngvg[data-open]{animation:vwlngvd .3s cubic-bezier(.32,.72,0,1)}.vwlngvg[data-closed]{animation:vwlngve .2s ease-in}.vwlngvh{display:flex;align-items:center;justify-content:center;padding:12px 0 4px;cursor:grab;flex-shrink:0;touch-action:none}.vwlngvh:active{cursor:grabbing}.vwlngvi{width:36px;height:4px;border-radius:2px;background-color:var(--rc-text-tertiary);opacity:.5}.vwlngvj{flex:1;overflow-y:auto;overflow-x:hidden;padding:0 1.5rem 1.5rem;-webkit-overflow-scrolling:touch}.vwlngvk{display:flex;flex-direction:column;gap:.375rem;text-align:center;padding:0 1.5rem .5rem}@media(min-width:640px){.vwlngv5{max-width:28rem}.vwlngv8{text-align:left}.vwlngva{flex-direction:row;justify-content:flex-end}}.oih0op0{min-width:8rem;border-radius:var(--rc-radius-lg);padding:var(--rc-space-xs);background-color:var(--rc-bg);box-shadow:0 0 0 1px color-mix(in srgb,var(--rc-text) 10%,transparent),var(--rc-shadow-menu);outline:none;color:var(--rc-text);font-family:var(--rc-font-family-sans);font-size:var(--rc-font-size-small);z-index:50;max-height:var(--available-height);overflow-x:hidden;overflow-y:auto;transform-origin:var(--transform-origin);transition:opacity .1s ease-out,transform .1s ease-out;max-width:min(20rem,calc(100vw - .75rem))}.oih0op0[data-open]{animation:_1sxaacb0 .1s ease-out}.oih0op0[data-starting-style],.oih0op0[data-ending-style]{opacity:0;transform:scale(.95)}.oih0op0[data-closed]{animation:_1sxaacb1 .1s ease-in;overflow:hidden}.oih0op1{outline:none;z-index:50;isolation:isolate}.oih0op1[data-side=bottom]{transform:translateY(2px)}.oih0op1[data-side=top]{transform:translateY(-2px)}.oih0op1[data-side=left]{transform:translate(-2px)}.oih0op1[data-side=right]{transform:translate(2px)}.oih0op2{display:flex;align-items:center;gap:.375rem;border-radius:var(--rc-radius-md);padding:var(--rc-space-xs) var(--rc-space-md) var(--rc-space-xs) var(--rc-space-sm);font-size:var(--rc-font-size-small);line-height:1.35;outline:none;user-select:none;cursor:default;color:var(--rc-text);position:relative;transition:background-color .1s ease,color .1s ease}.oih0op2[data-highlighted]{background-color:var(--rc-fill-secondary);color:var(--rc-text)}.oih0op2[data-disabled]{opacity:.5;pointer-events:none}.oih0op2 svg{pointer-events:none;flex-shrink:0;width:1rem;height:1rem;color:var(--rc-text-secondary);transition:color .1s ease}.oih0op2[data-highlighted] svg{color:var(--rc-text)}.oih0op3{padding-right:2rem}.oih0op4,.oih0op5{position:absolute;right:.5rem;display:inline-flex;align-items:center;justify-content:center;width:1rem;height:1rem;flex-shrink:0;pointer-events:none;color:var(--rc-text-secondary)}._1y5k2ih0{overflow:auto;scrollbar-width:thin;scrollbar-color:rgba(0,0,0,.15) transparent}._1y5k2ih0::-webkit-scrollbar{width:6px}._1y5k2ih0::-webkit-scrollbar-track{background:transparent}._1y5k2ih0::-webkit-scrollbar-thumb{background:#00000026;border-radius:3px}._6d8tz20{position:relative;display:inline-flex;align-items:center;border-radius:.5rem;background-color:var(--rc-bg-tertiary);padding:.25rem}._6d8tz21{height:2rem;font-size:var(--rc-font-size-xs)}._6d8tz22{height:2.5rem;font-size:var(--rc-font-size-md)}._6d8tz23{width:100%}._6d8tz25{position:absolute;top:.25rem;bottom:.25rem;border-radius:.375rem;background-color:var(--rc-bg);box-shadow:0 1px 2px #0000000d;transition:all .3s cubic-bezier(.25,1,.5,1);pointer-events:none}._6d8tz27{opacity:0}._6d8tz28{position:relative;z-index:10;display:flex;align-items:center;justify-content:center;white-space:nowrap;border-radius:.375rem;font-weight:500;outline:none;border:none;background:transparent;cursor:pointer;transition:color .2s;color:var(--rc-text-secondary)}._6d8tz28:focus-visible{outline:2px solid var(--rc-accent);outline-offset:1px}._6d8tz29{padding:0 .75rem}._6d8tz2a{padding:0 1rem}._6d8tz2b{color:var(--rc-text)}._6d8tz2d{pointer-events:none;opacity:.4}._6d8tz2f{flex:1}@keyframes p74a620{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes p74a621{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.95)}}.p74a622{display:inline-flex;align-items:center;justify-content:space-between;gap:6px;height:36px;padding:8px 8px 8px 10px;font-size:var(--rc-font-size-small);line-height:1.35;font-family:var(--rc-font-family-sans);border:1px solid var(--rc-border);border-radius:var(--rc-radius-md);background:transparent;color:var(--rc-text);cursor:pointer;outline:none;white-space:nowrap;box-shadow:0 1px 2px #0000000d;transition:color .15s ease,box-shadow .15s ease,border-color .15s ease}.p74a622:hover{background:var(--rc-fill-quaternary)}.p74a622:focus-visible{border-color:var(--rc-accent);box-shadow:0 0 0 3px var(--rc-accent-light)}.p74a622[data-popup-open]{background:var(--rc-fill-quaternary)}.p74a622[data-disabled]{opacity:.5;cursor:not-allowed}.p74a623{width:16px;height:16px;color:var(--rc-text-tertiary);flex-shrink:0;pointer-events:none}.p74a624{outline:none;z-index:50;isolation:isolate}.p74a625{background:var(--rc-bg);color:var(--rc-text);font-family:var(--rc-font-family-sans);font-size:var(--rc-font-size-small);border-radius:var(--rc-radius-md);box-shadow:0 0 0 1px color-mix(in srgb,var(--rc-text) 10%,transparent),var(--rc-shadow-menu);width:min(var(--anchor-width),calc(100vw - .75rem));max-width:calc(100vw - .75rem);max-height:var(--available-height);overflow-x:hidden;overflow-y:auto;outline:none;transform-origin:var(--transform-origin);transition:opacity .1s ease-out,transform .1s ease-out}.p74a625[data-open]{animation:p74a620 .1s ease-out}.p74a625[data-starting-style],.p74a625[data-ending-style]{opacity:0;transform:scale(.95)}.p74a625[data-closed]{animation:p74a621 .1s ease-in;overflow:hidden}.p74a626{padding:4px}.p74a626+.p74a626{border-top:1px solid var(--rc-hr-border)}.p74a627{display:flex;align-items:center;gap:8px;padding:6px 32px 6px 8px;border-radius:var(--rc-radius-sm);font-size:var(--rc-font-size-small);line-height:1.35;outline:none;user-select:none;cursor:default;color:var(--rc-text);position:relative;transition:background-color .1s ease,color .1s ease}.p74a627[data-highlighted]{background-color:var(--rc-fill-secondary);color:var(--rc-text)}.p74a627[data-disabled]{opacity:.5;pointer-events:none}.p74a627 svg{pointer-events:none;flex-shrink:0;width:16px;height:16px}.p74a628{position:absolute;right:8px;display:flex;align-items:center;justify-content:center;width:16px;height:16px;pointer-events:none;color:var(--rc-text-secondary)}.p74a627[data-highlighted] .p74a628{color:var(--rc-text)}.p74a629{padding:6px 8px;font-size:var(--rc-font-size-xs);font-weight:500;line-height:1.4;color:var(--rc-text-tertiary)}.p74a62a{height:1px;background-color:var(--rc-hr-border);margin:4px -4px}.p74a62b{display:flex;align-items:center;justify-content:center;width:100%;padding:4px 0;cursor:default;color:var(--rc-text-tertiary);background:var(--rc-bg);z-index:10}.p74a62b svg{width:16px;height:16px}@keyframes _131cfek0{to{transform:rotate(360deg)}}._131cfek1{display:inline-block;border-radius:50%;border:2px solid currentColor;border-top-color:transparent;animation:_131cfek0 .6s linear infinite;flex-shrink:0}._131cfek2{width:14px;height:14px}._131cfek3{width:20px;height:20px}@keyframes _73cmpa0{0%{transform:scale(1);opacity:1}50%{transform:scale(1.8);opacity:0}to{transform:scale(1.8);opacity:0}}._73cmpa1{position:relative;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}._73cmpa2{border-radius:50%;flex-shrink:0}._73cmpa3{background-color:#a3a3a3}._73cmpa4{background-color:#3b82f6}._73cmpa5{background-color:#22c55e}._73cmpa6{background-color:#ef4444}._73cmpa7{background-color:#f59e0b}._73cmpa8{width:8px;height:8px}._73cmpa9{width:12px;height:12px}._73cmpaa{position:absolute;border-radius:50%;animation:_73cmpa0 1.5s ease-in-out infinite}._73cmpab{background-color:#a3a3a3}._73cmpac{background-color:#3b82f6}._73cmpad{background-color:#22c55e}._73cmpae{background-color:#ef4444}._73cmpaf{background-color:#f59e0b}._73cmpag{width:8px;height:8px}._73cmpah{width:12px;height:12px}@keyframes _1cspf2m0{0%{opacity:0;transform:translateY(2px)}to{opacity:1;transform:translateY(0)}}@keyframes _1cspf2m1{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(2px)}}._1cspf2m2{z-index:50;outline:none}._1cspf2m3{max-width:320px;padding:var(--rc-space-xs) var(--rc-space-sm);font-size:var(--rc-font-size-xs);line-height:1.4;color:var(--rc-text);background-color:var(--rc-bg);border:1px solid var(--rc-border);border-radius:var(--rc-radius-md);box-shadow:var(--rc-shadow-menu);outline:none;white-space:normal;word-break:break-word;pointer-events:none;transition:opacity .12s ease-out,transform .12s ease-out}._1cspf2m3[data-open]{animation:_1cspf2m0 .12s ease-out}._1cspf2m3[data-ending-style]{opacity:0;transform:translateY(2px)}._1cspf2m3[data-closed]{animation:_1cspf2m1 .12s ease-in}
|
|
1
|
+
:root{--rc-text: #000;--rc-text-secondary: #262626;--rc-text-tertiary: #737373;--rc-text-quaternary: #a3a3a3;--rc-bg: #ffffff;--rc-bg-secondary: #fafafa;--rc-bg-tertiary: #f5f5f5;--rc-fill: #e8e8e8;--rc-fill-secondary: #eeeeee;--rc-fill-tertiary: #f5f5f5;--rc-fill-quaternary: #fafafa;--rc-border: #f5f5f5;--rc-accent: #2563eb;--rc-accent-light: #2563eb20;--rc-link: #2563eb;--rc-code-text: #404040;--rc-code-bg: #f5f5f5;--rc-hr-border: #e5e5e5;--rc-quote-border: #2563eb;--rc-quote-bg: #f5f5f5;--rc-alert-info: #006bb7;--rc-alert-warning: #cc5500;--rc-alert-tip: #11cc00;--rc-alert-caution: #cc0011;--rc-alert-important: #5500cc;--rc-max-width: 700px;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .06);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.1), 0 4px 6px -4px rgba(0,0,0,.1);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.04), 0 4px 16px rgba(0,0,0,.08);--rc-space-xs: 4px;--rc-space-sm: 8px;--rc-space-md: 16px;--rc-space-lg: 24px;--rc-space-xl: 32px;--rc-font-family-sans: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-family-kai: "楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono: "SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs: .625em;--rc-font-size-xs: .75em;--rc-font-size-sm: .8125em;--rc-font-size-md: .875em;--rc-font-size-lg: 1.25em;--rc-font-size-base: 16px;--rc-font-size-small: 14px;--rc-line-height: 1.7;--rc-line-height-tight: 1.4;--rc-font-family: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm: 4px;--rc-radius-md: 8px;--rc-radius-lg: 12px}:root.dark{--rc-text: #fafafa;--rc-text-secondary: #a3a3a3;--rc-text-tertiary: #737373;--rc-text-quaternary: #525252;--rc-bg: #0a0a0a;--rc-bg-secondary: #171717;--rc-bg-tertiary: #262626;--rc-fill: #2a2a2a;--rc-fill-secondary: #222222;--rc-fill-tertiary: #1a1a1a;--rc-fill-quaternary: #141414;--rc-border: #262626;--rc-accent: #60a5fa;--rc-accent-light: #60a5fa20;--rc-link: #60a5fa;--rc-code-text: #d4d4d4;--rc-code-bg: #262626;--rc-hr-border: #262626;--rc-quote-border: #60a5fa;--rc-quote-bg: #262626;--rc-alert-info: #7db9e5;--rc-alert-warning: #da864a;--rc-alert-tip: #54da48;--rc-alert-caution: #e16973;--rc-alert-important: #9966e0;--rc-max-width: 700px;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .45), 0 2px 8px rgba(0, 0, 0, .3);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.4), 0 4px 6px -4px rgba(0,0,0,.35);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.25), 0 4px 16px rgba(0,0,0,.4);--rc-space-xs: 4px;--rc-space-sm: 8px;--rc-space-md: 16px;--rc-space-lg: 24px;--rc-space-xl: 32px;--rc-font-family-sans: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-family-kai: "楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono: "SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs: .625em;--rc-font-size-xs: .75em;--rc-font-size-sm: .8125em;--rc-font-size-md: .875em;--rc-font-size-lg: 1.25em;--rc-font-size-base: 16px;--rc-font-size-small: 14px;--rc-line-height: 1.7;--rc-line-height-tight: 1.4;--rc-font-family: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm: 4px;--rc-radius-md: 8px;--rc-radius-lg: 12px}[data-theme=dark]{--rc-text: #fafafa;--rc-text-secondary: #a3a3a3;--rc-text-tertiary: #737373;--rc-text-quaternary: #525252;--rc-bg: #0a0a0a;--rc-bg-secondary: #171717;--rc-bg-tertiary: #262626;--rc-fill: #2a2a2a;--rc-fill-secondary: #222222;--rc-fill-tertiary: #1a1a1a;--rc-fill-quaternary: #141414;--rc-border: #262626;--rc-accent: #60a5fa;--rc-accent-light: #60a5fa20;--rc-link: #60a5fa;--rc-code-text: #d4d4d4;--rc-code-bg: #262626;--rc-hr-border: #262626;--rc-quote-border: #60a5fa;--rc-quote-bg: #262626;--rc-alert-info: #7db9e5;--rc-alert-warning: #da864a;--rc-alert-tip: #54da48;--rc-alert-caution: #e16973;--rc-alert-important: #9966e0;--rc-max-width: 700px;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .45), 0 2px 8px rgba(0, 0, 0, .3);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.4), 0 4px 6px -4px rgba(0,0,0,.35);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.25), 0 4px 16px rgba(0,0,0,.4);--rc-space-xs: 4px;--rc-space-sm: 8px;--rc-space-md: 16px;--rc-space-lg: 24px;--rc-space-xl: 32px;--rc-font-family-sans: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-family-kai: "楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono: "SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs: .625em;--rc-font-size-xs: .75em;--rc-font-size-sm: .8125em;--rc-font-size-md: .875em;--rc-font-size-lg: 1.25em;--rc-font-size-base: 16px;--rc-font-size-small: 14px;--rc-line-height: 1.7;--rc-line-height-tight: 1.4;--rc-font-family: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm: 4px;--rc-radius-md: 8px;--rc-radius-lg: 12px}._4yrh350{--rc-text: #000;--rc-text-secondary: #262626;--rc-text-tertiary: #737373;--rc-text-quaternary: #a3a3a3;--rc-bg: #ffffff;--rc-bg-secondary: #fafafa;--rc-bg-tertiary: #f5f5f5;--rc-fill: #e8e8e8;--rc-fill-secondary: #eeeeee;--rc-fill-tertiary: #f5f5f5;--rc-fill-quaternary: #fafafa;--rc-border: #f5f5f5;--rc-accent: #2563eb;--rc-accent-light: #2563eb20;--rc-link: #2563eb;--rc-code-text: #404040;--rc-code-bg: #f5f5f5;--rc-hr-border: #e5e5e5;--rc-quote-border: #2563eb;--rc-quote-bg: #f5f5f5;--rc-alert-info: #006bb7;--rc-alert-warning: #cc5500;--rc-alert-tip: #11cc00;--rc-alert-caution: #cc0011;--rc-alert-important: #5500cc;--rc-max-width: 700px;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .06);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.1), 0 4px 6px -4px rgba(0,0,0,.1);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.04), 0 4px 16px rgba(0,0,0,.08);--rc-space-xs: 4px;--rc-space-sm: 8px;--rc-space-md: 16px;--rc-space-lg: 24px;--rc-space-xl: 32px;--rc-font-family-sans: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-family-kai: "楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono: "SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs: .625em;--rc-font-size-xs: .75em;--rc-font-size-sm: .8125em;--rc-font-size-md: .875em;--rc-font-size-lg: 1.25em;--rc-font-size-base: 16px;--rc-font-size-small: 14px;--rc-line-height: 1.7;--rc-line-height-tight: 1.4;--rc-font-family: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm: 4px;--rc-radius-md: 8px;--rc-radius-lg: 12px}._4yrh351{--rc-text: #000;--rc-text-secondary: #262626;--rc-text-tertiary: #737373;--rc-text-quaternary: #a3a3a3;--rc-bg: #ffffff;--rc-bg-secondary: #fafafa;--rc-bg-tertiary: #f5f5f5;--rc-fill: #e8e8e8;--rc-fill-secondary: #eeeeee;--rc-fill-tertiary: #f5f5f5;--rc-fill-quaternary: #fafafa;--rc-border: #f5f5f5;--rc-accent: #2563eb;--rc-accent-light: #2563eb20;--rc-link: #2563eb;--rc-code-text: #404040;--rc-code-bg: #f5f5f5;--rc-hr-border: #e5e5e5;--rc-quote-border: #2563eb;--rc-quote-bg: #f5f5f5;--rc-alert-info: #006bb7;--rc-alert-warning: #cc5500;--rc-alert-tip: #11cc00;--rc-alert-caution: #cc0011;--rc-alert-important: #5500cc;--rc-max-width: 700px;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .06);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.1), 0 4px 6px -4px rgba(0,0,0,.1);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.04), 0 4px 16px rgba(0,0,0,.08);--rc-space-xs: 4px;--rc-space-sm: 8px;--rc-space-md: 16px;--rc-space-lg: 24px;--rc-space-xl: 32px;--rc-font-family-sans: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-family-kai: "楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono: "SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs: .625em;--rc-font-size-xs: .75em;--rc-font-size-sm: .8125em;--rc-font-size-md: .875em;--rc-font-size-lg: 1.25em;--rc-font-size-base: 16px;--rc-font-size-small: 14px;--rc-line-height: 1.8;--rc-line-height-tight: 1.4;--rc-font-family: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-radius-sm: 4px;--rc-radius-md: 8px;--rc-radius-lg: 12px}._4yrh352{--rc-text: #000;--rc-text-secondary: #262626;--rc-text-tertiary: #737373;--rc-text-quaternary: #a3a3a3;--rc-bg: #ffffff;--rc-bg-secondary: #fafafa;--rc-bg-tertiary: #f5f5f5;--rc-fill: #e8e8e8;--rc-fill-secondary: #eeeeee;--rc-fill-tertiary: #f5f5f5;--rc-fill-quaternary: #fafafa;--rc-border: #f5f5f5;--rc-accent: #2563eb;--rc-accent-light: #2563eb20;--rc-link: #2563eb;--rc-code-text: #404040;--rc-code-bg: #f5f5f5;--rc-hr-border: #e5e5e5;--rc-quote-border: #a3a3a3;--rc-quote-bg: #fafafa;--rc-alert-info: #006bb7;--rc-alert-warning: #cc5500;--rc-alert-tip: #11cc00;--rc-alert-caution: #cc0011;--rc-alert-important: #5500cc;--rc-max-width: none;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .06);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.1), 0 4px 6px -4px rgba(0,0,0,.1);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.04), 0 4px 16px rgba(0,0,0,.08);--rc-space-xs: 2px;--rc-space-sm: 4px;--rc-space-md: 10px;--rc-space-lg: 16px;--rc-space-xl: 20px;--rc-font-family-sans: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-family-kai: "楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono: "SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs: .625em;--rc-font-size-xs: .75em;--rc-font-size-sm: .8125em;--rc-font-size-md: .875em;--rc-font-size-lg: 1.25em;--rc-font-size-base: 14px;--rc-font-size-small: 12px;--rc-line-height: 1.5;--rc-line-height-tight: 1.3;--rc-font-family: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm: 3px;--rc-radius-md: 6px;--rc-radius-lg: 12px}.dark ._4yrh350,[data-theme=dark] ._4yrh350,.dark._4yrh350,[data-theme=dark]._4yrh350,.dark ._4yrh351,[data-theme=dark] ._4yrh351,.dark._4yrh351,[data-theme=dark]._4yrh351,.dark ._4yrh352,[data-theme=dark] ._4yrh352,.dark._4yrh352,[data-theme=dark]._4yrh352{--rc-text: #fafafa;--rc-text-secondary: #a3a3a3;--rc-text-tertiary: #737373;--rc-text-quaternary: #525252;--rc-bg: #0a0a0a;--rc-bg-secondary: #171717;--rc-bg-tertiary: #262626;--rc-fill: #2a2a2a;--rc-fill-secondary: #222222;--rc-fill-tertiary: #1a1a1a;--rc-fill-quaternary: #141414;--rc-border: #262626;--rc-accent: #60a5fa;--rc-accent-light: #60a5fa20;--rc-link: #60a5fa;--rc-code-text: #d4d4d4;--rc-code-bg: #262626;--rc-hr-border: #262626;--rc-quote-border: #60a5fa;--rc-quote-bg: #262626;--rc-alert-info: #7db9e5;--rc-alert-warning: #da864a;--rc-alert-tip: #54da48;--rc-alert-caution: #e16973;--rc-alert-important: #9966e0;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .45), 0 2px 8px rgba(0, 0, 0, .3);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.4), 0 4px 6px -4px rgba(0,0,0,.35);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.25), 0 4px 16px rgba(0,0,0,.4)}._73ej2i0{display:flex;align-items:center;justify-content:flex-end;gap:4px}._73ej2i1{display:inline-flex;align-items:center;justify-content:center;appearance:none;border:none;background:none;cursor:pointer;font-family:inherit;transition:color .15s ease,background-color .15s ease;outline:none}._73ej2i1:focus-visible{box-shadow:0 0 0 2px var(--rc-accent-light)}._73ej2i1:disabled{opacity:.45;cursor:not-allowed}._73ej2i2{color:inherit}._73ej2i2:hover:not(:disabled){background-color:var(--rc-fill-secondary)}._73ej2i3{background-color:var(--rc-text);color:var(--rc-bg);transition:background-color .15s ease,border-color .15s ease,color .15s ease}._73ej2i3:hover:not(:disabled){background-color:color-mix(in srgb,var(--rc-text) 86%,transparent)}._73ej2i4{background:var(--rc-bg);color:var(--rc-text-secondary);border:1px solid var(--rc-border);transition:background-color .15s ease,border-color .15s ease,color .15s ease}._73ej2i4:hover:not(:disabled){background:var(--rc-fill-secondary);color:var(--rc-text)}._73ej2i5{background-color:var(--rc-accent);color:#fff}._73ej2i5:hover:not(:disabled){filter:brightness(.9)}._73ej2i5:disabled{opacity:.5;cursor:default;pointer-events:none}._73ej2i6{gap:6px;font-size:var(--rc-font-size-sm);font-weight:500;padding:4px 8px;border-radius:var(--rc-radius-sm);height:24px;white-space:nowrap}._73ej2i7{gap:6px;font-size:var(--rc-font-size-sm);font-weight:500;padding:4px 10px;border-radius:var(--rc-radius-md);height:28px;line-height:1.4;white-space:nowrap}._73ej2i8{gap:8px;font-size:var(--rc-font-size-small);font-weight:600;padding:0 14px;border-radius:var(--rc-radius-md);height:36px;white-space:nowrap}._73ej2ib{margin-left:auto}._73ej2ih{font-size:var(--rc-font-size-small);width:24px;height:24px;padding:0;gap:0;color:color-mix(in srgb,var(--rc-text-secondary) 60%,transparent)}._73ej2ih:hover:not(:disabled){color:var(--rc-text);background-color:var(--rc-fill-secondary)}._73ej2ih:disabled{opacity:.3;pointer-events:none}._73ej2ii{font-size:var(--rc-font-size-base);padding:6px;border-radius:var(--rc-radius-md);height:auto;width:auto;gap:0;color:var(--rc-text-secondary)}._73ej2ii:hover:not(:disabled){color:var(--rc-text);background-color:color-mix(in srgb,var(--rc-text) 8%,transparent)}._73ej2ii:disabled{opacity:.3;cursor:default}._73ej2ii:disabled:hover{background:none;color:var(--rc-text-secondary)}._73ej2ij{font-size:20px;padding:8px;border-radius:var(--rc-radius-md);height:auto;width:auto;gap:0;color:var(--rc-text-secondary)}._73ej2ij:hover:not(:disabled){color:var(--rc-text);background-color:color-mix(in srgb,var(--rc-text) 8%,transparent)}._73ej2ij:disabled{opacity:.3;cursor:default}._73ej2ij:disabled:hover{background:none;color:var(--rc-text-secondary)}._73ej2ik{border-radius:50%}._73ej2il:hover:not(:disabled){color:var(--rc-alert-caution);background-color:color-mix(in srgb,var(--rc-alert-caution) 10%,transparent)}.re-ui-action-btn--icon svg{width:1em;height:1em}._15r7gwx0{display:flex;align-items:flex-start;gap:8px;padding:8px 12px;border-radius:8px;font-size:13px;line-height:1.5;border:1px solid transparent}._15r7gwx1{background-color:#3b82f60f;border-color:#3b82f63d;color:#1e40af}._15r7gwx2{background-color:#f59e0b0f;border-color:#f59e0b3d;color:#92400e}._15r7gwx3{background-color:#ef44440f;border-color:#ef44443d;color:#991b1b}._15r7gwx4{flex:1;min-width:0}._15r7gwx5{width:16px;height:16px;flex-shrink:0;margin-top:2px}._15r7gwx6{flex-shrink:0;margin-left:auto}.iryuae0{position:relative}.iryuae1{display:flex}.iryuae2{position:relative;padding:.625rem 1rem;font-size:var(--rc-font-size-md);font-weight:500;transition:color .2s;cursor:pointer;border:none;background:none;color:var(--rc-text-secondary);outline:none}.iryuae2:hover{color:color-mix(in srgb,currentColor 80%,transparent)}.iryuae2:focus-visible{outline:2px solid var(--rc-accent);outline-offset:2px}.iryuae3{color:var(--rc-text)}.iryuae4{position:absolute;bottom:0;left:0;right:0;height:1px;background-color:var(--rc-border)}.iryuae5{position:absolute;bottom:0;height:2px;background-color:var(--rc-text);transition:left .3s ease-in-out,width .3s ease-in-out}._1b25hgb0{width:100%;resize:none;overflow:hidden;border:1px solid var(--rc-border);border-radius:var(--rc-radius-md);padding:8px 12px;font-size:14px;line-height:1.5;outline:none;background:var(--rc-bg);color:var(--rc-text);font-family:inherit}._1b25hgb0:focus{border-color:var(--rc-text-quaternary)}._1b25hgb0::placeholder{color:var(--rc-text-quaternary)}._1b25hgb1{overflow-y:auto}._1vt0sm10{display:inline-flex;align-items:center;border-radius:9999px;font-weight:500;white-space:nowrap;line-height:1}._1vt0sm11{background-color:var(--rc-fill-tertiary);color:var(--rc-text-tertiary)}._1vt0sm12{background-color:#22c55e1a;color:#16a34a}._1vt0sm13{background-color:#ef44441a;color:#dc2626}._1vt0sm14{background-color:#f59e0b1a;color:#d97706}._1vt0sm15{background-color:#3b82f61a;color:#2563eb}._1vt0sm16{font-size:11px;padding:2px 6px;gap:3px}._1vt0sm17{font-size:12px;padding:3px 8px;gap:4px}@keyframes _10muorc0{0%{transform:scale(1)}40%{transform:scale(.85)}to{transform:scale(1)}}@keyframes _10muorc1{0%{box-shadow:0 0 color-mix(in srgb,var(--rc-accent) 40%,transparent)}to{box-shadow:0 0 0 6px transparent}}._10muorc2{display:inline-flex;align-items:flex-start;gap:.75rem;border-radius:.5rem;padding:.25rem;text-align:left;border:none;background:none;cursor:pointer;font-family:inherit;font-size:inherit;color:inherit}._10muorc2:focus-visible{outline:2px solid var(--rc-accent);outline-offset:2px}._10muorc3{cursor:not-allowed;opacity:.5}._10muorc4{position:relative;display:flex;width:1.125rem;height:1.125rem;flex-shrink:0;align-items:center;justify-content:center;border-radius:.3rem;border-width:2px;border-style:solid;transition:all .3s cubic-bezier(.34,1.56,.64,1);box-sizing:border-box}._10muorc5{border-color:color-mix(in srgb,var(--rc-text-secondary) 50%,transparent);background-color:transparent}._10muorc6{border-color:var(--rc-accent);background-color:var(--rc-accent)}._10muorc7{animation:_10muorc0 .4s ease-out}._10muorc8{width:.75rem;height:.75rem;transition:all .3s cubic-bezier(.34,1.56,.64,1)}._10muorc9{opacity:1;transform:scale(1)}._10muorca{opacity:0;transform:scale(.5)}._10muorcb{position:absolute;inset:0;border-radius:.3rem;pointer-events:none}._10muorcc{animation:_10muorc1 .4s ease-out}._10muorcd{display:flex;flex-direction:column;gap:.125rem}._10muorce{font-size:var(--rc-font-size-md);font-weight:500;line-height:1.25;color:var(--rc-text);transition:color .2s}._10muorcf{color:var(--rc-text-secondary)}._10muorcg{font-size:var(--rc-font-size-xs);line-height:1.25;color:var(--rc-text-secondary)}._1gq8hf90{--rr-code-accent: #737373;position:relative;margin:1.5rem 0;border-radius:.5rem;overflow:hidden;font-size:var(--rc-font-size-md);font-family:var(--rc-font-mono);line-height:1.65}._1gq8hf91{position:absolute;bottom:.75rem;right:.75rem;z-index:1;display:flex;align-items:center;gap:.375rem;font-size:var(--rc-font-size-md);opacity:.6;pointer-events:none}._1gq8hf92{appearance:none;position:absolute;right:.5rem;top:.5rem;z-index:3;display:flex;align-items:center;justify-content:center;padding:.375rem;border-radius:.375rem;border:1px solid color-mix(in srgb,var(--rr-code-accent) 5%,transparent);background:color-mix(in srgb,var(--rr-code-accent) 80%,transparent);color:#fff;cursor:pointer;opacity:0;transition:opacity .2s ease;backdrop-filter:blur(8px)}._1gq8hf90:hover ._1gq8hf92{opacity:1}._1gq8hf93{position:relative;background:color-mix(in srgb,var(--rr-code-accent) 5%,transparent);padding:0}._1gq8hf94{padding-block:12px}._1gq8hf95{position:relative;width:100%;overflow:auto}._1gq8hf96{max-height:50vh;overflow:hidden}._1gq8hf97{position:absolute;bottom:0;left:0;right:0;display:flex;justify-content:center;padding:.5rem 0 .75rem;background:linear-gradient(to bottom,transparent 0%,var(--bg, var(--rc-bg-secondary)) 80%);pointer-events:none}._1gq8hf98{appearance:none;border:none;background:none;cursor:pointer;display:flex;align-items:center;gap:.5rem;font-size:var(--rc-font-size-xs);color:inherit;opacity:.7;pointer-events:auto}._1gq8hf98:hover{opacity:1}._1gq8hf99{counter-reset:shiki-line 0}._1gq8hf99 .line{counter-increment:shiki-line 1}._1gq8hf99 .line:before{content:counter(shiki-line);color:transparent;text-align:right;box-sizing:border-box;width:2em;display:inline-block;position:sticky;left:0}._1gq8hf9a .line:before{color:inherit;opacity:.4;width:5em;padding-right:2em}._1gq8hf90 pre{margin:0!important;padding:0!important;border-radius:0;font-size:1em;overflow-x:auto}._1gq8hf90 pre code{display:flex;flex-direction:column;font-family:var(--rc-font-mono)!important;line-height:inherit}._1gq8hf90 .shiki,._1gq8hf90 code,._1gq8hf90 pre{background:transparent!important;line-height:inherit}[data-theme=dark] ._1gq8hf90 .shiki-themes,[data-theme=dark] ._1gq8hf90 .shiki-themes span{color:var(--shiki-dark)!important;font-style:var(--shiki-dark-font-style)!important;font-weight:var(--shiki-dark-font-weight)!important;text-decoration:var(--shiki-dark-text-decoration)!important}._1gq8hf90 .line{display:block;padding:0 1.25rem}._1gq8hf90 .line>span:last-child{margin-right:1.25rem}._1gq8hf90 .line:after{content:" "}._1hdi6a90{display:flex;align-items:center;gap:6px;cursor:pointer;border:none;background:none;padding:0;color:var(--rc-text-tertiary);font-size:inherit;font-family:inherit;width:100%;text-align:left}._1hdi6a90:hover{color:var(--rc-text-secondary)}._1hdi6a91{transition:transform .2s ease;width:14px;height:14px;flex-shrink:0}[data-panel-open] ._1hdi6a91{transform:rotate(90deg)}._1hdi6a92{overflow:hidden;interpolate-size:allow-keywords;height:var(--collapsible-panel-height);transition:height .2s cubic-bezier(.4,0,.2,1)}._1hdi6a92[data-closed],._1hdi6a92[data-starting-style],._1hdi6a92[data-ending-style]{height:0}@keyframes f2q44l0{0%{opacity:0;transform:translateY(2px) scale(.96)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes f2q44l1{0%{opacity:1;transform:translateY(0) scale(1)}to{opacity:0;transform:translateY(2px) scale(.96)}}.f2q44l2{z-index:50;width:288px;border-radius:.5rem;border:1px solid var(--rc-border);padding:1rem;background-color:var(--rc-bg);box-shadow:var(--rc-shadow-modal);outline:none;transition:opacity .15s ease-out,transform .15s ease-out;font-family:var(--rc-font-family-sans)}.f2q44l2[data-open]{animation:f2q44l0 .15s ease-out}.f2q44l2[data-ending-style]{opacity:0;transform:translateY(2px) scale(.96)}.f2q44l2[data-closed]{animation:f2q44l1 .15s ease-in}.f2q44l3{width:10px;height:10px;transform-origin:center}.f2q44l3>polygon{fill:var(--rc-bg)}.f2q44l3>polyline{stroke:var(--rc-border);fill:none}.f2q44l4{font-size:var(--rc-font-size-md);font-weight:600;line-height:1;color:var(--rc-text)}.f2q44l5{font-size:var(--rc-font-size-md);line-height:1.25rem;color:var(--rc-text-secondary);margin-top:.25rem}@keyframes _17r50hf0{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}._17r50hf1{display:flex;align-items:center;gap:2px;height:32px;padding:0 6px;border:none;background:none;border-radius:8px;cursor:pointer;color:var(--rc-text-secondary);transition:color .1s,background-color .1s}._17r50hf1:hover{color:var(--rc-text);background-color:color-mix(in srgb,var(--rc-text) 4%,transparent)}._17r50hf2{display:flex;flex-direction:column;align-items:center}._17r50hf3{font-size:var(--rc-font-size-xs);font-weight:600;line-height:1}._17r50hf4{margin-top:2px;height:2px;width:14px;border-radius:1px}._17r50hf5{width:12px;height:12px;transition:transform .15s}._17r50hf6{padding:8px;width:220px}._17r50hf6[data-open]{animation:_17r50hf0 .12s ease-out}._17r50hf7{display:grid;grid-template-columns:repeat(6,1fr);gap:4px}._17r50hf8{position:relative;display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;background:none;border-radius:8px;cursor:pointer;padding:0;transition:background-color .1s}._17r50hf8:hover{background-color:color-mix(in srgb,var(--rc-text) 4%,transparent)}._17r50hf9{width:16px;height:16px;border-radius:50%;border:1px solid color-mix(in srgb,var(--rc-text) 10%,transparent)}._17r50hfa{position:absolute;width:10px;height:10px;color:var(--rc-bg)}._17r50hfb{width:16px;height:16px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;background:conic-gradient(from 0deg,#ef4444,#f59e0b,#22c55e,#3b82f6,#6366f1,#ec4899,#ef4444)}._17r50hfc{width:10px;height:10px;stroke-width:3}._17r50hfd{display:flex;flex-direction:column;gap:8px}._17r50hfe{display:flex;align-items:center;gap:4px;align-self:flex-start;padding:2px 6px;margin-bottom:2px;border:none;background:none;border-radius:6px;cursor:pointer;font-size:var(--rc-font-size-xs);color:var(--rc-text-tertiary);transition:color .1s,background-color .1s}._17r50hfe:hover{color:var(--rc-text);background-color:color-mix(in srgb,var(--rc-text) 4%,transparent)}._17r50hff{width:12px;height:12px}._17r50hfg{position:relative;width:100%;height:140px;border-radius:6px;cursor:crosshair;touch-action:none;user-select:none;overflow:hidden}._17r50hfh{position:absolute;inset:0;background:linear-gradient(to right,#fff,transparent);pointer-events:none}._17r50hfi{position:absolute;inset:0;background:linear-gradient(to top,#000,transparent);pointer-events:none}._17r50hfj{position:absolute;width:12px;height:12px;border-radius:50%;border:2px solid #fff;box-shadow:0 0 0 1px #0000004d;transform:translate(-50%,-50%);pointer-events:none}._17r50hfk{position:relative;width:100%;height:10px;border-radius:5px;background:linear-gradient(to right,red,#ff0 17%,#0f0 33%,#0ff,#00f 67%,#f0f 83%,red);cursor:pointer;touch-action:none;user-select:none}._17r50hfl{position:relative;width:100%;height:10px;border-radius:5px;background:repeating-conic-gradient(#ddd 0% 25%,#fff 0% 50%) 0 / 8px 8px;cursor:pointer;touch-action:none;user-select:none;overflow:hidden}._17r50hfm{position:absolute;inset:0;pointer-events:none}._17r50hfn{position:absolute;top:50%;width:14px;height:14px;border-radius:50%;border:2px solid #fff;box-shadow:0 0 0 1px #0000004d;transform:translate(-50%,-50%);pointer-events:none}._17r50hfo{display:flex;align-items:center;gap:4px}._17r50hfp{flex:1;min-width:0;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,Liberation Mono,Courier New,monospace;font-size:var(--rc-font-size-xs);padding:4px 6px;border:1px solid var(--rc-border);border-radius:6px;background:var(--rc-bg-secondary);color:var(--rc-text);outline:none;text-transform:uppercase}._17r50hfp:focus{border-color:var(--rc-accent)}._17r50hfq{border-color:#ef4444}._17r50hfq:focus{border-color:#ef4444}._17r50hfr{display:flex;align-items:center;justify-content:center;width:24px;height:24px;border:1px solid var(--rc-border);border-radius:6px;background:var(--rc-bg);color:var(--rc-text-secondary);cursor:pointer;padding:0;transition:background-color .1s,color .1s}._17r50hfr:hover{color:var(--rc-text);background-color:var(--rc-fill-tertiary)}._17r50hfs{width:12px;height:12px}._17r50hft{display:flex;width:40px;height:24px;border-radius:6px;overflow:hidden;border:1px solid var(--rc-border);background:repeating-conic-gradient(#ddd 0% 25%,#fff 0% 50%) 0 / 6px 6px}._17r50hfu{flex:1}._17r50hfv{display:flex;gap:6px;margin-top:2px}._17r50hfw{flex:1;height:28px;border-radius:6px;font-size:var(--rc-font-size-xs);border:1px solid var(--rc-border);background:var(--rc-bg);color:var(--rc-text);cursor:pointer;transition:background-color .1s}._17r50hfw:hover{background-color:var(--rc-fill-tertiary)}._17r50hfx{background:var(--rc-text);color:var(--rc-bg);border-color:var(--rc-text)}._17r50hfx:hover{background-color:color-mix(in srgb,var(--rc-text) 85%,transparent)}@keyframes _1sxaacb0{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes _1sxaacb1{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.95)}}._1sxaacb2{height:1px;background-color:var(--rc-hr-border);margin:.25rem -.25rem}._1sxaacb3{font-size:var(--rc-font-size-xs);font-weight:500;line-height:1.4;color:var(--rc-text-tertiary);padding:.25rem .375rem}._2buwsh0{min-width:8rem;border-radius:var(--rc-radius-lg);padding:var(--rc-space-xs);background-color:var(--rc-bg);box-shadow:0 0 0 1px color-mix(in srgb,var(--rc-text) 10%,transparent),var(--rc-shadow-menu);outline:none;color:var(--rc-text);font-family:var(--rc-font-family-sans);font-size:var(--rc-font-size-small);z-index:50;max-height:min(var(--available-height),16rem);overflow-x:hidden;overflow-y:auto;transform-origin:var(--transform-origin);transition:opacity .1s ease-out,transform .1s ease-out}._2buwsh0[data-open]{animation:_1sxaacb0 .1s ease-out}._2buwsh0[data-starting-style],._2buwsh0[data-ending-style]{opacity:0;transform:scale(.95)}._2buwsh0[data-closed]{animation:_1sxaacb1 .1s ease-in;overflow:hidden}._2buwsh1{display:flex;align-items:center;gap:.375rem;border-radius:var(--rc-radius-md);padding:var(--rc-space-xs) var(--rc-space-md) var(--rc-space-xs) var(--rc-space-sm);font-size:var(--rc-font-size-small);line-height:1.35;outline:none;user-select:none;cursor:default;color:var(--rc-text);position:relative;transition:background-color .1s ease,color .1s ease}._2buwsh1[data-highlighted]{background-color:var(--rc-fill-secondary);color:var(--rc-text)}._2buwsh1[data-disabled]{opacity:.5;pointer-events:none}._2buwsh1 svg{pointer-events:none;flex-shrink:0;width:1rem;height:1rem;color:var(--rc-text-secondary);transition:color .1s ease}._2buwsh1[data-highlighted] svg{color:var(--rc-text)}._2buwsh2{font-size:var(--rc-font-size-small);color:var(--rc-text-secondary);text-align:center}@keyframes vwlngv0{0%{opacity:0}to{opacity:1}}@keyframes vwlngv1{0%{opacity:1}to{opacity:0}}@keyframes vwlngv2{0%{opacity:0;transform:translate(-50%,-48%) scale(.95)}to{opacity:1;transform:translate(-50%,-50%) scale(1)}}@keyframes vwlngv3{0%{opacity:1;transform:translate(-50%,-50%) scale(1)}to{opacity:0;transform:translate(-50%,-48%) scale(.95)}}@keyframes vwlngvd{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes vwlngve{0%{transform:translateY(0)}to{transform:translateY(100%)}}.vwlngv4{position:fixed;inset:0;z-index:50;background-color:#000c}.vwlngv4[data-open]{animation:vwlngv0 .25s ease-out}.vwlngv4[data-closed]{animation:vwlngv1 .2s ease-in}.vwlngv5{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);z-index:50;display:grid;width:100%;max-width:calc(100% - 2rem);gap:0;border-radius:var(--rc-radius-lg);border:1px solid var(--rc-border);padding:0;font-family:var(--rc-font-family-sans);line-height:1.43;color:var(--rc-text);background-color:var(--rc-bg);box-shadow:var(--rc-shadow-modal);outline:none}.vwlngv5[data-open]{animation:vwlngv2 .15s ease-out}.vwlngv5[data-closed]{animation:vwlngv3 .1s ease-in}.vwlngv6{position:absolute;top:1.25rem;right:1.5rem;display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:.25rem;border:none;background:none;cursor:pointer;opacity:.7;color:var(--rc-text-secondary);transition:opacity .2s ease,color .2s ease}.vwlngv6:hover{opacity:1;color:var(--rc-text)}.vwlngv6:focus-visible{outline:none;box-shadow:0 0 0 2px var(--rc-bg),0 0 0 4px var(--rc-text-secondary)}.vwlngv6:disabled{pointer-events:none;opacity:.5}.vwlngv6 svg{width:16px;height:16px;pointer-events:none;flex-shrink:0}.vwlngv7{display:flex;align-items:flex-start;gap:.75rem;padding:1.25rem 1.5rem .75rem}.vwlngv8{display:flex;flex-direction:column;gap:.375rem;flex:1;min-width:0;text-align:center}.vwlngv9{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:.25rem;border:none;background:none;cursor:pointer;opacity:.7;color:var(--rc-text-secondary);flex-shrink:0;transition:opacity .2s ease,color .2s ease}.vwlngv9:hover{opacity:1;color:var(--rc-text)}.vwlngv9:focus-visible{outline:none;box-shadow:0 0 0 2px var(--rc-bg),0 0 0 4px var(--rc-text-secondary)}.vwlngv9 svg{width:16px;height:16px;pointer-events:none;flex-shrink:0}.vwlngva{display:flex;flex-direction:column-reverse;gap:.5rem;padding:.75rem 1.5rem 1.25rem}.vwlngvb{font-family:var(--rc-font-family);font-size:1.125em;font-weight:600;line-height:1.33;letter-spacing:-.015em;color:var(--rc-text)}.vwlngvc{font-family:var(--rc-font-family);font-size:var(--rc-font-size-md);line-height:1.43;color:var(--rc-text-secondary)}.vwlngvf{position:fixed;inset:0;z-index:50;background-color:#00000080;transition:opacity .2s ease}.vwlngvg{position:fixed;bottom:0;left:0;right:0;z-index:50;display:flex;flex-direction:column;max-height:85vh;border-top-left-radius:12px;border-top-right-radius:12px;background-color:var(--rc-bg);color:var(--rc-text);font-family:var(--rc-font-family-sans);box-shadow:0 -4px 24px #00000026;will-change:transform}.vwlngvg[data-open]{animation:vwlngvd .3s cubic-bezier(.32,.72,0,1)}.vwlngvg[data-closed]{animation:vwlngve .2s ease-in}.vwlngvh{display:flex;align-items:center;justify-content:center;padding:12px 0 4px;cursor:grab;flex-shrink:0;touch-action:none}.vwlngvh:active{cursor:grabbing}.vwlngvi{width:36px;height:4px;border-radius:2px;background-color:var(--rc-text-tertiary);opacity:.5}.vwlngvj{flex:1;overflow-y:auto;overflow-x:hidden;padding:0 1.5rem 1.5rem;-webkit-overflow-scrolling:touch}.vwlngvk{display:flex;flex-direction:column;gap:.375rem;text-align:center;padding:0 1.5rem .5rem}@media(min-width:640px){.vwlngv5{max-width:28rem}.vwlngv8{text-align:left}.vwlngva{flex-direction:row;justify-content:flex-end}}.oih0op0{min-width:8rem;border-radius:var(--rc-radius-lg);padding:var(--rc-space-xs);background-color:var(--rc-bg);box-shadow:0 0 0 1px color-mix(in srgb,var(--rc-text) 10%,transparent),var(--rc-shadow-menu);outline:none;color:var(--rc-text);font-family:var(--rc-font-family-sans);font-size:var(--rc-font-size-small);z-index:50;max-height:var(--available-height);overflow-x:hidden;overflow-y:auto;transform-origin:var(--transform-origin);transition:opacity .1s ease-out,transform .1s ease-out;max-width:min(20rem,calc(100vw - .75rem))}.oih0op0[data-open]{animation:_1sxaacb0 .1s ease-out}.oih0op0[data-starting-style],.oih0op0[data-ending-style]{opacity:0;transform:scale(.95)}.oih0op0[data-closed]{animation:_1sxaacb1 .1s ease-in;overflow:hidden}.oih0op1{outline:none;z-index:50;isolation:isolate}.oih0op1[data-side=bottom]{transform:translateY(2px)}.oih0op1[data-side=top]{transform:translateY(-2px)}.oih0op1[data-side=left]{transform:translate(-2px)}.oih0op1[data-side=right]{transform:translate(2px)}.oih0op2{display:flex;align-items:center;gap:.375rem;border-radius:var(--rc-radius-md);padding:var(--rc-space-xs) var(--rc-space-md) var(--rc-space-xs) var(--rc-space-sm);font-size:var(--rc-font-size-small);line-height:1.35;outline:none;user-select:none;cursor:default;color:var(--rc-text);position:relative;transition:background-color .1s ease,color .1s ease}.oih0op2[data-highlighted]{background-color:var(--rc-fill-secondary);color:var(--rc-text)}.oih0op2[data-disabled]{opacity:.5;pointer-events:none}.oih0op2 svg{pointer-events:none;flex-shrink:0;width:1rem;height:1rem;color:var(--rc-text-secondary);transition:color .1s ease}.oih0op2[data-highlighted] svg{color:var(--rc-text)}.oih0op3{padding-right:2rem}.oih0op4,.oih0op5{position:absolute;right:.5rem;display:inline-flex;align-items:center;justify-content:center;width:1rem;height:1rem;flex-shrink:0;pointer-events:none;color:var(--rc-text-secondary)}._1y5k2ih0{overflow:auto;scrollbar-width:thin;scrollbar-color:rgba(0,0,0,.15) transparent}._1y5k2ih0::-webkit-scrollbar{width:6px}._1y5k2ih0::-webkit-scrollbar-track{background:transparent}._1y5k2ih0::-webkit-scrollbar-thumb{background:#00000026;border-radius:3px}._6d8tz20{position:relative;display:inline-flex;align-items:center;border-radius:.5rem;background-color:var(--rc-bg-tertiary);padding:.25rem}._6d8tz21{height:2rem;font-size:var(--rc-font-size-xs)}._6d8tz22{height:2.5rem;font-size:var(--rc-font-size-md)}._6d8tz23{width:100%}._6d8tz25{position:absolute;top:.25rem;bottom:.25rem;border-radius:.375rem;background-color:var(--rc-bg);box-shadow:0 1px 2px #0000000d;transition:all .3s cubic-bezier(.25,1,.5,1);pointer-events:none}._6d8tz27{opacity:0}._6d8tz28{position:relative;z-index:10;display:flex;align-items:center;justify-content:center;white-space:nowrap;border-radius:.375rem;font-weight:500;outline:none;border:none;background:transparent;cursor:pointer;transition:color .2s;color:var(--rc-text-secondary)}._6d8tz28:focus-visible{outline:2px solid var(--rc-accent);outline-offset:1px}._6d8tz29{padding:0 .75rem}._6d8tz2a{padding:0 1rem}._6d8tz2b{color:var(--rc-text)}._6d8tz2d{pointer-events:none;opacity:.4}._6d8tz2f{flex:1}@keyframes p74a620{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes p74a621{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.95)}}.p74a622{display:inline-flex;align-items:center;justify-content:space-between;gap:6px;height:36px;padding:8px 8px 8px 10px;font-size:var(--rc-font-size-small);line-height:1.35;font-family:var(--rc-font-family-sans);border:1px solid var(--rc-border);border-radius:var(--rc-radius-md);background:transparent;color:var(--rc-text);cursor:pointer;outline:none;white-space:nowrap;box-shadow:0 1px 2px #0000000d;transition:color .15s ease,box-shadow .15s ease,border-color .15s ease}.p74a622:hover{background:var(--rc-fill-quaternary)}.p74a622:focus-visible{border-color:var(--rc-accent);box-shadow:0 0 0 3px var(--rc-accent-light)}.p74a622[data-popup-open]{background:var(--rc-fill-quaternary)}.p74a622[data-disabled]{opacity:.5;cursor:not-allowed}.p74a623{width:16px;height:16px;color:var(--rc-text-tertiary);flex-shrink:0;pointer-events:none}.p74a624{outline:none;z-index:50;isolation:isolate}.p74a625{background:var(--rc-bg);color:var(--rc-text);font-family:var(--rc-font-family-sans);font-size:var(--rc-font-size-small);border-radius:var(--rc-radius-md);box-shadow:0 0 0 1px color-mix(in srgb,var(--rc-text) 10%,transparent),var(--rc-shadow-menu);width:min(var(--anchor-width),calc(100vw - .75rem));max-width:calc(100vw - .75rem);max-height:var(--available-height);overflow-x:hidden;overflow-y:auto;outline:none;transform-origin:var(--transform-origin);transition:opacity .1s ease-out,transform .1s ease-out}.p74a625[data-open]{animation:p74a620 .1s ease-out}.p74a625[data-starting-style],.p74a625[data-ending-style]{opacity:0;transform:scale(.95)}.p74a625[data-closed]{animation:p74a621 .1s ease-in;overflow:hidden}.p74a626{padding:4px}.p74a626+.p74a626{border-top:1px solid var(--rc-hr-border)}.p74a627{display:flex;align-items:center;gap:8px;padding:6px 32px 6px 8px;border-radius:var(--rc-radius-sm);font-size:var(--rc-font-size-small);line-height:1.35;outline:none;user-select:none;cursor:default;color:var(--rc-text);position:relative;transition:background-color .1s ease,color .1s ease}.p74a627[data-highlighted]{background-color:var(--rc-fill-secondary);color:var(--rc-text)}.p74a627[data-disabled]{opacity:.5;pointer-events:none}.p74a627 svg{pointer-events:none;flex-shrink:0;width:16px;height:16px}.p74a628{position:absolute;right:8px;display:flex;align-items:center;justify-content:center;width:16px;height:16px;pointer-events:none;color:var(--rc-text-secondary)}.p74a627[data-highlighted] .p74a628{color:var(--rc-text)}.p74a629{padding:6px 8px;font-size:var(--rc-font-size-xs);font-weight:500;line-height:1.4;color:var(--rc-text-tertiary)}.p74a62a{height:1px;background-color:var(--rc-hr-border);margin:4px -4px}.p74a62b{display:flex;align-items:center;justify-content:center;width:100%;padding:4px 0;cursor:default;color:var(--rc-text-tertiary);background:var(--rc-bg);z-index:10}.p74a62b svg{width:16px;height:16px}@keyframes _131cfek0{to{transform:rotate(360deg)}}._131cfek1{display:inline-block;border-radius:50%;border:2px solid currentColor;border-top-color:transparent;animation:_131cfek0 .6s linear infinite;flex-shrink:0}._131cfek2{width:14px;height:14px}._131cfek3{width:20px;height:20px}@keyframes _73cmpa0{0%{transform:scale(1);opacity:1}50%{transform:scale(1.8);opacity:0}to{transform:scale(1.8);opacity:0}}._73cmpa1{position:relative;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}._73cmpa2{border-radius:50%;flex-shrink:0}._73cmpa3{background-color:#a3a3a3}._73cmpa4{background-color:#3b82f6}._73cmpa5{background-color:#22c55e}._73cmpa6{background-color:#ef4444}._73cmpa7{background-color:#f59e0b}._73cmpa8{width:8px;height:8px}._73cmpa9{width:12px;height:12px}._73cmpaa{position:absolute;border-radius:50%;animation:_73cmpa0 1.5s ease-in-out infinite}._73cmpab{background-color:#a3a3a3}._73cmpac{background-color:#3b82f6}._73cmpad{background-color:#22c55e}._73cmpae{background-color:#ef4444}._73cmpaf{background-color:#f59e0b}._73cmpag{width:8px;height:8px}._73cmpah{width:12px;height:12px}@keyframes _1cspf2m0{0%{opacity:0;transform:translateY(2px)}to{opacity:1;transform:translateY(0)}}@keyframes _1cspf2m1{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(2px)}}._1cspf2m2{z-index:50;outline:none}._1cspf2m3{max-width:320px;padding:var(--rc-space-xs) var(--rc-space-sm);font-size:var(--rc-font-size-xs);line-height:1.4;color:var(--rc-text);background-color:var(--rc-bg);border:1px solid var(--rc-border);border-radius:var(--rc-radius-md);box-shadow:var(--rc-shadow-menu);outline:none;white-space:normal;word-break:break-word;pointer-events:none;transition:opacity .12s ease-out,transform .12s ease-out}._1cspf2m3[data-open]{animation:_1cspf2m0 .12s ease-out}._1cspf2m3[data-ending-style]{opacity:0;transform:translateY(2px)}._1cspf2m3[data-closed]{animation:_1cspf2m1 .12s ease-in}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@haklex/rich-editor-ui",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "0.1.0",
|
|
4
4
|
"description": "UI components for haklex rich editor",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
],
|
|
23
23
|
"dependencies": {
|
|
24
24
|
"@base-ui/react": "^1.2.0",
|
|
25
|
-
"@haklex/rich-style-token": "0.0
|
|
25
|
+
"@haklex/rich-style-token": "0.1.0"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
28
|
"@types/react": "^19.2.14",
|