@fangxinyan/lumina 0.6.3 → 0.6.5

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 (255) hide show
  1. package/dist/{Alert-QBKIDY5H.css → Alert-HVPI6L4V.css} +2 -2
  2. package/dist/Alert.cjs +3 -3
  3. package/dist/Alert.js +2 -2
  4. package/dist/{AppShell-RCALXUCZ.css → AppShell-FZCD4C56.css} +4 -4
  5. package/dist/AppShell.cjs +5 -5
  6. package/dist/AppShell.js +1 -1
  7. package/dist/{AutoComplete-P5KZMZO5.css → AutoComplete-4YZBMW4E.css} +2 -2
  8. package/dist/AutoComplete.cjs +5 -5
  9. package/dist/AutoComplete.js +4 -4
  10. package/dist/{Avatar-R5A4AFKZ.css → Avatar-TNPOHVY5.css} +1 -1
  11. package/dist/Avatar.cjs +2 -2
  12. package/dist/Avatar.js +1 -1
  13. package/dist/Badge.cjs +2 -2
  14. package/dist/Badge.js +1 -1
  15. package/dist/{Button-4Z3Q6KII.css → Button-TUMZUQLI.css} +11 -11
  16. package/dist/Button.cjs +3 -3
  17. package/dist/Button.js +2 -2
  18. package/dist/{Calendar-LHZELUDL.css → Calendar-RUTPKREW.css} +4 -4
  19. package/dist/Calendar.cjs +3 -3
  20. package/dist/Calendar.js +2 -2
  21. package/dist/{Card-6RMVIHWX.css → Card-MA6SV7D5.css} +6 -6
  22. package/dist/Card.cjs +2 -2
  23. package/dist/Card.js +1 -1
  24. package/dist/{Cascader-3BLLA7EN.css → Cascader-ANEQUPMI.css} +8 -8
  25. package/dist/Cascader.cjs +5 -5
  26. package/dist/Cascader.js +4 -4
  27. package/dist/{Checkbox-U5EUDSYS.css → Checkbox-EDNPZRIP.css} +3 -3
  28. package/dist/Checkbox.cjs +3 -3
  29. package/dist/Checkbox.js +2 -2
  30. package/dist/{Collapse-66U5YJFY.css → Collapse-UNBHEPYP.css} +2 -2
  31. package/dist/Collapse.cjs +3 -3
  32. package/dist/Collapse.js +2 -2
  33. package/dist/{ColorPicker-SDDQGHCM.css → ColorPicker-LPG6QPYF.css} +7 -7
  34. package/dist/ColorPicker.cjs +2 -2
  35. package/dist/ColorPicker.js +1 -1
  36. package/dist/{CommandPalette-T45DBMPY.css → CommandPalette-RTKWNH2D.css} +3 -3
  37. package/dist/CommandPalette.cjs +5 -5
  38. package/dist/CommandPalette.js +4 -4
  39. package/dist/{ContextMenu-FKW6CQW4.css → ContextMenu-WRR2SSWL.css} +3 -3
  40. package/dist/ContextMenu.cjs +2 -2
  41. package/dist/ContextMenu.js +1 -1
  42. package/dist/{Divider-OEE4Q2KS.css → Divider-RPQCVH3J.css} +2 -2
  43. package/dist/Divider.cjs +2 -2
  44. package/dist/Divider.js +1 -1
  45. package/dist/{Drawer-IPGB4CXH.css → Drawer-7N3URAJ6.css} +8 -5
  46. package/dist/Drawer.cjs +3 -3
  47. package/dist/Drawer.js +2 -2
  48. package/dist/{Empty-DC2LPORC.css → Empty-CZTRZMZQ.css} +1 -1
  49. package/dist/Empty.cjs +2 -2
  50. package/dist/Empty.js +1 -1
  51. package/dist/{Form-5GRVZNDO.css → Form-NGCQWTMZ.css} +1 -1
  52. package/dist/Form.cjs +4 -4
  53. package/dist/Form.js +1 -1
  54. package/dist/Icon.cjs +49 -49
  55. package/dist/Icon.js +1 -1
  56. package/dist/{Image-MRYQCRQ5.css → Image-SGSRTHQX.css} +5 -5
  57. package/dist/Image.cjs +6 -6
  58. package/dist/Image.js +2 -2
  59. package/dist/{Input-HUBJ55OH.css → Input-7GDPGP3E.css} +12 -12
  60. package/dist/Input.cjs +5 -5
  61. package/dist/Input.js +3 -3
  62. package/dist/InputNumber.cjs +5 -5
  63. package/dist/InputNumber.js +4 -4
  64. package/dist/{List-W5BW4D2P.css → List-LSMU5QAC.css} +3 -3
  65. package/dist/List.cjs +2 -2
  66. package/dist/List.js +1 -1
  67. package/dist/{Message-2MZ3LFPU.css → Message-H222YGR6.css} +1 -1
  68. package/dist/Message.cjs +6 -6
  69. package/dist/Message.js +2 -2
  70. package/dist/{Modal-2QNDW4SO.css → Modal-MCFDYVUQ.css} +3 -3
  71. package/dist/Modal.cjs +4 -4
  72. package/dist/Modal.js +3 -3
  73. package/dist/{Pagination-YIRYJUXP.css → Pagination-YSZSNFHG.css} +5 -5
  74. package/dist/Pagination.cjs +7 -7
  75. package/dist/Pagination.js +6 -6
  76. package/dist/{Popover-DVGQGWX6.css → Popover-Y3LDCJPW.css} +1 -1
  77. package/dist/Popover.cjs +2 -2
  78. package/dist/Popover.js +1 -1
  79. package/dist/{Progress-CHV7DN6Y.css → Progress-CZNXCYGW.css} +1 -1
  80. package/dist/Progress.cjs +2 -2
  81. package/dist/Progress.js +1 -1
  82. package/dist/{Radio-GVFDPAZM.css → Radio-IQKASYDF.css} +4 -4
  83. package/dist/Radio.cjs +3 -3
  84. package/dist/Radio.js +1 -1
  85. package/dist/{Select-Z5VYPEEY.css → Select-YZ2NUJSX.css} +18 -18
  86. package/dist/Select.cjs +6 -6
  87. package/dist/Select.js +5 -5
  88. package/dist/Skeleton.cjs +2 -2
  89. package/dist/Skeleton.js +1 -1
  90. package/dist/{Slider-3JKA5EW6.css → Slider-UM2IZZBH.css} +7 -7
  91. package/dist/Slider.cjs +2 -2
  92. package/dist/Slider.js +1 -1
  93. package/dist/{Spin-3GJNMSIH.css → Spin-GONGPV4Q.css} +1 -1
  94. package/dist/Spin.cjs +2 -2
  95. package/dist/Spin.js +1 -1
  96. package/dist/Splitter.cjs +2 -2
  97. package/dist/Splitter.js +1 -1
  98. package/dist/{StatusBar-CDS2GPSI.css → StatusBar-FJKEEPXU.css} +3 -7
  99. package/dist/StatusBar.cjs +3 -3
  100. package/dist/StatusBar.js +1 -1
  101. package/dist/Surface-UDDN3DGL.css +42 -0
  102. package/dist/Surface.cjs +16 -0
  103. package/dist/Surface.d.cts +60 -0
  104. package/dist/Surface.d.ts +60 -0
  105. package/dist/Surface.js +3 -0
  106. package/dist/{Switch-36KJNDXM.css → Switch-COAQIOMH.css} +8 -5
  107. package/dist/Switch.cjs +2 -2
  108. package/dist/Switch.js +1 -1
  109. package/dist/{Table-ATJJQLKU.css → Table-IYJTPY6J.css} +16 -16
  110. package/dist/Table.cjs +9 -9
  111. package/dist/Table.js +8 -8
  112. package/dist/{TablePro-3XVHYLSL.css → TablePro-JRSBPXB5.css} +1 -1
  113. package/dist/TablePro.cjs +10 -10
  114. package/dist/TablePro.js +9 -9
  115. package/dist/{Tabs-BLSNI2T5.css → Tabs-X5U5PCPV.css} +2 -2
  116. package/dist/Tabs.cjs +2 -2
  117. package/dist/Tabs.js +1 -1
  118. package/dist/{Tag-HDYCDPFS.css → Tag-G2XWAL7A.css} +1 -1
  119. package/dist/Tag.cjs +3 -3
  120. package/dist/Tag.js +2 -2
  121. package/dist/{Textarea-YNET7IBH.css → Textarea-YHWKHIFE.css} +3 -3
  122. package/dist/Textarea.cjs +4 -4
  123. package/dist/Textarea.js +2 -2
  124. package/dist/Theme.cjs +11 -11
  125. package/dist/Theme.d.cts +5 -1
  126. package/dist/Theme.d.ts +5 -1
  127. package/dist/Theme.js +1 -1
  128. package/dist/ThemePanel-76LB3YA5.css +509 -0
  129. package/dist/ThemePanel.cjs +29 -0
  130. package/dist/ThemePanel.d.cts +80 -0
  131. package/dist/ThemePanel.d.ts +80 -0
  132. package/dist/ThemePanel.js +12 -0
  133. package/dist/{Timeline-3ZHOHPXT.css → Timeline-ZIM7QFQC.css} +1 -1
  134. package/dist/Timeline.cjs +3 -3
  135. package/dist/Timeline.js +2 -2
  136. package/dist/{Tooltip-DMKUPC24.css → Tooltip-5FSPJWLX.css} +4 -2
  137. package/dist/Tooltip.cjs +2 -2
  138. package/dist/Tooltip.d.cts +2 -0
  139. package/dist/Tooltip.d.ts +2 -0
  140. package/dist/Tooltip.js +1 -1
  141. package/dist/{Typography-NKPWTJCV.css → Typography-32QQLD4F.css} +41 -11
  142. package/dist/Typography.cjs +8 -7
  143. package/dist/Typography.d.cts +1 -1
  144. package/dist/Typography.d.ts +1 -1
  145. package/dist/Typography.js +3 -2
  146. package/dist/{chunk-DWAN57G4.js → chunk-2NT5QKEX.js} +3 -3
  147. package/dist/{chunk-6BWELOCT.js → chunk-2SCXQ7QS.js} +2 -2
  148. package/dist/{chunk-TP567B3L.cjs → chunk-2ZADGBUN.cjs} +5 -5
  149. package/dist/{chunk-CETNCRZ4.js → chunk-2ZFJTMEF.js} +4 -4
  150. package/dist/{chunk-I5WTQ5Y3.js → chunk-3YP7CBJT.js} +3 -3
  151. package/dist/{chunk-UUHFKIWP.cjs → chunk-4UKM4KAC.cjs} +2 -2
  152. package/dist/{chunk-HLFH5HWR.js → chunk-56PHETWO.js} +3 -3
  153. package/dist/{chunk-ET6DYQVZ.js → chunk-5JNDDWFZ.js} +132 -14
  154. package/dist/{chunk-MPVCYU2K.cjs → chunk-5NFSDFBB.cjs} +4 -4
  155. package/dist/{chunk-P6P4DGLF.cjs → chunk-66GXZQKL.cjs} +4 -4
  156. package/dist/{chunk-QP3VCSRY.cjs → chunk-66T76GII.cjs} +6 -6
  157. package/dist/chunk-6EOSMK34.cjs +194 -0
  158. package/dist/{chunk-WNM5RVXR.cjs → chunk-6GQPF3EI.cjs} +2 -2
  159. package/dist/{chunk-V272XR3F.cjs → chunk-6LARTGLP.cjs} +1 -1
  160. package/dist/chunk-6SPMHY54.js +191 -0
  161. package/dist/{chunk-YLIQ37KY.cjs → chunk-6XVLERA3.cjs} +2 -2
  162. package/dist/{chunk-FBYUZOZP.js → chunk-7D76MI37.js} +5 -5
  163. package/dist/{chunk-J5ZGYQZK.js → chunk-7NZ2A4MA.js} +155 -29
  164. package/dist/{chunk-KLEKKZ73.js → chunk-7ZNGHWVS.js} +1 -1
  165. package/dist/{chunk-7AG524YZ.cjs → chunk-ACQSRMLF.cjs} +5 -5
  166. package/dist/{chunk-JVUVOR6S.js → chunk-AJH2O4WC.js} +3 -3
  167. package/dist/{chunk-NTS5L4NQ.cjs → chunk-BJ6WUVEG.cjs} +4 -4
  168. package/dist/{chunk-S3VXH5L4.cjs → chunk-C24W6PTJ.cjs} +2 -2
  169. package/dist/{chunk-GMN74OEY.cjs → chunk-CBKJXKVI.cjs} +2 -2
  170. package/dist/{chunk-FWPBORRB.js → chunk-CEZ2DR4R.js} +3 -3
  171. package/dist/{chunk-SQGPSMSK.js → chunk-CNGKJYGZ.js} +3 -3
  172. package/dist/{chunk-PULGVK2I.cjs → chunk-D5PCIVID.cjs} +4 -4
  173. package/dist/{chunk-DG5VQ6BO.cjs → chunk-D64IPDUE.cjs} +4 -4
  174. package/dist/{chunk-VFFIE2VO.cjs → chunk-DYHNOYRC.cjs} +7 -7
  175. package/dist/{chunk-P6EZG2R7.cjs → chunk-DYSGXQUK.cjs} +7 -7
  176. package/dist/{chunk-H4LGWZMH.cjs → chunk-GBKUGKIY.cjs} +11 -11
  177. package/dist/{chunk-J2HZTJO6.js → chunk-GUZ2DNDC.js} +3 -3
  178. package/dist/{chunk-K6F25JXT.js → chunk-GZCU6HXD.js} +2 -2
  179. package/dist/{chunk-USQ43DJ5.js → chunk-HFUHQUPQ.js} +2 -2
  180. package/dist/{chunk-7JN6FJ55.js → chunk-HU7T64Y3.js} +2 -2
  181. package/dist/{chunk-X5GCOMC3.cjs → chunk-IDJCFYPP.cjs} +15 -15
  182. package/dist/{chunk-KD4YYIIO.cjs → chunk-IHK2FRTS.cjs} +2 -2
  183. package/dist/{chunk-Q5SZIU7Z.cjs → chunk-JFQ53MO4.cjs} +1 -1
  184. package/dist/{chunk-7PQJCLIR.js → chunk-KMG7OMOS.js} +2 -2
  185. package/dist/{chunk-2HQCUBA7.cjs → chunk-L27C5O4W.cjs} +4 -4
  186. package/dist/chunk-LFTCK2VM.cjs +1194 -0
  187. package/dist/{chunk-BVQ77VRY.js → chunk-LI4XJTEA.js} +3 -3
  188. package/dist/{chunk-45VJGBGN.js → chunk-LQLOOUS3.js} +2 -2
  189. package/dist/{chunk-PL6DRFUO.cjs → chunk-MOMLQP7B.cjs} +2 -2
  190. package/dist/{chunk-OF7JIYBY.cjs → chunk-MYHBC3HA.cjs} +2 -2
  191. package/dist/{chunk-LKK2AA7W.js → chunk-MYRLCN6V.js} +2 -2
  192. package/dist/{chunk-ZKE73UQF.cjs → chunk-N2BTMKF2.cjs} +5 -5
  193. package/dist/{chunk-6ZXQJRAT.cjs → chunk-N2COYOXE.cjs} +155 -29
  194. package/dist/{chunk-2TL37AP5.cjs → chunk-N3OLFKV5.cjs} +1 -1
  195. package/dist/{chunk-5JSDQ6QQ.cjs → chunk-NDO22RER.cjs} +2 -2
  196. package/dist/{chunk-ME5BZ2WA.js → chunk-NE7IUGMK.js} +3 -3
  197. package/dist/{chunk-F6RYCBQG.js → chunk-NFXHIO3G.js} +1 -1
  198. package/dist/chunk-NJCHFXGC.js +1170 -0
  199. package/dist/chunk-NT6CJYI3.cjs +129 -0
  200. package/dist/chunk-O43DOE7V.js +106 -0
  201. package/dist/{chunk-GNEZD7KE.cjs → chunk-O4BOBOYV.cjs} +2 -2
  202. package/dist/{chunk-XSN4TLN5.cjs → chunk-OGPDCBPD.cjs} +12 -12
  203. package/dist/{chunk-6YQTMI55.js → chunk-OHFZ7L4T.js} +2 -2
  204. package/dist/{chunk-7IYKKLV3.js → chunk-OHIFKN4E.js} +4 -4
  205. package/dist/{chunk-46VXFTEC.js → chunk-OQU3TJCF.js} +3 -3
  206. package/dist/{chunk-5TKC6IEN.js → chunk-PEJLXJQD.js} +1 -1
  207. package/dist/{chunk-HWFM4MAT.js → chunk-PKHITACT.js} +2 -2
  208. package/dist/{chunk-JCEHZ336.js → chunk-PNZJFLMY.js} +3 -3
  209. package/dist/{chunk-XRR3CYQL.js → chunk-QP7RXZES.js} +2 -2
  210. package/dist/{chunk-5MN3PMF4.cjs → chunk-QY76WTO5.cjs} +9 -9
  211. package/dist/{chunk-FGW5GJ22.cjs → chunk-R74TZKJS.cjs} +4 -4
  212. package/dist/{chunk-TGL5BGMR.js → chunk-REMJWNAT.js} +4 -4
  213. package/dist/{chunk-3YJU3D5S.cjs → chunk-RIUDYPRB.cjs} +62 -13
  214. package/dist/{chunk-SWBWZIL4.cjs → chunk-S6OKX4H7.cjs} +2 -2
  215. package/dist/{chunk-EC4WGEAJ.js → chunk-SABWUELE.js} +2 -2
  216. package/dist/{chunk-TEEFR2FD.js → chunk-SFAGHPBT.js} +62 -13
  217. package/dist/{chunk-QKQHZIF3.cjs → chunk-SG42F5VB.cjs} +2 -2
  218. package/dist/{chunk-5C2AI2SD.js → chunk-SQIWPU6V.js} +2 -2
  219. package/dist/{chunk-5DKRY67M.cjs → chunk-SYWTT5TY.cjs} +5 -5
  220. package/dist/{chunk-OBEKX4VR.js → chunk-TVUBGXWA.js} +2 -2
  221. package/dist/{chunk-7PNJI5UE.cjs → chunk-U2H4DRMV.cjs} +2 -2
  222. package/dist/{chunk-HKF2V5MM.cjs → chunk-VAXWWJJP.cjs} +9 -9
  223. package/dist/{chunk-5H5YP2TB.js → chunk-VNNQYJLT.js} +3 -3
  224. package/dist/{chunk-KGSADAOD.cjs → chunk-VSUMJX6Z.cjs} +2 -2
  225. package/dist/{chunk-K5IGFBDR.js → chunk-W5CJC7S7.js} +3 -3
  226. package/dist/{chunk-AXZ7ELMA.js → chunk-WEJKY3DF.js} +2 -2
  227. package/dist/{chunk-GIZU3H6H.js → chunk-WXWFMWWF.js} +3 -3
  228. package/dist/{chunk-UKS23N3L.js → chunk-XVP7IKLZ.js} +4 -4
  229. package/dist/{chunk-ELNT3CFO.js → chunk-Y5F7ZTBH.js} +2 -2
  230. package/dist/{chunk-QCILPZWP.js → chunk-YJEXAO2I.js} +2 -2
  231. package/dist/{chunk-7ABFUIOB.cjs → chunk-YNCDTKAE.cjs} +2 -2
  232. package/dist/{chunk-K7FV7W6U.cjs → chunk-YSCIMHOI.cjs} +5 -5
  233. package/dist/{chunk-BPOOVO5T.js → chunk-YSXD344H.js} +5 -5
  234. package/dist/{chunk-47VG2P34.js → chunk-YT5NLCRC.js} +1 -1
  235. package/dist/{chunk-R2TEDH2F.cjs → chunk-YU5JK247.cjs} +135 -17
  236. package/dist/{chunk-HZSIUOCN.cjs → chunk-YUKXNWVE.cjs} +1 -1
  237. package/dist/{chunk-65FIH5A3.js → chunk-YVTLHTG6.js} +2 -2
  238. package/dist/{chunk-GENABQYA.cjs → chunk-Z4PZ2ZHI.cjs} +2 -2
  239. package/dist/{chunk-6HMTV6P4.cjs → chunk-ZPKHGKVL.cjs} +4 -4
  240. package/dist/{chunk-AAGF7K3L.js → chunk-ZPP7LTHP.js} +3 -3
  241. package/dist/{chunk-IZOHYJUQ.cjs → chunk-ZWCDB5PP.cjs} +2 -2
  242. package/dist/index.cjs +214 -191
  243. package/dist/index.d.cts +3 -1
  244. package/dist/index.d.ts +3 -1
  245. package/dist/index.js +49 -46
  246. package/dist/styles.css +715 -175
  247. package/dist/{tokens-BIIUTPKN.css → tokens-EF34LSWI.css} +42 -17
  248. package/dist/tokens.css +42 -17
  249. package/docs/llms/surface.md +90 -0
  250. package/docs/llms/theme.md +24 -2
  251. package/docs/llms/themepanel.md +128 -0
  252. package/docs/llms/tooltip.md +1 -0
  253. package/docs/llms/typography.md +12 -2
  254. package/docs/llms.md +3 -1
  255. package/package.json +1 -1
