@fangxinyan/lumina 0.6.7 → 0.6.9

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 (222) hide show
  1. package/README.md +17 -6
  2. package/dist/Alert.cjs +3 -3
  3. package/dist/Alert.js +2 -2
  4. package/dist/AppShell.cjs +5 -5
  5. package/dist/AppShell.js +1 -1
  6. package/dist/AutoComplete.cjs +5 -5
  7. package/dist/AutoComplete.js +4 -4
  8. package/dist/Avatar.cjs +2 -2
  9. package/dist/Avatar.js +1 -1
  10. package/dist/Badge.cjs +2 -2
  11. package/dist/Badge.js +1 -1
  12. package/dist/Button.cjs +7 -3
  13. package/dist/Button.d.cts +13 -1
  14. package/dist/Button.d.ts +13 -1
  15. package/dist/Button.js +2 -2
  16. package/dist/Calendar.cjs +3 -3
  17. package/dist/Calendar.js +2 -2
  18. package/dist/{Card-M6UMBDD2.css → Card-4DKCXWFU.css} +4 -2
  19. package/dist/Card.cjs +3 -3
  20. package/dist/Card.js +2 -2
  21. package/dist/Cascader.cjs +5 -5
  22. package/dist/Cascader.js +4 -4
  23. package/dist/Checkbox.cjs +3 -3
  24. package/dist/Checkbox.js +2 -2
  25. package/dist/Collapse.cjs +3 -3
  26. package/dist/Collapse.js +2 -2
  27. package/dist/ColorPicker.cjs +2 -2
  28. package/dist/ColorPicker.js +1 -1
  29. package/dist/CommandPalette.cjs +5 -5
  30. package/dist/CommandPalette.js +4 -4
  31. package/dist/ContextMenu.cjs +2 -2
  32. package/dist/ContextMenu.js +1 -1
  33. package/dist/Divider.cjs +2 -2
  34. package/dist/Divider.js +1 -1
  35. package/dist/Drawer.cjs +3 -3
  36. package/dist/Drawer.js +2 -2
  37. package/dist/Empty.cjs +2 -2
  38. package/dist/Empty.js +1 -1
  39. package/dist/Form.cjs +4 -4
  40. package/dist/Form.js +1 -1
  41. package/dist/Icon.cjs +49 -49
  42. package/dist/Icon.js +1 -1
  43. package/dist/Image.cjs +6 -6
  44. package/dist/Image.js +2 -2
  45. package/dist/Input.cjs +5 -5
  46. package/dist/Input.js +3 -3
  47. package/dist/InputNumber.cjs +5 -5
  48. package/dist/InputNumber.js +4 -4
  49. package/dist/List.cjs +2 -2
  50. package/dist/List.js +1 -1
  51. package/dist/Message.cjs +6 -6
  52. package/dist/Message.js +2 -2
  53. package/dist/Modal.cjs +4 -4
  54. package/dist/Modal.js +3 -3
  55. package/dist/Pagination.cjs +7 -7
  56. package/dist/Pagination.js +6 -6
  57. package/dist/Popover.cjs +2 -2
  58. package/dist/Popover.js +1 -1
  59. package/dist/Progress.cjs +2 -2
  60. package/dist/Progress.js +1 -1
  61. package/dist/Radio.cjs +3 -3
  62. package/dist/Radio.js +1 -1
  63. package/dist/Select.cjs +6 -6
  64. package/dist/Select.js +5 -5
  65. package/dist/Skeleton.cjs +2 -2
  66. package/dist/Skeleton.js +1 -1
  67. package/dist/Slider.cjs +2 -2
  68. package/dist/Slider.js +1 -1
  69. package/dist/Spin.cjs +2 -2
  70. package/dist/Spin.js +1 -1
  71. package/dist/Splitter.cjs +2 -2
  72. package/dist/Splitter.js +1 -1
  73. package/dist/StatusBar.cjs +3 -3
  74. package/dist/StatusBar.js +1 -1
  75. package/dist/Surface.cjs +4 -4
  76. package/dist/Surface.js +2 -2
  77. package/dist/Switch.cjs +2 -2
  78. package/dist/Switch.js +1 -1
  79. package/dist/Table.cjs +9 -9
  80. package/dist/Table.js +8 -8
  81. package/dist/TablePro.cjs +10 -10
  82. package/dist/TablePro.d.cts +11 -7
  83. package/dist/TablePro.d.ts +11 -7
  84. package/dist/TablePro.js +9 -9
  85. package/dist/Tabs.cjs +2 -2
  86. package/dist/Tabs.js +1 -1
  87. package/dist/Tag.cjs +3 -3
  88. package/dist/Tag.js +2 -2
  89. package/dist/Textarea.cjs +4 -4
  90. package/dist/Textarea.js +2 -2
  91. package/dist/Theme.cjs +11 -11
  92. package/dist/Theme.js +1 -1
  93. package/dist/{ThemePanel-76LB3YA5.css → ThemePanel-TEHB2JCQ.css} +68 -0
  94. package/dist/ThemePanel.cjs +13 -13
  95. package/dist/ThemePanel.d.cts +12 -2
  96. package/dist/ThemePanel.d.ts +12 -2
  97. package/dist/ThemePanel.js +10 -10
  98. package/dist/Timeline.cjs +3 -3
  99. package/dist/Timeline.js +2 -2
  100. package/dist/Tooltip.cjs +2 -2
  101. package/dist/Tooltip.js +1 -1
  102. package/dist/Typography.cjs +7 -7
  103. package/dist/Typography.js +2 -2
  104. package/dist/{chunk-MOMLQP7B.cjs → chunk-2EY34PPA.cjs} +1 -1
  105. package/dist/{chunk-IHK2FRTS.cjs → chunk-2LM5UYNU.cjs} +1 -1
  106. package/dist/{chunk-Y5F7ZTBH.js → chunk-3GJZRYTD.js} +1 -1
  107. package/dist/{chunk-D5PCIVID.cjs → chunk-3HPHQV2L.cjs} +3 -3
  108. package/dist/{chunk-DYHNOYRC.cjs → chunk-3NSBPQBT.cjs} +6 -6
  109. package/dist/{chunk-LI4XJTEA.js → chunk-3VXBSLPT.js} +3 -3
  110. package/dist/{chunk-YVTLHTG6.js → chunk-44WHEN76.js} +1 -1
  111. package/dist/{chunk-NT6CJYI3.cjs → chunk-4LOOWTRX.cjs} +4 -4
  112. package/dist/{chunk-U2H4DRMV.cjs → chunk-4N64ZL5M.cjs} +1 -1
  113. package/dist/{chunk-6XVLERA3.cjs → chunk-5C3ZSOKF.cjs} +1 -1
  114. package/dist/{chunk-2ZFJTMEF.js → chunk-5CWTC3I2.js} +3 -3
  115. package/dist/{chunk-ZPKHGKVL.cjs → chunk-5KGGB3EH.cjs} +3 -3
  116. package/dist/{chunk-W5CJC7S7.js → chunk-62RPBEAW.js} +2 -2
  117. package/dist/{chunk-NE7IUGMK.js → chunk-64ZQHLHL.js} +2 -2
  118. package/dist/{chunk-YJEXAO2I.js → chunk-6VSNO7IH.js} +1 -1
  119. package/dist/{chunk-3YP7CBJT.js → chunk-762NV3E4.js} +2 -2
  120. package/dist/{chunk-SYWTT5TY.cjs → chunk-76OH42CM.cjs} +4 -4
  121. package/dist/{chunk-56PHETWO.js → chunk-7DNK5JB2.js} +2 -2
  122. package/dist/{chunk-I4M2RL2X.js → chunk-7IWYBQAE.js} +2 -2
  123. package/dist/{chunk-VAXWWJJP.cjs → chunk-7OYMY22O.cjs} +8 -8
  124. package/dist/{chunk-L27C5O4W.cjs → chunk-7UCXY4T5.cjs} +3 -3
  125. package/dist/{chunk-7NZ2A4MA.js → chunk-7ZCTEIOW.js} +1 -1
  126. package/dist/{chunk-QY76WTO5.cjs → chunk-AA2FRQUQ.cjs} +8 -8
  127. package/dist/{chunk-SABWUELE.js → chunk-ACZA7HHP.js} +1 -1
  128. package/dist/{chunk-GZCU6HXD.js → chunk-AHS2AFTD.js} +1 -1
  129. package/dist/{chunk-YSCIMHOI.cjs → chunk-AYZ4BWHG.cjs} +4 -4
  130. package/dist/{chunk-NFXHIO3G.js → chunk-BY2YW5XN.js} +1 -1
  131. package/dist/{chunk-OGPDCBPD.cjs → chunk-CPBFUKSX.cjs} +11 -11
  132. package/dist/{chunk-R74TZKJS.cjs → chunk-D56CNYUP.cjs} +3 -3
  133. package/dist/{chunk-4UKM4KAC.cjs → chunk-DDCAHAAE.cjs} +1 -1
  134. package/dist/{chunk-N2COYOXE.cjs → chunk-DGB6KVU3.cjs} +1 -1
  135. package/dist/{chunk-PNZJFLMY.js → chunk-EXN64ADJ.js} +2 -2
  136. package/dist/{chunk-LFTCK2VM.cjs → chunk-F3DN2JGE.cjs} +489 -238
  137. package/dist/{chunk-IDJCFYPP.cjs → chunk-F65KYGPX.cjs} +14 -14
  138. package/dist/{chunk-RIUDYPRB.cjs → chunk-FJHFUES7.cjs} +1 -1
  139. package/dist/{chunk-66GXZQKL.cjs → chunk-FL25IGIG.cjs} +3 -3
  140. package/dist/{chunk-REMJWNAT.js → chunk-FPII6I52.js} +3 -3
  141. package/dist/{chunk-YSXD344H.js → chunk-FZITSOKH.js} +4 -4
  142. package/dist/{chunk-2NT5QKEX.js → chunk-GEANNF4T.js} +2 -2
  143. package/dist/{chunk-6LARTGLP.cjs → chunk-GJAEGIPM.cjs} +1 -1
  144. package/dist/{chunk-PVOQWCP2.cjs → chunk-GT34KAMX.cjs} +3 -3
  145. package/dist/{chunk-TVUBGXWA.js → chunk-GVPGJXZT.js} +1 -1
  146. package/dist/{chunk-J7EQJXSJ.js → chunk-HEBBQZUT.js} +3 -3
  147. package/dist/{chunk-6GQPF3EI.cjs → chunk-HFM4YKM5.cjs} +1 -1
  148. package/dist/{chunk-2SCXQ7QS.js → chunk-HR5QBBIS.js} +1 -1
  149. package/dist/{chunk-ACQSRMLF.cjs → chunk-HTW62OMX.cjs} +4 -4
  150. package/dist/{chunk-VNNQYJLT.js → chunk-I5XCHN67.js} +2 -2
  151. package/dist/{chunk-N3OLFKV5.cjs → chunk-IMAGOTLP.cjs} +1 -1
  152. package/dist/{chunk-Z4PZ2ZHI.cjs → chunk-J2R3BEEH.cjs} +1 -1
  153. package/dist/{chunk-PEJLXJQD.js → chunk-JPAYPF6H.js} +1 -1
  154. package/dist/{chunk-YNCDTKAE.cjs → chunk-JWZ6HJIF.cjs} +1 -1
  155. package/dist/{chunk-S6OKX4H7.cjs → chunk-KOY7GNP3.cjs} +1 -1
  156. package/dist/{chunk-NDO22RER.cjs → chunk-LF3ATJFY.cjs} +1 -1
  157. package/dist/{chunk-5NFSDFBB.cjs → chunk-LW6Z2WDZ.cjs} +3 -3
  158. package/dist/{chunk-YUKXNWVE.cjs → chunk-MLOT2AGK.cjs} +1 -1
  159. package/dist/{chunk-7D76MI37.js → chunk-MOLKLUSQ.js} +4 -4
  160. package/dist/{chunk-SG42F5VB.cjs → chunk-MZCKPLHQ.cjs} +1 -1
  161. package/dist/chunk-N24KHD5B.js +84 -0
  162. package/dist/{chunk-C24W6PTJ.cjs → chunk-N4JH6HHA.cjs} +1 -1
  163. package/dist/{chunk-5JNDDWFZ.js → chunk-NUF3EA7T.js} +2 -2
  164. package/dist/chunk-NUNPFMCM.cjs +106 -0
  165. package/dist/{chunk-WHXSUPJB.cjs → chunk-OUSJMIZX.cjs} +4 -4
  166. package/dist/{chunk-AJH2O4WC.js → chunk-OVTB7FQQ.js} +2 -2
  167. package/dist/{chunk-HFUHQUPQ.js → chunk-P434GBHP.js} +1 -1
  168. package/dist/{chunk-66T76GII.cjs → chunk-PEFIXNAV.cjs} +6 -6
  169. package/dist/{chunk-WXWFMWWF.js → chunk-PHONNUK2.js} +2 -2
  170. package/dist/{chunk-MYRLCN6V.js → chunk-PWPL3DRN.js} +1 -1
  171. package/dist/{chunk-HU7T64Y3.js → chunk-Q5KHJ32P.js} +1 -1
  172. package/dist/{chunk-OHFZ7L4T.js → chunk-Q77BWQNG.js} +1 -1
  173. package/dist/{chunk-XVP7IKLZ.js → chunk-QDXBI3PV.js} +3 -3
  174. package/dist/{chunk-PKHITACT.js → chunk-QKWRN2JL.js} +1 -1
  175. package/dist/{chunk-7ZNGHWVS.js → chunk-R53WIZY5.js} +1 -1
  176. package/dist/{chunk-LQLOOUS3.js → chunk-RYRBNMCC.js} +1 -1
  177. package/dist/{chunk-2ZADGBUN.cjs → chunk-S4CZ3VO6.cjs} +9 -4
  178. package/dist/{chunk-N4USDBY2.js → chunk-SGNDIRZC.js} +3 -3
  179. package/dist/{chunk-YT5NLCRC.js → chunk-SNX4FZYB.js} +1 -1
  180. package/dist/{chunk-KMG7OMOS.js → chunk-TJB7U72Z.js} +1 -1
  181. package/dist/{chunk-SFAGHPBT.js → chunk-TWJAYAK2.js} +1 -1
  182. package/dist/{chunk-JFQ53MO4.cjs → chunk-VM6CJYP6.cjs} +1 -1
  183. package/dist/{chunk-CNGKJYGZ.js → chunk-VRA4CQCJ.js} +7 -3
  184. package/dist/{chunk-YU5JK247.cjs → chunk-VUTCNATX.cjs} +6 -6
  185. package/dist/{chunk-CEZ2DR4R.js → chunk-W72IIGOV.js} +2 -2
  186. package/dist/{chunk-QP7RXZES.js → chunk-WIBAYFBB.js} +1 -1
  187. package/dist/{chunk-O43DOE7V.js → chunk-WIZVOZNO.js} +2 -2
  188. package/dist/{chunk-SQIWPU6V.js → chunk-XN52S7PT.js} +1 -1
  189. package/dist/{chunk-O4BOBOYV.cjs → chunk-XOYMBL5R.cjs} +1 -1
  190. package/dist/{chunk-MYHBC3HA.cjs → chunk-XPV672EI.cjs} +1 -1
  191. package/dist/{chunk-DYSGXQUK.cjs → chunk-XVDD6JEU.cjs} +6 -6
  192. package/dist/{chunk-ZWCDB5PP.cjs → chunk-XWRQ7ZLT.cjs} +1 -1
  193. package/dist/{chunk-N2BTMKF2.cjs → chunk-Z35Q432P.cjs} +4 -4
  194. package/dist/{chunk-VSUMJX6Z.cjs → chunk-ZC5VDX4W.cjs} +1 -1
  195. package/dist/{chunk-ZPP7LTHP.js → chunk-ZCMFLRZS.js} +2 -2
  196. package/dist/{chunk-5PR7UWIZ.cjs → chunk-ZGDAYWWC.cjs} +10 -10
  197. package/dist/{chunk-NJCHFXGC.js → chunk-ZTIECMCF.js} +455 -204
  198. package/dist/index.cjs +177 -173
  199. package/dist/index.d.cts +3 -3
  200. package/dist/index.d.ts +3 -3
  201. package/dist/index.js +48 -48
  202. package/dist/styles.css +82 -2
  203. package/dist/{tokens-EF34LSWI.css → tokens-RGFJKRC7.css} +21 -0
  204. package/dist/tokens.css +21 -0
  205. package/docs/llms/autocomplete.md +6 -0
  206. package/docs/llms/button.md +16 -4
  207. package/docs/llms/card.md +2 -2
  208. package/docs/llms/commandpalette.md +6 -0
  209. package/docs/llms/contextmenu.md +6 -0
  210. package/docs/llms/form.md +6 -0
  211. package/docs/llms/inputnumber.md +6 -0
  212. package/docs/llms/splitter.md +6 -0
  213. package/docs/llms/statusbar.md +6 -0
  214. package/docs/llms/tablepro.md +2 -0
  215. package/docs/llms/textarea.md +83 -0
  216. package/docs/llms/themepanel.md +26 -5
  217. package/docs/llms/timeline.md +6 -0
  218. package/docs/llms/typography.md +1 -1
  219. package/docs/llms.md +2 -1
  220. package/package.json +51 -1
  221. package/dist/chunk-D64IPDUE.cjs +0 -28
  222. package/dist/chunk-GUZ2DNDC.js +0 -26
