@lobehub/ui 6.0.0 → 6.0.2

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.
Files changed (54) hide show
  1. package/es/Drawer/atoms.mjs +2 -1
  2. package/es/Drawer/atoms.mjs.map +1 -1
  3. package/es/DropdownMenu/atoms.mjs +2 -1
  4. package/es/DropdownMenu/atoms.mjs.map +1 -1
  5. package/es/Input/InputPassword.mjs +4 -2
  6. package/es/Input/InputPassword.mjs.map +1 -1
  7. package/es/Input/index.d.mts +2 -2
  8. package/es/Input/type.d.mts +15 -0
  9. package/es/Modal/atoms.mjs +2 -1
  10. package/es/Modal/atoms.mjs.map +1 -1
  11. package/es/Popover/PopoverInGroup.mjs +2 -1
  12. package/es/Popover/PopoverInGroup.mjs.map +1 -1
  13. package/es/Popover/atoms.mjs +2 -1
  14. package/es/Popover/atoms.mjs.map +1 -1
  15. package/es/Segmented/Segmented.mjs +2 -1
  16. package/es/Segmented/Segmented.mjs.map +1 -1
  17. package/es/Segmented/type.d.mts +7 -0
  18. package/es/Select/atoms.mjs +2 -1
  19. package/es/Select/atoms.mjs.map +1 -1
  20. package/es/Switch/Switch.mjs +2 -1
  21. package/es/Switch/Switch.mjs.map +1 -1
  22. package/es/Switch/type.d.mts +6 -2
  23. package/es/Text/style.d.mts +2 -2
  24. package/es/Tooltip/TooltipInGroup.mjs +2 -1
  25. package/es/Tooltip/TooltipInGroup.mjs.map +1 -1
  26. package/es/Tooltip/TooltipStandalone.mjs +2 -1
  27. package/es/Tooltip/TooltipStandalone.mjs.map +1 -1
  28. package/es/hooks/useNativeButton.mjs +1 -0
  29. package/es/hooks/useNativeButton.mjs.map +1 -1
  30. package/es/index.d.mts +4 -3
  31. package/es/index.mjs +3 -2
  32. package/es/styles/index.d.mts +3 -2
  33. package/es/styles/index.mjs +3 -2
  34. package/es/styles/theme/createLobeToken.d.mts +2 -2
  35. package/es/styles/theme/createLobeToken.mjs.map +1 -1
  36. package/es/styles/theme/customNeutral.d.mts +28 -0
  37. package/es/styles/theme/customNeutral.mjs +84 -0
  38. package/es/styles/theme/customNeutral.mjs.map +1 -0
  39. package/es/styles/theme/customPalette.mjs +5 -1
  40. package/es/styles/theme/customPalette.mjs.map +1 -1
  41. package/es/styles/theme/customStylishStatic.mjs +155 -145
  42. package/es/styles/theme/customStylishStatic.mjs.map +1 -1
  43. package/es/styles/theme/scope.d.mts +3 -3
  44. package/es/styles/theme/scope.mjs +55 -5
  45. package/es/styles/theme/scope.mjs.map +1 -1
  46. package/es/styles/theme/themeCss.d.mts +2 -0
  47. package/es/styles/theme/themeCss.mjs +31 -1
  48. package/es/styles/theme/themeCss.mjs.map +1 -1
  49. package/es/styles/theme/token/neutral.mjs +3 -5
  50. package/es/styles/theme/token/neutral.mjs.map +1 -1
  51. package/es/styles/theme/token/neutralText.d.mts +4 -0
  52. package/es/utils/getElementRef.mjs +17 -0
  53. package/es/utils/getElementRef.mjs.map +1 -0
  54. package/package.json +1 -1
@@ -1,9 +1,9 @@
1
- import { NeutralColors } from "../customTheme.mjs";
1
+ import { LobeNeutralColor } from "./customNeutral.mjs";
2
2
  import { LobePrimaryColor } from "./customPrimary.mjs";
3
3
  //#region src/styles/theme/createLobeToken.d.ts
4
4
  export interface CreateLobeTokenParams {
5
5
  appearance: 'light' | 'dark';
6
- neutralColor?: NeutralColors;
6
+ neutralColor?: LobeNeutralColor;
7
7
  palette?: string;
8
8
  primaryColor?: LobePrimaryColor;
9
9
  }