@@ -0,0 +1,29 @@
1
+ 'use strict';
2
+
3
+ var chunkLFTCK2VM_cjs = require('./chunk-LFTCK2VM.cjs');
4
+ require('./chunk-ZWCDB5PP.cjs');
5
+ require('./chunk-6EOSMK34.cjs');
6
+ require('./chunk-N2COYOXE.cjs');
7
+ require('./chunk-6GQPF3EI.cjs');
8
+ require('./chunk-VSUMJX6Z.cjs');
9
+ require('./chunk-MYHBC3HA.cjs');
10
+ require('./chunk-YB3IWIOJ.cjs');
11
+ require('./chunk-VAXWWJJP.cjs');
12
+ require('./chunk-5NFSDFBB.cjs');
13
+ require('./chunk-2ZADGBUN.cjs');
14
+ require('./chunk-6LARTGLP.cjs');
15
+
16
+
17
+
18
+ Object.defineProperty(exports, "THEME_PANEL_DEFAULT_PRESET_OPTIONS", {
19
+ enumerable: true,
20
+ get: function () { return chunkLFTCK2VM_cjs.THEME_PANEL_DEFAULT_PRESET_OPTIONS; }
21
+ });
22
+ Object.defineProperty(exports, "THEME_PANEL_DEFAULT_THEME_PRESETS", {
23
+ enumerable: true,
24
+ get: function () { return chunkLFTCK2VM_cjs.THEME_PANEL_DEFAULT_THEME_PRESETS; }
25
+ });
26
+ Object.defineProperty(exports, "ThemePanel", {
27
+ enumerable: true,
28
+ get: function () { return chunkLFTCK2VM_cjs.ThemePanel; }
29
+ });
@@ -0,0 +1,80 @@
1
+ import * as React from 'react';
2
+ import { ThemeMode, ThemePreset, ThemeBaseMode } from './Theme.cjs';
3
+
4
+ type ThemePanelSection = "mode" | "presets" | "accent" | "shadow" | "intensity" | "radius" | "font" | "density";
5
+ interface ThemePanelPresetOption {
6
+ /** Mode key. If it exists in `theme.themes`, the registered preset is used. */
7
+ key: ThemeMode;
8
+ label: React.ReactNode;
9
+ description?: React.ReactNode;
10
+ /** Optional preset to apply and register on click. */
11
+ preset?: ThemePreset;
12
+ }
13
+ interface ThemePanelModeOption {
14
+ key: ThemeMode;
15
+ label: React.ReactNode;
16
+ }
17
+ interface ThemePanelCreatedThemeMeta {
18
+ key: ThemeMode;
19
+ label: string;
20
+ description: string;
21
+ }
22
+ interface ThemePanelCreateThemePayload extends ThemePanelCreatedThemeMeta {
23
+ preset: ThemePreset;
24
+ /** Ready-to-append preset option for callers that control `presetOptions`. */
25
+ presetOption: ThemePanelPresetOption;
26
+ }
27
+ interface ThemePanelDeleteThemePayload extends ThemePanelCreatedThemeMeta {
28
+ preset?: ThemePreset;
29
+ }
30
+ type ThemePanelDefaultPresetKey = "light" | "dark" | "porcelain" | "assistant" | "assistantDark";
31
+ type ThemePanelDefaultPreset = ThemePreset & {
32
+ base: ThemeBaseMode;
33
+ tokens: NonNullable<ThemePreset["tokens"]>;
34
+ };
35
+ declare const THEME_PANEL_DEFAULT_THEME_PRESETS: Record<ThemePanelDefaultPresetKey, ThemePanelDefaultPreset>;
36
+ declare const THEME_PANEL_DEFAULT_PRESET_OPTIONS: ThemePanelPresetOption[];
37
+ interface ThemePanelProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title"> {
38
+ /** Header title. Pass `null` to hide the title text while keeping the panel layout. */
39
+ title?: React.ReactNode;
40
+ /** Secondary header text. */
41
+ description?: React.ReactNode;
42
+ /** Sections to render, in order. */
43
+ sections?: ThemePanelSection[];
44
+ /** Built-in mode buttons. */
45
+ modeOptions?: ThemePanelModeOption[];
46
+ /** Named theme preset cards. Defaults to Lumina presets plus registered `theme.themes`. */
47
+ presetOptions?: ThemePanelPresetOption[];
48
+ /** Initial color used by the custom accent picker. */
49
+ defaultCustomAccent?: string;
50
+ /** Show the inline create-theme flow in the preset section. */
51
+ allowCreateTheme?: boolean;
52
+ /** Default name for a newly created theme. */
53
+ defaultCreateThemeName?: string;
54
+ /** Prefix used when generating a mode key for a created theme. */
55
+ createThemeKeyPrefix?: string;
56
+ /** Called after a custom theme is saved into the nearest ThemeProvider. */
57
+ onCreateTheme?: (payload: ThemePanelCreateThemePayload) => void;
58
+ /** Show delete actions for non-default named themes. */
59
+ allowDeleteTheme?: boolean;
60
+ /** Called after a non-default theme is removed from the nearest ThemeProvider. */
61
+ onDeleteTheme?: (payload: ThemePanelDeleteThemePayload) => void;
62
+ /** Show the reset button. */
63
+ showReset?: boolean;
64
+ /** Compact typography and spacing. */
65
+ compact?: boolean;
66
+ }
67
+ /**
68
+ * `ThemePanel` — ready-made controls for quickly editing and saving the nearest Lumina theme.
69
+ *
70
+ * @example
71
+ * ```tsx
72
+ * <ThemeProvider>
73
+ * <ThemePanel />
74
+ * <App />
75
+ * </ThemeProvider>
76
+ * ```
77
+ */
78
+ declare const ThemePanel: React.ForwardRefExoticComponent<ThemePanelProps & React.RefAttributes<HTMLDivElement>>;
79
+
80
+ export { THEME_PANEL_DEFAULT_PRESET_OPTIONS, THEME_PANEL_DEFAULT_THEME_PRESETS, ThemePanel, type ThemePanelCreateThemePayload, type ThemePanelCreatedThemeMeta, type ThemePanelDeleteThemePayload, type ThemePanelModeOption, type ThemePanelPresetOption, type ThemePanelProps, type ThemePanelSection };
@@ -0,0 +1,80 @@
1
+ import * as React from 'react';
2
+ import { ThemeMode, ThemePreset, ThemeBaseMode } from './Theme.js';
3
+
4
+ type ThemePanelSection = "mode" | "presets" | "accent" | "shadow" | "intensity" | "radius" | "font" | "density";
5
+ interface ThemePanelPresetOption {
6
+ /** Mode key. If it exists in `theme.themes`, the registered preset is used. */
7
+ key: ThemeMode;
8
+ label: React.ReactNode;
9
+ description?: React.ReactNode;
10
+ /** Optional preset to apply and register on click. */
11
+ preset?: ThemePreset;
12
+ }
13
+ interface ThemePanelModeOption {
14
+ key: ThemeMode;
15
+ label: React.ReactNode;
16
+ }
17
+ interface ThemePanelCreatedThemeMeta {
18
+ key: ThemeMode;
19
+ label: string;
20
+ description: string;
21
+ }
22
+ interface ThemePanelCreateThemePayload extends ThemePanelCreatedThemeMeta {
23
+ preset: ThemePreset;
24
+ /** Ready-to-append preset option for callers that control `presetOptions`. */
25
+ presetOption: ThemePanelPresetOption;
26
+ }
27
+ interface ThemePanelDeleteThemePayload extends ThemePanelCreatedThemeMeta {
28
+ preset?: ThemePreset;
29
+ }
30
+ type ThemePanelDefaultPresetKey = "light" | "dark" | "porcelain" | "assistant" | "assistantDark";
31
+ type ThemePanelDefaultPreset = ThemePreset & {
32
+ base: ThemeBaseMode;
33
+ tokens: NonNullable<ThemePreset["tokens"]>;
34
+ };
35
+ declare const THEME_PANEL_DEFAULT_THEME_PRESETS: Record<ThemePanelDefaultPresetKey, ThemePanelDefaultPreset>;
36
+ declare const THEME_PANEL_DEFAULT_PRESET_OPTIONS: ThemePanelPresetOption[];
37
+ interface ThemePanelProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title"> {
38
+ /** Header title. Pass `null` to hide the title text while keeping the panel layout. */
39
+ title?: React.ReactNode;
40
+ /** Secondary header text. */
41
+ description?: React.ReactNode;
42
+ /** Sections to render, in order. */
43
+ sections?: ThemePanelSection[];
44
+ /** Built-in mode buttons. */
45
+ modeOptions?: ThemePanelModeOption[];
46
+ /** Named theme preset cards. Defaults to Lumina presets plus registered `theme.themes`. */
47
+ presetOptions?: ThemePanelPresetOption[];
48
+ /** Initial color used by the custom accent picker. */
49
+ defaultCustomAccent?: string;
50
+ /** Show the inline create-theme flow in the preset section. */
51
+ allowCreateTheme?: boolean;
52
+ /** Default name for a newly created theme. */
53
+ defaultCreateThemeName?: string;
54
+ /** Prefix used when generating a mode key for a created theme. */
55
+ createThemeKeyPrefix?: string;
56
+ /** Called after a custom theme is saved into the nearest ThemeProvider. */
57
+ onCreateTheme?: (payload: ThemePanelCreateThemePayload) => void;
58
+ /** Show delete actions for non-default named themes. */
59
+ allowDeleteTheme?: boolean;
60
+ /** Called after a non-default theme is removed from the nearest ThemeProvider. */
61
+ onDeleteTheme?: (payload: ThemePanelDeleteThemePayload) => void;
62
+ /** Show the reset button. */
63
+ showReset?: boolean;
64
+ /** Compact typography and spacing. */
65
+ compact?: boolean;
66
+ }
67
+ /**
68
+ * `ThemePanel` — ready-made controls for quickly editing and saving the nearest Lumina theme.
69
+ *
70
+ * @example
71
+ * ```tsx
72
+ * <ThemeProvider>
73
+ * <ThemePanel />
74
+ * <App />
75
+ * </ThemeProvider>
76
+ * ```
77
+ */
78
+ declare const ThemePanel: React.ForwardRefExoticComponent<ThemePanelProps & React.RefAttributes<HTMLDivElement>>;
79
+
80
+ export { THEME_PANEL_DEFAULT_PRESET_OPTIONS, THEME_PANEL_DEFAULT_THEME_PRESETS, ThemePanel, type ThemePanelCreateThemePayload, type ThemePanelCreatedThemeMeta, type ThemePanelDeleteThemePayload, type ThemePanelModeOption, type ThemePanelPresetOption, type ThemePanelProps, type ThemePanelSection };
@@ -0,0 +1,12 @@
1
+ export { THEME_PANEL_DEFAULT_PRESET_OPTIONS, THEME_PANEL_DEFAULT_THEME_PRESETS, ThemePanel } from './chunk-NJCHFXGC.js';
2
+ import './chunk-HU7T64Y3.js';
3
+ import './chunk-6SPMHY54.js';
4
+ import './chunk-7NZ2A4MA.js';
5
+ import './chunk-YJEXAO2I.js';
6
+ import './chunk-HFUHQUPQ.js';
7
+ import './chunk-GZCU6HXD.js';
8
+ import './chunk-DUFRASGO.js';
9
+ import './chunk-XVP7IKLZ.js';
10
+ import './chunk-56PHETWO.js';
11
+ import './chunk-CNGKJYGZ.js';
12
+ import './chunk-YT5NLCRC.js';
@@ -71,7 +71,7 @@
71
71
  width: 12px;