@@ -1,17 +1,17 @@
1
1
  'use strict';
2
2
 
3
- var chunkZWCDB5PP_cjs = require('./chunk-ZWCDB5PP.cjs');
3
+ var chunkXWRQ7ZLT_cjs = require('./chunk-XWRQ7ZLT.cjs');
4
4
  var chunk6EOSMK34_cjs = require('./chunk-6EOSMK34.cjs');
5
- var chunkN2COYOXE_cjs = require('./chunk-N2COYOXE.cjs');
6
- var chunk6GQPF3EI_cjs = require('./chunk-6GQPF3EI.cjs');
7
- var chunkVSUMJX6Z_cjs = require('./chunk-VSUMJX6Z.cjs');
8
- var chunkMYHBC3HA_cjs = require('./chunk-MYHBC3HA.cjs');
9
- var chunkVAXWWJJP_cjs = require('./chunk-VAXWWJJP.cjs');
10
- var chunk2ZADGBUN_cjs = require('./chunk-2ZADGBUN.cjs');
11
- var chunk6LARTGLP_cjs = require('./chunk-6LARTGLP.cjs');
12
- require('./tokens-EF34LSWI.css');
5
+ var chunkDGB6KVU3_cjs = require('./chunk-DGB6KVU3.cjs');
6
+ var chunkHFM4YKM5_cjs = require('./chunk-HFM4YKM5.cjs');
7
+ var chunkZC5VDX4W_cjs = require('./chunk-ZC5VDX4W.cjs');
8
+ var chunkXPV672EI_cjs = require('./chunk-XPV672EI.cjs');
9
+ var chunk7OYMY22O_cjs = require('./chunk-7OYMY22O.cjs');
10
+ var chunkS4CZ3VO6_cjs = require('./chunk-S4CZ3VO6.cjs');
11
+ var chunkGJAEGIPM_cjs = require('./chunk-GJAEGIPM.cjs');
12
+ require('./tokens-RGFJKRC7.css');
13
13
  require('./shared-NJHRNLRH.css');