@@ -1 +1 @@
1
- {"version":3,"file":"createLobeToken.mjs","names":[],"sources":["../../../src/styles/theme/createLobeToken.ts"],"sourcesContent":["import type { NeutralColors } from '../customTheme';\nimport { resolveStatusScales } from './customPalette';\nimport type { LobePrimaryColor } from './customPrimary';\nimport { createNeutralToken } from './token/neutral';\nimport { createPaletteToken } from './token/palette';\nimport { createPrimaryToken } from './token/primary';\nimport { staticToken } from './token/static';\n\nexport interface CreateLobeTokenParams {\n appearance: 'light' | 'dark';\n neutralColor?: NeutralColors;\n palette?: string;\n primaryColor?: LobePrimaryColor;\n}\n\nexport const createLobeTokenGroups = ({\n appearance,\n neutralColor,\n palette: paletteName,\n primaryColor,\n}: CreateLobeTokenParams) => {\n const palette = createPaletteToken(appearance, resolveStatusScales(paletteName));\n\n return {\n neutral: createNeutralToken(appearance, neutralColor, palette),\n palette,\n primary: createPrimaryToken(appearance, primaryColor),\n static: staticToken,\n };\n};\n\nexport type LobeTokenGroups = ReturnType<typeof createLobeTokenGroups>;\n\nexport type LobeToken = LobeTokenGroups['static'] &\n LobeTokenGroups['palette'] &\n LobeTokenGroups['primary'] &\n LobeTokenGroups['neutral'];\n\nexport const createLobeToken = (params: CreateLobeTokenParams): LobeToken => {\n const groups = createLobeTokenGroups(params);\n\n return { ...groups.static, ...groups.palette, ...groups.primary, ...groups.neutral };\n};\n"],"mappings":";;;;;;AAeA,MAAa,yBAAyB,EACpC,YACA,cACA,SAAS,aACT,mBAC2B;CAC3B,MAAM,UAAU,mBAAmB,YAAY,oBAAoB,WAAW,CAAC;CAE/E,OAAO;EACL,SAAS,mBAAmB,YAAY,cAAc,OAAO;EAC7D;EACA,SAAS,mBAAmB,YAAY,YAAY;EACpD,QAAQ;CACV;AACF;AASA,MAAa,mBAAmB,WAA6C;CAC3E,MAAM,SAAS,sBAAsB,MAAM;CAE3C,OAAO;EAAE,GAAG,OAAO;EAAQ,GAAG,OAAO;EAAS,GAAG,OAAO;EAAS,GAAG,OAAO;CAAQ;AACrF"}
1
+ {"version":3,"file":"createLobeToken.mjs","names":[],"sources":["../../../src/styles/theme/createLobeToken.ts"],"sourcesContent":["import type { LobeNeutralColor } from './customNeutral';\nimport { resolveStatusScales } from './customPalette';\nimport type { LobePrimaryColor } from './customPrimary';\nimport { createNeutralToken } from './token/neutral';\nimport { createPaletteToken } from './token/palette';\nimport { createPrimaryToken } from './token/primary';\nimport { staticToken } from './token/static';\n\nexport interface CreateLobeTokenParams {\n appearance: 'light' | 'dark';\n neutralColor?: LobeNeutralColor;\n palette?: string;\n primaryColor?: LobePrimaryColor;\n}\n\nexport const createLobeTokenGroups = ({\n appearance,\n neutralColor,\n palette: paletteName,\n primaryColor,\n}: CreateLobeTokenParams) => {\n const palette = createPaletteToken(appearance, resolveStatusScales(paletteName));\n\n return {\n neutral: createNeutralToken(appearance, neutralColor, palette),\n palette,\n primary: createPrimaryToken(appearance, primaryColor),\n static: staticToken,\n };\n};\n\nexport type LobeTokenGroups = ReturnType<typeof createLobeTokenGroups>;\n\nexport type LobeToken = LobeTokenGroups['static'] &\n LobeTokenGroups['palette'] &\n LobeTokenGroups['primary'] &\n LobeTokenGroups['neutral'];\n\nexport const createLobeToken = (params: CreateLobeTokenParams): LobeToken => {\n const groups = createLobeTokenGroups(params);\n\n return { ...groups.static, ...groups.palette, ...groups.primary, ...groups.neutral };\n};\n"],"mappings":";;;;;;AAeA,MAAa,yBAAyB,EACpC,YACA,cACA,SAAS,aACT,mBAC2B;CAC3B,MAAM,UAAU,mBAAmB,YAAY,oBAAoB,WAAW,CAAC;CAE/E,OAAO;EACL,SAAS,mBAAmB,YAAY,cAAc,OAAO;EAC7D;EACA,SAAS,mBAAmB,YAAY,YAAY;EACpD,QAAQ;CACV;AACF;AASA,MAAa,mBAAmB,WAA6C;CAC3E,MAAM,SAAS,sBAAsB,MAAM;CAE3C,OAAO;EAAE,GAAG,OAAO;EAAQ,GAAG,OAAO;EAAS,GAAG,OAAO;EAAS,GAAG,OAAO;CAAQ;AACrF"}
@@ -0,0 +1,28 @@
1
+ import { ColorScaleItem } from "../../color/types.mjs";
2
+ import { NeutralColors } from "../customTheme.mjs";
3
+ import { NeutralTextLadder } from "./token/neutralText.mjs";
4
+ //#region src/styles/theme/customNeutral.d.ts
5
+ /** Any 6-digit hex: tints the default gray ladder with its hue and chroma. */
6
+ export type CustomNeutralColor = `#${string}`;
7
+ /** A preset, a 6-digit hex, or a name registered with `registerLobeNeutral`. */
8
+ export type LobeNeutralColor = NeutralColors | CustomNeutralColor | (string & {});
9
+ export interface LobeNeutralScale {
10
+ /** Full 13-step scale (light / dark solid + alpha), same shape as the presets. */
11
+ scale: ColorScaleItem;
12
+ /** Text ladder [text, secondary, tertiary, quaternary]; defaults to the scale's steps 12/10/8/6. */
13
+ text?: Partial<NeutralTextLadder>;
14
+ }
15
+ export interface ResolvedNeutral {
16
+ scale: ColorScaleItem;
17
+ text: NeutralTextLadder;
18
+ }
19
+ export declare const isCustomNeutralColor: (value?: string) => value is CustomNeutralColor;
20
+ /**
21
+ * Register a full custom neutral scale under `name`, then select it with
22
+ * `setLobeTheme({ neutralColor: name })` / `ThemeScope` / `LobeThemeScript`.
23
+ */
24
+ export declare const registerLobeNeutral: (name: string, neutral: LobeNeutralScale | ColorScaleItem) => void;
25
+ /** Same construction as the presets: the gray ladder's lightness, retinted to the hex's hue. */
26
+ export declare const generateNeutralScale: (color: CustomNeutralColor) => ResolvedNeutral;
27
+ //#endregion
28
+ //# sourceMappingURL=customNeutral.d.mts.map
@@ -0,0 +1,84 @@
1
+ import { notifyPaletteChange } from "./customPalette.mjs";
2
+ import gray from "../../color/colors/gray.mjs";
3
+ import { neutralColorScales } from "../../color/neutrals/index.mjs";
4
+ import { neutralText } from "./token/neutralText.mjs";
5
+ import chroma from "chroma-js";
6
+ //#region src/styles/theme/customNeutral.ts
7
+ const HEX = /^#[\da-f]{6}$/i;
8
+ const NAME = /^[\w-]+$/;
9
+ const MAX_CHROMA = .05;
10
+ const isCustomNeutralColor = (value) => !!value && HEX.test(value);
11
+ const registry = /* @__PURE__ */ new Map();
12
+ const isRegisteredNeutral = (name) => !!name && registry.has(name);
13
+ /**
14
+ * Register a full custom neutral scale under `name`, then select it with
15
+ * `setLobeTheme({ neutralColor: name })` / `ThemeScope` / `LobeThemeScript`.
16
+ */
17
+ const registerLobeNeutral = (name, neutral) => {
18
+ if (!NAME.test(name)) throw new Error(`Invalid neutral name "${name}": use letters, digits, _ or -`);
19
+ if (name in neutralColorScales) throw new Error(`"${name}" is a built-in neutral preset`);
20
+ registry.set(name, "scale" in neutral ? neutral : { scale: neutral });
21
+ notifyPaletteChange();
22
+ };
23
+ const tint = (color, h, c) => {
24
+ const source = chroma(color);
25
+ const [l] = source.oklch();
26
+ return chroma.oklch(l, c, h).alpha(source.alpha());
27
+ };
28
+ const tintSteps = (steps, h, c, alpha) => steps.map((step) => alpha ? tint(step, h, c).css() : tint(step, h, c).hex());
29
+ const cache = /* @__PURE__ */ new Map();
30
+ /** Same construction as the presets: the gray ladder's lightness, retinted to the hex's hue. */
31
+ const generateNeutralScale = (color) => {
32
+ const hex = color.toLowerCase();
33
+ const cached = cache.get(hex);
34
+ if (cached) return cached;
35
+ const [, rawC, rawH] = chroma(hex).oklch();
36
+ const h = Number.isNaN(rawH) ? 0 : rawH;
37
+ const c = Math.min(rawC || 0, MAX_CHROMA);
38
+ const base = neutralText.gray;
39
+ const result = {
40
+ scale: {
41
+ dark: tintSteps(gray.dark, h, c, false),
42
+ darkA: tintSteps(gray.darkA, h, c, true),
43
+ light: tintSteps(gray.light, h, c, false),
44
+ lightA: tintSteps(gray.lightA, h, c, true)
45
+ },
46
+ text: {
47
+ dark: tintSteps(base.dark, h, c, false),
48
+ light: tintSteps(base.light, h, c, false)
49
+ }
50
+ };
51
+ cache.set(hex, result);
52
+ return result;
53
+ };
54
+ const ladderOf = (scale, appearance) => {
55
+ const s = scale[appearance];
56
+ return [
57
+ s[12],
58
+ s[10],
59
+ s[8],
60
+ s[6]
61
+ ];
62
+ };
63
+ const resolveNeutral = (neutralColor) => {
64
+ if (isCustomNeutralColor(neutralColor)) return generateNeutralScale(neutralColor);
65
+ const registered = neutralColor ? registry.get(neutralColor) : void 0;
66
+ if (registered) return {
67
+ scale: registered.scale,
68
+ text: {
69
+ dark: registered.text?.dark ?? ladderOf(registered.scale, "dark"),
70
+ light: registered.text?.light ?? ladderOf(registered.scale, "light")
71
+ }
72
+ };
73
+ const preset = neutralColor && neutralColor in neutralColorScales ? neutralColor : void 0;
74
+ return {
75
+ scale: preset && neutralColorScales[preset] || gray,
76
+ text: neutralText[preset || "gray"]
77
+ };
78
+ };
79
+ /** True when the value needs its own injected stylesheet (not a built-in preset). */
80
+ const isCustomNeutral = (value) => isCustomNeutralColor(value) || isRegisteredNeutral(value);
81
+ //#endregion
82
+ export { generateNeutralScale, isCustomNeutral, isCustomNeutralColor, isRegisteredNeutral, registerLobeNeutral, resolveNeutral };
83
+
84
+ //# sourceMappingURL=customNeutral.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"customNeutral.mjs","names":[],"sources":["../../../src/styles/theme/customNeutral.ts"],"sourcesContent":["import chroma from 'chroma-js';\n\nimport { gray } from '@/color/colors';\nimport { neutralColorScales } from '@/color/neutrals';\nimport type { ColorScaleItem } from '@/color/types';\n\nimport type { NeutralColors } from '../customTheme';\nimport { notifyPaletteChange } from './customPalette';\nimport { neutralText,type NeutralTextLadder } from './token/neutralText';\n\n/** Any 6-digit hex: tints the default gray ladder with its hue and chroma. */\nexport type CustomNeutralColor = `#${string}`;\n/** A preset, a 6-digit hex, or a name registered with `registerLobeNeutral`. */\nexport type LobeNeutralColor = NeutralColors | CustomNeutralColor | (string & {});\n\nexport interface LobeNeutralScale {\n /** Full 13-step scale (light / dark solid + alpha), same shape as the presets. */\n scale: ColorScaleItem;\n /** Text ladder [text, secondary, tertiary, quaternary]; defaults to the scale's steps 12/10/8/6. */\n text?: Partial<NeutralTextLadder>;\n}\n\nexport interface ResolvedNeutral {\n scale: ColorScaleItem;\n text: NeutralTextLadder;\n}\n\nconst HEX = /^#[\\da-f]{6}$/i;\nconst NAME = /^[\\w-]+$/;\n// Neutrals stay neutral: presets peak around 0.02 oklch chroma.\nconst MAX_CHROMA = 0.05;\n\nexport const isCustomNeutralColor = (value?: string): value is CustomNeutralColor =>\n !!value && HEX.test(value);\n\nconst registry = new Map<string, LobeNeutralScale>();\n\nexport const isRegisteredNeutral = (name?: string): name is string => !!name && registry.has(name);\n\n/**\n * Register a full custom neutral scale under `name`, then select it with\n * `setLobeTheme({ neutralColor: name })` / `ThemeScope` / `LobeThemeScript`.\n */\nexport const registerLobeNeutral = (name: string, neutral: LobeNeutralScale | ColorScaleItem) => {\n if (!NAME.test(name))\n throw new Error(`Invalid neutral name \"${name}\": use letters, digits, _ or -`);\n if (name in neutralColorScales) throw new Error(`\"${name}\" is a built-in neutral preset`);\n registry.set(name, 'scale' in neutral ? neutral : { scale: neutral });\n notifyPaletteChange();\n};\n\nconst tint = (color: string, h: number, c: number) => {\n const source = chroma(color);\n const [l] = source.oklch();\n return chroma.oklch(l, c, h).alpha(source.alpha());\n};\n\nconst tintSteps = <T extends readonly string[]>(steps: T, h: number, c: number, alpha: boolean) =>\n steps.map((step) => (alpha ? tint(step, h, c).css() : tint(step, h, c).hex())) as unknown as T;\n\nconst cache = new Map<string, ResolvedNeutral>();\n\n/** Same construction as the presets: the gray ladder's lightness, retinted to the hex's hue. */\nexport const generateNeutralScale = (color: CustomNeutralColor): ResolvedNeutral => {\n const hex = color.toLowerCase();\n const cached = cache.get(hex);\n if (cached) return cached;\n\n const [, rawC, rawH] = chroma(hex).oklch();\n const h = Number.isNaN(rawH) ? 0 : rawH;\n const c = Math.min(rawC || 0, MAX_CHROMA);\n const base = neutralText.gray;\n const result: ResolvedNeutral = {\n scale: {\n dark: tintSteps(gray.dark, h, c, false),\n darkA: tintSteps(gray.darkA, h, c, true),\n light: tintSteps(gray.light, h, c, false),\n lightA: tintSteps(gray.lightA, h, c, true),\n },\n text: {\n dark: tintSteps(base.dark, h, c, false),\n light: tintSteps(base.light, h, c, false),\n },\n };\n\n cache.set(hex, result);\n return result;\n};\n\nconst ladderOf = (scale: ColorScaleItem, appearance: 'light' | 'dark') => {\n const s = scale[appearance];\n return [s[12], s[10], s[8], s[6]] as [string, string, string, string];\n};\n\nexport const resolveNeutral = (neutralColor?: LobeNeutralColor): ResolvedNeutral => {\n if (isCustomNeutralColor(neutralColor)) return generateNeutralScale(neutralColor);\n const registered = neutralColor ? registry.get(neutralColor) : undefined;\n if (registered)\n return {\n scale: registered.scale,\n text: {\n dark: registered.text?.dark ?? ladderOf(registered.scale, 'dark'),\n light: registered.text?.light ?? ladderOf(registered.scale, 'light'),\n },\n };\n const preset =\n neutralColor && neutralColor in neutralColorScales\n ? (neutralColor as NeutralColors)\n : undefined;\n return {\n scale: (preset && neutralColorScales[preset]) || gray,\n text: neutralText[preset || 'gray'],\n };\n};\n\n/** True when the value needs its own injected stylesheet (not a built-in preset). */\nexport const isCustomNeutral = (value?: string): value is string =>\n isCustomNeutralColor(value) || isRegisteredNeutral(value);\n"],"mappings":";;;;;;AA2BA,MAAM,MAAM;AACZ,MAAM,OAAO;AAEb,MAAM,aAAa;AAEnB,MAAa,wBAAwB,UACnC,CAAC,CAAC,SAAS,IAAI,KAAK,KAAK;AAE3B,MAAM,2BAAW,IAAI,IAA8B;AAEnD,MAAa,uBAAuB,SAAkC,CAAC,CAAC,QAAQ,SAAS,IAAI,IAAI;;;;;AAMjG,MAAa,uBAAuB,MAAc,YAA+C;CAC/F,IAAI,CAAC,KAAK,KAAK,IAAI,GACjB,MAAM,IAAI,MAAM,yBAAyB,KAAK,+BAA+B;CAC/E,IAAI,QAAQ,oBAAoB,MAAM,IAAI,MAAM,IAAI,KAAK,+BAA+B;CACxF,SAAS,IAAI,MAAM,WAAW,UAAU,UAAU,EAAE,OAAO,QAAQ,CAAC;CACpE,oBAAoB;AACtB;AAEA,MAAM,QAAQ,OAAe,GAAW,MAAc;CACpD,MAAM,SAAS,OAAO,KAAK;CAC3B,MAAM,CAAC,KAAK,OAAO,MAAM;CACzB,OAAO,OAAO,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,OAAO,MAAM,CAAC;AACnD;AAEA,MAAM,aAA0C,OAAU,GAAW,GAAW,UAC9E,MAAM,KAAK,SAAU,QAAQ,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAE;AAE/E,MAAM,wBAAQ,IAAI,IAA6B;;AAG/C,MAAa,wBAAwB,UAA+C;CAClF,MAAM,MAAM,MAAM,YAAY;CAC9B,MAAM,SAAS,MAAM,IAAI,GAAG;CAC5B,IAAI,QAAQ,OAAO;CAEnB,MAAM,GAAG,MAAM,QAAQ,OAAO,GAAG,CAAC,CAAC,MAAM;CACzC,MAAM,IAAI,OAAO,MAAM,IAAI,IAAI,IAAI;CACnC,MAAM,IAAI,KAAK,IAAI,QAAQ,GAAG,UAAU;CACxC,MAAM,OAAO,YAAY;CACzB,MAAM,SAA0B;EAC9B,OAAO;GACL,MAAM,UAAU,KAAK,MAAM,GAAG,GAAG,KAAK;GACtC,OAAO,UAAU,KAAK,OAAO,GAAG,GAAG,IAAI;GACvC,OAAO,UAAU,KAAK,OAAO,GAAG,GAAG,KAAK;GACxC,QAAQ,UAAU,KAAK,QAAQ,GAAG,GAAG,IAAI;EAC3C;EACA,MAAM;GACJ,MAAM,UAAU,KAAK,MAAM,GAAG,GAAG,KAAK;GACtC,OAAO,UAAU,KAAK,OAAO,GAAG,GAAG,KAAK;EAC1C;CACF;CAEA,MAAM,IAAI,KAAK,MAAM;CACrB,OAAO;AACT;AAEA,MAAM,YAAY,OAAuB,eAAiC;CACxE,MAAM,IAAI,MAAM;CAChB,OAAO;EAAC,EAAE;EAAK,EAAE;EAAK,EAAE;EAAI,EAAE;CAAE;AAClC;AAEA,MAAa,kBAAkB,iBAAqD;CAClF,IAAI,qBAAqB,YAAY,GAAG,OAAO,qBAAqB,YAAY;CAChF,MAAM,aAAa,eAAe,SAAS,IAAI,YAAY,IAAI,KAAA;CAC/D,IAAI,YACF,OAAO;EACL,OAAO,WAAW;EAClB,MAAM;GACJ,MAAM,WAAW,MAAM,QAAQ,SAAS,WAAW,OAAO,MAAM;GAChE,OAAO,WAAW,MAAM,SAAS,SAAS,WAAW,OAAO,OAAO;EACrE;CACF;CACF,MAAM,SACJ,gBAAgB,gBAAgB,qBAC3B,eACD,KAAA;CACN,OAAO;EACL,OAAQ,UAAU,mBAAmB,WAAY;EACjD,MAAM,YAAY,UAAU;CAC9B;AACF;;AAGA,MAAa,mBAAmB,UAC9B,qBAAqB,KAAK,KAAK,oBAAoB,KAAK"}
@@ -7,6 +7,10 @@ let revision = 0;
7
7
  const registerLobePalette = (name, palette) => {
8
8
  if (!NAME.test(name)) throw new Error(`Invalid palette name "${name}": use letters, digits, _ or -`);
9
9
  registry.set(name, palette);
10
+ notifyPaletteChange();
11
+ };
12
+ /** Bumps the revision so mounted scopes / useTheme pick up a re-registered palette or neutral. */
13
+ const notifyPaletteChange = () => {
10
14
  revision++;
11
15
  for (const listener of listeners) listener();
12
16
  };