72
72
  height: 12px;
73
73
  border-radius: var(--r-pill);
74
- box-shadow: var(--neu-out-sm);
74
+ box-shadow: var(--neu-shadow-control);
75
75
  flex-shrink: 0;
76
76
  display: flex;
77
77
  align-items: center;
package/dist/Timeline.cjs CHANGED
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
- var chunkNTS5L4NQ_cjs = require('./chunk-NTS5L4NQ.cjs');
4
- require('./chunk-QKQHZIF3.cjs');
3
+ var chunkBJ6WUVEG_cjs = require('./chunk-BJ6WUVEG.cjs');
4
+ require('./chunk-SG42F5VB.cjs');
5
5
 
6
6
 
7
7
 
8
8
  Object.defineProperty(exports, "Timeline", {
9
9
  enumerable: true,
10
- get: function () { return chunkNTS5L4NQ_cjs.Timeline; }
10
+ get: function () { return chunkBJ6WUVEG_cjs.Timeline; }
11
11
  });
package/dist/Timeline.js CHANGED
@@ -1,2 +1,2 @@
1
- export { Timeline } from './chunk-46VXFTEC.js';
2
- import './chunk-ELNT3CFO.js';
1
+ export { Timeline } from './chunk-OQU3TJCF.js';
2
+ import './chunk-Y5F7ZTBH.js';
@@ -5,6 +5,8 @@
5
5
  align-self: flex-start;