14
- require('./ThemePanel-76LB3YA5.css');
14
+ require('./ThemePanel-TEHB2JCQ.css');
15
15
  var React = require('react');
16
16
  var jsxRuntime = require('react/jsx-runtime');
17
17
 
@@ -72,7 +72,8 @@ var DEFAULT_SECTIONS = [
72
72
  "shadow",
73
73
  "radius",
74
74
  "font",
75
- "density"
75
+ "density",
76
+ "advanced"
76
77
  ];
77
78
  var DEFAULT_MODE_OPTIONS = [
78
79
  { key: "light", label: "\u6D45\u8272" },
@@ -123,7 +124,7 @@ var ACCENT_PALETTE_FIELDS = [
123
124
  function accentFromPreset(preset) {
124
125
  const accent = preset?.accent ?? "sky";
125
126
  if (typeof accent === "string") {
126
- return chunkN2COYOXE_cjs.ACCENT_PRESETS[accent]?.accent ?? accent;
127
+ return chunkDGB6KVU3_cjs.ACCENT_PRESETS[accent]?.accent ?? accent;
127
128
  }
128
129
  return accent.accent;
129
130
  }
@@ -147,6 +148,10 @@ function createThemeKey(label, themes, prefix) {
147
148
  }
148
149
  return key;
149
150
  }
151
+ function createSaveAsLabel(label, fallback) {
152
+ const base = label.trim() || fallback.trim() || "\u81EA\u5B9A\u4E49\u4E3B\u9898";
153
+ return `${base} \u526F\u672C`;
154
+ }
150
155
  var clampColor = (value) => Math.min(1, Math.max(0, value));
151
156
  function normalizeHexColor(input) {
152
157
  const value = input.trim().replace(/^#/, "");
@@ -253,6 +258,12 @@ function defaultBaseTokens(base) {
253
258
  const tokens = THEME_PANEL_DEFAULT_THEME_PRESETS[base].tokens;
254
259
  return { ...tokens };
255
260
  }
261
+ function mergeBaseTokens(base, tokens) {
262
+ return {
263
+ ...defaultBaseTokens(base),
264
+ ...tokens ?? {}
265
+ };
266
+ }
256
267
  function createDraftSurfaceTokens(surface, base, sourceSurface, sourceTokens) {
257
268
  if (sameHexColor(surface, sourceSurface)) return { ...sourceTokens };
258
269
  const current = hexToRgbColor(surface);
@@ -301,8 +312,8 @@ function fontConfigToText(font) {
301
312
  return typeof font === "string" ? font : JSON.stringify(font);
302
313
  }
303
314
  function fontToStack(font) {
304
- if (typeof font === "string") return chunkN2COYOXE_cjs.FONT_STACKS[font] ?? font;
305
- return font.sans ?? font.display ?? chunkN2COYOXE_cjs.FONT_STACKS.system;
315
+ if (typeof font === "string") return chunkDGB6KVU3_cjs.FONT_STACKS[font] ?? font;
316
+ return font.sans ?? font.display ?? chunkDGB6KVU3_cjs.FONT_STACKS.system;
306
317
  }
307
318
  function tokenPickerValue(value, fallback) {
308
319
  return cssColorToHex(value ?? fallback, fallback);
@@ -328,18 +339,23 @@ var ThemePanel = React__namespace.forwardRef(
328
339
  onCreateTheme,
329
340
  allowDeleteTheme = true,
330
341
  onDeleteTheme,
342
+ allowUpdateTheme = true,
343
+ onUpdateTheme,
331
344
  showReset = true,
332
345
  compact,
333
346
  className = "",
334
347
  ...rest
335
348
  }, ref) => {
336
- const theme = chunkN2COYOXE_cjs.useTheme();
349
+ const theme = chunkDGB6KVU3_cjs.useTheme();
337
350
  const rootRef = React__namespace.useRef(null);
338
351
  const previewSnapshotRef = React__namespace.useRef(null);
339
352
  const updateThemeRef = React__namespace.useRef(theme.update);
340
353
  updateThemeRef.current = theme.update;
341
354
  const [customAccent, setCustomAccent] = React__namespace.useState(defaultCustomAccent);
342
355
  const [createdThemeMeta, setCreatedThemeMeta] = React__namespace.useState({});
356
+ const [advancedOpen, setAdvancedOpen] = React__namespace.useState(false);
357
+ const [saveAsName, setSaveAsName] = React__namespace.useState("");
358
+ const [saveAsDescription, setSaveAsDescription] = React__namespace.useState("");
343
359
  const [isCreatingTheme, setIsCreatingTheme] = React__namespace.useState(false);
344
360
  const [previewDraft, setPreviewDraft] = React__namespace.useState(true);
345
361
  const [draftName, setDraftName] = React__namespace.useState(defaultCreateThemeName);
@@ -366,6 +382,7 @@ var ThemePanel = React__namespace.forwardRef(
366
382
  const [draftFont, setDraftFont] = React__namespace.useState("sf");
367
383
  const [createMode, setCreateMode] = React__namespace.useState("simple");
368
384
  const [advancedFontMode, setAdvancedFontMode] = React__namespace.useState("preset");
385
+ const [liveAdvancedFontMode, setLiveAdvancedFontMode] = React__namespace.useState("preset");
369
386
  const [draftBasePresets, setDraftBasePresets] = React__namespace.useState(() => ({
370
387
  light: THEME_PANEL_DEFAULT_THEME_PRESETS.light,
371
388
  dark: THEME_PANEL_DEFAULT_THEME_PRESETS.dark
@@ -375,6 +392,9 @@ var ThemePanel = React__namespace.forwardRef(
375
392
  () => /* @__PURE__ */ new Set(["system", ...THEME_PANEL_DEFAULT_PRESET_OPTIONS.map((option) => String(option.key))]),
376
393
  []
377
394
  );
395
+ React__namespace.useEffect(() => {
396
+ setLiveAdvancedFontMode(toFontKey(theme.font) === theme.font ? "preset" : "custom");
397
+ }, [theme.font]);
378
398
  const setRootRef = React__namespace.useCallback(
379
399
  (node) => {
380
400
  rootRef.current = node;
@@ -413,6 +433,17 @@ var ThemePanel = React__namespace.forwardRef(
413
433
  }));
414
434
  return [...builtIns, ...customOptions];
415
435
  }, [createdThemeMeta, presetOptions, theme.themes]);
436
+ const activePresetOption = React__namespace.useMemo(
437
+ () => resolvedPresetOptions.find((option) => String(option.key) === modeValue),
438
+ [modeValue, resolvedPresetOptions]
439
+ );
440
+ const liveAdvancedTokens = React__namespace.useMemo(
441
+ () => mergeBaseTokens(theme.colorScheme, theme.tokens),
442
+ [theme.colorScheme, theme.tokens]
443
+ );
444
+ const isCurrentSavedTheme = !protectedPresetKeys.has(modeValue) && Object.prototype.hasOwnProperty.call(theme.themes, modeValue);
445
+ const canUpdateCurrentTheme = allowUpdateTheme && isCurrentSavedTheme;
446
+ const canSaveCurrentThemeAsNew = allowCreateTheme;
416
447
  React__namespace.useEffect(() => {
417
448
  if (!isCreatingTheme || !previewDraft) return;
418
449
  updateThemeRef.current({
@@ -512,6 +543,123 @@ var ThemePanel = React__namespace.forwardRef(
512
543
  preset
513
544
  });
514
545
  };
546
+ const getActiveThemeMeta = () => {
547
+ const preset = theme.themes[modeValue] ?? theme.activeTheme ?? activePresetOption?.preset;
548
+ const fallbackLabel = preset?.label ?? fallbackPresetLabel(modeValue);
549
+ const fallbackDescription = preset?.description ?? (theme.colorScheme === "dark" ? "\u6DF1\u8272" : "\u6D45\u8272");
550
+ return {
551
+ key: modeValue,
552
+ label: nodeToText(activePresetOption?.label, fallbackLabel),
553
+ description: nodeToText(activePresetOption?.description, fallbackDescription)
554
+ };
555
+ };
556
+ const getAdvancedThemeName = () => {
557
+ const label = getActiveThemeMeta().label;
558
+ return isCurrentSavedTheme ? label || defaultCreateThemeName : createSaveAsLabel(label, defaultCreateThemeName);
559
+ };
560
+ const getAdvancedThemeDescription = () => {
561
+ const description2 = getActiveThemeMeta().description;
562
+ if (isCurrentSavedTheme) return description2;
563
+ return theme.colorScheme === "dark" ? "\u53E6\u5B58\u6697" : "\u53E6\u5B58\u4EAE";
564
+ };
565
+ const suggestedSaveAsName = getAdvancedThemeName();
566
+ const suggestedSaveAsDescription = getAdvancedThemeDescription();
567
+ React__namespace.useEffect(() => {
568
+ if (!advancedOpen) return;
569
+ setSaveAsName(getAdvancedThemeName());
570
+ setSaveAsDescription(getAdvancedThemeDescription());
571
+ }, [
572
+ activePresetOption,
573
+ advancedOpen,
574
+ defaultCreateThemeName,
575
+ isCurrentSavedTheme,
576
+ modeValue,
577
+ theme.activeTheme,
578
+ theme.colorScheme,
579
+ theme.themes
580
+ ]);
581
+ const createPresetFromCurrentTheme = (meta, basePreset, tokens = theme.tokens) => ({
582
+ ...basePreset,
583
+ label: meta.label,
584
+ description: meta.description,
585
+ base: theme.colorScheme,
586
+ accent: theme.accent === "custom" ? { ...theme.accentPalette } : theme.accent,
587
+ density: theme.density,
588
+ intensity: theme.intensity,
589
+ radius: theme.radius,
590
+ font: theme.font,
591
+ tokens: { ...tokens }
592
+ });
593
+ const updateLiveBase = (base) => {
594
+ clearCreateState();
595
+ if (theme.mode === "light" || theme.mode === "dark") {
596
+ applyMode(base);
597
+ return;
598
+ }
599
+ theme.update({ colorScheme: base });
600
+ };
601
+ const updateLiveToken = (key, value) => {
602
+ clearCreateState();
603
+ theme.setTokens({ ...theme.tokens, [key]: value });
604
+ };
605
+ const updateLiveAccentSlot = (key, value) => {
606
+ clearCreateState();
607
+ const nextPalette = { ...theme.accentPalette, [key]: value };
608
+ theme.setAccent(nextPalette);
609
+ if (key === "accent") setCustomAccent(cssColorToHex(value, customAccent));
610
+ };
611
+ const saveCurrentThemeUpdate = () => {
612
+ if (!canUpdateCurrentTheme) return;
613
+ const key = modeValue;
614
+ const previousPreset = theme.themes[key];
615
+ const currentMeta = getActiveThemeMeta();
616
+ const meta = {
617
+ ...currentMeta,
618
+ label: saveAsName.trim() || currentMeta.label || defaultCreateThemeName || fallbackPresetLabel(key),
619
+ description: saveAsDescription.trim()
620
+ };
621
+ const preset = createPresetFromCurrentTheme(meta, previousPreset);
622
+ const presetOption = { key, label: meta.label, description: meta.description, preset };
623
+ const nextThemes = { ...theme.themes, [key]: preset };
624
+ theme.update({
625
+ themes: nextThemes,
626
+ mode: key,
627
+ colorScheme: preset.base,
628
+ accent: preset.accent,
629
+ density: preset.density,
630
+ intensity: preset.intensity,
631
+ radius: preset.radius,
632
+ font: preset.font,
633
+ tokens: preset.tokens
634
+ });
635
+ setCreatedThemeMeta((current) => ({ ...current, [key]: meta }));
636
+ onUpdateTheme?.({ ...meta, preset, previousPreset, presetOption });
637
+ };
638
+ const saveCurrentThemeAsNew = () => {
639
+ if (!canSaveCurrentThemeAsNew) return;
640
+ clearCreateState();
641
+ const sourceMeta = getActiveThemeMeta();
642
+ const label = saveAsName.trim() || (isCurrentSavedTheme ? sourceMeta.label || defaultCreateThemeName : createSaveAsLabel(sourceMeta.label, defaultCreateThemeName));
643
+ const description2 = saveAsDescription.trim();
644
+ const key = createThemeKey(label, theme.themes, createThemeKeyPrefix);
645
+ const meta = { key, label, description: description2 };
646
+ const preset = createPresetFromCurrentTheme(meta, void 0, liveAdvancedTokens);
647
+ const presetOption = { key, label, description: description2, preset };
648
+ const nextThemes = { ...theme.themes, [String(key)]: preset };
649
+ setCreatedThemeMeta((current) => ({ ...current, [String(key)]: meta }));
650
+ theme.update({
651
+ themes: nextThemes,
652
+ mode: key,
653
+ colorScheme: preset.base,
654
+ accent: preset.accent,
655
+ density: preset.density,
656
+ intensity: preset.intensity,
657
+ radius: preset.radius,
658
+ font: preset.font,
659
+ tokens: preset.tokens
660
+ });
661
+ onCreateTheme?.({ ...meta, preset, presetOption });
662
+ };
515
663
  const beginCreateTheme = () => {
516
664
  const root = rootRef.current;
517
665
  const base = theme.colorScheme;
@@ -565,6 +713,7 @@ var ThemePanel = React__namespace.forwardRef(
565
713
  setCreateMode("simple");
566
714
  setCustomAccent(accent);
567
715
  setPreviewDraft(true);
716
+ setAdvancedOpen(false);
568
717
  setIsCreatingTheme(true);
569
718
  };
570
719
  const cancelCreateTheme = () => {
@@ -650,10 +799,196 @@ var ThemePanel = React__namespace.forwardRef(
650
799
  const updateThemeToken = (key, value) => {
651
800
  theme.setTokens({ ...theme.tokens, [key]: value });
652
801
  };
802
+ const renderAdvancedEditor = ({
803
+ font,
804
+ fontMode,
805
+ tokens,
806
+ accentPalette,
807
+ surfaceFallback,
808
+ accentFallback,
809
+ onFontModeChange,
810
+ onFontChange,
811
+ onTokenChange,
812
+ onAccentSlotChange
813
+ }) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-advanced", children: [
814
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-advanced-section compact", children: [
815
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-advanced-title", children: [
816
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: "\u5B57\u4F53" }),
817
+ /* @__PURE__ */ jsxRuntime.jsx("small", { children: fontMode === "preset" ? "\u9009\u62E9\u5185\u7F6E\u5B57\u4F53" : "\u586B\u5199 CSS font-family" })
818
+ ] }),
819
+ /* @__PURE__ */ jsxRuntime.jsx(
820
+ chunkZC5VDX4W_cjs.RadioGroup,
821
+ {
822
+ className: "theme-panel-create-mode",
823
+ variant: "segmented",
824
+ size: "sm",
825
+ value: fontMode,
826
+ options: ADVANCED_FONT_MODE_OPTIONS.map((option) => ({
827
+ value: option.value,
828
+ label: option.label
829
+ })),
830
+ onChange: (value) => {
831
+ onFontModeChange(value);
832
+ if (value === "preset") onFontChange(toFontKey(font));
833
+ }
834
+ }
835
+ ),
836
+ fontMode === "custom" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-create-field", children: [
837
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: "\u5B57\u4F53\u6808" }),
838
+ /* @__PURE__ */ jsxRuntime.jsx(
839
+ chunk7OYMY22O_cjs.Input,
840
+ {
841
+ size: "sm",
842
+ value: fontConfigToText(font),
843
+ onValueChange: (value) => onFontChange(value || "system"),
844
+ placeholder: "CSS font-family"
845
+ }
846
+ )
847
+ ] })
848
+ ] }),
849
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-advanced-section", children: [
850
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-advanced-title", children: [
851
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: "\u8868\u9762 tokens" }),
852
+ /* @__PURE__ */ jsxRuntime.jsx("small", { children: "\u5B8C\u6574\u8986\u5199 --bg / --fg" })
853
+ ] }),
854
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "theme-panel-token-grid", children: SURFACE_TOKEN_FIELDS.map((field) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-token-field", children: [
855
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "theme-panel-token-label", children: [
856
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: field.label }),
857
+ /* @__PURE__ */ jsxRuntime.jsxs("code", { children: [
858
+ "--",
859
+ field.key
860
+ ] })
861
+ ] }),
862
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "theme-panel-token-input", children: [
863
+ /* @__PURE__ */ jsxRuntime.jsx(
864
+ chunkXPV672EI_cjs.ColorPicker,
865
+ {
866
+ className: "theme-panel-token-picker",
867
+ value: tokenPickerValue(tokens[field.key], surfaceFallback),
868
+ onChange: (value) => onTokenChange(field.key, value),
869
+ placement: "left",
870
+ "aria-label": `\u9009\u62E9 ${field.label}`,
871
+ children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "theme-panel-token-swatch", style: { background: tokens[field.key] } })
872
+ }
873
+ ),
874
+ /* @__PURE__ */ jsxRuntime.jsx(
875
+ chunk7OYMY22O_cjs.Input,
876
+ {
877
+ size: "sm",
878
+ value: tokens[field.key] ?? "",
879
+ onValueChange: (value) => onTokenChange(field.key, value)
880
+ }
881
+ )
882
+ ] })
883
+ ] }, field.key)) })
884
+ ] }),
885
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-advanced-section", children: [
886
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-advanced-title", children: [
887
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: "\u9634\u5F71\u7CFB\u7EDF" }),
888
+ /* @__PURE__ */ jsxRuntime.jsx("small", { children: "\u6697/\u4EAE\u9634\u5F71\u4E0E\u5C42\u7EA7\u7F29\u653E" })
889
+ ] }),
890
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "theme-panel-token-grid", children: SHADOW_TOKEN_FIELDS.map(
891
+ (field) => field.kind === "color" ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-token-field", children: [
892
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "theme-panel-token-label", children: [
893
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: field.label }),
894
+ /* @__PURE__ */ jsxRuntime.jsxs("code", { children: [
895
+ "--",
896
+ field.key
897
+ ] })
898
+ ] }),
899
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "theme-panel-token-input", children: [
900
+ /* @__PURE__ */ jsxRuntime.jsx(
901
+ chunkXPV672EI_cjs.ColorPicker,
902
+ {
903
+ className: "theme-panel-token-picker",
904
+ value: tokenPickerValue(tokens[field.key], surfaceFallback),
905
+ onChange: (value) => onTokenChange(field.key, value),
906
+ placement: "left",
907
+ "aria-label": `\u9009\u62E9 ${field.label}`,
908
+ children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "theme-panel-token-swatch", style: { background: tokens[field.key] } })
909
+ }
910
+ ),
911
+ /* @__PURE__ */ jsxRuntime.jsx(
912
+ chunk7OYMY22O_cjs.Input,
913
+ {
914
+ size: "sm",
915
+ value: tokens[field.key] ?? "",
916
+ onValueChange: (value) => onTokenChange(field.key, value)
917
+ }
918
+ )
919
+ ] })
920
+ ] }, field.key) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-token-field scale", children: [
921
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "theme-panel-token-label", children: [
922
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: field.label }),
923
+ /* @__PURE__ */ jsxRuntime.jsxs("code", { children: [
924
+ "--",
925
+ field.key
926
+ ] })
927
+ ] }),
928
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "theme-panel-token-scale", children: [
929
+ /* @__PURE__ */ jsxRuntime.jsx(
930
+ chunk7OYMY22O_cjs.Input,
931
+ {
932
+ size: "sm",
933
+ value: tokens[field.key] ?? "1",
934
+ onValueChange: (value) => onTokenChange(field.key, value || "1")
935
+ }
936
+ ),
937
+ /* @__PURE__ */ jsxRuntime.jsx(
938
+ chunkXWRQ7ZLT_cjs.Slider,
939
+ {
940
+ value: parseScaleToken(tokens[field.key]),
941
+ onChange: (value) => onTokenChange(field.key, formatScaleToken(value)),
942
+ min: 0.6,
943
+ max: field.key === "shadow-float-scale" ? 1.8 : 1.6,
944
+ step: 0.05
945
+ }
946
+ )
947
+ ] })
948
+ ] }, field.key)
949
+ ) })
950
+ ] }),
951
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-advanced-section", children: [
952
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-advanced-title", children: [
953
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: "\u5F3A\u8C03 palette" }),
954
+ /* @__PURE__ */ jsxRuntime.jsx("small", { children: "\u5B8C\u6574\u8986\u5199 accent / ink / soft / glow" })
955
+ ] }),
956
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "theme-panel-token-grid", children: ACCENT_PALETTE_FIELDS.map((field) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-token-field", children: [
957
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "theme-panel-token-label", children: [
958
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: field.label }),
959
+ /* @__PURE__ */ jsxRuntime.jsxs("code", { children: [
960
+ "accent.",
961
+ field.key
962
+ ] })
963
+ ] }),
964
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "theme-panel-token-input", children: [
965
+ /* @__PURE__ */ jsxRuntime.jsx(
966
+ chunkXPV672EI_cjs.ColorPicker,
967
+ {
968
+ className: "theme-panel-token-picker",
969
+ value: tokenPickerValue(accentPalette[field.key], accentFallback),
970
+ onChange: (value) => onAccentSlotChange(field.key, value),
971
+ placement: "left",
972
+ "aria-label": `\u9009\u62E9 ${field.label}`,
973
+ children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "theme-panel-token-swatch", style: { background: accentPalette[field.key] } })
974
+ }
975
+ ),
976
+ /* @__PURE__ */ jsxRuntime.jsx(
977
+ chunk7OYMY22O_cjs.Input,
978
+ {
979
+ size: "sm",
980
+ value: accentPalette[field.key],
981
+ onValueChange: (value) => onAccentSlotChange(field.key, value)
982
+ }
983
+ )
984
+ ] })
985
+ ] }, field.key)) })
986
+ ] })
987
+ ] });
653
988
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref: setRootRef, className: rootClass, ...rest, children: [
654
989
  (title || description) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-head", children: [
655
990
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-title", children: [
656
- /* @__PURE__ */ jsxRuntime.jsx(chunk6LARTGLP_cjs.Icon, { name: "sliders", size: 14 }),
991
+ /* @__PURE__ */ jsxRuntime.jsx(chunkGJAEGIPM_cjs.Icon, { name: "sliders", size: 14 }),
657
992
  title && /* @__PURE__ */ jsxRuntime.jsx("span", { children: title })
658
993
  ] }),