@@ -23,6 +27,6 @@ const resolveStatusScales = (name) => isRegisteredPalette(name) ? {
23
27
  ...registry.get(name)
24
28
  } : statusColorScales;
25
29
  //#endregion
26
- export { getPaletteRevision, isRegisteredPalette, registerLobePalette, resolveStatusScales, subscribePalettes };
30
+ export { getPaletteRevision, isRegisteredPalette, notifyPaletteChange, registerLobePalette, resolveStatusScales, subscribePalettes };
27
31
 
28
32
  //# sourceMappingURL=customPalette.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"customPalette.mjs","names":[],"sources":["../../../src/styles/theme/customPalette.ts"],"sourcesContent":["import { type StatusColorScales, statusColorScales } from '@/color/status';\n\nexport type LobeStatusPalette = Partial<StatusColorScales>;\n\nconst NAME = /^[\\w-]+$/;\n\nconst registry = new Map<string, LobeStatusPalette>();\nconst listeners = new Set<() => void>();\nlet revision = 0;\n\nexport const registerLobePalette = (name: string, palette: LobeStatusPalette) => {\n if (!NAME.test(name))\n throw new Error(`Invalid palette name \"${name}\": use letters, digits, _ or -`);\n registry.set(name, palette);\n revision++;\n for (const listener of listeners) listener();\n};\n\nexport const getPaletteRevision = () => revision;\n\nexport const subscribePalettes = (listener: () => void) => {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n};\n\nexport const isRegisteredPalette = (name?: string): name is string => !!name && registry.has(name);\n\nexport const resolveStatusScales = (name?: string): StatusColorScales =>\n isRegisteredPalette(name) ? { ...statusColorScales, ...registry.get(name) } : statusColorScales;\n"],"mappings":";;AAIA,MAAM,OAAO;AAEb,MAAM,2BAAW,IAAI,IAA+B;AACpD,MAAM,4BAAY,IAAI,IAAgB;AACtC,IAAI,WAAW;AAEf,MAAa,uBAAuB,MAAc,YAA+B;CAC/E,IAAI,CAAC,KAAK,KAAK,IAAI,GACjB,MAAM,IAAI,MAAM,yBAAyB,KAAK,+BAA+B;CAC/E,SAAS,IAAI,MAAM,OAAO;CAC1B;CACA,KAAK,MAAM,YAAY,WAAW,SAAS;AAC7C;AAEA,MAAa,2BAA2B;AAExC,MAAa,qBAAqB,aAAyB;CACzD,UAAU,IAAI,QAAQ;CACtB,aAAa;EACX,UAAU,OAAO,QAAQ;CAC3B;AACF;AAEA,MAAa,uBAAuB,SAAkC,CAAC,CAAC,QAAQ,SAAS,IAAI,IAAI;AAEjG,MAAa,uBAAuB,SAClC,oBAAoB,IAAI,IAAI;CAAE,GAAG;CAAmB,GAAG,SAAS,IAAI,IAAI;AAAE,IAAI"}