6
6
  }
7
7
  .tip {
8
+ display: block;
9
+ box-sizing: border-box;
8
10
  background: var(--bg-sunken);
9
11
  color: var(--fg);
10
12
  padding: 6px 10px;
@@ -12,8 +14,8 @@
12
14
  font-size: 11px;
13
15
  font-weight: 500;
14
16
  white-space: nowrap;
15
- box-shadow: var(--neu-out-sm);
16
- pointer-events: none;
17
+ box-shadow: var(--neu-shadow-control);
18
+ pointer-events: auto;
17
19
  animation: fadeIn var(--dur) var(--ease);
18
20
  z-index: 1000;
19
21
  }
package/dist/Tooltip.cjs CHANGED
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
- var chunk3YJU3D5S_cjs = require('./chunk-3YJU3D5S.cjs');
3
+ var chunkRIUDYPRB_cjs = require('./chunk-RIUDYPRB.cjs');
4
4
  require('./chunk-YB3IWIOJ.cjs');
5
5
 
6
6
 
7
7
 
8
8
  Object.defineProperty(exports, "Tooltip", {
9
9
  enumerable: true,
10
- get: function () { return chunk3YJU3D5S_cjs.Tooltip; }
10
+ get: function () { return chunkRIUDYPRB_cjs.Tooltip; }
11
11
  });