659
994
  description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "theme-panel-desc", children: description })
@@ -664,7 +999,7 @@ var ThemePanel = React__namespace.forwardRef(
664
999
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: theme.colorScheme })
665
1000
  ] }),
666
1001
  /* @__PURE__ */ jsxRuntime.jsx(
667
- chunkVSUMJX6Z_cjs.RadioGroup,
1002
+ chunkZC5VDX4W_cjs.RadioGroup,
668
1003
  {
669
1004
  variant: "segmented",
670
1005
  size: "sm",
@@ -689,7 +1024,7 @@ var ThemePanel = React__namespace.forwardRef(
689
1024
  const deletable = allowDeleteTheme && !protectedPresetKeys.has(key) && key in theme.themes;
690
1025
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `theme-panel-preset-shell ${deletable ? "deletable" : ""}`, children: [
691
1026
  /* @__PURE__ */ jsxRuntime.jsxs(
692
- chunk2ZADGBUN_cjs.Button,
1027
+ chunkS4CZ3VO6_cjs.Button,
693
1028
  {
694
1029
  type: "button",
695
1030
  variant: "ghost",
@@ -710,7 +1045,7 @@ var ThemePanel = React__namespace.forwardRef(
710
1045
  }
711
1046
  ),
712
1047
  deletable && /* @__PURE__ */ jsxRuntime.jsx(
713
- chunk2ZADGBUN_cjs.Button,
1048
+ chunkS4CZ3VO6_cjs.Button,
714
1049
  {
715
1050
  type: "button",
716
1051
  variant: "danger",
@@ -724,7 +1059,7 @@ var ThemePanel = React__namespace.forwardRef(
724
1059
  )
725
1060
  ] }, key);
726
1061
  }) }),