1
+ {"version":3,"file":"customPalette.mjs","names":[],"sources":["../../../src/styles/theme/customPalette.ts"],"sourcesContent":["import { type StatusColorScales, statusColorScales } from '@/color/status';\n\nexport type LobeStatusPalette = Partial<StatusColorScales>;\n\nconst NAME = /^[\\w-]+$/;\n\nconst registry = new Map<string, LobeStatusPalette>();\nconst listeners = new Set<() => void>();\nlet revision = 0;\n\nexport const registerLobePalette = (name: string, palette: LobeStatusPalette) => {\n if (!NAME.test(name))\n throw new Error(`Invalid palette name \"${name}\": use letters, digits, _ or -`);\n registry.set(name, palette);\n notifyPaletteChange();\n};\n\n/** Bumps the revision so mounted scopes / useTheme pick up a re-registered palette or neutral. */\nexport const notifyPaletteChange = () => {\n revision++;\n for (const listener of listeners) listener();\n};\n\nexport const getPaletteRevision = () => revision;\n\nexport const subscribePalettes = (listener: () => void) => {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n};\n\nexport const isRegisteredPalette = (name?: string): name is string => !!name && registry.has(name);\n\nexport const resolveStatusScales = (name?: string): StatusColorScales =>\n isRegisteredPalette(name) ? { ...statusColorScales, ...registry.get(name) } : statusColorScales;\n"],"mappings":";;AAIA,MAAM,OAAO;AAEb,MAAM,2BAAW,IAAI,IAA+B;AACpD,MAAM,4BAAY,IAAI,IAAgB;AACtC,IAAI,WAAW;AAEf,MAAa,uBAAuB,MAAc,YAA+B;CAC/E,IAAI,CAAC,KAAK,KAAK,IAAI,GACjB,MAAM,IAAI,MAAM,yBAAyB,KAAK,+BAA+B;CAC/E,SAAS,IAAI,MAAM,OAAO;CAC1B,oBAAoB;AACtB;;AAGA,MAAa,4BAA4B;CACvC;CACA,KAAK,MAAM,YAAY,WAAW,SAAS;AAC7C;AAEA,MAAa,2BAA2B;AAExC,MAAa,qBAAqB,aAAyB;CACzD,UAAU,IAAI,QAAQ;CACtB,aAAa;EACX,UAAU,OAAO,QAAQ;CAC3B;AACF;AAEA,MAAa,uBAAuB,SAAkC,CAAC,CAAC,QAAQ,SAAS,IAAI,IAAI;AAEjG,MAAa,uBAAuB,SAClC,oBAAoB,IAAI,IAAI;CAAE,GAAG;CAAmB,GAAG,SAAS,IAAI,IAAI;AAAE,IAAI"}
@@ -1,167 +1,177 @@
1
1
  import { createStaticStyles, keyframes } from "../css.mjs";