@@ -15,6 +15,8 @@ interface TooltipProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, "chil
15
15
  /** Controlled visibility alias. */
16
16
  visible?: boolean;
17
17
  onVisibleChange?: (visible: boolean) => void;
18
+ /** Delay before closing after leaving trigger / bubble. */
19
+ closeDelay?: number;
18
20
  /** Class for the popped-out bubble. */
19
21
  overlayClassName?: string;
20
22
  /** Alias used by some popup APIs. */
package/dist/Tooltip.d.ts CHANGED
@@ -15,6 +15,8 @@ interface TooltipProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, "chil
15
15
  /** Controlled visibility alias. */
16
16
  visible?: boolean;
17
17
  onVisibleChange?: (visible: boolean) => void;
18
+ /** Delay before closing after leaving trigger / bubble. */
19
+ closeDelay?: number;
18
20
  /** Class for the popped-out bubble. */
19
21
  overlayClassName?: string;
20
22
  /** Alias used by some popup APIs. */
package/dist/Tooltip.js CHANGED
@@ -1,2 +1,2 @@
1
- export { Tooltip } from './chunk-TEEFR2FD.js';
1
+ export { Tooltip } from './chunk-SFAGHPBT.js';
2
2
  import './chunk-DUFRASGO.js';
@@ -48,7 +48,7 @@
48
48
  padding: 1px 6px;