727
- allowCreateTheme && !isCreatingTheme && /* @__PURE__ */ jsxRuntime.jsx(chunk2ZADGBUN_cjs.Button, { type: "button", variant: "primary", size: "sm", icon: "plus", block: true, onClick: beginCreateTheme, children: "\u65B0\u5EFA\u4E3B\u9898" }),
1062
+ allowCreateTheme && !isCreatingTheme && /* @__PURE__ */ jsxRuntime.jsx(chunkS4CZ3VO6_cjs.Button, { type: "button", variant: "primary", size: "sm", icon: "plus", block: true, onClick: beginCreateTheme, children: "\u65B0\u5EFA\u4E3B\u9898" }),
728
1063
  allowCreateTheme && isCreatingTheme && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-create", children: [
729
1064
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-create-head", children: [
730
1065
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
@@ -732,7 +1067,7 @@ var ThemePanel = React__namespace.forwardRef(
732
1067
  /* @__PURE__ */ jsxRuntime.jsx("small", { children: previewDraft ? "\u5B9E\u65F6\u9884\u89C8\u4E2D" : "\u9884\u89C8\u5DF2\u6682\u505C" })
733
1068
  ] }),
734
1069
  /* @__PURE__ */ jsxRuntime.jsx(
735
- chunk6GQPF3EI_cjs.Switch,
1070
+ chunkHFM4YKM5_cjs.Switch,
736
1071
  {
737
1072
  size: "sm",
738
1073
  checked: previewDraft,
@@ -743,7 +1078,7 @@ var ThemePanel = React__namespace.forwardRef(
743
1078
  )
744
1079
  ] }),