2
2
  //#region src/styles/theme/customStylishStatic.ts
3
- const gradient = keyframes`
4
- 0% {
5
- background-position: 0% 50%;
6
- }
7
- 50% {
8
- background-position: 100% 50%;
9
- }
10
- 100% {
11
- background-position: 0% 50%;
12
- }
13
- `;
14
- const staticStylish = createStaticStyles(({ css, cssVar }) => ({
15
- active: css`
16
- color: ${cssVar.colorText};
17
- background: ${cssVar.colorFillSecondary};
18
-
19
- &:hover {
20
- color: ${cssVar.colorText};
21
- background: ${cssVar.colorFill};
3
+ const createStylish = () => {
4
+ const gradient = keyframes`
5
+ 0% {
6
+ background-position: 0% 50%;
7
+ }
8
+ 50% {
9
+ background-position: 100% 50%;
22
10
  }
23
- `,
24
- blur: css`
25
- backdrop-filter: saturate(150%) blur(10px);
26
- `,
27
- blurStrong: css`
28
- backdrop-filter: saturate(150%) blur(36px);
29
- `,
30
- bottomScrollbar: css`
31
- ::-webkit-scrollbar {
32
- width: 0;
33
- height: 4px;
34
- background-color: transparent;
11
+ 100% {
12
+ background-position: 0% 50%;
13
+ }
14
+ `;
15
+ return createStaticStyles(({ css, cssVar }) => ({
16
+ active: css`
17
+ color: ${cssVar.colorText};
18
+ background: ${cssVar.colorFillSecondary};
35
19
 
36
- &-thumb {
37
- border-radius: 4px;
38
- background-color: ${cssVar.colorFill};
39
- transition: background-color 500ms ${cssVar.motionEaseOut};
20
+ &:hover {
21
+ color: ${cssVar.colorText};
22
+ background: ${cssVar.colorFill};
40
23
  }
24
+ `,
25
+ blur: css`
26
+ backdrop-filter: saturate(150%) blur(10px);
27
+ `,
28
+ blurStrong: css`
29
+ backdrop-filter: saturate(150%) blur(36px);
30
+ `,
31
+ bottomScrollbar: css`
32
+ ::-webkit-scrollbar {
33
+ width: 0;
34
+ height: 4px;
35
+ background-color: transparent;
41
36
 
42
- &-corner {
37
+ &-thumb {
38
+ border-radius: 4px;
39
+ background-color: ${cssVar.colorFill};
40
+ transition: background-color 500ms ${cssVar.motionEaseOut};
41
+ }
42
+
43
+ &-corner {
44
+ display: none;
45
+ width: 0;
46
+ height: 0;
47
+ }
48
+ }
49
+ `,
50
+ disabled: css`
51
+ cursor: not-allowed;
52
+ opacity: 0.5;
53
+ `,
54
+ gradientAnimation: css`
55
+ border-radius: inherit;
56
+ background-image: linear-gradient(
57
+ -45deg,
58
+ ${cssVar.gold},
59
+ ${cssVar.magenta},
60
+ ${cssVar.geekblue},
61
+ ${cssVar.cyan}
62
+ );
63
+ background-size: 400% 400%;
64
+ animation: 5s ${gradient} 5s ease infinite;
65
+ `,
66
+ noScrollbar: css`
67
+ ::-webkit-scrollbar {
43
68
  display: none;
44
69
  width: 0;
45
70
  height: 0;
71
+ background-color: transparent;
46
72
  }
47
- }
48
- `,
49
- disabled: css`
50
- cursor: not-allowed;
51
- opacity: 0.5;
52
- `,
53
- gradientAnimation: css`
54
- border-radius: inherit;
55
- background-image: linear-gradient(
56
- -45deg,
57
- ${cssVar.gold},
58
- ${cssVar.magenta},
59
- ${cssVar.geekblue},
60
- ${cssVar.cyan}
61
- );
62
- background-size: 400% 400%;
63
- animation: 5s ${gradient} 5s ease infinite;
64
- `,
65
- noScrollbar: css`
66
- ::-webkit-scrollbar {
67
- display: none;
68
- width: 0;
69
- height: 0;
70
- background-color: transparent;
71
- }
72
- `,
73
- resetLinkColor: css`
74
- cursor: pointer;
75
- color: ${cssVar.colorTextSecondary};
73
+ `,
74
+ resetLinkColor: css`
75
+ cursor: pointer;
76
+ color: ${cssVar.colorTextSecondary};
76
77
 
77
- &:hover {
78
- color: ${cssVar.colorText};
79
- }
80
- `,
81
- /**
82
- * Shadow style using CSS variables.
83
- * Note: This uses CSS variables which automatically adapt to light/dark mode.
84
- * For more control, use the dynamic version from customStylish.
85
- */
86
- shadow: css`
87
- box-shadow:
88
- 0 1px 0 -1px ${cssVar.colorBorder},
89
- 0 1px 2px -0.5px ${cssVar.colorBorder},
90
- 0 2px 2px -1px ${cssVar.colorBorderSecondary},
91
- 0 3px 6px -4px ${cssVar.colorBorderSecondary};
92
- `,
93
- variantBorderless: css`
94
- border: none;
95
- background: none;
96
- box-shadow: none;
78
+ &:hover {
79
+ color: ${cssVar.colorText};
80
+ }
81
+ `,
82
+ /**
83
+ * Shadow style using CSS variables.
84
+ * Note: This uses CSS variables which automatically adapt to light/dark mode.
85
+ * For more control, use the dynamic version from customStylish.
86
+ */
87
+ shadow: css`
88
+ box-shadow:
89
+ 0 1px 0 -1px ${cssVar.colorBorder},
90
+ 0 1px 2px -0.5px ${cssVar.colorBorder},
91
+ 0 2px 2px -1px ${cssVar.colorBorderSecondary},
92
+ 0 3px 6px -4px ${cssVar.colorBorderSecondary};
93
+ `,
94
+ variantBorderless: css`
95
+ border: none;
96
+ background: none;
97
+ box-shadow: none;
98
+
99
+ &:hover {
100
+ background: ${cssVar.colorFillTertiary};
101
+ }
102
+ `,
103
+ /**
104
+ * Variant borderless danger style.
105
+ * Note: Uses colorErrorBg as fallback since colorErrorFillTertiary is not in cssVar.
106
+ * For exact match, use the dynamic version from customStylish.
107
+ */
108
+ variantBorderlessDanger: css`
109
+ border: none;
110
+ background: none;
111
+ box-shadow: none;
97
112
 
98
- &:hover {
113
+ &:hover {
114
+ background: ${cssVar.colorErrorBg};
115
+ box-shadow: inset 0 0 0 1px ${cssVar.colorErrorBg};
116
+ }
117
+ `,
118
+ variantBorderlessWithoutHover: css`
119
+ border: none;
120
+ background: none;
121
+ box-shadow: none;
122
+ `,
123
+ variantFilled: css`
99
124
  background: ${cssVar.colorFillTertiary};
100
- }
101
- `,
102
- /**
103
- * Variant borderless danger style.
104
- * Note: Uses colorErrorBg as fallback since colorErrorFillTertiary is not in cssVar.
105
- * For exact match, use the dynamic version from customStylish.
106
- */
107
- variantBorderlessDanger: css`
108
- border: none;
109
- background: none;
110
- box-shadow: none;
111
125
 
112
- &:hover {
126
+ &:hover {
127
+ background: ${cssVar.colorFillSecondary};
128
+ }
129
+ `,
130
+ /**
131
+ * Variant filled danger style.
132
+ * Note: Uses colorErrorBg as fallback since colorErrorFillTertiary/Secondary are not in cssVar.
133
+ * For exact match, use the dynamic version from customStylish.
134
+ */
135
+ variantFilledDanger: css`
113
136
  background: ${cssVar.colorErrorBg};
114
- box-shadow: inset 0 0 0 1px ${cssVar.colorErrorBg};
115
- }
116
- `,
117
- variantBorderlessWithoutHover: css`
118
- border: none;
119
- background: none;
120
- box-shadow: none;
121
- `,
122
- variantFilled: css`
123
- background: ${cssVar.colorFillTertiary};
124
-
125
- &:hover {
126
- background: ${cssVar.colorFillSecondary};
127
- }
128
- `,
129
- /**
130
- * Variant filled danger style.
131
- * Note: Uses colorErrorBg as fallback since colorErrorFillTertiary/Secondary are not in cssVar.
132
- * For exact match, use the dynamic version from customStylish.
133
- */
134
- variantFilledDanger: css`
135
- background: ${cssVar.colorErrorBg};
136
-
137
- &:hover {
138
- background: ${cssVar.colorErrorBgHover};
139
- }
140
- `,
141
- variantFilledWithoutHover: css`
142
- background: ${cssVar.colorFillTertiary};
143
- `,
144
- variantOutlined: css`
145
- border: 1px solid ${cssVar.colorBorderSecondary};
146
- background: ${cssVar.colorBgContainer};
147
137
 
148
- &:hover {
149
- border: 1px solid ${cssVar.colorBorder};
138
+ &:hover {
139
+ background: ${cssVar.colorErrorBgHover};
140
+ }
141
+ `,
142
+ variantFilledWithoutHover: css`
143
+ background: ${cssVar.colorFillTertiary};
144
+ `,
145
+ variantOutlined: css`
146
+ border: 1px solid ${cssVar.colorBorderSecondary};
150
147
  background: ${cssVar.colorBgContainer};
151
- }
152
- `,
153
- variantOutlinedDanger: css`
154
- border: 1px solid ${cssVar.colorErrorBorder};
155
148
 
156
- &:hover {
149
+ &:hover {
150
+ border: 1px solid ${cssVar.colorBorder};
151
+ background: ${cssVar.colorBgContainer};
152
+ }
153
+ `,
154
+ variantOutlinedDanger: css`
157
155
  border: 1px solid ${cssVar.colorErrorBorder};
158
- }
159
- `,
160
- variantOutlinedWithoutHover: css`
161
- border: 1px solid ${cssVar.colorBorderSecondary};
162
- background: ${cssVar.colorBgContainer};
163
- `
164
- }));
156
+
157
+ &:hover {
158
+ border: 1px solid ${cssVar.colorErrorBorder};
159
+ }
160
+ `,
161
+ variantOutlinedWithoutHover: css`
162
+ border: 1px solid ${cssVar.colorBorderSecondary};
163
+ background: ${cssVar.colorBgContainer};
164
+ `
165
+ }));
166
+ };
167
+ let created;
168
+ const resolve = () => created ??= createStylish();
169
+ const staticStylish = new Proxy({}, {
170
+ get: (_, key) => Reflect.get(resolve(), key),
171
+ getOwnPropertyDescriptor: (_, key) => Reflect.getOwnPropertyDescriptor(resolve(), key),
172
+ has: (_, key) => Reflect.has(resolve(), key),
173
+ ownKeys: () => Reflect.ownKeys(resolve())
174
+ });
165
175
  //#endregion
166
176
  export { staticStylish };
167
177
 
@@ -1 +1 @@
1
- {"version":3,"file":"customStylishStatic.mjs","names":[],"sources":["../../../src/styles/theme/customStylishStatic.ts"],"sourcesContent":["import type { LobeCustomStylish } from '@/types/customStylish';\n\nimport { createStaticStyles, keyframes } from '../css';\n\nconst gradient = keyframes`\n 0% {\n background-position: 0% 50%;\n }\n 50% {\n background-position: 100% 50%;\n }\n 100% {\n background-position: 0% 50%;\n }\n`;\n\nexport const staticStylish = createStaticStyles(({ css, cssVar }) => ({\n active: css`\n color: ${cssVar.colorText};\n background: ${cssVar.colorFillSecondary};\n\n &:hover {\n color: ${cssVar.colorText};\n background: ${cssVar.colorFill};\n }\n `,\n\n blur: css`\n backdrop-filter: saturate(150%) blur(10px);\n `,\n\n blurStrong: css`\n backdrop-filter: saturate(150%) blur(36px);\n `,\n\n bottomScrollbar: css`\n ::-webkit-scrollbar {\n width: 0;\n height: 4px;\n background-color: transparent;\n\n &-thumb {\n border-radius: 4px;\n background-color: ${cssVar.colorFill};\n transition: background-color 500ms ${cssVar.motionEaseOut};\n }\n\n &-corner {\n display: none;\n width: 0;\n height: 0;\n }\n }\n `,\n\n disabled: css`\n cursor: not-allowed;\n opacity: 0.5;\n `,\n\n gradientAnimation: css`\n border-radius: inherit;\n background-image: linear-gradient(\n -45deg,\n ${cssVar.gold},\n ${cssVar.magenta},\n ${cssVar.geekblue},\n ${cssVar.cyan}\n );\n background-size: 400% 400%;\n animation: 5s ${gradient} 5s ease infinite;\n `,\n\n noScrollbar: css`\n ::-webkit-scrollbar {\n display: none;\n width: 0;\n height: 0;\n background-color: transparent;\n }\n `,\n\n resetLinkColor: css`\n cursor: pointer;\n color: ${cssVar.colorTextSecondary};\n\n &:hover {\n color: ${cssVar.colorText};\n }\n `,\n\n /**\n * Shadow style using CSS variables.\n * Note: This uses CSS variables which automatically adapt to light/dark mode.\n * For more control, use the dynamic version from customStylish.\n */\n shadow: css`\n box-shadow:\n 0 1px 0 -1px ${cssVar.colorBorder},\n 0 1px 2px -0.5px ${cssVar.colorBorder},\n 0 2px 2px -1px ${cssVar.colorBorderSecondary},\n 0 3px 6px -4px ${cssVar.colorBorderSecondary};\n `,\n\n variantBorderless: css`\n border: none;\n background: none;\n box-shadow: none;\n\n &:hover {\n background: ${cssVar.colorFillTertiary};\n }\n `,\n\n /**\n * Variant borderless danger style.\n * Note: Uses colorErrorBg as fallback since colorErrorFillTertiary is not in cssVar.\n * For exact match, use the dynamic version from customStylish.\n */\n variantBorderlessDanger: css`\n border: none;\n background: none;\n box-shadow: none;\n\n &:hover {\n background: ${cssVar.colorErrorBg};\n box-shadow: inset 0 0 0 1px ${cssVar.colorErrorBg};\n }\n `,\n\n variantBorderlessWithoutHover: css`\n border: none;\n background: none;\n box-shadow: none;\n `,\n\n variantFilled: css`\n background: ${cssVar.colorFillTertiary};\n\n &:hover {\n background: ${cssVar.colorFillSecondary};\n }\n `,\n\n /**\n * Variant filled danger style.\n * Note: Uses colorErrorBg as fallback since colorErrorFillTertiary/Secondary are not in cssVar.\n * For exact match, use the dynamic version from customStylish.\n */\n variantFilledDanger: css`\n background: ${cssVar.colorErrorBg};\n\n &:hover {\n background: ${cssVar.colorErrorBgHover};\n }\n `,\n\n variantFilledWithoutHover: css`\n background: ${cssVar.colorFillTertiary};\n `,\n\n variantOutlined: css`\n border: 1px solid ${cssVar.colorBorderSecondary};\n background: ${cssVar.colorBgContainer};\n\n &:hover {\n border: 1px solid ${cssVar.colorBorder};\n background: ${cssVar.colorBgContainer};\n }\n `,\n\n variantOutlinedDanger: css`\n border: 1px solid ${cssVar.colorErrorBorder};\n\n &:hover {\n border: 1px solid ${cssVar.colorErrorBorder};\n }\n `,\n\n variantOutlinedWithoutHover: css`\n border: 1px solid ${cssVar.colorBorderSecondary};\n background: ${cssVar.colorBgContainer};\n `,\n})) as LobeCustomStylish;\n"],"mappings":";;AAIA,MAAM,WAAW,SAAS;;;;;;;;;;;AAY1B,MAAa,gBAAgB,oBAAoB,EAAE,KAAK,cAAc;CACpE,QAAQ,GAAG;aACA,OAAO,UAAU;kBACZ,OAAO,mBAAmB;;;eAG7B,OAAO,UAAU;oBACZ,OAAO,UAAU;;;CAInC,MAAM,GAAG;;;CAIT,YAAY,GAAG;;;CAIf,iBAAiB,GAAG;;;;;;;;4BAQM,OAAO,UAAU;6CACA,OAAO,cAAc;;;;;;;;;;CAWhE,UAAU,GAAG;;;;CAKb,mBAAmB,GAAG;;;;QAIhB,OAAO,KAAK;QACZ,OAAO,QAAQ;QACf,OAAO,SAAS;QAChB,OAAO,KAAK;;;oBAGA,SAAS;;CAG3B,aAAa,GAAG;;;;;;;;CAShB,gBAAgB,GAAG;;aAER,OAAO,mBAAmB;;;eAGxB,OAAO,UAAU;;;;;;;;CAS9B,QAAQ,GAAG;;qBAEQ,OAAO,YAAY;yBACf,OAAO,YAAY;uBACrB,OAAO,qBAAqB;uBAC5B,OAAO,qBAAqB;;CAGjD,mBAAmB,GAAG;;;;;;oBAMJ,OAAO,kBAAkB;;;;;;;;CAS3C,yBAAyB,GAAG;;;;;;oBAMV,OAAO,aAAa;oCACJ,OAAO,aAAa;;;CAItD,+BAA+B,GAAG;;;;;CAMlC,eAAe,GAAG;kBACF,OAAO,kBAAkB;;;oBAGvB,OAAO,mBAAmB;;;;;;;;CAS5C,qBAAqB,GAAG;kBACR,OAAO,aAAa;;;oBAGlB,OAAO,kBAAkB;;;CAI3C,2BAA2B,GAAG;kBACd,OAAO,kBAAkB;;CAGzC,iBAAiB,GAAG;wBACE,OAAO,qBAAqB;kBAClC,OAAO,iBAAiB;;;0BAGhB,OAAO,YAAY;oBACzB,OAAO,iBAAiB;;;CAI1C,uBAAuB,GAAG;wBACJ,OAAO,iBAAiB;;;0BAGtB,OAAO,iBAAiB;;;CAIhD,6BAA6B,GAAG;wBACV,OAAO,qBAAqB;kBAClC,OAAO,iBAAiB;;AAE1C,EAAE"}
1
+ {"version":3,"file":"customStylishStatic.mjs","names":[],"sources":["../../../src/styles/theme/customStylishStatic.ts"],"sourcesContent":["import type { LobeCustomStylish } from '@/types/customStylish';\n\nimport { createStaticStyles, keyframes } from '../css';\n\nconst createStylish = (): LobeCustomStylish => {\n const gradient = keyframes`\n 0% {\n background-position: 0% 50%;\n }\n 50% {\n background-position: 100% 50%;\n }\n 100% {\n background-position: 0% 50%;\n }\n `;\n\n return createStaticStyles(({ css, cssVar }) => ({\n active: css`\n color: ${cssVar.colorText};\n background: ${cssVar.colorFillSecondary};\n\n &:hover {\n color: ${cssVar.colorText};\n background: ${cssVar.colorFill};\n }\n `,\n\n blur: css`\n backdrop-filter: saturate(150%) blur(10px);\n `,\n\n blurStrong: css`\n backdrop-filter: saturate(150%) blur(36px);\n `,\n\n bottomScrollbar: css`\n ::-webkit-scrollbar {\n width: 0;\n height: 4px;\n background-color: transparent;\n\n &-thumb {\n border-radius: 4px;\n background-color: ${cssVar.colorFill};\n transition: background-color 500ms ${cssVar.motionEaseOut};\n }\n\n &-corner {\n display: none;\n width: 0;\n height: 0;\n }\n }\n `,\n\n disabled: css`\n cursor: not-allowed;\n opacity: 0.5;\n `,\n\n gradientAnimation: css`\n border-radius: inherit;\n background-image: linear-gradient(\n -45deg,\n ${cssVar.gold},\n ${cssVar.magenta},\n ${cssVar.geekblue},\n ${cssVar.cyan}\n );\n background-size: 400% 400%;\n animation: 5s ${gradient} 5s ease infinite;\n `,\n\n noScrollbar: css`\n ::-webkit-scrollbar {\n display: none;\n width: 0;\n height: 0;\n background-color: transparent;\n }\n `,\n\n resetLinkColor: css`\n cursor: pointer;\n color: ${cssVar.colorTextSecondary};\n\n &:hover {\n color: ${cssVar.colorText};\n }\n `,\n\n /**\n * Shadow style using CSS variables.\n * Note: This uses CSS variables which automatically adapt to light/dark mode.\n * For more control, use the dynamic version from customStylish.\n */\n shadow: css`\n box-shadow:\n 0 1px 0 -1px ${cssVar.colorBorder},\n 0 1px 2px -0.5px ${cssVar.colorBorder},\n 0 2px 2px -1px ${cssVar.colorBorderSecondary},\n 0 3px 6px -4px ${cssVar.colorBorderSecondary};\n `,\n\n variantBorderless: css`\n border: none;\n background: none;\n box-shadow: none;\n\n &:hover {\n background: ${cssVar.colorFillTertiary};\n }\n `,\n\n /**\n * Variant borderless danger style.\n * Note: Uses colorErrorBg as fallback since colorErrorFillTertiary is not in cssVar.\n * For exact match, use the dynamic version from customStylish.\n */\n variantBorderlessDanger: css`\n border: none;\n background: none;\n box-shadow: none;\n\n &:hover {\n background: ${cssVar.colorErrorBg};\n box-shadow: inset 0 0 0 1px ${cssVar.colorErrorBg};\n }\n `,\n\n variantBorderlessWithoutHover: css`\n border: none;\n background: none;\n box-shadow: none;\n `,\n\n variantFilled: css`\n background: ${cssVar.colorFillTertiary};\n\n &:hover {\n background: ${cssVar.colorFillSecondary};\n }\n `,\n\n /**\n * Variant filled danger style.\n * Note: Uses colorErrorBg as fallback since colorErrorFillTertiary/Secondary are not in cssVar.\n * For exact match, use the dynamic version from customStylish.\n */\n variantFilledDanger: css`\n background: ${cssVar.colorErrorBg};\n\n &:hover {\n background: ${cssVar.colorErrorBgHover};\n }\n `,\n\n variantFilledWithoutHover: css`\n background: ${cssVar.colorFillTertiary};\n `,\n\n variantOutlined: css`\n border: 1px solid ${cssVar.colorBorderSecondary};\n background: ${cssVar.colorBgContainer};\n\n &:hover {\n border: 1px solid ${cssVar.colorBorder};\n background: ${cssVar.colorBgContainer};\n }\n `,\n\n variantOutlinedDanger: css`\n border: 1px solid ${cssVar.colorErrorBorder};\n\n &:hover {\n border: 1px solid ${cssVar.colorErrorBorder};\n }\n `,\n\n variantOutlinedWithoutHover: css`\n border: 1px solid ${cssVar.colorBorderSecondary};\n background: ${cssVar.colorBgContainer};\n `,\n })) as LobeCustomStylish;\n};\n\nlet created: LobeCustomStylish | undefined;\nconst resolve = () => (created ??= createStylish());\n\n// emotion inserts rules the moment css() runs; building these at import time would put them on every page that imports @lobehub/ui.\nexport const staticStylish = new Proxy({} as LobeCustomStylish, {\n get: (_, key) => Reflect.get(resolve(), key),\n getOwnPropertyDescriptor: (_, key) => Reflect.getOwnPropertyDescriptor(resolve(), key),\n has: (_, key) => Reflect.has(resolve(), key),\n ownKeys: () => Reflect.ownKeys(resolve()),\n});\n"],"mappings":";;AAIA,MAAM,sBAAyC;CAC7C,MAAM,WAAW,SAAS;;;;;;;;;;;CAY1B,OAAO,oBAAoB,EAAE,KAAK,cAAc;EAC9C,QAAQ,GAAG;eACA,OAAO,UAAU;oBACZ,OAAO,mBAAmB;;;iBAG7B,OAAO,UAAU;sBACZ,OAAO,UAAU;;;EAInC,MAAM,GAAG;;;EAIT,YAAY,GAAG;;;EAIf,iBAAiB,GAAG;;;;;;;;8BAQM,OAAO,UAAU;+CACA,OAAO,cAAc;;;;;;;;;;EAWhE,UAAU,GAAG;;;;EAKb,mBAAmB,GAAG;;;;UAIhB,OAAO,KAAK;UACZ,OAAO,QAAQ;UACf,OAAO,SAAS;UAChB,OAAO,KAAK;;;sBAGA,SAAS;;EAG3B,aAAa,GAAG;;;;;;;;EAShB,gBAAgB,GAAG;;eAER,OAAO,mBAAmB;;;iBAGxB,OAAO,UAAU;;;;;;;;EAS9B,QAAQ,GAAG;;uBAEQ,OAAO,YAAY;2BACf,OAAO,YAAY;yBACrB,OAAO,qBAAqB;yBAC5B,OAAO,qBAAqB;;EAGjD,mBAAmB,GAAG;;;;;;sBAMJ,OAAO,kBAAkB;;;;;;;;EAS3C,yBAAyB,GAAG;;;;;;sBAMV,OAAO,aAAa;sCACJ,OAAO,aAAa;;;EAItD,+BAA+B,GAAG;;;;;EAMlC,eAAe,GAAG;oBACF,OAAO,kBAAkB;;;sBAGvB,OAAO,mBAAmB;;;;;;;;EAS5C,qBAAqB,GAAG;oBACR,OAAO,aAAa;;;sBAGlB,OAAO,kBAAkB;;;EAI3C,2BAA2B,GAAG;oBACd,OAAO,kBAAkB;;EAGzC,iBAAiB,GAAG;0BACE,OAAO,qBAAqB;oBAClC,OAAO,iBAAiB;;;4BAGhB,OAAO,YAAY;sBACzB,OAAO,iBAAiB;;;EAI1C,uBAAuB,GAAG;0BACJ,OAAO,iBAAiB;;;4BAGtB,OAAO,iBAAiB;;;EAIhD,6BAA6B,GAAG;0BACV,OAAO,qBAAqB;oBAClC,OAAO,iBAAiB;;CAE1C,EAAE;AACJ;AAEA,IAAI;AACJ,MAAM,gBAAiB,YAAY,cAAc;AAGjD,MAAa,gBAAgB,IAAI,MAAM,CAAC,GAAwB;CAC9D,MAAM,GAAG,QAAQ,QAAQ,IAAI,QAAQ,GAAG,GAAG;CAC3C,2BAA2B,GAAG,QAAQ,QAAQ,yBAAyB,QAAQ,GAAG,GAAG;CACrF,MAAM,GAAG,QAAQ,QAAQ,IAAI,QAAQ,GAAG,GAAG;CAC3C,eAAe,QAAQ,QAAQ,QAAQ,CAAC;AAC1C,CAAC"}
@@ -1,4 +1,4 @@
1
- import { NeutralColors } from "../customTheme.mjs";
1
+ import { LobeNeutralColor } from "./customNeutral.mjs";
2
2
  import { LobePrimaryColor } from "./customPrimary.mjs";
3
3
  import { LobeToken } from "./createLobeToken.mjs";
4
4
  import { CSSProperties, ReactNode } from "react";
@@ -6,7 +6,7 @@ import { CSSProperties, ReactNode } from "react";
6
6
  export type LobeAppearance = 'light' | 'dark';
7
7
  export interface LobeThemeState {
8
8
  appearance: LobeAppearance;
9
- neutralColor?: NeutralColors;
9
+ neutralColor?: LobeNeutralColor;
10
10
  palette?: string;
11
11
  primaryColor?: LobePrimaryColor;
12
12
  }
@@ -40,7 +40,7 @@ export type ResponsiveState = Record<Breakpoint | 'mobile' | 'tablet' | 'laptop'
40
40
  export declare const useResponsive: () => ResponsiveState;
41
41
  export interface LobeThemeScriptProps {
42
42
  appearance?: LobeAppearance | 'system';
43
- neutralColor?: NeutralColors;
43
+ neutralColor?: LobeNeutralColor;
44
44
  nonce?: string;
45
45
  palette?: string;
46
46
  primaryColor?: LobePrimaryColor;