49
49
  border-radius: 5px;
50
50
  background: var(--bg-sunken);
51
- box-shadow: var(--neu-in-sm);
51
+ box-shadow: var(--neu-shadow-inset);
52
52
  color: var(--accent-ink);
53
53
  margin: 0 2px;
54
54
  }
@@ -59,7 +59,7 @@
59
59
  padding: 1px 7px;
60
60
  border-radius: 5px;
61
61
  background: var(--bg-raised);
62
- box-shadow: var(--neu-flat);
62
+ box-shadow: var(--neu-shadow-subtle);
63
63
  border: 1px solid var(--border);
64
64
  color: var(--fg);
65
65
  margin: 0 2px;
@@ -115,7 +115,7 @@
115
115
  .typo-link.disabled {
116
116
  color: var(--fg-subtle);
117
117
  cursor: not-allowed;
118
- pointer-events: none;
118
+ pointer-events: auto;
119
119
  text-decoration: none;
120
120
  }
121
121
  .typo-link-ext {
@@ -132,20 +132,25 @@
132
132
  display: inline-flex;
133
133
  align-items: center;
134
134
  justify-content: center;
135
- width: 22px;
136
- height: 22px;
137
- margin-left: 6px;
138
- border-radius: 7px;
135
+ width: 20px;
136
+ height: 20px;
137
+ margin-left: 5px;
138
+ border-radius: 6px;
139
139
  cursor: pointer;
140
140
  color: var(--fg-subtle);
141
+ line-height: 1;
141
142
  transition: color var(--dur-fast) var(--ease), background var(--dur-fast) var(--ease), box-shadow var(--dur-fast) var(--ease);
142
- vertical-align: middle;
143
+ vertical-align: -0.18em;
143
144
  user-select: none;
144
145
  }