745
1080
  /* @__PURE__ */ jsxRuntime.jsx(
746
- chunkVAXWWJJP_cjs.Input,
1081
+ chunk7OYMY22O_cjs.Input,
747
1082
  {
748
1083
  size: "sm",
749
1084
  value: draftName,
@@ -754,7 +1089,7 @@ var ThemePanel = React__namespace.forwardRef(
754
1089
  }
755
1090
  ),
756
1091
  /* @__PURE__ */ jsxRuntime.jsx(
757
- chunkVSUMJX6Z_cjs.RadioGroup,
1092
+ chunkZC5VDX4W_cjs.RadioGroup,
758
1093
  {
759
1094
  className: "theme-panel-create-mode",
760
1095
  variant: "segmented",
@@ -770,7 +1105,7 @@ var ThemePanel = React__namespace.forwardRef(
770
1105
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-create-field", children: [
771
1106
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: "\u57FA\u5E95" }),
772
1107
  /* @__PURE__ */ jsxRuntime.jsx(
773
- chunkVSUMJX6Z_cjs.RadioGroup,
1108
+ chunkZC5VDX4W_cjs.RadioGroup,
774
1109
  {
775
1110
  variant: "segmented",
776
1111
  size: "sm",
@@ -786,11 +1121,11 @@ var ThemePanel = React__namespace.forwardRef(
786
1121
  createMode === "simple" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-create-grid", children: [
787
1122
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-create-field", children: [
788
1123
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: "\u8868\u9762" }),
789
- /* @__PURE__ */ jsxRuntime.jsx(chunkMYHBC3HA_cjs.ColorPicker, { size: "sm", value: draftSurface, onChange: updateDraftSurface })
1124
+ /* @__PURE__ */ jsxRuntime.jsx(chunkXPV672EI_cjs.ColorPicker, { size: "sm", value: draftSurface, onChange: updateDraftSurface })
790
1125
  ] }),
791
1126
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-create-field", children: [
792
1127
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: "\u5F3A\u8C03" }),
793
- /* @__PURE__ */ jsxRuntime.jsx(chunkMYHBC3HA_cjs.ColorPicker, { size: "sm", value: draftAccent, onChange: updateDraftAccent })
1128
+ /* @__PURE__ */ jsxRuntime.jsx(chunkXPV672EI_cjs.ColorPicker, { size: "sm", value: draftAccent, onChange: updateDraftAccent })
794
1129
  ] })
795
1130
  ] }),
796
1131
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-create-sliders", children: [
@@ -798,7 +1133,7 @@ var ThemePanel = React__namespace.forwardRef(
798
1133
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: "\u9634\u5F71\u5F3A\u5EA6" }),
799
1134
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: draftIntensity })
800
1135
  ] }),
801
- /* @__PURE__ */ jsxRuntime.jsx(chunkZWCDB5PP_cjs.Slider, { value: draftIntensity, onChange: setDraftIntensity, min: 1, max: 10, step: 1 }),
1136
+ /* @__PURE__ */ jsxRuntime.jsx(chunkXWRQ7ZLT_cjs.Slider, { value: draftIntensity, onChange: setDraftIntensity, min: 1, max: 10, step: 1 }),
802
1137
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-label", children: [
803
1138
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: "\u5706\u89D2" }),
804
1139
  /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
@@ -806,12 +1141,12 @@ var ThemePanel = React__namespace.forwardRef(
806
1141
  "px"
807
1142
  ] })
808
1143
  ] }),
809
- /* @__PURE__ */ jsxRuntime.jsx(chunkZWCDB5PP_cjs.Slider, { value: draftRadius, onChange: setDraftRadius, min: 8, max: 36, step: 2 })
1144
+ /* @__PURE__ */ jsxRuntime.jsx(chunkXWRQ7ZLT_cjs.Slider, { value: draftRadius, onChange: setDraftRadius, min: 8, max: 36, step: 2 })
810
1145
  ] }),
811
1146
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-create-field", children: [
812
1147
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: "\u5BC6\u5EA6" }),
813
1148
  /* @__PURE__ */ jsxRuntime.jsx(
814
- chunkVSUMJX6Z_cjs.RadioGroup,
1149
+ chunkZC5VDX4W_cjs.RadioGroup,
815
1150
  {
816
1151
  variant: "segmented",
817
1152
  size: "sm",
@@ -824,7 +1159,7 @@ var ThemePanel = React__namespace.forwardRef(
824
1159
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-create-field", children: [
825
1160
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: "\u5B57\u4F53" }),
826
1161
  /* @__PURE__ */ jsxRuntime.jsx(
827
- chunkVSUMJX6Z_cjs.RadioGroup,
1162
+ chunkZC5VDX4W_cjs.RadioGroup,
828
1163
  {
829
1164
  variant: "segmented",
830
1165
  size: "sm",
@@ -834,199 +1169,18 @@ var ThemePanel = React__namespace.forwardRef(
834
1169
  }
835
1170
  )
836
1171
  ] }),
837
- createMode === "advanced" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-advanced", children: [
838
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-advanced-section compact", children: [
839
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-advanced-title", children: [
840
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: "\u5B57\u4F53" }),
841
- /* @__PURE__ */ jsxRuntime.jsx("small", { children: advancedFontMode === "preset" ? "\u9009\u62E9\u5185\u7F6E\u5B57\u4F53" : "\u586B\u5199 CSS font-family" })
842
- ] }),
843
- /* @__PURE__ */ jsxRuntime.jsx(
844
- chunkVSUMJX6Z_cjs.RadioGroup,
845
- {
846
- className: "theme-panel-create-mode",
847
- variant: "segmented",
848
- size: "sm",
849
- value: advancedFontMode,
850
- options: ADVANCED_FONT_MODE_OPTIONS.map((option) => ({
851
- value: option.value,
852
- label: option.label
853
- })),
854
- onChange: (value) => {
855
- setAdvancedFontMode(value);
856
- if (value === "preset") setDraftFont(toFontKey(draftFont));
857
- }
858
- }
859
- ),
860
- advancedFontMode === "custom" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-create-field", children: [
861
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: "\u5B57\u4F53\u6808" }),
862
- /* @__PURE__ */ jsxRuntime.jsx(
863
- chunkVAXWWJJP_cjs.Input,
864
- {
865
- size: "sm",
866
- value: fontConfigToText(draftFont),
867
- onValueChange: (value) => setDraftFont(value || "system"),
868
- placeholder: "CSS font-family"
869
- }
870
- )
871
- ] })
872
- ] }),
873
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-advanced-section", children: [
874
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-advanced-title", children: [
875
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: "\u8868\u9762 tokens" }),
876
- /* @__PURE__ */ jsxRuntime.jsx("small", { children: "\u5B8C\u6574\u8986\u5199 --bg / --fg" })
877
- ] }),
878
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "theme-panel-token-grid", children: SURFACE_TOKEN_FIELDS.map((field) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-token-field", children: [
879
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "theme-panel-token-label", children: [
880
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: field.label }),
881
- /* @__PURE__ */ jsxRuntime.jsxs("code", { children: [
882
- "--",
883
- field.key
884
- ] })
885
- ] }),
886
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "theme-panel-token-input", children: [
887
- /* @__PURE__ */ jsxRuntime.jsx(
888
- chunkMYHBC3HA_cjs.ColorPicker,
889
- {
890
- className: "theme-panel-token-picker",
891
- value: tokenPickerValue(draftTokens[field.key], draftSurface),
892
- onChange: (value) => updateDraftToken(field.key, value),
893
- placement: "left",
894
- "aria-label": `\u9009\u62E9 ${field.label}`,
895
- children: /* @__PURE__ */ jsxRuntime.jsx(
896
- "span",
897
- {
898
- className: "theme-panel-token-swatch",
899
- style: { background: draftTokens[field.key] }
900
- }
901
- )
902
- }
903
- ),
904
- /* @__PURE__ */ jsxRuntime.jsx(
905
- chunkVAXWWJJP_cjs.Input,
906
- {
907
- size: "sm",
908
- value: draftTokens[field.key] ?? "",
909
- onValueChange: (value) => updateDraftToken(field.key, value)
910
- }
911
- )
912
- ] })
913
- ] }, field.key)) })
914
- ] }),
915
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-advanced-section", children: [
916
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-advanced-title", children: [
917
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: "\u9634\u5F71\u7CFB\u7EDF" }),
918
- /* @__PURE__ */ jsxRuntime.jsx("small", { children: "\u6697/\u4EAE\u9634\u5F71\u4E0E\u5C42\u7EA7\u7F29\u653E" })
919
- ] }),
920
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "theme-panel-token-grid", children: SHADOW_TOKEN_FIELDS.map(
921
- (field) => field.kind === "color" ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-token-field", children: [
922
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "theme-panel-token-label", children: [
923
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: field.label }),
924
- /* @__PURE__ */ jsxRuntime.jsxs("code", { children: [
925
- "--",
926
- field.key
927
- ] })
928
- ] }),
929
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "theme-panel-token-input", children: [
930
- /* @__PURE__ */ jsxRuntime.jsx(
931
- chunkMYHBC3HA_cjs.ColorPicker,
932
- {
933
- className: "theme-panel-token-picker",
934
- value: tokenPickerValue(draftTokens[field.key], draftSurface),
935
- onChange: (value) => updateDraftToken(field.key, value),
936
- placement: "left",
937
- "aria-label": `\u9009\u62E9 ${field.label}`,
938
- children: /* @__PURE__ */ jsxRuntime.jsx(
939
- "span",
940
- {
941
- className: "theme-panel-token-swatch",
942
- style: { background: draftTokens[field.key] }
943
- }
944
- )
945
- }
946
- ),
947
- /* @__PURE__ */ jsxRuntime.jsx(
948
- chunkVAXWWJJP_cjs.Input,
949
- {
950
- size: "sm",
951
- value: draftTokens[field.key] ?? "",
952
- onValueChange: (value) => updateDraftToken(field.key, value)
953
- }
954
- )
955
- ] })
956
- ] }, field.key) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-token-field scale", children: [
957
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "theme-panel-token-label", children: [
958
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: field.label }),
959
- /* @__PURE__ */ jsxRuntime.jsxs("code", { children: [
960
- "--",
961
- field.key
962
- ] })
963
- ] }),
964
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "theme-panel-token-scale", children: [
965
- /* @__PURE__ */ jsxRuntime.jsx(
966
- chunkVAXWWJJP_cjs.Input,
967
- {
968
- size: "sm",
969
- value: draftTokens[field.key] ?? "1",
970
- onValueChange: (value) => updateDraftToken(field.key, value || "1")
971
- }
972
- ),
973
- /* @__PURE__ */ jsxRuntime.jsx(
974
- chunkZWCDB5PP_cjs.Slider,
975
- {
976
- value: parseScaleToken(draftTokens[field.key]),
977
- onChange: (value) => updateDraftToken(field.key, formatScaleToken(value)),
978
- min: 0.6,
979
- max: field.key === "shadow-float-scale" ? 1.8 : 1.6,
980
- step: 0.05
981
- }
982
- )
983
- ] })
984
- ] }, field.key)
985
- ) })
986
- ] }),
987
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-advanced-section", children: [
988
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-advanced-title", children: [
989
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: "\u5F3A\u8C03 palette" }),
990
- /* @__PURE__ */ jsxRuntime.jsx("small", { children: "\u5B8C\u6574\u8986\u5199 accent / ink / soft / glow" })
991
- ] }),
992
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "theme-panel-token-grid", children: ACCENT_PALETTE_FIELDS.map((field) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-token-field", children: [
993
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "theme-panel-token-label", children: [
994
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: field.label }),
995
- /* @__PURE__ */ jsxRuntime.jsxs("code", { children: [
996
- "accent.",
997
- field.key
998
- ] })
999
- ] }),
1000
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "theme-panel-token-input", children: [
1001
- /* @__PURE__ */ jsxRuntime.jsx(
1002
- chunkMYHBC3HA_cjs.ColorPicker,
1003
- {
1004
- className: "theme-panel-token-picker",
1005
- value: tokenPickerValue(draftAccentPalette[field.key], draftAccent),
1006
- onChange: (value) => updateDraftAccentSlot(field.key, value),
1007
- placement: "left",
1008
- "aria-label": `\u9009\u62E9 ${field.label}`,
1009
- children: /* @__PURE__ */ jsxRuntime.jsx(
1010
- "span",
1011
- {
1012
- className: "theme-panel-token-swatch",
1013
- style: { background: draftAccentPalette[field.key] }
1014
- }
1015
- )
1016
- }
1017
- ),
1018
- /* @__PURE__ */ jsxRuntime.jsx(
1019
- chunkVAXWWJJP_cjs.Input,
1020
- {
1021
- size: "sm",
1022
- value: draftAccentPalette[field.key],
1023
- onValueChange: (value) => updateDraftAccentSlot(field.key, value)
1024
- }
1025
- )
1026
- ] })
1027
- ] }, field.key)) })
1028
- ] })
1029
- ] }),
1172
+ createMode === "advanced" && renderAdvancedEditor({
1173
+ font: draftFont,
1174
+ fontMode: advancedFontMode,
1175
+ tokens: draftTokens,
1176
+ accentPalette: draftAccentPalette,
1177
+ surfaceFallback: draftSurface,
1178
+ accentFallback: draftAccent,
1179
+ onFontModeChange: setAdvancedFontMode,
1180
+ onFontChange: setDraftFont,
1181
+ onTokenChange: updateDraftToken,
1182
+ onAccentSlotChange: updateDraftAccentSlot
1183
+ }),
1030
1184
  /* @__PURE__ */ jsxRuntime.jsxs(
1031
1185
  "div",
1032
1186
  {
@@ -1044,7 +1198,7 @@ var ThemePanel = React__namespace.forwardRef(
1044
1198
  },
1045
1199
  children: [
1046
1200
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "theme-panel-create-preview-label", children: [
1047
- /* @__PURE__ */ jsxRuntime.jsx(chunk6LARTGLP_cjs.Icon, { name: "palette", size: 13 }),
1201
+ /* @__PURE__ */ jsxRuntime.jsx(chunkGJAEGIPM_cjs.Icon, { name: "palette", size: 13 }),
1048
1202
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: draftName.trim() || "\u81EA\u5B9A\u4E49\u4E3B\u9898" })
1049
1203
  ] }),
1050
1204
  /* @__PURE__ */ jsxRuntime.jsx("i", { "aria-hidden": true })
@@ -1052,9 +1206,9 @@ var ThemePanel = React__namespace.forwardRef(
1052
1206
  }
1053
1207
  ),
1054
1208
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-create-actions", children: [
1055
- /* @__PURE__ */ jsxRuntime.jsx(chunk2ZADGBUN_cjs.Button, { type: "button", variant: "ghost", size: "sm", icon: "x", onClick: cancelCreateTheme, children: "\u53D6\u6D88" }),
1209
+ /* @__PURE__ */ jsxRuntime.jsx(chunkS4CZ3VO6_cjs.Button, { type: "button", variant: "ghost", size: "sm", icon: "x", onClick: cancelCreateTheme, children: "\u53D6\u6D88" }),
1056
1210
  /* @__PURE__ */ jsxRuntime.jsx(
1057
- chunk2ZADGBUN_cjs.Button,
1211
+ chunkS4CZ3VO6_cjs.Button,
1058
1212
  {
1059
1213
  type: "button",
1060
1214
  variant: "primary",
@@ -1074,20 +1228,20 @@ var ThemePanel = React__namespace.forwardRef(
1074
1228
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: theme.accent === "custom" ? customAccent : theme.accent })
1075
1229
  ] }),
1076
1230
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-swatches", children: [
1077
- Object.keys(chunkN2COYOXE_cjs.ACCENT_PRESETS).map((key) => /* @__PURE__ */ jsxRuntime.jsx(
1078
- chunk2ZADGBUN_cjs.Button,
1231
+ Object.keys(chunkDGB6KVU3_cjs.ACCENT_PRESETS).map((key) => /* @__PURE__ */ jsxRuntime.jsx(
1232
+ chunkS4CZ3VO6_cjs.Button,
1079
1233
  {
1080
1234
  type: "button",
1081
1235
  size: "sm",
1082
1236
  "aria-label": key,
1083
1237
  className: `theme-panel-swatch ${theme.accent === key ? "active" : ""}`,
1084
- style: { background: chunkN2COYOXE_cjs.ACCENT_PRESETS[key].accent },
1238
+ style: { background: chunkDGB6KVU3_cjs.ACCENT_PRESETS[key].accent },
1085
1239
  onClick: () => theme.setAccent(key)
1086
1240
  },
1087
1241
  key
1088
1242
  )),
1089
1243
  /* @__PURE__ */ jsxRuntime.jsx(
1090
- chunkMYHBC3HA_cjs.ColorPicker,
1244
+ chunkXPV672EI_cjs.ColorPicker,
1091
1245
  {
1092
1246
  size: "sm",
1093
1247
  value: customAccent,
@@ -1104,7 +1258,7 @@ var ThemePanel = React__namespace.forwardRef(
1104
1258
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: "\u9634\u5F71\u5F3A\u5EA6" }),
1105
1259
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: theme.intensity })
1106
1260
  ] }),
1107
- /* @__PURE__ */ jsxRuntime.jsx(chunkZWCDB5PP_cjs.Slider, { value: theme.intensity, onChange: theme.setIntensity, min: 1, max: 10, step: 1 }),
1261
+ /* @__PURE__ */ jsxRuntime.jsx(chunkXWRQ7ZLT_cjs.Slider, { value: theme.intensity, onChange: theme.setIntensity, min: 1, max: 10, step: 1 }),
1108
1262
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-label", children: [
1109
1263
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: "\u9634\u5F71\u6269\u6563" }),
1110
1264
  /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
@@ -1113,7 +1267,7 @@ var ThemePanel = React__namespace.forwardRef(
1113
1267
  ] })
1114
1268
  ] }),
1115
1269
  /* @__PURE__ */ jsxRuntime.jsx(
1116
- chunkZWCDB5PP_cjs.Slider,
1270
+ chunkXWRQ7ZLT_cjs.Slider,
1117
1271
  {
1118
1272
  value: shadowScale,
1119
1273
  onChange: (value) => updateThemeToken("shadow-scale", formatScaleToken(value)),
@@ -1130,7 +1284,7 @@ var ThemePanel = React__namespace.forwardRef(
1130
1284
  ] })