146
+ .typo-action > svg {
147
+ display: block;
148
+ flex-shrink: 0;
149
+ }
145
150
  .typo-action:hover {
146
151
  color: var(--accent-ink);
147
152
  background: var(--bg);
148
- box-shadow: var(--neu-flat);
153
+ box-shadow: var(--neu-shadow-subtle);
149
154
  }
150
155
  .typo-action:focus-visible {
151
156
  outline: 2px solid var(--accent-glow);
@@ -169,7 +174,7 @@
169
174
  font: inherit;
170
175
  color: inherit;
171
176
  background: var(--bg-sunken);
172
- box-shadow: var(--neu-in);
177
+ box-shadow: var(--neu-shadow-inset-strong);
173
178
  border: none;
174
179
  outline: none;
175
180
  width: 100%;
@@ -184,7 +189,7 @@
184
189
  font-family: inherit;
185
190
  }
186
191
  .typo-editor:focus {
187
- box-shadow: var(--neu-in), 0 0 0 3px var(--accent-glow);
192
+ box-shadow: var(--neu-shadow-inset-strong), 0 0 0 3px var(--accent-glow);
188
193
  }
189
194
 
190
195
  /* ---- Ellipsis ---- */
@@ -228,6 +233,31 @@
228
233
  }
229
234
  .typo-expand:hover { color: var(--accent); text-decoration: underline; text-underline-offset: 3px; }
230
235
 
236
+ .typo-ellipsis-tooltip {
237
+ display: block;
238
+ box-sizing: border-box;
239
+ max-width: min(520px, calc(100vw - 32px));
240
+ padding: 7px 10px;
241
+ border-radius: var(--r-sm);
242
+ background: var(--bg-sunken);
243
+ color: var(--fg);
244
+ box-shadow: var(--neu-shadow-control);
245
+ font-size: 12px;
246
+ font-weight: 500;
247
+ line-height: 1.55;
248
+ white-space: normal;
249
+ line-break: auto;
250
+ text-wrap: wrap;
251
+ text-align: justify;
252
+ text-align-last: left;
253
+ text-justify: inter-character;
254
+ word-break: normal;
255
+ overflow-wrap: anywhere;
256
+ pointer-events: auto;
257
+ animation: fadeIn var(--dur) var(--ease);
258
+ z-index: 1000;
259
+ }
260
+
231
261
  /* In dark mode, mark needs slightly higher contrast */