1131
1285
  ] }),
1132
1286
  /* @__PURE__ */ jsxRuntime.jsx(
1133
- chunkZWCDB5PP_cjs.Slider,
1287
+ chunkXWRQ7ZLT_cjs.Slider,
1134
1288
  {
1135
1289
  value: shadowFloatScale,
1136
1290
  onChange: (value) => updateThemeToken("shadow-float-scale", formatScaleToken(value)),
@@ -1145,7 +1299,7 @@ var ThemePanel = React__namespace.forwardRef(
1145
1299
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: "\u9634\u5F71" }),
1146
1300
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: theme.intensity })
1147
1301
  ] }),
1148
- /* @__PURE__ */ jsxRuntime.jsx(chunkZWCDB5PP_cjs.Slider, { value: theme.intensity, onChange: theme.setIntensity, min: 1, max: 10, step: 1 })
1302
+ /* @__PURE__ */ jsxRuntime.jsx(chunkXWRQ7ZLT_cjs.Slider, { value: theme.intensity, onChange: theme.setIntensity, min: 1, max: 10, step: 1 })
1149
1303
  ] }),
1150
1304
  sections.includes("radius") && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-row", children: [
1151
1305
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-label", children: [
@@ -1155,12 +1309,12 @@ var ThemePanel = React__namespace.forwardRef(
1155
1309
  "px"
1156
1310
  ] })
1157
1311
  ] }),
1158
- /* @__PURE__ */ jsxRuntime.jsx(chunkZWCDB5PP_cjs.Slider, { value: theme.radius, onChange: theme.setRadius, min: 8, max: 36, step: 2 })
1312
+ /* @__PURE__ */ jsxRuntime.jsx(chunkXWRQ7ZLT_cjs.Slider, { value: theme.radius, onChange: theme.setRadius, min: 8, max: 36, step: 2 })
1159
1313
  ] }),
1160
1314
  sections.includes("font") && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-row", children: [
1161
1315
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "theme-panel-label", children: /* @__PURE__ */ jsxRuntime.jsx("span", { children: "\u5B57\u4F53" }) }),
1162
1316
  /* @__PURE__ */ jsxRuntime.jsx(
1163
- chunkVSUMJX6Z_cjs.RadioGroup,
1317
+ chunkZC5VDX4W_cjs.RadioGroup,
1164
1318
  {
1165
1319
  variant: "segmented",
1166
1320
  size: "sm",
@@ -1173,7 +1327,7 @@ var ThemePanel = React__namespace.forwardRef(
1173
1327
  sections.includes("density") && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-row", children: [
1174
1328
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "theme-panel-label", children: /* @__PURE__ */ jsxRuntime.jsx("span", { children: "\u5BC6\u5EA6" }) }),
1175
1329
  /* @__PURE__ */ jsxRuntime.jsx(
1176
- chunkVSUMJX6Z_cjs.RadioGroup,
1330
+ chunkZC5VDX4W_cjs.RadioGroup,
1177
1331
  {
1178
1332
  variant: "segmented",
1179
1333
  size: "sm",
@@ -1183,7 +1337,104 @@ var ThemePanel = React__namespace.forwardRef(
1183
1337
  }
1184
1338
  )
1185
1339
  ] }),
1186
- showReset && /* @__PURE__ */ jsxRuntime.jsx(chunk2ZADGBUN_cjs.Button, { type: "button", variant: "ghost", size: "sm", icon: "reload", block: true, onClick: resetTheme, children: "\u91CD\u7F6E\u4E3B\u9898" })
1340
+ sections.includes("advanced") && !isCreatingTheme && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-row theme-panel-advanced-row", children: [
1341
+ /* @__PURE__ */ jsxRuntime.jsx(
1342
+ chunkS4CZ3VO6_cjs.Button,
1343
+ {
1344
+ type: "button",
1345
+ variant: "ghost",
1346
+ size: "sm",
1347
+ icon: "sliders",
1348
+ trailingIcon: advancedOpen ? "chevUp" : "chevDown",
1349
+ block: true,
1350
+ className: "theme-panel-advanced-toggle",
1351
+ onClick: () => setAdvancedOpen((open) => !open),
1352
+ "aria-expanded": advancedOpen,
1353
+ children: "\u9AD8\u7EA7\u8C03\u6574"
1354
+ }
1355
+ ),
1356
+ advancedOpen && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-live-advanced", children: [
1357
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-create-field", children: [
1358
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: "\u57FA\u5E95" }),
1359
+ /* @__PURE__ */ jsxRuntime.jsx(
1360
+ chunkZC5VDX4W_cjs.RadioGroup,
1361
+ {
1362
+ variant: "segmented",
1363
+ size: "sm",
1364
+ value: theme.colorScheme,
1365
+ options: [
1366
+ { value: "light", label: "\u6D45" },
1367
+ { value: "dark", label: "\u6DF1" }
1368
+ ],
1369
+ onChange: updateLiveBase
1370
+ }
1371
+ )
1372
+ ] }),
1373
+ renderAdvancedEditor({
1374
+ font: theme.font,
1375
+ fontMode: liveAdvancedFontMode,
1376
+ tokens: liveAdvancedTokens,
1377
+ accentPalette: theme.accentPalette,
1378
+ surfaceFallback: cssColorToHex(
1379
+ liveAdvancedTokens.bg ?? DEFAULT_SURFACE_BY_BASE[theme.colorScheme],
1380
+ DEFAULT_SURFACE_BY_BASE[theme.colorScheme]
1381
+ ),
1382
+ accentFallback: cssColorToHex(theme.accentPalette.accent, customAccent),
1383
+ onFontModeChange: setLiveAdvancedFontMode,
1384
+ onFontChange: (font) => theme.setFont(font),
1385
+ onTokenChange: updateLiveToken,
1386
+ onAccentSlotChange: updateLiveAccentSlot
1387
+ }),
1388
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-advanced-actions", children: [
1389
+ canSaveCurrentThemeAsNew && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-save-as-field", children: [
1390
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: isCurrentSavedTheme ? "\u4E3B\u9898\u540D" : "\u65B0\u4E3B\u9898\u540D" }),
1391
+ /* @__PURE__ */ jsxRuntime.jsx(
1392
+ chunk7OYMY22O_cjs.Input,
1393
+ {
1394
+ size: "sm",
1395
+ value: saveAsName,
1396
+ onValueChange: setSaveAsName,
1397
+ placeholder: suggestedSaveAsName,
1398
+ leadingIcon: "palette",
1399
+ allowClear: true
1400
+ }
1401
+ )
1402
+ ] }),
1403
+ canSaveCurrentThemeAsNew && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-save-as-field", children: [
1404
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: "\u526F\u6807\u9898" }),
1405
+ /* @__PURE__ */ jsxRuntime.jsx(
1406
+ chunk7OYMY22O_cjs.Input,
1407
+ {
1408
+ size: "sm",
1409
+ value: saveAsDescription,
1410
+ onValueChange: setSaveAsDescription,
1411
+ placeholder: suggestedSaveAsDescription,
1412
+ leadingIcon: "edit",
1413
+ allowClear: true
1414
+ }
1415
+ )
1416
+ ] }),
1417
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-advanced-footer", children: [
1418
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: isCurrentSavedTheme ? `\u5F53\u524D\u9884\u8BBE: ${getActiveThemeMeta().label}` : canSaveCurrentThemeAsNew ? "\u9ED8\u8BA4\u9884\u8BBE\u4F1A\u4FDD\u5B58\u4E3A\u65B0\u4E3B\u9898" : "\u5F53\u524D\u8C03\u6574\u4EC5\u8FD0\u884C\u65F6\u751F\u6548" }),
1419
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "theme-panel-advanced-buttons", children: [
1420
+ canUpdateCurrentTheme && /* @__PURE__ */ jsxRuntime.jsx(chunkS4CZ3VO6_cjs.Button, { type: "button", variant: "primary", size: "sm", icon: "check", onClick: saveCurrentThemeUpdate, children: "\u4FDD\u5B58\u4FEE\u6539" }),
1421
+ canSaveCurrentThemeAsNew && /* @__PURE__ */ jsxRuntime.jsx(
1422
+ chunkS4CZ3VO6_cjs.Button,
1423
+ {
1424
+ type: "button",
1425
+ variant: canUpdateCurrentTheme ? "ghost" : "primary",
1426
+ size: "sm",
1427
+ icon: "copy",
1428
+ onClick: saveCurrentThemeAsNew,
1429
+ children: isCurrentSavedTheme ? "\u53E6\u5B58\u4E3A" : "\u4FDD\u5B58\u4E3A\u65B0\u4E3B\u9898"
1430
+ }
1431
+ )
1432
+ ] })
1433
+ ] })
1434
+ ] })
1435
+ ] })
1436
+ ] }),
1437
+ showReset && /* @__PURE__ */ jsxRuntime.jsx(chunkS4CZ3VO6_cjs.Button, { type: "button", variant: "ghost", size: "sm", icon: "reload", block: true, onClick: resetTheme, children: "\u91CD\u7F6E\u4E3B\u9898" })
1187
1438
  ] });
1188
1439
  }
1189
1440
  );