232
262
  [data-theme="dark"] .typo mark {
233
263
  background: color-mix(in oklch, var(--warning) 30%, transparent);
@@ -1,27 +1,28 @@
1
1
  'use strict';
2
2
 
3
- var chunkR2TEDH2F_cjs = require('./chunk-R2TEDH2F.cjs');
4
- require('./chunk-V272XR3F.cjs');
3
+ var chunkYU5JK247_cjs = require('./chunk-YU5JK247.cjs');
4
+ require('./chunk-YB3IWIOJ.cjs');
5
+ require('./chunk-6LARTGLP.cjs');
5
6
 
6
7
 
7
8
 
8
9
  Object.defineProperty(exports, "Link", {
9
10
  enumerable: true,
10
- get: function () { return chunkR2TEDH2F_cjs.Link; }
11
+ get: function () { return chunkYU5JK247_cjs.Link; }
11
12
  });
12
13
  Object.defineProperty(exports, "Paragraph", {
13
14
  enumerable: true,
14
- get: function () { return chunkR2TEDH2F_cjs.Paragraph; }
15
+ get: function () { return chunkYU5JK247_cjs.Paragraph; }
15
16
  });
16
17
  Object.defineProperty(exports, "Text", {
17
18
  enumerable: true,
18
- get: function () { return chunkR2TEDH2F_cjs.Text; }
19
+ get: function () { return chunkYU5JK247_cjs.Text; }
19
20
  });
20
21
  Object.defineProperty(exports, "Title", {
21
22
  enumerable: true,
22
- get: function () { return chunkR2TEDH2F_cjs.Title; }
23
+ get: function () { return chunkYU5JK247_cjs.Title; }
23
24
  });
24
25
  Object.defineProperty(exports, "Typography", {
25
26
  enumerable: true,
26
- get: function () { return chunkR2TEDH2F_cjs.Typography; }
27
+ get: function () { return chunkYU5JK247_cjs.Typography; }
27
28
  });
@@ -53,7 +53,7 @@ interface EllipsisConfig {
53
53
  symbol?: React.ReactNode;
54
54
  /** Fired on expand. */
55
55
  onExpand?: (event: React.MouseEvent<HTMLElement>) => void;
56
- /** Show full text in a `title` attribute. */
56
+ /** Show full text in a tooltip when truncated. */
57
57
  tooltip?: boolean | React.ReactNode;
58
58
  /** Optional suffix that should always remain visible (e.g. an em-dash author). */
59
59
  suffix?: string;
@@ -53,7 +53,7 @@ interface EllipsisConfig {
53
53
  symbol?: React.ReactNode;
54
54
  /** Fired on expand. */
55
55
  onExpand?: (event: React.MouseEvent<HTMLElement>) => void;
56
- /** Show full text in a `title` attribute. */
56
+ /** Show full text in a tooltip when truncated. */
57
57
  tooltip?: boolean | React.ReactNode;
58
58
  /** Optional suffix that should always remain visible (e.g. an em-dash author). */
59
59
  suffix?: string;
@@ -1,2 +1,3 @@
1
- export { Link, Paragraph, Text, Title, Typography } from './chunk-ET6DYQVZ.js';
2
- import './chunk-47VG2P34.js';
1
+ export { Link, Paragraph, Text, Title, Typography } from './chunk-5JNDDWFZ.js';
2
+ import './chunk-DUFRASGO.js';
3
+ import './chunk-YT5NLCRC.js';
@@ -1,7 +1,7 @@
1
- import { Icon } from './chunk-47VG2P34.js';
2
- import './tokens-BIIUTPKN.css';
1
+ import { Icon } from './chunk-YT5NLCRC.js';
2
+ import './tokens-EF34LSWI.css';
3
3
  import './shared-NJHRNLRH.css';
4
- import './Image-MRYQCRQ5.css';
4
+ import './Image-SGSRTHQX.css';
5
5
  import * as React from 'react';
6
6
  import ReactDOM from 'react-dom';
7
7
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
@@ -1,6 +1,6 @@
1
- import './tokens-BIIUTPKN.css';
1
+ import './tokens-EF34LSWI.css';
2
2
  import './shared-NJHRNLRH.css';
3
- import './StatusBar-CDS2GPSI.css';
3
+ import './StatusBar-FJKEEPXU.css';
4
4
  import * as React from 'react';
5
5
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
6
6
 
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var chunkV272XR3F_cjs = require('./chunk-V272XR3F.cjs');
4
- require('./tokens-BIIUTPKN.css');
3
+ var chunk6LARTGLP_cjs = require('./chunk-6LARTGLP.cjs');
4
+ require('./tokens-EF34LSWI.css');
5
5
  require('./shared-NJHRNLRH.css');
6
- require('./Button-4Z3Q6KII.css');
6
+ require('./Button-TUMZUQLI.css');
7
7
  var React = require('react');
8
8
  var jsxRuntime = require('react/jsx-runtime');
9
9
 
@@ -67,9 +67,9 @@ var Button = React__namespace.forwardRef(
67
67
  "aria-label": ariaLabel ?? (onlyIcon ? tip ?? (typeof icon === "string" ? icon : void 0) : void 0),
68
68
  ...rest,
69
69
  children: [
70
- loading ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "spinner", "aria-hidden": true }) : chunkV272XR3F_cjs.renderIconSlot(icon, { size: 15, className: "btn-icon-slot" }),
70
+ loading ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "spinner", "aria-hidden": true }) : chunk6LARTGLP_cjs.renderIconSlot(icon, { size: 15, className: "btn-icon-slot" }),
71
71
  content,
72
- chunkV272XR3F_cjs.renderIconSlot(trailingIcon, { size: 15, className: "btn-icon-slot" })
72
+ chunk6LARTGLP_cjs.renderIconSlot(trailingIcon, { size: 15, className: "btn-icon-slot" })
73
73
  ]
74
74
  }
75
75
  );
@@ -1,8 +1,8 @@
1
- import { Select } from './chunk-FBYUZOZP.js';
2
- import { Icon } from './chunk-47VG2P34.js';
3
- import './tokens-BIIUTPKN.css';
1
+ import { Select } from './chunk-7D76MI37.js';
2
+ import { Icon } from './chunk-YT5NLCRC.js';
3
+ import './tokens-EF34LSWI.css';
4
4
  import './shared-NJHRNLRH.css';
5
- import './Pagination-YIRYJUXP.css';
5
+ import './Pagination-YSZSNFHG.css';
6
6
  import * as React from 'react';
7
7
  import { jsxs, jsx } from 'react/jsx-runtime';
8
8
 
@@ -1,7 +1,7 @@
1
- import { renderIconSlot, Icon } from './chunk-47VG2P34.js';
2
- import './tokens-BIIUTPKN.css';
1
+ import { renderIconSlot, Icon } from './chunk-YT5NLCRC.js';
2
+ import './tokens-EF34LSWI.css';
3
3
  import './shared-NJHRNLRH.css';
4
- import './Alert-QBKIDY5H.css';
4
+ import './Alert-HVPI6L4V.css';
5
5
  import * as React from 'react';
6
6
  import { jsxs, jsx } from 'react/jsx-runtime';
7
7
 
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
3
  var chunkYB3IWIOJ_cjs = require('./chunk-YB3IWIOJ.cjs');
4
- require('./tokens-BIIUTPKN.css');
4
+ require('./tokens-EF34LSWI.css');
5
5
  require('./shared-NJHRNLRH.css');
6
- require('./Popover-DVGQGWX6.css');
6
+ require('./Popover-Y3LDCJPW.css');
7
7
  var React = require('react');
8
8
  var reactDom = require('react-dom');
9
9
  var jsxRuntime = require('react/jsx-runtime');
@@ -1,7 +1,7 @@
1
- import { Icon } from './chunk-47VG2P34.js';
2
- import './tokens-BIIUTPKN.css';
1
+ import { Icon } from './chunk-YT5NLCRC.js';
2
+ import './tokens-EF34LSWI.css';
3
3
  import './shared-NJHRNLRH.css';
4
- import './Textarea-YNET7IBH.css';
4
+ import './Textarea-YHWKHIFE.css';
5
5
  import * as React from 'react';
6
6
  import { jsxs, jsx } from 'react/jsx-runtime';
7
7