@aithe/aithe-ui 26.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (694) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +466 -0
  3. package/dist/apps/api/app.d.ts +24 -0
  4. package/dist/apps/api/app.d.ts.map +1 -0
  5. package/dist/apps/api/demo-data.d.ts +3 -0
  6. package/dist/apps/api/demo-data.d.ts.map +1 -0
  7. package/dist/apps/api/docs-viewer.d.ts +54 -0
  8. package/dist/apps/api/docs-viewer.d.ts.map +1 -0
  9. package/dist/apps/api/i18n/en-US.d.ts +7 -0
  10. package/dist/apps/api/i18n/en-US.d.ts.map +1 -0
  11. package/dist/apps/api/i18n/index.d.ts +2 -0
  12. package/dist/apps/api/i18n/index.d.ts.map +1 -0
  13. package/dist/apps/api/i18n/zh-CN.d.ts +7 -0
  14. package/dist/apps/api/i18n/zh-CN.d.ts.map +1 -0
  15. package/dist/apps/api/index.html +13 -0
  16. package/dist/apps/api/pages/docs.d.ts +11 -0
  17. package/dist/apps/api/pages/docs.d.ts.map +1 -0
  18. package/dist/apps/api/standalone.d.ts +2 -0
  19. package/dist/apps/api/standalone.d.ts.map +1 -0
  20. package/dist/apps/demo/app.d.ts +28 -0
  21. package/dist/apps/demo/app.d.ts.map +1 -0
  22. package/dist/apps/demo/editor.d.ts +28 -0
  23. package/dist/apps/demo/editor.d.ts.map +1 -0
  24. package/dist/apps/demo/helpers.d.ts +2 -0
  25. package/dist/apps/demo/helpers.d.ts.map +1 -0
  26. package/dist/apps/demo/i18n/en-US.d.ts +7 -0
  27. package/dist/apps/demo/i18n/en-US.d.ts.map +1 -0
  28. package/dist/apps/demo/i18n/en.d.ts +3 -0
  29. package/dist/apps/demo/i18n/en.d.ts.map +1 -0
  30. package/dist/apps/demo/i18n/index.d.ts +2 -0
  31. package/dist/apps/demo/i18n/index.d.ts.map +1 -0
  32. package/dist/apps/demo/i18n/zh-CN.d.ts +7 -0
  33. package/dist/apps/demo/i18n/zh-CN.d.ts.map +1 -0
  34. package/dist/apps/demo/i18n/zh.d.ts +3 -0
  35. package/dist/apps/demo/i18n/zh.d.ts.map +1 -0
  36. package/dist/apps/demo/index.html +13 -0
  37. package/dist/apps/demo/pages/basic.d.ts +3 -0
  38. package/dist/apps/demo/pages/basic.d.ts.map +1 -0
  39. package/dist/apps/demo/pages/container.d.ts +3 -0
  40. package/dist/apps/demo/pages/container.d.ts.map +1 -0
  41. package/dist/apps/demo/pages/data.d.ts +3 -0
  42. package/dist/apps/demo/pages/data.d.ts.map +1 -0
  43. package/dist/apps/demo/pages/display.d.ts +3 -0
  44. package/dist/apps/demo/pages/display.d.ts.map +1 -0
  45. package/dist/apps/demo/pages/feedback.d.ts +3 -0
  46. package/dist/apps/demo/pages/feedback.d.ts.map +1 -0
  47. package/dist/apps/demo/pages/form.d.ts +3 -0
  48. package/dist/apps/demo/pages/form.d.ts.map +1 -0
  49. package/dist/apps/demo/pages/layout.d.ts +3 -0
  50. package/dist/apps/demo/pages/layout.d.ts.map +1 -0
  51. package/dist/apps/demo/pages/navigation.d.ts +3 -0
  52. package/dist/apps/demo/pages/navigation.d.ts.map +1 -0
  53. package/dist/apps/demo/pages/progress.d.ts +3 -0
  54. package/dist/apps/demo/pages/progress.d.ts.map +1 -0
  55. package/dist/apps/demo/pages/theme.d.ts +3 -0
  56. package/dist/apps/demo/pages/theme.d.ts.map +1 -0
  57. package/dist/apps/demo/standalone.d.ts +2 -0
  58. package/dist/apps/demo/standalone.d.ts.map +1 -0
  59. package/dist/base/aithe-element.d.ts +29 -0
  60. package/dist/base/aithe-element.d.ts.map +1 -0
  61. package/dist/components/avatar/avatar.d.ts +13 -0
  62. package/dist/components/avatar/avatar.d.ts.map +1 -0
  63. package/dist/components/badge/badge.d.ts +14 -0
  64. package/dist/components/badge/badge.d.ts.map +1 -0
  65. package/dist/components/basic/avatar.d.ts +13 -0
  66. package/dist/components/basic/avatar.d.ts.map +1 -0
  67. package/dist/components/basic/badge.d.ts +14 -0
  68. package/dist/components/basic/badge.d.ts.map +1 -0
  69. package/dist/components/basic/button-group.d.ts +11 -0
  70. package/dist/components/basic/button-group.d.ts.map +1 -0
  71. package/dist/components/basic/button.d.ts +13 -0
  72. package/dist/components/basic/button.d.ts.map +1 -0
  73. package/dist/components/basic/card.d.ts +18 -0
  74. package/dist/components/basic/card.d.ts.map +1 -0
  75. package/dist/components/basic/chip.d.ts +13 -0
  76. package/dist/components/basic/chip.d.ts.map +1 -0
  77. package/dist/components/basic/divider.d.ts +9 -0
  78. package/dist/components/basic/divider.d.ts.map +1 -0
  79. package/dist/components/basic/empty.d.ts +12 -0
  80. package/dist/components/basic/empty.d.ts.map +1 -0
  81. package/dist/components/basic/icon.d.ts +12 -0
  82. package/dist/components/basic/icon.d.ts.map +1 -0
  83. package/dist/components/basic/input.d.ts +28 -0
  84. package/dist/components/basic/input.d.ts.map +1 -0
  85. package/dist/components/basic/tag.d.ts +14 -0
  86. package/dist/components/basic/tag.d.ts.map +1 -0
  87. package/dist/components/basic/textarea.d.ts +18 -0
  88. package/dist/components/basic/textarea.d.ts.map +1 -0
  89. package/dist/components/breadcrumb/breadcrumb-item.d.ts +11 -0
  90. package/dist/components/breadcrumb/breadcrumb-item.d.ts.map +1 -0
  91. package/dist/components/breadcrumb/breadcrumb.d.ts +9 -0
  92. package/dist/components/breadcrumb/breadcrumb.d.ts.map +1 -0
  93. package/dist/components/button/button.d.ts +13 -0
  94. package/dist/components/button/button.d.ts.map +1 -0
  95. package/dist/components/card/card.d.ts +18 -0
  96. package/dist/components/card/card.d.ts.map +1 -0
  97. package/dist/components/checkbox/checkbox-group.d.ts +17 -0
  98. package/dist/components/checkbox/checkbox-group.d.ts.map +1 -0
  99. package/dist/components/checkbox/checkbox.d.ts +15 -0
  100. package/dist/components/checkbox/checkbox.d.ts.map +1 -0
  101. package/dist/components/container/callout.d.ts +11 -0
  102. package/dist/components/container/callout.d.ts.map +1 -0
  103. package/dist/components/container/details.d.ts +13 -0
  104. package/dist/components/container/details.d.ts.map +1 -0
  105. package/dist/components/container/scroller.d.ts +16 -0
  106. package/dist/components/container/scroller.d.ts.map +1 -0
  107. package/dist/components/container/split-panel.d.ts +20 -0
  108. package/dist/components/container/split-panel.d.ts.map +1 -0
  109. package/dist/components/data/pagination.d.ts +15 -0
  110. package/dist/components/data/pagination.d.ts.map +1 -0
  111. package/dist/components/data/tab-group.d.ts +8 -0
  112. package/dist/components/data/tab-group.d.ts.map +1 -0
  113. package/dist/components/data/tab-pane.d.ts +11 -0
  114. package/dist/components/data/tab-pane.d.ts.map +1 -0
  115. package/dist/components/data/table.d.ts +30 -0
  116. package/dist/components/data/table.d.ts.map +1 -0
  117. package/dist/components/data/tabs.d.ts +17 -0
  118. package/dist/components/data/tabs.d.ts.map +1 -0
  119. package/dist/components/data/tree.d.ts +21 -0
  120. package/dist/components/data/tree.d.ts.map +1 -0
  121. package/dist/components/display/animated-image.d.ts +13 -0
  122. package/dist/components/display/animated-image.d.ts.map +1 -0
  123. package/dist/components/display/carousel.d.ts +23 -0
  124. package/dist/components/display/carousel.d.ts.map +1 -0
  125. package/dist/components/display/comparison.d.ts +12 -0
  126. package/dist/components/display/comparison.d.ts.map +1 -0
  127. package/dist/components/display/markdown.d.ts +11 -0
  128. package/dist/components/display/markdown.d.ts.map +1 -0
  129. package/dist/components/divider/divider.d.ts +9 -0
  130. package/dist/components/divider/divider.d.ts.map +1 -0
  131. package/dist/components/drawer/drawer.d.ts +29 -0
  132. package/dist/components/drawer/drawer.d.ts.map +1 -0
  133. package/dist/components/dropdown/dropdown.d.ts +34 -0
  134. package/dist/components/dropdown/dropdown.d.ts.map +1 -0
  135. package/dist/components/feedback/alert.d.ts +15 -0
  136. package/dist/components/feedback/alert.d.ts.map +1 -0
  137. package/dist/components/feedback/dialog.d.ts +20 -0
  138. package/dist/components/feedback/dialog.d.ts.map +1 -0
  139. package/dist/components/feedback/drawer.d.ts +29 -0
  140. package/dist/components/feedback/drawer.d.ts.map +1 -0
  141. package/dist/components/feedback/dropdown.d.ts +34 -0
  142. package/dist/components/feedback/dropdown.d.ts.map +1 -0
  143. package/dist/components/feedback/loading.d.ts +13 -0
  144. package/dist/components/feedback/loading.d.ts.map +1 -0
  145. package/dist/components/feedback/modal.d.ts +28 -0
  146. package/dist/components/feedback/modal.d.ts.map +1 -0
  147. package/dist/components/feedback/notification.d.ts +20 -0
  148. package/dist/components/feedback/notification.d.ts.map +1 -0
  149. package/dist/components/feedback/popover.d.ts +16 -0
  150. package/dist/components/feedback/popover.d.ts.map +1 -0
  151. package/dist/components/feedback/toast.d.ts +18 -0
  152. package/dist/components/feedback/toast.d.ts.map +1 -0
  153. package/dist/components/feedback/tooltip.d.ts +18 -0
  154. package/dist/components/feedback/tooltip.d.ts.map +1 -0
  155. package/dist/components/form/checkbox-group.d.ts +17 -0
  156. package/dist/components/form/checkbox-group.d.ts.map +1 -0
  157. package/dist/components/form/checkbox.d.ts +15 -0
  158. package/dist/components/form/checkbox.d.ts.map +1 -0
  159. package/dist/components/form/color-picker.d.ts +17 -0
  160. package/dist/components/form/color-picker.d.ts.map +1 -0
  161. package/dist/components/form/combobox.d.ts +22 -0
  162. package/dist/components/form/combobox.d.ts.map +1 -0
  163. package/dist/components/form/date-picker.d.ts +15 -0
  164. package/dist/components/form/date-picker.d.ts.map +1 -0
  165. package/dist/components/form/form-item.d.ts +15 -0
  166. package/dist/components/form/form-item.d.ts.map +1 -0
  167. package/dist/components/form/form.d.ts +14 -0
  168. package/dist/components/form/form.d.ts.map +1 -0
  169. package/dist/components/form/radio-group.d.ts +15 -0
  170. package/dist/components/form/radio-group.d.ts.map +1 -0
  171. package/dist/components/form/radio.d.ts +12 -0
  172. package/dist/components/form/radio.d.ts.map +1 -0
  173. package/dist/components/form/rate.d.ts +14 -0
  174. package/dist/components/form/rate.d.ts.map +1 -0
  175. package/dist/components/form/select.d.ts +35 -0
  176. package/dist/components/form/select.d.ts.map +1 -0
  177. package/dist/components/form/slider.d.ts +17 -0
  178. package/dist/components/form/slider.d.ts.map +1 -0
  179. package/dist/components/form/switch.d.ts +12 -0
  180. package/dist/components/form/switch.d.ts.map +1 -0
  181. package/dist/components/form/time-picker.d.ts +13 -0
  182. package/dist/components/form/time-picker.d.ts.map +1 -0
  183. package/dist/components/form/transfer.d.ts +24 -0
  184. package/dist/components/form/transfer.d.ts.map +1 -0
  185. package/dist/components/form/upload.d.ts +16 -0
  186. package/dist/components/form/upload.d.ts.map +1 -0
  187. package/dist/components/input/input.d.ts +28 -0
  188. package/dist/components/input/input.d.ts.map +1 -0
  189. package/dist/components/layout/affix.d.ts +23 -0
  190. package/dist/components/layout/affix.d.ts.map +1 -0
  191. package/dist/components/layout/col.d.ts +17 -0
  192. package/dist/components/layout/col.d.ts.map +1 -0
  193. package/dist/components/layout/collapse-item.d.ts +15 -0
  194. package/dist/components/layout/collapse-item.d.ts.map +1 -0
  195. package/dist/components/layout/collapse.d.ts +18 -0
  196. package/dist/components/layout/collapse.d.ts.map +1 -0
  197. package/dist/components/layout/container.d.ts +15 -0
  198. package/dist/components/layout/container.d.ts.map +1 -0
  199. package/dist/components/layout/flex.d.ts +15 -0
  200. package/dist/components/layout/flex.d.ts.map +1 -0
  201. package/dist/components/layout/page-container.d.ts +11 -0
  202. package/dist/components/layout/page-container.d.ts.map +1 -0
  203. package/dist/components/layout/page.d.ts +8 -0
  204. package/dist/components/layout/page.d.ts.map +1 -0
  205. package/dist/components/layout/row.d.ts +13 -0
  206. package/dist/components/layout/row.d.ts.map +1 -0
  207. package/dist/components/layout/space.d.ts +13 -0
  208. package/dist/components/layout/space.d.ts.map +1 -0
  209. package/dist/components/layout/timeline-item.d.ts +12 -0
  210. package/dist/components/layout/timeline-item.d.ts.map +1 -0
  211. package/dist/components/layout/timeline.d.ts +12 -0
  212. package/dist/components/layout/timeline.d.ts.map +1 -0
  213. package/dist/components/modal/modal.d.ts +28 -0
  214. package/dist/components/modal/modal.d.ts.map +1 -0
  215. package/dist/components/navigation/back-top.d.ts +21 -0
  216. package/dist/components/navigation/back-top.d.ts.map +1 -0
  217. package/dist/components/navigation/breadcrumb-item.d.ts +11 -0
  218. package/dist/components/navigation/breadcrumb-item.d.ts.map +1 -0
  219. package/dist/components/navigation/breadcrumb.d.ts +9 -0
  220. package/dist/components/navigation/breadcrumb.d.ts.map +1 -0
  221. package/dist/components/navigation/menu-item.d.ts +16 -0
  222. package/dist/components/navigation/menu-item.d.ts.map +1 -0
  223. package/dist/components/navigation/menu.d.ts +18 -0
  224. package/dist/components/navigation/menu.d.ts.map +1 -0
  225. package/dist/components/navigation/steps.d.ts +14 -0
  226. package/dist/components/navigation/steps.d.ts.map +1 -0
  227. package/dist/components/navigation/sub-menu.d.ts +18 -0
  228. package/dist/components/navigation/sub-menu.d.ts.map +1 -0
  229. package/dist/components/popover/popover.d.ts +16 -0
  230. package/dist/components/popover/popover.d.ts.map +1 -0
  231. package/dist/components/progress/progress-bar.d.ts +12 -0
  232. package/dist/components/progress/progress-bar.d.ts.map +1 -0
  233. package/dist/components/progress/progress-ring.d.ts +13 -0
  234. package/dist/components/progress/progress-ring.d.ts.map +1 -0
  235. package/dist/components/progress/skeleton.d.ts +13 -0
  236. package/dist/components/progress/skeleton.d.ts.map +1 -0
  237. package/dist/components/progress/spinner.d.ts +12 -0
  238. package/dist/components/progress/spinner.d.ts.map +1 -0
  239. package/dist/components/radio/radio-group.d.ts +15 -0
  240. package/dist/components/radio/radio-group.d.ts.map +1 -0
  241. package/dist/components/radio/radio.d.ts +12 -0
  242. package/dist/components/radio/radio.d.ts.map +1 -0
  243. package/dist/components/select/select.d.ts +35 -0
  244. package/dist/components/select/select.d.ts.map +1 -0
  245. package/dist/components/switch/switch.d.ts +12 -0
  246. package/dist/components/switch/switch.d.ts.map +1 -0
  247. package/dist/components/table/table.d.ts +30 -0
  248. package/dist/components/table/table.d.ts.map +1 -0
  249. package/dist/components/tabs/tab-pane.d.ts +11 -0
  250. package/dist/components/tabs/tab-pane.d.ts.map +1 -0
  251. package/dist/components/tabs/tabs.d.ts +15 -0
  252. package/dist/components/tabs/tabs.d.ts.map +1 -0
  253. package/dist/components/tag/tag.d.ts +14 -0
  254. package/dist/components/tag/tag.d.ts.map +1 -0
  255. package/dist/components/tooltip/tooltip.d.ts +18 -0
  256. package/dist/components/tooltip/tooltip.d.ts.map +1 -0
  257. package/dist/core/aithe-element.d.ts +2 -0
  258. package/dist/core/aithe-element.d.ts.map +1 -0
  259. package/dist/core/anchored-overlay.d.ts +17 -0
  260. package/dist/core/anchored-overlay.d.ts.map +1 -0
  261. package/dist/core/floating.d.ts +12 -0
  262. package/dist/core/floating.d.ts.map +1 -0
  263. package/dist/core/styles.d.ts +8 -0
  264. package/dist/core/styles.d.ts.map +1 -0
  265. package/dist/core/types.d.ts +33 -0
  266. package/dist/core/types.d.ts.map +1 -0
  267. package/dist/core/utils.d.ts +6 -0
  268. package/dist/core/utils.d.ts.map +1 -0
  269. package/dist/demo/app.d.ts +19 -0
  270. package/dist/demo/app.d.ts.map +1 -0
  271. package/dist/demo/editor.d.ts +28 -0
  272. package/dist/demo/editor.d.ts.map +1 -0
  273. package/dist/demo/helpers.d.ts +2 -0
  274. package/dist/demo/helpers.d.ts.map +1 -0
  275. package/dist/demo/pages/basic.d.ts +3 -0
  276. package/dist/demo/pages/basic.d.ts.map +1 -0
  277. package/dist/demo/pages/container.d.ts +3 -0
  278. package/dist/demo/pages/container.d.ts.map +1 -0
  279. package/dist/demo/pages/data.d.ts +3 -0
  280. package/dist/demo/pages/data.d.ts.map +1 -0
  281. package/dist/demo/pages/display.d.ts +3 -0
  282. package/dist/demo/pages/display.d.ts.map +1 -0
  283. package/dist/demo/pages/feedback.d.ts +3 -0
  284. package/dist/demo/pages/feedback.d.ts.map +1 -0
  285. package/dist/demo/pages/form.d.ts +3 -0
  286. package/dist/demo/pages/form.d.ts.map +1 -0
  287. package/dist/demo/pages/layout.d.ts +3 -0
  288. package/dist/demo/pages/layout.d.ts.map +1 -0
  289. package/dist/demo/pages/navigation.d.ts +3 -0
  290. package/dist/demo/pages/navigation.d.ts.map +1 -0
  291. package/dist/demo/pages/progress.d.ts +3 -0
  292. package/dist/demo/pages/progress.d.ts.map +1 -0
  293. package/dist/demo/standalone.d.ts +2 -0
  294. package/dist/demo/standalone.d.ts.map +1 -0
  295. package/dist/demo-page.d.ts +2 -0
  296. package/dist/demo-page.d.ts.map +1 -0
  297. package/dist/demo.d.ts +2 -0
  298. package/dist/demo.d.ts.map +1 -0
  299. package/dist/global.d.ts +5 -0
  300. package/dist/global.d.ts.map +1 -0
  301. package/dist/index-jd7NIlfT.js +9798 -0
  302. package/dist/index-jd7NIlfT.js.map +1 -0
  303. package/dist/index.d.ts +80 -0
  304. package/dist/index.d.ts.map +1 -0
  305. package/dist/index.js +9728 -0
  306. package/dist/index.js.map +1 -0
  307. package/dist/index.umd.js +7189 -0
  308. package/dist/index.umd.js.map +1 -0
  309. package/dist/index2.js +9892 -0
  310. package/dist/index2.js.map +1 -0
  311. package/dist/src/base/aithe-element.d.ts +59 -0
  312. package/dist/src/base/aithe-element.d.ts.map +1 -0
  313. package/dist/src/components/basic/avatar.d.ts +31 -0
  314. package/dist/src/components/basic/avatar.d.ts.map +1 -0
  315. package/dist/src/components/basic/badge.d.ts +33 -0
  316. package/dist/src/components/basic/badge.d.ts.map +1 -0
  317. package/dist/src/components/basic/button-group.d.ts +23 -0
  318. package/dist/src/components/basic/button-group.d.ts.map +1 -0
  319. package/dist/src/components/basic/button.d.ts +44 -0
  320. package/dist/src/components/basic/button.d.ts.map +1 -0
  321. package/dist/src/components/basic/card.d.ts +38 -0
  322. package/dist/src/components/basic/card.d.ts.map +1 -0
  323. package/dist/src/components/basic/chip.d.ts +26 -0
  324. package/dist/src/components/basic/chip.d.ts.map +1 -0
  325. package/dist/src/components/basic/divider.d.ts +23 -0
  326. package/dist/src/components/basic/divider.d.ts.map +1 -0
  327. package/dist/src/components/basic/empty.d.ts +21 -0
  328. package/dist/src/components/basic/empty.d.ts.map +1 -0
  329. package/dist/src/components/basic/icon.d.ts +60 -0
  330. package/dist/src/components/basic/icon.d.ts.map +1 -0
  331. package/dist/src/components/basic/input.d.ts +57 -0
  332. package/dist/src/components/basic/input.d.ts.map +1 -0
  333. package/dist/src/components/basic/tag.d.ts +34 -0
  334. package/dist/src/components/basic/tag.d.ts.map +1 -0
  335. package/dist/src/components/basic/textarea.d.ts +34 -0
  336. package/dist/src/components/basic/textarea.d.ts.map +1 -0
  337. package/dist/src/components/container/callout.d.ts +23 -0
  338. package/dist/src/components/container/callout.d.ts.map +1 -0
  339. package/dist/src/components/container/details.d.ts +29 -0
  340. package/dist/src/components/container/details.d.ts.map +1 -0
  341. package/dist/src/components/container/scroller.d.ts +32 -0
  342. package/dist/src/components/container/scroller.d.ts.map +1 -0
  343. package/dist/src/components/container/split-panel.d.ts +38 -0
  344. package/dist/src/components/container/split-panel.d.ts.map +1 -0
  345. package/dist/src/components/data/pagination.d.ts +27 -0
  346. package/dist/src/components/data/pagination.d.ts.map +1 -0
  347. package/dist/src/components/data/tab-pane.d.ts +33 -0
  348. package/dist/src/components/data/tab-pane.d.ts.map +1 -0
  349. package/dist/src/components/data/table-column.d.ts +46 -0
  350. package/dist/src/components/data/table-column.d.ts.map +1 -0
  351. package/dist/src/components/data/table.d.ts +88 -0
  352. package/dist/src/components/data/table.d.ts.map +1 -0
  353. package/dist/src/components/data/tabs.d.ts +38 -0
  354. package/dist/src/components/data/tabs.d.ts.map +1 -0
  355. package/dist/src/components/data/timeline-item.d.ts +24 -0
  356. package/dist/src/components/data/timeline-item.d.ts.map +1 -0
  357. package/dist/src/components/data/timeline.d.ts +49 -0
  358. package/dist/src/components/data/timeline.d.ts.map +1 -0
  359. package/dist/src/components/data/tree-menu.d.ts +43 -0
  360. package/dist/src/components/data/tree-menu.d.ts.map +1 -0
  361. package/dist/src/components/data/tree.d.ts +45 -0
  362. package/dist/src/components/data/tree.d.ts.map +1 -0
  363. package/dist/src/components/display/animated-image.d.ts +25 -0
  364. package/dist/src/components/display/animated-image.d.ts.map +1 -0
  365. package/dist/src/components/display/carousel.d.ts +41 -0
  366. package/dist/src/components/display/carousel.d.ts.map +1 -0
  367. package/dist/src/components/display/comparison.d.ts +24 -0
  368. package/dist/src/components/display/comparison.d.ts.map +1 -0
  369. package/dist/src/components/display/markdown.d.ts +19 -0
  370. package/dist/src/components/display/markdown.d.ts.map +1 -0
  371. package/dist/src/components/feedback/alert.d.ts +32 -0
  372. package/dist/src/components/feedback/alert.d.ts.map +1 -0
  373. package/dist/src/components/feedback/dialog.d.ts +42 -0
  374. package/dist/src/components/feedback/dialog.d.ts.map +1 -0
  375. package/dist/src/components/feedback/drawer.d.ts +59 -0
  376. package/dist/src/components/feedback/drawer.d.ts.map +1 -0
  377. package/dist/src/components/feedback/dropdown.d.ts +70 -0
  378. package/dist/src/components/feedback/dropdown.d.ts.map +1 -0
  379. package/dist/src/components/feedback/loading.d.ts +27 -0
  380. package/dist/src/components/feedback/loading.d.ts.map +1 -0
  381. package/dist/src/components/feedback/modal.d.ts +58 -0
  382. package/dist/src/components/feedback/modal.d.ts.map +1 -0
  383. package/dist/src/components/feedback/notification.d.ts +35 -0
  384. package/dist/src/components/feedback/notification.d.ts.map +1 -0
  385. package/dist/src/components/feedback/popover.d.ts +35 -0
  386. package/dist/src/components/feedback/popover.d.ts.map +1 -0
  387. package/dist/src/components/feedback/toast.d.ts +35 -0
  388. package/dist/src/components/feedback/toast.d.ts.map +1 -0
  389. package/dist/src/components/feedback/tooltip.d.ts +41 -0
  390. package/dist/src/components/feedback/tooltip.d.ts.map +1 -0
  391. package/dist/src/components/form/checkbox-group.d.ts +38 -0
  392. package/dist/src/components/form/checkbox-group.d.ts.map +1 -0
  393. package/dist/src/components/form/checkbox.d.ts +35 -0
  394. package/dist/src/components/form/checkbox.d.ts.map +1 -0
  395. package/dist/src/components/form/color-picker.d.ts +32 -0
  396. package/dist/src/components/form/color-picker.d.ts.map +1 -0
  397. package/dist/src/components/form/combobox.d.ts +45 -0
  398. package/dist/src/components/form/combobox.d.ts.map +1 -0
  399. package/dist/src/components/form/date-picker.d.ts +30 -0
  400. package/dist/src/components/form/date-picker.d.ts.map +1 -0
  401. package/dist/src/components/form/form-item.d.ts +34 -0
  402. package/dist/src/components/form/form-item.d.ts.map +1 -0
  403. package/dist/src/components/form/form.d.ts +32 -0
  404. package/dist/src/components/form/form.d.ts.map +1 -0
  405. package/dist/src/components/form/radio-group.d.ts +34 -0
  406. package/dist/src/components/form/radio-group.d.ts.map +1 -0
  407. package/dist/src/components/form/radio.d.ts +30 -0
  408. package/dist/src/components/form/radio.d.ts.map +1 -0
  409. package/dist/src/components/form/rate.d.ts +27 -0
  410. package/dist/src/components/form/rate.d.ts.map +1 -0
  411. package/dist/src/components/form/select.d.ts +74 -0
  412. package/dist/src/components/form/select.d.ts.map +1 -0
  413. package/dist/src/components/form/slider.d.ts +33 -0
  414. package/dist/src/components/form/slider.d.ts.map +1 -0
  415. package/dist/src/components/form/switch.d.ts +28 -0
  416. package/dist/src/components/form/switch.d.ts.map +1 -0
  417. package/dist/src/components/form/time-picker.d.ts +26 -0
  418. package/dist/src/components/form/time-picker.d.ts.map +1 -0
  419. package/dist/src/components/form/transfer.d.ts +42 -0
  420. package/dist/src/components/form/transfer.d.ts.map +1 -0
  421. package/dist/src/components/form/upload.d.ts +34 -0
  422. package/dist/src/components/form/upload.d.ts.map +1 -0
  423. package/dist/src/components/layout/affix.d.ts +35 -0
  424. package/dist/src/components/layout/affix.d.ts.map +1 -0
  425. package/dist/src/components/layout/col.d.ts +32 -0
  426. package/dist/src/components/layout/col.d.ts.map +1 -0
  427. package/dist/src/components/layout/collapse-item.d.ts +31 -0
  428. package/dist/src/components/layout/collapse-item.d.ts.map +1 -0
  429. package/dist/src/components/layout/collapse.d.ts +31 -0
  430. package/dist/src/components/layout/collapse.d.ts.map +1 -0
  431. package/dist/src/components/layout/container.d.ts +30 -0
  432. package/dist/src/components/layout/container.d.ts.map +1 -0
  433. package/dist/src/components/layout/flex.d.ts +31 -0
  434. package/dist/src/components/layout/flex.d.ts.map +1 -0
  435. package/dist/src/components/layout/page-container.d.ts +22 -0
  436. package/dist/src/components/layout/page-container.d.ts.map +1 -0
  437. package/dist/src/components/layout/page.d.ts +26 -0
  438. package/dist/src/components/layout/page.d.ts.map +1 -0
  439. package/dist/src/components/layout/row.d.ts +27 -0
  440. package/dist/src/components/layout/row.d.ts.map +1 -0
  441. package/dist/src/components/layout/space.d.ts +27 -0
  442. package/dist/src/components/layout/space.d.ts.map +1 -0
  443. package/dist/src/components/layout/timeline-item.d.ts +24 -0
  444. package/dist/src/components/layout/timeline-item.d.ts.map +1 -0
  445. package/dist/src/components/layout/timeline.d.ts +49 -0
  446. package/dist/src/components/layout/timeline.d.ts.map +1 -0
  447. package/dist/src/components/navigation/back-top.d.ts +30 -0
  448. package/dist/src/components/navigation/back-top.d.ts.map +1 -0
  449. package/dist/src/components/navigation/breadcrumb-item.d.ts +26 -0
  450. package/dist/src/components/navigation/breadcrumb-item.d.ts.map +1 -0
  451. package/dist/src/components/navigation/breadcrumb.d.ts +24 -0
  452. package/dist/src/components/navigation/breadcrumb.d.ts.map +1 -0
  453. package/dist/src/components/navigation/dropdown.d.ts +70 -0
  454. package/dist/src/components/navigation/dropdown.d.ts.map +1 -0
  455. package/dist/src/components/navigation/menu-item.d.ts +33 -0
  456. package/dist/src/components/navigation/menu-item.d.ts.map +1 -0
  457. package/dist/src/components/navigation/menu.d.ts +35 -0
  458. package/dist/src/components/navigation/menu.d.ts.map +1 -0
  459. package/dist/src/components/navigation/steps.d.ts +31 -0
  460. package/dist/src/components/navigation/steps.d.ts.map +1 -0
  461. package/dist/src/components/navigation/sub-menu.d.ts +37 -0
  462. package/dist/src/components/navigation/sub-menu.d.ts.map +1 -0
  463. package/dist/src/components/navigation/theme-picker.d.ts +27 -0
  464. package/dist/src/components/navigation/theme-picker.d.ts.map +1 -0
  465. package/dist/src/components/progress/progress-bar.d.ts +21 -0
  466. package/dist/src/components/progress/progress-bar.d.ts.map +1 -0
  467. package/dist/src/components/progress/progress-ring.d.ts +23 -0
  468. package/dist/src/components/progress/progress-ring.d.ts.map +1 -0
  469. package/dist/src/components/progress/skeleton.d.ts +28 -0
  470. package/dist/src/components/progress/skeleton.d.ts.map +1 -0
  471. package/dist/src/components/progress/spinner.d.ts +21 -0
  472. package/dist/src/components/progress/spinner.d.ts.map +1 -0
  473. package/dist/src/components/theme/locale-switch.d.ts +24 -0
  474. package/dist/src/components/theme/locale-switch.d.ts.map +1 -0
  475. package/dist/src/components/theme/theme-picker.d.ts +43 -0
  476. package/dist/src/components/theme/theme-picker.d.ts.map +1 -0
  477. package/dist/src/components/theme/theme-preview.d.ts +29 -0
  478. package/dist/src/components/theme/theme-preview.d.ts.map +1 -0
  479. package/dist/src/core/aithe-element.d.ts +2 -0
  480. package/dist/src/core/aithe-element.d.ts.map +1 -0
  481. package/dist/src/core/anchored-overlay.d.ts +43 -0
  482. package/dist/src/core/anchored-overlay.d.ts.map +1 -0
  483. package/dist/src/core/floating.d.ts +43 -0
  484. package/dist/src/core/floating.d.ts.map +1 -0
  485. package/dist/src/core/i18n/index.d.ts +125 -0
  486. package/dist/src/core/i18n/index.d.ts.map +1 -0
  487. package/dist/src/core/i18n/locales/en-US.d.ts +7 -0
  488. package/dist/src/core/i18n/locales/en-US.d.ts.map +1 -0
  489. package/dist/src/core/i18n/locales/en.d.ts +3 -0
  490. package/dist/src/core/i18n/locales/en.d.ts.map +1 -0
  491. package/dist/src/core/i18n/locales/index.d.ts +7 -0
  492. package/dist/src/core/i18n/locales/index.d.ts.map +1 -0
  493. package/dist/src/core/i18n/locales/zh-CN.d.ts +7 -0
  494. package/dist/src/core/i18n/locales/zh-CN.d.ts.map +1 -0
  495. package/dist/src/core/i18n/locales/zh.d.ts +3 -0
  496. package/dist/src/core/i18n/locales/zh.d.ts.map +1 -0
  497. package/dist/src/core/styles.d.ts +17 -0
  498. package/dist/src/core/styles.d.ts.map +1 -0
  499. package/dist/src/core/types.d.ts +127 -0
  500. package/dist/src/core/types.d.ts.map +1 -0
  501. package/dist/src/core/utils.d.ts +44 -0
  502. package/dist/src/core/utils.d.ts.map +1 -0
  503. package/dist/src/global.d.ts +25 -0
  504. package/dist/src/global.d.ts.map +1 -0
  505. package/dist/src/index.d.ts +86 -0
  506. package/dist/src/index.d.ts.map +1 -0
  507. package/dist/src/styles/global.css.d.ts +5 -0
  508. package/dist/src/styles/global.css.d.ts.map +1 -0
  509. package/dist/src/styles/mixins.d.ts +9 -0
  510. package/dist/src/styles/mixins.d.ts.map +1 -0
  511. package/dist/src/styles/theme/amber.d.ts +3 -0
  512. package/dist/src/styles/theme/amber.d.ts.map +1 -0
  513. package/dist/src/styles/theme/blue.d.ts +3 -0
  514. package/dist/src/styles/theme/blue.d.ts.map +1 -0
  515. package/dist/src/styles/theme/charcoal.d.ts +3 -0
  516. package/dist/src/styles/theme/charcoal.d.ts.map +1 -0
  517. package/dist/src/styles/theme/cyan.d.ts +3 -0
  518. package/dist/src/styles/theme/cyan.d.ts.map +1 -0
  519. package/dist/src/styles/theme/dark.d.ts +3 -0
  520. package/dist/src/styles/theme/dark.d.ts.map +1 -0
  521. package/dist/src/styles/theme/ebony.d.ts +3 -0
  522. package/dist/src/styles/theme/ebony.d.ts.map +1 -0
  523. package/dist/src/styles/theme/festive.d.ts +3 -0
  524. package/dist/src/styles/theme/festive.d.ts.map +1 -0
  525. package/dist/src/styles/theme/graphite.d.ts +3 -0
  526. package/dist/src/styles/theme/graphite.d.ts.map +1 -0
  527. package/dist/src/styles/theme/gray.d.ts +3 -0
  528. package/dist/src/styles/theme/gray.d.ts.map +1 -0
  529. package/dist/src/styles/theme/indigo.d.ts +3 -0
  530. package/dist/src/styles/theme/indigo.d.ts.map +1 -0
  531. package/dist/src/styles/theme/ink.d.ts +3 -0
  532. package/dist/src/styles/theme/ink.d.ts.map +1 -0
  533. package/dist/src/styles/theme/light.d.ts +3 -0
  534. package/dist/src/styles/theme/light.d.ts.map +1 -0
  535. package/dist/src/styles/theme/midnight.d.ts +3 -0
  536. package/dist/src/styles/theme/midnight.d.ts.map +1 -0
  537. package/dist/src/styles/theme/navy.d.ts +3 -0
  538. package/dist/src/styles/theme/navy.d.ts.map +1 -0
  539. package/dist/src/styles/theme/obsidian.d.ts +3 -0
  540. package/dist/src/styles/theme/obsidian.d.ts.map +1 -0
  541. package/dist/src/styles/theme/onyx.d.ts +3 -0
  542. package/dist/src/styles/theme/onyx.d.ts.map +1 -0
  543. package/dist/src/styles/theme/orange.d.ts +3 -0
  544. package/dist/src/styles/theme/orange.d.ts.map +1 -0
  545. package/dist/src/styles/theme/pink.d.ts +3 -0
  546. package/dist/src/styles/theme/pink.d.ts.map +1 -0
  547. package/dist/src/styles/theme/purple.d.ts +3 -0
  548. package/dist/src/styles/theme/purple.d.ts.map +1 -0
  549. package/dist/src/styles/theme/raisin.d.ts +3 -0
  550. package/dist/src/styles/theme/raisin.d.ts.map +1 -0
  551. package/dist/src/styles/theme/slate.d.ts +3 -0
  552. package/dist/src/styles/theme/slate.d.ts.map +1 -0
  553. package/dist/src/styles/theme/teal.d.ts +3 -0
  554. package/dist/src/styles/theme/teal.d.ts.map +1 -0
  555. package/dist/src/styles/theme.d.ts +11 -0
  556. package/dist/src/styles/theme.d.ts.map +1 -0
  557. package/dist/src/types/component.d.ts +11 -0
  558. package/dist/src/types/component.d.ts.map +1 -0
  559. package/dist/src/types/index.d.ts +4 -0
  560. package/dist/src/types/index.d.ts.map +1 -0
  561. package/dist/src/types/theme.d.ts +17 -0
  562. package/dist/src/types/theme.d.ts.map +1 -0
  563. package/dist/src/utils/dom.d.ts +26 -0
  564. package/dist/src/utils/dom.d.ts.map +1 -0
  565. package/dist/src/utils/events.d.ts +11 -0
  566. package/dist/src/utils/events.d.ts.map +1 -0
  567. package/dist/src/utils/index.d.ts +6 -0
  568. package/dist/src/utils/index.d.ts.map +1 -0
  569. package/dist/src/utils/theme.d.ts +46 -0
  570. package/dist/src/utils/theme.d.ts.map +1 -0
  571. package/dist/src/utils/validation.d.ts +30 -0
  572. package/dist/src/utils/validation.d.ts.map +1 -0
  573. package/dist/styles/global.css.d.ts +3 -0
  574. package/dist/styles/global.css.d.ts.map +1 -0
  575. package/dist/styles/mixins.d.ts +5 -0
  576. package/dist/styles/mixins.d.ts.map +1 -0
  577. package/dist/styles/theme/blue.d.ts +2 -0
  578. package/dist/styles/theme/blue.d.ts.map +1 -0
  579. package/dist/styles/theme/dark.d.ts +2 -0
  580. package/dist/styles/theme/dark.d.ts.map +1 -0
  581. package/dist/styles/theme/gray.d.ts +2 -0
  582. package/dist/styles/theme/gray.d.ts.map +1 -0
  583. package/dist/styles/theme/light.d.ts +2 -0
  584. package/dist/styles/theme/light.d.ts.map +1 -0
  585. package/dist/styles/theme.d.ts +3 -0
  586. package/dist/styles/theme.d.ts.map +1 -0
  587. package/dist/types/component.d.ts +11 -0
  588. package/dist/types/component.d.ts.map +1 -0
  589. package/dist/types/index.d.ts +4 -0
  590. package/dist/types/index.d.ts.map +1 -0
  591. package/dist/types/theme.d.ts +17 -0
  592. package/dist/types/theme.d.ts.map +1 -0
  593. package/dist/utils/dom.d.ts +4 -0
  594. package/dist/utils/dom.d.ts.map +1 -0
  595. package/dist/utils/events.d.ts +2 -0
  596. package/dist/utils/events.d.ts.map +1 -0
  597. package/dist/utils/index.d.ts +6 -0
  598. package/dist/utils/index.d.ts.map +1 -0
  599. package/dist/utils/theme.d.ts +9 -0
  600. package/dist/utils/theme.d.ts.map +1 -0
  601. package/dist/utils/validation.d.ts +4 -0
  602. package/dist/utils/validation.d.ts.map +1 -0
  603. package/docs/api/basic/avatar.md +33 -0
  604. package/docs/api/basic/badge.md +34 -0
  605. package/docs/api/basic/button-group.md +32 -0
  606. package/docs/api/basic/button.md +38 -0
  607. package/docs/api/basic/card.md +43 -0
  608. package/docs/api/basic/chip.md +30 -0
  609. package/docs/api/basic/divider.md +31 -0
  610. package/docs/api/basic/empty.md +29 -0
  611. package/docs/api/basic/icon.md +245 -0
  612. package/docs/api/basic/input.md +43 -0
  613. package/docs/api/basic/tag.md +34 -0
  614. package/docs/api/basic/textarea.md +34 -0
  615. package/docs/api/container/callout.md +30 -0
  616. package/docs/api/container/details.md +31 -0
  617. package/docs/api/container/scroller.md +33 -0
  618. package/docs/api/container/split-panel.md +35 -0
  619. package/docs/api/data/pagination.md +31 -0
  620. package/docs/api/data/tab-pane.md +36 -0
  621. package/docs/api/data/table-column.md +58 -0
  622. package/docs/api/data/table.md +89 -0
  623. package/docs/api/data/tabs.md +35 -0
  624. package/docs/api/data/timeline-item.md +32 -0
  625. package/docs/api/data/timeline.md +67 -0
  626. package/docs/api/data/tree-menu.md +58 -0
  627. package/docs/api/data/tree.md +51 -0
  628. package/docs/api/display/animated-image.md +31 -0
  629. package/docs/api/display/carousel.md +35 -0
  630. package/docs/api/display/comparison.md +31 -0
  631. package/docs/api/display/markdown.md +29 -0
  632. package/docs/api/feedback/alert.md +35 -0
  633. package/docs/api/feedback/dialog.md +37 -0
  634. package/docs/api/feedback/drawer.md +39 -0
  635. package/docs/api/feedback/loading.md +34 -0
  636. package/docs/api/feedback/modal.md +40 -0
  637. package/docs/api/feedback/notification.md +33 -0
  638. package/docs/api/feedback/popover.md +32 -0
  639. package/docs/api/feedback/toast.md +33 -0
  640. package/docs/api/feedback/tooltip.md +34 -0
  641. package/docs/api/form/checkbox-group.md +34 -0
  642. package/docs/api/form/checkbox.md +34 -0
  643. package/docs/api/form/color-picker.md +33 -0
  644. package/docs/api/form/combobox.md +49 -0
  645. package/docs/api/form/date-picker.md +33 -0
  646. package/docs/api/form/form-item.md +35 -0
  647. package/docs/api/form/form.md +34 -0
  648. package/docs/api/form/radio-group.md +33 -0
  649. package/docs/api/form/radio.md +33 -0
  650. package/docs/api/form/rate.md +31 -0
  651. package/docs/api/form/select.md +56 -0
  652. package/docs/api/form/slider.md +34 -0
  653. package/docs/api/form/switch.md +31 -0
  654. package/docs/api/form/time-picker.md +31 -0
  655. package/docs/api/form/transfer.md +36 -0
  656. package/docs/api/form/upload.md +36 -0
  657. package/docs/api/layout/affix.md +31 -0
  658. package/docs/api/layout/col.md +35 -0
  659. package/docs/api/layout/collapse-item.md +34 -0
  660. package/docs/api/layout/collapse.md +32 -0
  661. package/docs/api/layout/container.md +35 -0
  662. package/docs/api/layout/flex.md +36 -0
  663. package/docs/api/layout/page-container.md +31 -0
  664. package/docs/api/layout/page.md +35 -0
  665. package/docs/api/layout/row.md +34 -0
  666. package/docs/api/layout/space.md +34 -0
  667. package/docs/api/navigation/back-top.md +29 -0
  668. package/docs/api/navigation/breadcrumb-item.md +32 -0
  669. package/docs/api/navigation/breadcrumb.md +32 -0
  670. package/docs/api/navigation/dropdown.md +50 -0
  671. package/docs/api/navigation/menu-item.md +34 -0
  672. package/docs/api/navigation/menu.md +36 -0
  673. package/docs/api/navigation/steps.md +32 -0
  674. package/docs/api/navigation/sub-menu.md +38 -0
  675. package/docs/api/progress/progress-bar.md +30 -0
  676. package/docs/api/progress/progress-ring.md +31 -0
  677. package/docs/api/progress/skeleton.md +34 -0
  678. package/docs/api/progress/spinner.md +30 -0
  679. package/docs/api/summary.md +162 -0
  680. package/docs/api/theme/locale-switch.md +98 -0
  681. package/docs/api/theme/theme-picker.md +37 -0
  682. package/docs/api/theme/theme-preview.md +29 -0
  683. package/docs/changelog/CHANGELOG.md +71 -0
  684. package/docs/changelog/VERSION_26.2.2.md +608 -0
  685. package/docs/framework-integration.md +422 -0
  686. package/docs/guide.md +326 -0
  687. package/docs/i18n.md +269 -0
  688. package/docs/issue/issue_26.2.2.1.md +58 -0
  689. package/docs/issue/issue_26.2.2.2.md +53 -0
  690. package/docs/issue/issue_26.2.2.3.md +86 -0
  691. package/docs/issue/issue_26.2.2.4.md +95 -0
  692. package/docs/quickstart.md +115 -0
  693. package/docs/theming.md +257 -0
  694. package/package.json +80 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["t","e","s","o","n","r","i","S","c","i","e","h","r","o","n","a","c","l","p","d","u","f","b","y","t","s","t","i","s","e","o","n","r","i","t","e","r","o","t","o","e","t","r","n","t","e","e","t","o","t","t","e","i","e","s","i","r","t","o","e","r","s","t","o","t","s","t","n","i","r"],"sources":["../node_modules/@lit/reactive-element/css-tag.js","../node_modules/@lit/reactive-element/reactive-element.js","../node_modules/lit-html/lit-html.js","../node_modules/lit-element/lit-element.js","../src/styles/global.css.ts","../src/styles/theme/amber.ts","../src/styles/theme/blue.ts","../src/styles/theme/charcoal.ts","../src/styles/theme/cyan.ts","../src/styles/theme/dark.ts","../src/styles/theme/ebony.ts","../src/styles/theme/festive.ts","../src/styles/theme/graphite.ts","../src/styles/theme/gray.ts","../src/styles/theme/indigo.ts","../src/styles/theme/ink.ts","../src/styles/theme/light.ts","../src/styles/theme/midnight.ts","../src/styles/theme/navy.ts","../src/styles/theme/obsidian.ts","../src/styles/theme/onyx.ts","../src/styles/theme/orange.ts","../src/styles/theme/pink.ts","../src/styles/theme/purple.ts","../src/styles/theme/raisin.ts","../src/styles/theme/slate.ts","../src/styles/theme/teal.ts","../src/styles/theme.ts","../src/utils/dom.ts","../src/utils/events.ts","../src/utils/theme.ts","../src/utils/validation.ts","../src/core/utils.ts","../src/core/i18n/locales/en-US.ts","../src/core/i18n/locales/zh-CN.ts","../src/core/i18n/index.ts","../src/global.ts","../node_modules/@lit/reactive-element/decorators/custom-element.js","../node_modules/@lit/reactive-element/decorators/property.js","../node_modules/@lit/reactive-element/decorators/state.js","../node_modules/@lit/reactive-element/decorators/base.js","../node_modules/@lit/reactive-element/decorators/query.js","../node_modules/@lit/reactive-element/decorators/query-assigned-elements.js","../src/base/aithe-element.ts","../src/styles/mixins.ts","../src/core/styles.ts","../src/components/basic/icon.ts","../node_modules/lit-html/directive.js","../node_modules/lit-html/directives/class-map.js","../src/components/basic/button.ts","../node_modules/lit-html/directives/style-map.js","../src/components/basic/button-group.ts","../node_modules/lit-html/directives/if-defined.js","../src/components/basic/input.ts","../src/components/basic/textarea.ts","../src/components/basic/card.ts","../src/components/basic/badge.ts","../src/components/basic/tag.ts","../src/components/basic/avatar.ts","../src/components/basic/divider.ts","../src/components/basic/empty.ts","../src/components/basic/chip.ts","../src/components/layout/container.ts","../src/components/layout/row.ts","../src/components/layout/col.ts","../src/components/layout/flex.ts","../src/components/layout/space.ts","../src/components/layout/page-container.ts","../src/components/layout/collapse.ts","../src/components/layout/collapse-item.ts","../src/components/layout/affix.ts","../src/components/layout/page.ts","../src/components/navigation/menu.ts","../src/components/navigation/menu-item.ts","../src/components/navigation/sub-menu.ts","../src/components/navigation/breadcrumb.ts","../src/components/navigation/breadcrumb-item.ts","../src/components/navigation/steps.ts","../src/components/navigation/back-top.ts","../src/core/floating.ts","../src/components/theme/theme-picker.ts","../src/components/theme/theme-preview.ts","../src/components/theme/locale-switch.ts","../src/components/form/checkbox.ts","../src/components/form/checkbox-group.ts","../src/components/form/radio.ts","../src/components/form/radio-group.ts","../src/core/anchored-overlay.ts","../src/components/form/select.ts","../src/components/form/switch.ts","../src/components/form/color-picker.ts","../src/components/form/combobox.ts","../src/components/form/date-picker.ts","../src/components/form/time-picker.ts","../src/components/form/slider.ts","../src/components/form/rate.ts","../src/components/form/form.ts","../src/components/form/form-item.ts","../src/components/form/upload.ts","../src/components/form/transfer.ts","../src/components/feedback/dialog.ts","../src/components/feedback/modal.ts","../src/components/feedback/drawer.ts","../src/components/feedback/tooltip.ts","../src/components/feedback/popover.ts","../src/components/navigation/dropdown.ts","../src/components/feedback/toast.ts","../src/components/feedback/alert.ts","../src/components/feedback/notification.ts","../src/components/feedback/loading.ts","../src/components/data/table-column.ts","../src/components/data/table.ts","../src/components/data/timeline-item.ts","../src/components/data/timeline.ts","../src/components/data/tabs.ts","../src/components/data/tab-pane.ts","../src/components/data/tree.ts","../src/components/data/tree-menu.ts","../src/components/data/pagination.ts","../src/components/display/carousel.ts","../src/components/display/comparison.ts","../src/components/display/animated-image.ts","../node_modules/lit-html/directives/unsafe-html.js","../src/components/display/markdown.ts","../src/components/progress/progress-bar.ts","../src/components/progress/progress-ring.ts","../src/components/progress/spinner.ts","../src/components/progress/skeleton.ts","../src/components/container/callout.ts","../src/components/container/details.ts","../src/components/container/scroller.ts","../src/components/container/split-panel.ts","../src/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,s=Symbol(),o=new WeakMap;class n{constructor(t,e,o){if(this._$cssResult$=!0,o!==s)throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const s=this.t;if(e&&void 0===t){const e=void 0!==s&&1===s.length;e&&(t=o.get(s)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&o.set(s,t))}return t}toString(){return this.cssText}}const r=t=>new n(\"string\"==typeof t?t:t+\"\",void 0,s),i=(t,...e)=>{const o=1===t.length?t[0]:e.reduce((e,s,o)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if(\"number\"==typeof t)return t;throw Error(\"Value passed to 'css' function must be a 'css' function result: \"+t+\". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\")})(s)+t[o+1],t[0]);return new n(o,t,s)},S=(s,o)=>{if(e)s.adoptedStyleSheets=o.map(t=>t instanceof CSSStyleSheet?t:t.styleSheet);else for(const e of o){const o=document.createElement(\"style\"),n=t.litNonce;void 0!==n&&o.setAttribute(\"nonce\",n),o.textContent=e.cssText,s.appendChild(o)}},c=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e=\"\";for(const s of t.cssRules)e+=s.cssText;return r(e)})(t):t;export{n as CSSResult,S as adoptStyles,i as css,c as getCompatibleStyle,e as supportsAdoptingStyleSheets,r as unsafeCSS};\n//# sourceMappingURL=css-tag.js.map\n","import{getCompatibleStyle as t,adoptStyles as s}from\"./css-tag.js\";export{CSSResult,css,supportsAdoptingStyleSheets,unsafeCSS}from\"./css-tag.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{is:i,defineProperty:e,getOwnPropertyDescriptor:h,getOwnPropertyNames:r,getOwnPropertySymbols:o,getPrototypeOf:n}=Object,a=globalThis,c=a.trustedTypes,l=c?c.emptyScript:\"\",p=a.reactiveElementPolyfillSupport,d=(t,s)=>t,u={toAttribute(t,s){switch(s){case Boolean:t=t?l:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,s){let i=t;switch(s){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},f=(t,s)=>!i(t,s),b={attribute:!0,type:String,converter:u,reflect:!1,useDefault:!1,hasChanged:f};Symbol.metadata??=Symbol(\"metadata\"),a.litPropertyMetadata??=new WeakMap;class y extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,s=b){if(s.state&&(s.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((s=Object.create(s)).wrapped=!0),this.elementProperties.set(t,s),!s.noAccessor){const i=Symbol(),h=this.getPropertyDescriptor(t,i,s);void 0!==h&&e(this.prototype,t,h)}}static getPropertyDescriptor(t,s,i){const{get:e,set:r}=h(this.prototype,t)??{get(){return this[s]},set(t){this[s]=t}};return{get:e,set(s){const h=e?.call(this);r?.call(this,s),this.requestUpdate(t,h,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??b}static _$Ei(){if(this.hasOwnProperty(d(\"elementProperties\")))return;const t=n(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(d(\"finalized\")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(d(\"properties\"))){const t=this.properties,s=[...r(t),...o(t)];for(const i of s)this.createProperty(i,t[i])}const t=this[Symbol.metadata];if(null!==t){const s=litPropertyMetadata.get(t);if(void 0!==s)for(const[t,i]of s)this.elementProperties.set(t,i)}this._$Eh=new Map;for(const[t,s]of this.elementProperties){const i=this._$Eu(t,s);void 0!==i&&this._$Eh.set(i,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(s){const i=[];if(Array.isArray(s)){const e=new Set(s.flat(1/0).reverse());for(const s of e)i.unshift(t(s))}else void 0!==s&&i.push(t(s));return i}static _$Eu(t,s){const i=s.attribute;return!1===i?void 0:\"string\"==typeof i?i:\"string\"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(t=>this.enableUpdating=t),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(t=>t(this))}addController(t){(this._$EO??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){const t=new Map,s=this.constructor.elementProperties;for(const i of s.keys())this.hasOwnProperty(i)&&(t.set(i,this[i]),delete this[i]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return s(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(t=>t.hostConnected?.())}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach(t=>t.hostDisconnected?.())}attributeChangedCallback(t,s,i){this._$AK(t,i)}_$ET(t,s){const i=this.constructor.elementProperties.get(t),e=this.constructor._$Eu(t,i);if(void 0!==e&&!0===i.reflect){const h=(void 0!==i.converter?.toAttribute?i.converter:u).toAttribute(s,i.type);this._$Em=t,null==h?this.removeAttribute(e):this.setAttribute(e,h),this._$Em=null}}_$AK(t,s){const i=this.constructor,e=i._$Eh.get(t);if(void 0!==e&&this._$Em!==e){const t=i.getPropertyOptions(e),h=\"function\"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:u;this._$Em=e;const r=h.fromAttribute(s,t.type);this[e]=r??this._$Ej?.get(e)??r,this._$Em=null}}requestUpdate(t,s,i,e=!1,h){if(void 0!==t){const r=this.constructor;if(!1===e&&(h=this[t]),i??=r.getPropertyOptions(t),!((i.hasChanged??f)(h,s)||i.useDefault&&i.reflect&&h===this._$Ej?.get(t)&&!this.hasAttribute(r._$Eu(t,i))))return;this.C(t,s,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(t,s,{useDefault:i,reflect:e,wrapped:h},r){i&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,r??s??this[t]),!0!==h||void 0!==r)||(this._$AL.has(t)||(this.hasUpdated||i||(s=void 0),this._$AL.set(t,s)),!0===e&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,s]of this._$Ep)this[t]=s;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[s,i]of t){const{wrapped:t}=i,e=this[s];!0!==t||this._$AL.has(s)||void 0===e||this.C(s,void 0,i,e)}}let t=!1;const s=this._$AL;try{t=this.shouldUpdate(s),t?(this.willUpdate(s),this._$EO?.forEach(t=>t.hostUpdate?.()),this.update(s)):this._$EM()}catch(s){throw t=!1,this._$EM(),s}t&&this._$AE(s)}willUpdate(t){}_$AE(t){this._$EO?.forEach(t=>t.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach(t=>this._$ET(t,this[t])),this._$EM()}updated(t){}firstUpdated(t){}}y.elementStyles=[],y.shadowRootOptions={mode:\"open\"},y[d(\"elementProperties\")]=new Map,y[d(\"finalized\")]=new Map,p?.({ReactiveElement:y}),(a.reactiveElementVersions??=[]).push(\"2.1.2\");export{y as ReactiveElement,s as adoptStyles,u as defaultConverter,t as getCompatibleStyle,f as notEqual};\n//# sourceMappingURL=reactive-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,i=t=>t,s=t.trustedTypes,e=s?s.createPolicy(\"lit-html\",{createHTML:t=>t}):void 0,h=\"$lit$\",o=`lit$${Math.random().toFixed(9).slice(2)}$`,n=\"?\"+o,r=`<${n}>`,l=document,c=()=>l.createComment(\"\"),a=t=>null===t||\"object\"!=typeof t&&\"function\"!=typeof t,u=Array.isArray,d=t=>u(t)||\"function\"==typeof t?.[Symbol.iterator],f=\"[ \\t\\n\\f\\r]\",v=/<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g,_=/-->/g,m=/>/g,p=RegExp(`>|${f}(?:([^\\\\s\"'>=/]+)(${f}*=${f}*(?:[^ \\t\\n\\f\\r\"'\\`<>=]|(\"|')|))|$)`,\"g\"),g=/'/g,$=/\"/g,y=/^(?:script|style|textarea|title)$/i,x=t=>(i,...s)=>({_$litType$:t,strings:i,values:s}),b=x(1),w=x(2),T=x(3),E=Symbol.for(\"lit-noChange\"),A=Symbol.for(\"lit-nothing\"),C=new WeakMap,P=l.createTreeWalker(l,129);function V(t,i){if(!u(t)||!t.hasOwnProperty(\"raw\"))throw Error(\"invalid template strings array\");return void 0!==e?e.createHTML(i):i}const N=(t,i)=>{const s=t.length-1,e=[];let n,l=2===i?\"<svg>\":3===i?\"<math>\":\"\",c=v;for(let i=0;i<s;i++){const s=t[i];let a,u,d=-1,f=0;for(;f<s.length&&(c.lastIndex=f,u=c.exec(s),null!==u);)f=c.lastIndex,c===v?\"!--\"===u[1]?c=_:void 0!==u[1]?c=m:void 0!==u[2]?(y.test(u[2])&&(n=RegExp(\"</\"+u[2],\"g\")),c=p):void 0!==u[3]&&(c=p):c===p?\">\"===u[0]?(c=n??v,d=-1):void 0===u[1]?d=-2:(d=c.lastIndex-u[2].length,a=u[1],c=void 0===u[3]?p:'\"'===u[3]?$:g):c===$||c===g?c=p:c===_||c===m?c=v:(c=p,n=void 0);const x=c===p&&t[i+1].startsWith(\"/>\")?\" \":\"\";l+=c===v?s+r:d>=0?(e.push(a),s.slice(0,d)+h+s.slice(d)+o+x):s+o+(-2===d?i:x)}return[V(t,l+(t[s]||\"<?>\")+(2===i?\"</svg>\":3===i?\"</math>\":\"\")),e]};class S{constructor({strings:t,_$litType$:i},e){let r;this.parts=[];let l=0,a=0;const u=t.length-1,d=this.parts,[f,v]=N(t,i);if(this.el=S.createElement(f,e),P.currentNode=this.el.content,2===i||3===i){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(r=P.nextNode())&&d.length<u;){if(1===r.nodeType){if(r.hasAttributes())for(const t of r.getAttributeNames())if(t.endsWith(h)){const i=v[a++],s=r.getAttribute(t).split(o),e=/([.?@])?(.*)/.exec(i);d.push({type:1,index:l,name:e[2],strings:s,ctor:\".\"===e[1]?I:\"?\"===e[1]?L:\"@\"===e[1]?z:H}),r.removeAttribute(t)}else t.startsWith(o)&&(d.push({type:6,index:l}),r.removeAttribute(t));if(y.test(r.tagName)){const t=r.textContent.split(o),i=t.length-1;if(i>0){r.textContent=s?s.emptyScript:\"\";for(let s=0;s<i;s++)r.append(t[s],c()),P.nextNode(),d.push({type:2,index:++l});r.append(t[i],c())}}}else if(8===r.nodeType)if(r.data===n)d.push({type:2,index:l});else{let t=-1;for(;-1!==(t=r.data.indexOf(o,t+1));)d.push({type:7,index:l}),t+=o.length-1}l++}}static createElement(t,i){const s=l.createElement(\"template\");return s.innerHTML=t,s}}function M(t,i,s=t,e){if(i===E)return i;let h=void 0!==e?s._$Co?.[e]:s._$Cl;const o=a(i)?void 0:i._$litDirective$;return h?.constructor!==o&&(h?._$AO?.(!1),void 0===o?h=void 0:(h=new o(t),h._$AT(t,s,e)),void 0!==e?(s._$Co??=[])[e]=h:s._$Cl=h),void 0!==h&&(i=M(t,h._$AS(t,i.values),h,e)),i}class R{constructor(t,i){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=i}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){const{el:{content:i},parts:s}=this._$AD,e=(t?.creationScope??l).importNode(i,!0);P.currentNode=e;let h=P.nextNode(),o=0,n=0,r=s[0];for(;void 0!==r;){if(o===r.index){let i;2===r.type?i=new k(h,h.nextSibling,this,t):1===r.type?i=new r.ctor(h,r.name,r.strings,this,t):6===r.type&&(i=new Z(h,this,t)),this._$AV.push(i),r=s[++n]}o!==r?.index&&(h=P.nextNode(),o++)}return P.currentNode=l,e}p(t){let i=0;for(const s of this._$AV)void 0!==s&&(void 0!==s.strings?(s._$AI(t,s,i),i+=s.strings.length-2):s._$AI(t[i])),i++}}class k{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,i,s,e){this.type=2,this._$AH=A,this._$AN=void 0,this._$AA=t,this._$AB=i,this._$AM=s,this.options=e,this._$Cv=e?.isConnected??!0}get parentNode(){let t=this._$AA.parentNode;const i=this._$AM;return void 0!==i&&11===t?.nodeType&&(t=i.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,i=this){t=M(this,t,i),a(t)?t===A||null==t||\"\"===t?(this._$AH!==A&&this._$AR(),this._$AH=A):t!==this._$AH&&t!==E&&this._(t):void 0!==t._$litType$?this.$(t):void 0!==t.nodeType?this.T(t):d(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==A&&a(this._$AH)?this._$AA.nextSibling.data=t:this.T(l.createTextNode(t)),this._$AH=t}$(t){const{values:i,_$litType$:s}=t,e=\"number\"==typeof s?this._$AC(t):(void 0===s.el&&(s.el=S.createElement(V(s.h,s.h[0]),this.options)),s);if(this._$AH?._$AD===e)this._$AH.p(i);else{const t=new R(e,this),s=t.u(this.options);t.p(i),this.T(s),this._$AH=t}}_$AC(t){let i=C.get(t.strings);return void 0===i&&C.set(t.strings,i=new S(t)),i}k(t){u(this._$AH)||(this._$AH=[],this._$AR());const i=this._$AH;let s,e=0;for(const h of t)e===i.length?i.push(s=new k(this.O(c()),this.O(c()),this,this.options)):s=i[e],s._$AI(h),e++;e<i.length&&(this._$AR(s&&s._$AB.nextSibling,e),i.length=e)}_$AR(t=this._$AA.nextSibling,s){for(this._$AP?.(!1,!0,s);t!==this._$AB;){const s=i(t).nextSibling;i(t).remove(),t=s}}setConnected(t){void 0===this._$AM&&(this._$Cv=t,this._$AP?.(t))}}class H{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,i,s,e,h){this.type=1,this._$AH=A,this._$AN=void 0,this.element=t,this.name=i,this._$AM=e,this.options=h,s.length>2||\"\"!==s[0]||\"\"!==s[1]?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=A}_$AI(t,i=this,s,e){const h=this.strings;let o=!1;if(void 0===h)t=M(this,t,i,0),o=!a(t)||t!==this._$AH&&t!==E,o&&(this._$AH=t);else{const e=t;let n,r;for(t=h[0],n=0;n<h.length-1;n++)r=M(this,e[s+n],i,n),r===E&&(r=this._$AH[n]),o||=!a(r)||r!==this._$AH[n],r===A?t=A:t!==A&&(t+=(r??\"\")+h[n+1]),this._$AH[n]=r}o&&!e&&this.j(t)}j(t){t===A?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??\"\")}}class I extends H{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===A?void 0:t}}class L extends H{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==A)}}class z extends H{constructor(t,i,s,e,h){super(t,i,s,e,h),this.type=5}_$AI(t,i=this){if((t=M(this,t,i,0)??A)===E)return;const s=this._$AH,e=t===A&&s!==A||t.capture!==s.capture||t.once!==s.once||t.passive!==s.passive,h=t!==A&&(s===A||e);e&&this.element.removeEventListener(this.name,this,s),h&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){\"function\"==typeof this._$AH?this._$AH.call(this.options?.host??this.element,t):this._$AH.handleEvent(t)}}class Z{constructor(t,i,s){this.element=t,this.type=6,this._$AN=void 0,this._$AM=i,this.options=s}get _$AU(){return this._$AM._$AU}_$AI(t){M(this,t)}}const j={M:h,P:o,A:n,C:1,L:N,R,D:d,V:M,I:k,H,N:L,U:z,B:I,F:Z},B=t.litHtmlPolyfillSupport;B?.(S,k),(t.litHtmlVersions??=[]).push(\"3.3.2\");const D=(t,i,s)=>{const e=s?.renderBefore??i;let h=e._$litPart$;if(void 0===h){const t=s?.renderBefore??null;e._$litPart$=h=new k(i.insertBefore(c(),t),t,void 0,s??{})}return h._$AI(t),h};export{j as _$LH,b as html,T as mathml,E as noChange,A as nothing,D as render,w as svg};\n//# sourceMappingURL=lit-html.js.map\n","import{ReactiveElement as t}from\"@lit/reactive-element\";export*from\"@lit/reactive-element\";import{render as e,noChange as r}from\"lit-html\";export*from\"lit-html\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const s=globalThis;class i extends t{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){const r=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=e(r,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return r}}i._$litElement$=!0,i[\"finalized\"]=!0,s.litElementHydrateSupport?.({LitElement:i});const o=s.litElementPolyfillSupport;o?.({LitElement:i});const n={_$AK:(t,e,r)=>{t._$AK(e,r)},_$AL:t=>t._$AL};(s.litElementVersions??=[]).push(\"4.2.2\");export{i as LitElement,n as _$LE};\n//# sourceMappingURL=lit-element.js.map\n","import { css } from 'lit';\n\n/** Global CSS text for `:root` primitive tokens plus base html/body/selection resets. 用于 `:root` 基础令牌及 html/body/选区重置的全局 CSS 文本。 */\nexport const aitheGlobalCssText = `\n:root {\n --aithe-space-0: 0;\n --aithe-space-1: 4px;\n --aithe-space-2: 8px;\n --aithe-space-3: 12px;\n --aithe-space-4: 16px;\n --aithe-space-5: 20px;\n --aithe-space-6: 24px;\n --aithe-space-7: 32px;\n --aithe-space-8: 40px;\n --aithe-space-9: 48px;\n --aithe-space-10: 64px;\n --aithe-space-xs: var(--aithe-space-2);\n --aithe-space-sm: var(--aithe-space-3);\n --aithe-space-md: var(--aithe-space-4);\n --aithe-space-lg: var(--aithe-space-6);\n --aithe-space-xl: var(--aithe-space-8);\n --aithe-radius-sm: 6px;\n --aithe-radius-md: 10px;\n --aithe-radius-lg: 14px;\n --aithe-radius-xl: 20px;\n --aithe-radius-full: 999px;\n --aithe-shadow-1: 0 6px 18px rgba(18, 24, 38, 0.06);\n --aithe-shadow-2: 0 12px 28px rgba(18, 24, 38, 0.08);\n --aithe-shadow-3: 0 18px 40px rgba(18, 24, 38, 0.1);\n --aithe-shadow-4: 0 22px 56px rgba(18, 24, 38, 0.14);\n --aithe-shadow-5: 0 28px 72px rgba(18, 24, 38, 0.18);\n --aithe-font-family: 'Sora', 'IBM Plex Sans', 'PingFang SC', 'Microsoft YaHei', sans-serif;\n --aithe-font-family-mono: 'JetBrains Mono', 'SFMono-Regular', 'Consolas', monospace;\n --aithe-font-size-xs: 12px;\n --aithe-font-size-sm: 13px;\n --aithe-font-size-md: 14px;\n --aithe-font-size-lg: 16px;\n --aithe-font-size-xl: 20px;\n --aithe-font-size-2xl: 28px;\n --aithe-font-weight-regular: 400;\n --aithe-font-weight-medium: 500;\n --aithe-font-weight-semibold: 600;\n --aithe-font-weight-bold: 700;\n --aithe-line-height-tight: 1.2;\n --aithe-line-height-base: 1.5;\n --aithe-line-height-loose: 1.7;\n --aithe-z-base: 1;\n --aithe-z-dropdown: 1000;\n --aithe-z-popover: 1010;\n --aithe-z-modal: 1080;\n --aithe-z-drawer: 1090;\n --aithe-z-tooltip: 1120;\n --aithe-duration-fast: 140ms;\n --aithe-duration-base: 220ms;\n --aithe-duration-slow: 320ms;\n --aithe-ease-standard: cubic-bezier(0.2, 0.8, 0.2, 1);\n --aithe-control-height-sm: 32px;\n --aithe-control-height-md: 40px;\n --aithe-control-height-lg: 48px;\n}\n\nhtml,\nbody {\n margin: 0;\n width: 100%;\n min-height: 100%;\n background: var(--aithe-color-bg-subtle);\n color: var(--aithe-color-text);\n font-family: var(--aithe-font-family);\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n::selection {\n background: var(--aithe-color-selection);\n}\n`;\n\n/** Shadow-DOM reset styles applied to every Aithe component host. 应用到每个 Aithe 组件宿主的 Shadow-DOM 重置样式。 */\nexport const aitheGlobalResetStyles = css`\n :host {\n box-sizing: border-box;\n color: var(--aithe-color-text);\n font-family: var(--aithe-font-family);\n font-size: var(--aithe-font-size-md);\n line-height: var(--aithe-line-height-base);\n }\n\n *,\n *::before,\n *::after {\n box-sizing: border-box;\n }\n\n [hidden] {\n display: none !important;\n }\n\n :focus-visible {\n outline: 2px solid var(--aithe-color-focus-ring);\n outline-offset: 2px;\n }\n`;\n","/** Amber theme tokens — warm & gentle, mild warning & emphasis. 琥珀主题令牌 — 温暖柔和、温和警示与强调,适合内容平台、阅读场景、辅助提示。 */\nexport const amberThemeTokens = `\n.aithe-theme-amber,\n[data-aithe-theme='amber'] {\n color-scheme: light;\n --aithe-primary-1: #fffbe6;\n --aithe-primary-2: #fff3c4;\n --aithe-primary-3: #ffe78a;\n --aithe-primary-4: #ffd84d;\n --aithe-primary-5: #f0c020;\n --aithe-primary-6: #d4a010;\n --aithe-primary-7: #b08008;\n --aithe-primary-8: #8c6206;\n --aithe-primary-9: #6a4a04;\n --aithe-primary-10: #483202;\n --aithe-success-1: #f0faf4;\n --aithe-success-2: #d6f0e0;\n --aithe-success-3: #aee0be;\n --aithe-success-4: #78cc96;\n --aithe-success-5: #4db872;\n --aithe-success-6: #2f9e56;\n --aithe-success-7: #1f8040;\n --aithe-success-8: #186432;\n --aithe-success-9: #124c26;\n --aithe-success-10: #0c361a;\n --aithe-warning-1: #fff9f0;\n --aithe-warning-2: #ffefcc;\n --aithe-warning-3: #ffe0a0;\n --aithe-warning-4: #ffcc6a;\n --aithe-warning-5: #f0b030;\n --aithe-warning-6: #c89018;\n --aithe-warning-7: #a07010;\n --aithe-warning-8: #7a550c;\n --aithe-warning-9: #563e08;\n --aithe-warning-10: #3a2a05;\n --aithe-danger-1: #fff1f0;\n --aithe-danger-2: #ffddd9;\n --aithe-danger-3: #ffc0b8;\n --aithe-danger-4: #ff9a8e;\n --aithe-danger-5: #f07068;\n --aithe-danger-6: #d44844;\n --aithe-danger-7: #b02e2c;\n --aithe-danger-8: #8c201e;\n --aithe-danger-9: #6a1616;\n --aithe-danger-10: #4a0e0e;\n --aithe-neutral-1: #faf9f5;\n --aithe-neutral-2: #f2efe6;\n --aithe-neutral-3: #e4ded2;\n --aithe-neutral-4: #cec4b2;\n --aithe-neutral-5: #b0a48e;\n --aithe-neutral-6: #928872;\n --aithe-neutral-7: #746c5c;\n --aithe-neutral-8: #565044;\n --aithe-neutral-9: #38342c;\n --aithe-neutral-10: #1c1a14;\n --aithe-color-bg: #fdfaf2;\n --aithe-color-bg-subtle: linear-gradient(180deg, #fffdf6 0%, #faf4e6 100%);\n --aithe-color-surface: rgba(255, 254, 248, 0.86);\n --aithe-color-surface-elevated: rgba(255, 255, 255, 0.98);\n --aithe-color-surface-muted: #f2ead8;\n --aithe-color-border: rgba(140, 100, 30, 0.16);\n --aithe-color-border-strong: rgba(120, 80, 20, 0.26);\n --aithe-color-text: #2a2210;\n --aithe-color-text-muted: #6e5a2e;\n --aithe-color-text-subtle: #9e8a5a;\n --aithe-color-overlay: rgba(24, 18, 4, 0.48);\n --aithe-color-selection: rgba(212, 160, 16, 0.16);\n --aithe-color-focus-ring: rgba(212, 160, 16, 0.36);\n}\n`;\n","/** Blue theme tokens — vivid blue primary with light backgrounds. 蓝色主题令牌 — 醒目的蓝色 primary 配浅色背景。 */\nexport const blueThemeTokens = `\n.aithe-theme-blue,\n[data-aithe-theme='blue'] {\n color-scheme: light;\n --aithe-primary-1: #eaf3ff;\n --aithe-primary-2: #d2e4ff;\n --aithe-primary-3: #aacbff;\n --aithe-primary-4: #79acff;\n --aithe-primary-5: #518fff;\n --aithe-primary-6: #2c73f6;\n --aithe-primary-7: #245dd0;\n --aithe-primary-8: #234ca6;\n --aithe-primary-9: #213f81;\n --aithe-primary-10: #1f3365;\n --aithe-success-1: #effcf7;\n --aithe-success-2: #d2f5e4;\n --aithe-success-3: #afead0;\n --aithe-success-4: #7fd5af;\n --aithe-success-5: #59bd92;\n --aithe-success-6: #3aa478;\n --aithe-success-7: #2d8964;\n --aithe-success-8: #266f53;\n --aithe-success-9: #215a45;\n --aithe-success-10: #1b4938;\n --aithe-warning-1: #fff8e9;\n --aithe-warning-2: #ffefc7;\n --aithe-warning-3: #ffdd90;\n --aithe-warning-4: #ffc45c;\n --aithe-warning-5: #f2aa3d;\n --aithe-warning-6: #d38b25;\n --aithe-warning-7: #af6e1b;\n --aithe-warning-8: #8e5718;\n --aithe-warning-9: #724618;\n --aithe-warning-10: #5b3815;\n --aithe-danger-1: #fff0f3;\n --aithe-danger-2: #ffdbe2;\n --aithe-danger-3: #ffbbc8;\n --aithe-danger-4: #ff8fa1;\n --aithe-danger-5: #f66a80;\n --aithe-danger-6: #de5069;\n --aithe-danger-7: #bd3f56;\n --aithe-danger-8: #99354a;\n --aithe-danger-9: #7c2f3f;\n --aithe-danger-10: #632837;\n --aithe-neutral-1: #f4f7fc;\n --aithe-neutral-2: #e8edf6;\n --aithe-neutral-3: #d3dcf0;\n --aithe-neutral-4: #b5c3e2;\n --aithe-neutral-5: #95a5cf;\n --aithe-neutral-6: #7688b8;\n --aithe-neutral-7: #5a6d9e;\n --aithe-neutral-8: #425580;\n --aithe-neutral-9: #2c3d5e;\n --aithe-neutral-10: #1a2740;\n --aithe-color-bg: #f0f5ff;\n --aithe-color-bg-subtle: linear-gradient(180deg, #f5f9ff 0%, #eaf0fe 100%);\n --aithe-color-surface: rgba(255, 255, 255, 0.85);\n --aithe-color-surface-elevated: rgba(255, 255, 255, 0.98);\n --aithe-color-surface-muted: #e4ecfa;\n --aithe-color-border: rgba(44, 115, 246, 0.16);\n --aithe-color-border-strong: rgba(44, 115, 246, 0.28);\n --aithe-color-text: #152033;\n --aithe-color-text-muted: #4a5e80;\n --aithe-color-text-subtle: #7b8fae;\n --aithe-color-overlay: rgba(9, 17, 31, 0.48);\n --aithe-color-selection: rgba(44, 115, 246, 0.18);\n --aithe-color-focus-ring: rgba(44, 115, 246, 0.38);\n}\n`;\n","/** Charcoal theme tokens — warm dark gray, understated elegance. 炭灰暗色主题令牌 — 暖调深灰,低调优雅,适合内容阅读、编辑器、文档平台。 */\nexport const charcoalThemeTokens = `\n.aithe-theme-charcoal,\n[data-aithe-theme='charcoal'] {\n color-scheme: dark;\n --aithe-primary-1: #f2f0ff;\n --aithe-primary-2: #ddd8ff;\n --aithe-primary-3: #c0b8ff;\n --aithe-primary-4: #9e90ff;\n --aithe-primary-5: #7e6ef0;\n --aithe-primary-6: #6454d4;\n --aithe-primary-7: #5040ae;\n --aithe-primary-8: #3e308c;\n --aithe-primary-9: #30246c;\n --aithe-primary-10: #241a50;\n --aithe-success-1: #eefbf4;\n --aithe-success-2: #ccf2dc;\n --aithe-success-3: #9fe4be;\n --aithe-success-4: #6ecf9a;\n --aithe-success-5: #48b87c;\n --aithe-success-6: #2f9a62;\n --aithe-success-7: #247e50;\n --aithe-success-8: #1c6440;\n --aithe-success-9: #164f34;\n --aithe-success-10: #113d28;\n --aithe-warning-1: #fff8ec;\n --aithe-warning-2: #ffedc4;\n --aithe-warning-3: #ffdb8e;\n --aithe-warning-4: #ffc45c;\n --aithe-warning-5: #e8a83a;\n --aithe-warning-6: #c48a22;\n --aithe-warning-7: #9e6e18;\n --aithe-warning-8: #7a5612;\n --aithe-warning-9: #5e420e;\n --aithe-warning-10: #46320a;\n --aithe-danger-1: #fff1f3;\n --aithe-danger-2: #ffdde1;\n --aithe-danger-3: #ffbcc5;\n --aithe-danger-4: #ff92a0;\n --aithe-danger-5: #f06880;\n --aithe-danger-6: #d44a66;\n --aithe-danger-7: #b03450;\n --aithe-danger-8: #8c2440;\n --aithe-danger-9: #6e1a32;\n --aithe-danger-10: #521226;\n --aithe-neutral-1: #f0eeec;\n --aithe-neutral-2: #d6d2ce;\n --aithe-neutral-3: #b4aea8;\n --aithe-neutral-4: #928a82;\n --aithe-neutral-5: #746c64;\n --aithe-neutral-6: #5a544c;\n --aithe-neutral-7: #423e38;\n --aithe-neutral-8: #302c28;\n --aithe-neutral-9: #201e1a;\n --aithe-neutral-10: #121110;\n --aithe-color-bg: #1a1816;\n --aithe-color-bg-subtle: radial-gradient(circle at top, rgba(100, 80, 60, 0.16) 0%, rgba(26, 24, 22, 1) 55%);\n --aithe-color-surface: rgba(28, 26, 24, 0.84);\n --aithe-color-surface-elevated: rgba(36, 34, 30, 0.96);\n --aithe-color-surface-muted: #222018;\n --aithe-color-border: rgba(180, 160, 140, 0.14);\n --aithe-color-border-strong: rgba(200, 180, 160, 0.22);\n --aithe-color-text: #ece8e4;\n --aithe-color-text-muted: #b0a89e;\n --aithe-color-text-subtle: #847c74;\n --aithe-color-overlay: rgba(8, 6, 4, 0.66);\n --aithe-color-selection: rgba(100, 84, 212, 0.22);\n --aithe-color-focus-ring: rgba(100, 84, 212, 0.40);\n --aithe-shadow-1: 0 8px 18px rgba(0, 0, 0, 0.22);\n --aithe-shadow-2: 0 14px 34px rgba(0, 0, 0, 0.28);\n --aithe-shadow-3: 0 20px 44px rgba(0, 0, 0, 0.34);\n --aithe-shadow-4: 0 24px 56px rgba(0, 0, 0, 0.40);\n --aithe-shadow-5: 0 30px 72px rgba(0, 0, 0, 0.46);\n}\n`;\n","/** Cyan theme tokens — clear & transparent, modern tech. 青蓝主题令牌 — 清澈通透、科技现代,适合开发者工具、云平台、数据可视化。 */\nexport const cyanThemeTokens = `\n.aithe-theme-cyan,\n[data-aithe-theme='cyan'] {\n color-scheme: light;\n --aithe-primary-1: #e6fffe;\n --aithe-primary-2: #b5f5f2;\n --aithe-primary-3: #87e8e4;\n --aithe-primary-4: #5cdbd8;\n --aithe-primary-5: #36cfc9;\n --aithe-primary-6: #0ebfc7;\n --aithe-primary-7: #009da5;\n --aithe-primary-8: #007a82;\n --aithe-primary-9: #005a62;\n --aithe-primary-10: #003e44;\n --aithe-success-1: #f0faf4;\n --aithe-success-2: #d6f0e0;\n --aithe-success-3: #aee0be;\n --aithe-success-4: #78cc96;\n --aithe-success-5: #4db872;\n --aithe-success-6: #2f9e56;\n --aithe-success-7: #1f8040;\n --aithe-success-8: #186432;\n --aithe-success-9: #124c26;\n --aithe-success-10: #0c361a;\n --aithe-warning-1: #fffbe6;\n --aithe-warning-2: #fff3c4;\n --aithe-warning-3: #ffe78a;\n --aithe-warning-4: #ffd84d;\n --aithe-warning-5: #f0c020;\n --aithe-warning-6: #c89e14;\n --aithe-warning-7: #a47e0e;\n --aithe-warning-8: #7f610a;\n --aithe-warning-9: #5c4608;\n --aithe-warning-10: #3d2f05;\n --aithe-danger-1: #fff1f0;\n --aithe-danger-2: #ffddd9;\n --aithe-danger-3: #ffc0b8;\n --aithe-danger-4: #ff9a8e;\n --aithe-danger-5: #f07068;\n --aithe-danger-6: #d44844;\n --aithe-danger-7: #b02e2c;\n --aithe-danger-8: #8c201e;\n --aithe-danger-9: #6a1616;\n --aithe-danger-10: #4a0e0e;\n --aithe-neutral-1: #f6fafb;\n --aithe-neutral-2: #eaf2f4;\n --aithe-neutral-3: #d4e4e8;\n --aithe-neutral-4: #b4ccd4;\n --aithe-neutral-5: #92b0ba;\n --aithe-neutral-6: #74949e;\n --aithe-neutral-7: #587882;\n --aithe-neutral-8: #3e5c66;\n --aithe-neutral-9: #284048;\n --aithe-neutral-10: #14282e;\n --aithe-color-bg: #f0fafb;\n --aithe-color-bg-subtle: linear-gradient(180deg, #f4fcfd 0%, #e6f5f7 100%);\n --aithe-color-surface: rgba(248, 254, 255, 0.86);\n --aithe-color-surface-elevated: rgba(255, 255, 255, 0.98);\n --aithe-color-surface-muted: #dceef2;\n --aithe-color-border: rgba(30, 130, 150, 0.16);\n --aithe-color-border-strong: rgba(20, 110, 130, 0.26);\n --aithe-color-text: #0e2428;\n --aithe-color-text-muted: #2e5a64;\n --aithe-color-text-subtle: #5e8a96;\n --aithe-color-overlay: rgba(4, 20, 24, 0.48);\n --aithe-color-selection: rgba(14, 191, 199, 0.16);\n --aithe-color-focus-ring: rgba(14, 191, 199, 0.36);\n}\n`;\n","/** Dark theme tokens — primary, success, warning, danger, neutral scales plus semantic color aliases and dark-mode shadows. 深色主题令牌 — primary、success、warning、danger、neutral 色阶、语义颜色别名及深色模式阴影。 */\nexport const darkThemeTokens = `\n.aithe-theme-dark,\n[data-aithe-theme='dark'] {\n color-scheme: dark;\n --aithe-primary-1: #edf4ff;\n --aithe-primary-2: #d7e5ff;\n --aithe-primary-3: #b8d2ff;\n --aithe-primary-4: #8ab3ff;\n --aithe-primary-5: #6092ff;\n --aithe-primary-6: #4a7dff;\n --aithe-primary-7: #3d68e0;\n --aithe-primary-8: #3555b6;\n --aithe-primary-9: #2f478f;\n --aithe-primary-10: #28396f;\n --aithe-success-1: #effcf7;\n --aithe-success-2: #cef6df;\n --aithe-success-3: #a7ecc4;\n --aithe-success-4: #7ad7a5;\n --aithe-success-5: #53bf88;\n --aithe-success-6: #35a66f;\n --aithe-success-7: #278a5c;\n --aithe-success-8: #1e6f4b;\n --aithe-success-9: #195a3d;\n --aithe-success-10: #154931;\n --aithe-warning-1: #fff8eb;\n --aithe-warning-2: #ffeec8;\n --aithe-warning-3: #ffdd92;\n --aithe-warning-4: #ffc85f;\n --aithe-warning-5: #f1b042;\n --aithe-warning-6: #d18f29;\n --aithe-warning-7: #ad701d;\n --aithe-warning-8: #8b5819;\n --aithe-warning-9: #6f4617;\n --aithe-warning-10: #593813;\n --aithe-danger-1: #fff1f4;\n --aithe-danger-2: #ffdce2;\n --aithe-danger-3: #ffbcc8;\n --aithe-danger-4: #ff92a4;\n --aithe-danger-5: #f86c83;\n --aithe-danger-6: #df526b;\n --aithe-danger-7: #be4159;\n --aithe-danger-8: #99354a;\n --aithe-danger-9: #7a2d3d;\n --aithe-danger-10: #612634;\n --aithe-neutral-1: #f5f7fb;\n --aithe-neutral-2: #dfe5ef;\n --aithe-neutral-3: #c7d0de;\n --aithe-neutral-4: #aab6c9;\n --aithe-neutral-5: #8997b0;\n --aithe-neutral-6: #6d7a92;\n --aithe-neutral-7: #536077;\n --aithe-neutral-8: #3b465a;\n --aithe-neutral-9: #242d3d;\n --aithe-neutral-10: #121925;\n --aithe-color-bg: #0d1119;\n --aithe-color-bg-subtle: radial-gradient(circle at top, rgba(55, 87, 151, 0.22) 0%, rgba(13, 17, 25, 1) 58%);\n --aithe-color-surface: rgba(17, 24, 39, 0.82);\n --aithe-color-surface-elevated: rgba(19, 27, 44, 0.96);\n --aithe-color-surface-muted: #151c2b;\n --aithe-color-border: rgba(172, 188, 217, 0.14);\n --aithe-color-border-strong: rgba(183, 198, 228, 0.22);\n --aithe-color-text: #edf3ff;\n --aithe-color-text-muted: #b0bdd4;\n --aithe-color-text-subtle: #8894ab;\n --aithe-color-overlay: rgba(1, 4, 11, 0.68);\n --aithe-color-selection: rgba(116, 170, 255, 0.24);\n --aithe-color-focus-ring: rgba(116, 170, 255, 0.42);\n --aithe-shadow-1: 0 8px 18px rgba(0, 0, 0, 0.18);\n --aithe-shadow-2: 0 14px 34px rgba(0, 0, 0, 0.24);\n --aithe-shadow-3: 0 20px 44px rgba(0, 0, 0, 0.3);\n --aithe-shadow-4: 0 24px 56px rgba(0, 0, 0, 0.36);\n --aithe-shadow-5: 0 30px 72px rgba(0, 0, 0, 0.42);\n}\n`;\n","/** Ebony theme tokens — warm deep black, rich & luxurious. 乌木暗色主题令牌 — 暖调深黑,丰厚奢华,适合高端品牌、奢侈品、暗色展示。 */\nexport const ebonyThemeTokens = `\n.aithe-theme-ebony,\n[data-aithe-theme='ebony'] {\n color-scheme: dark;\n --aithe-primary-1: #f4f0f8;\n --aithe-primary-2: #e0d8f0;\n --aithe-primary-3: #c4b4e0;\n --aithe-primary-4: #a48cc8;\n --aithe-primary-5: #8468b0;\n --aithe-primary-6: #6a5094;\n --aithe-primary-7: #544078;\n --aithe-primary-8: #403260;\n --aithe-primary-9: #30264a;\n --aithe-primary-10: #221c38;\n --aithe-success-1: #eefbf4;\n --aithe-success-2: #ccf2dc;\n --aithe-success-3: #9fe4be;\n --aithe-success-4: #6ecf9a;\n --aithe-success-5: #48b87c;\n --aithe-success-6: #2f9a62;\n --aithe-success-7: #247e50;\n --aithe-success-8: #1c6440;\n --aithe-success-9: #164f34;\n --aithe-success-10: #113d28;\n --aithe-warning-1: #fff8ec;\n --aithe-warning-2: #ffedc4;\n --aithe-warning-3: #ffdb8e;\n --aithe-warning-4: #ffc45c;\n --aithe-warning-5: #e8a83a;\n --aithe-warning-6: #c48a22;\n --aithe-warning-7: #9e6e18;\n --aithe-warning-8: #7a5612;\n --aithe-warning-9: #5e420e;\n --aithe-warning-10: #46320a;\n --aithe-danger-1: #fff1f3;\n --aithe-danger-2: #ffdde1;\n --aithe-danger-3: #ffbcc5;\n --aithe-danger-4: #ff92a0;\n --aithe-danger-5: #f06880;\n --aithe-danger-6: #d44a66;\n --aithe-danger-7: #b03450;\n --aithe-danger-8: #8c2440;\n --aithe-danger-9: #6e1a32;\n --aithe-danger-10: #521226;\n --aithe-neutral-1: #f0ece8;\n --aithe-neutral-2: #d4ccc4;\n --aithe-neutral-3: #b0a498;\n --aithe-neutral-4: #8c7e72;\n --aithe-neutral-5: #6e6258;\n --aithe-neutral-6: #544c44;\n --aithe-neutral-7: #3e3832;\n --aithe-neutral-8: #2c2822;\n --aithe-neutral-9: #1c1a16;\n --aithe-neutral-10: #0e0c0a;\n --aithe-color-bg: #12100e;\n --aithe-color-bg-subtle: radial-gradient(circle at top, rgba(90, 60, 100, 0.14) 0%, rgba(18, 16, 14, 1) 55%);\n --aithe-color-surface: rgba(16, 14, 12, 0.86);\n --aithe-color-surface-elevated: rgba(22, 20, 18, 0.96);\n --aithe-color-surface-muted: #181614;\n --aithe-color-border: rgba(160, 140, 130, 0.14);\n --aithe-color-border-strong: rgba(180, 160, 150, 0.22);\n --aithe-color-text: #e8e2dc;\n --aithe-color-text-muted: #a89888;\n --aithe-color-text-subtle: #786c60;\n --aithe-color-overlay: rgba(4, 2, 0, 0.70);\n --aithe-color-selection: rgba(106, 80, 148, 0.20);\n --aithe-color-focus-ring: rgba(106, 80, 148, 0.38);\n --aithe-shadow-1: 0 8px 18px rgba(0, 0, 0, 0.26);\n --aithe-shadow-2: 0 14px 34px rgba(0, 0, 0, 0.32);\n --aithe-shadow-3: 0 20px 44px rgba(0, 0, 0, 0.38);\n --aithe-shadow-4: 0 24px 56px rgba(0, 0, 0, 0.44);\n --aithe-shadow-5: 0 30px 72px rgba(0, 0, 0, 0.50);\n}\n`;\n","/** Festive theme tokens — bright red & warm red primary with gold and light orange accents, grand and celebratory. 喜庆主题令牌 — 明亮正红与暖红主色,搭配金色、浅橙点缀,热闹大气、节日氛围,适合活动、庆典、电商大促。 */\nexport const festiveThemeTokens = `\n.aithe-theme-festive,\n[data-aithe-theme='festive'] {\n color-scheme: light;\n --aithe-primary-1: #fff5f5;\n --aithe-primary-2: #ffe8e6;\n --aithe-primary-3: #ffd4cf;\n --aithe-primary-4: #ffb3aa;\n --aithe-primary-5: #ff8c80;\n --aithe-primary-6: #f5313d;\n --aithe-primary-7: #d91a2a;\n --aithe-primary-8: #b51020;\n --aithe-primary-9: #8e0a18;\n --aithe-primary-10: #660612;\n --aithe-success-1: #f6ffed;\n --aithe-success-2: #e4f7d5;\n --aithe-success-3: #c5eeb0;\n --aithe-success-4: #95de64;\n --aithe-success-5: #73d13d;\n --aithe-success-6: #52c41a;\n --aithe-success-7: #389e0d;\n --aithe-success-8: #237804;\n --aithe-success-9: #135200;\n --aithe-success-10: #092b00;\n --aithe-warning-1: #fffbf0;\n --aithe-warning-2: #fff1cc;\n --aithe-warning-3: #ffe4a0;\n --aithe-warning-4: #ffd470;\n --aithe-warning-5: #f5c242;\n --aithe-warning-6: #d4a017;\n --aithe-warning-7: #b8860b;\n --aithe-warning-8: #8c6d0f;\n --aithe-warning-9: #6b4f0a;\n --aithe-warning-10: #493506;\n --aithe-danger-1: #fff1f0;\n --aithe-danger-2: #ffccc7;\n --aithe-danger-3: #ffa39e;\n --aithe-danger-4: #ff7875;\n --aithe-danger-5: #ff4d4f;\n --aithe-danger-6: #d91a2a;\n --aithe-danger-7: #b51020;\n --aithe-danger-8: #8e0a18;\n --aithe-danger-9: #660612;\n --aithe-danger-10: #44040c;\n --aithe-neutral-1: #fdfbfa;\n --aithe-neutral-2: #f8f3f1;\n --aithe-neutral-3: #efe6e2;\n --aithe-neutral-4: #ddd0c8;\n --aithe-neutral-5: #c4b2a6;\n --aithe-neutral-6: #a89486;\n --aithe-neutral-7: #8a766a;\n --aithe-neutral-8: #665850;\n --aithe-neutral-9: #423a36;\n --aithe-neutral-10: #221e1c;\n --aithe-color-bg: #fefaf7;\n --aithe-color-bg-subtle: linear-gradient(180deg, #fffdfb 0%, #fef5ef 100%);\n --aithe-color-surface: rgba(255, 253, 251, 0.90);\n --aithe-color-surface-elevated: rgba(255, 255, 255, 0.98);\n --aithe-color-surface-muted: #f8efe6;\n --aithe-color-border: rgba(180, 80, 50, 0.14);\n --aithe-color-border-strong: rgba(160, 60, 35, 0.24);\n --aithe-color-text: #2c1014;\n --aithe-color-text-muted: #6e3a3a;\n --aithe-color-text-subtle: #9a6e68;\n --aithe-color-overlay: rgba(36, 8, 8, 0.46);\n --aithe-color-selection: rgba(245, 49, 61, 0.14);\n --aithe-color-focus-ring: rgba(245, 49, 61, 0.34);\n}\n`;\n","/** Graphite theme tokens — metallic gray, neutral & refined. 石墨暗色主题令牌 — 金属灰调,中性克制,适合设计工具、通用暗色、跨场景适配。 */\nexport const graphiteThemeTokens = `\n.aithe-theme-graphite,\n[data-aithe-theme='graphite'] {\n color-scheme: dark;\n --aithe-primary-1: #f0f2f8;\n --aithe-primary-2: #d6dcf0;\n --aithe-primary-3: #b0bce4;\n --aithe-primary-4: #8498d4;\n --aithe-primary-5: #6278c0;\n --aithe-primary-6: #4c60a6;\n --aithe-primary-7: #3c4e88;\n --aithe-primary-8: #2e3e6c;\n --aithe-primary-9: #223054;\n --aithe-primary-10: #182240;\n --aithe-success-1: #eefbf4;\n --aithe-success-2: #ccf2dc;\n --aithe-success-3: #9fe4be;\n --aithe-success-4: #6ecf9a;\n --aithe-success-5: #48b87c;\n --aithe-success-6: #2f9a62;\n --aithe-success-7: #247e50;\n --aithe-success-8: #1c6440;\n --aithe-success-9: #164f34;\n --aithe-success-10: #113d28;\n --aithe-warning-1: #fff8ec;\n --aithe-warning-2: #ffedc4;\n --aithe-warning-3: #ffdb8e;\n --aithe-warning-4: #ffc45c;\n --aithe-warning-5: #e8a83a;\n --aithe-warning-6: #c48a22;\n --aithe-warning-7: #9e6e18;\n --aithe-warning-8: #7a5612;\n --aithe-warning-9: #5e420e;\n --aithe-warning-10: #46320a;\n --aithe-danger-1: #fff1f3;\n --aithe-danger-2: #ffdde1;\n --aithe-danger-3: #ffbcc5;\n --aithe-danger-4: #ff92a0;\n --aithe-danger-5: #f06880;\n --aithe-danger-6: #d44a66;\n --aithe-danger-7: #b03450;\n --aithe-danger-8: #8c2440;\n --aithe-danger-9: #6e1a32;\n --aithe-danger-10: #521226;\n --aithe-neutral-1: #eef0f4;\n --aithe-neutral-2: #d2d6de;\n --aithe-neutral-3: #b0b6c4;\n --aithe-neutral-4: #8c94a8;\n --aithe-neutral-5: #6c748c;\n --aithe-neutral-6: #525a72;\n --aithe-neutral-7: #3c445a;\n --aithe-neutral-8: #2a3044;\n --aithe-neutral-9: #1c2034;\n --aithe-neutral-10: #101424;\n --aithe-color-bg: #16181e;\n --aithe-color-bg-subtle: radial-gradient(circle at top, rgba(80, 90, 130, 0.14) 0%, rgba(22, 24, 30, 1) 55%);\n --aithe-color-surface: rgba(20, 22, 28, 0.84);\n --aithe-color-surface-elevated: rgba(26, 30, 38, 0.96);\n --aithe-color-surface-muted: #1c1e26;\n --aithe-color-border: rgba(150, 160, 190, 0.14);\n --aithe-color-border-strong: rgba(170, 180, 210, 0.22);\n --aithe-color-text: #e2e4ee;\n --aithe-color-text-muted: #a0a6b8;\n --aithe-color-text-subtle: #727a90;\n --aithe-color-overlay: rgba(4, 4, 10, 0.66);\n --aithe-color-selection: rgba(76, 96, 166, 0.22);\n --aithe-color-focus-ring: rgba(76, 96, 166, 0.40);\n --aithe-shadow-1: 0 8px 18px rgba(0, 0, 0, 0.22);\n --aithe-shadow-2: 0 14px 34px rgba(0, 0, 0, 0.28);\n --aithe-shadow-3: 0 20px 44px rgba(0, 0, 0, 0.34);\n --aithe-shadow-4: 0 24px 56px rgba(0, 0, 0, 0.40);\n --aithe-shadow-5: 0 30px 72px rgba(0, 0, 0, 0.46);\n}\n`;\n","/** Gray theme tokens — muted primary palette, semantic scales, and desaturated semantic color aliases. 灰色主题令牌 — 柔和的 primary 调色板、语义色阶及低饱和度语义颜色别名。 */\nexport const grayThemeTokens = `\n.aithe-theme-gray,\n[data-aithe-theme='gray'] {\n color-scheme: light;\n --aithe-primary-1: #f4f6fb;\n --aithe-primary-2: #e8edf6;\n --aithe-primary-3: #d4dce9;\n --aithe-primary-4: #b8c3d8;\n --aithe-primary-5: #96a4c0;\n --aithe-primary-6: #7485a4;\n --aithe-primary-7: #5e708d;\n --aithe-primary-8: #4d5d76;\n --aithe-primary-9: #404d61;\n --aithe-primary-10: #313a48;\n --aithe-success-1: #eff7f3;\n --aithe-success-2: #dcefe4;\n --aithe-success-3: #badfc9;\n --aithe-success-4: #97cfac;\n --aithe-success-5: #73bd90;\n --aithe-success-6: #5aa277;\n --aithe-success-7: #4a8461;\n --aithe-success-8: #3d6950;\n --aithe-success-9: #335543;\n --aithe-success-10: #294437;\n --aithe-warning-1: #f9f4ea;\n --aithe-warning-2: #f3e8cf;\n --aithe-warning-3: #e8d3a3;\n --aithe-warning-4: #dbbb79;\n --aithe-warning-5: #c7a05b;\n --aithe-warning-6: #ab8442;\n --aithe-warning-7: #8d6a33;\n --aithe-warning-8: #72532a;\n --aithe-warning-9: #5b4324;\n --aithe-warning-10: #49371f;\n --aithe-danger-1: #faf1f2;\n --aithe-danger-2: #f2dfe2;\n --aithe-danger-3: #e8c3c9;\n --aithe-danger-4: #dba0a9;\n --aithe-danger-5: #c97d88;\n --aithe-danger-6: #b0626d;\n --aithe-danger-7: #924f59;\n --aithe-danger-8: #764149;\n --aithe-danger-9: #60363d;\n --aithe-danger-10: #4d2c31;\n --aithe-neutral-1: #fafbfc;\n --aithe-neutral-2: #f0f2f5;\n --aithe-neutral-3: #dfe4ea;\n --aithe-neutral-4: #c8d0db;\n --aithe-neutral-5: #adb7c6;\n --aithe-neutral-6: #8f99aa;\n --aithe-neutral-7: #717b8d;\n --aithe-neutral-8: #566070;\n --aithe-neutral-9: #3d4654;\n --aithe-neutral-10: #252d36;\n --aithe-color-bg: #f3f4f7;\n --aithe-color-bg-subtle: linear-gradient(180deg, #f8f9fb 0%, #eff1f4 100%);\n --aithe-color-surface: rgba(255, 255, 255, 0.84);\n --aithe-color-surface-elevated: rgba(255, 255, 255, 0.96);\n --aithe-color-surface-muted: #eceff4;\n --aithe-color-border: rgba(76, 84, 98, 0.16);\n --aithe-color-border-strong: rgba(55, 62, 72, 0.24);\n --aithe-color-text: #222831;\n --aithe-color-text-muted: #5a6473;\n --aithe-color-text-subtle: #848c97;\n --aithe-color-overlay: rgba(28, 31, 37, 0.46);\n --aithe-color-selection: rgba(116, 133, 164, 0.2);\n --aithe-color-focus-ring: rgba(116, 133, 164, 0.34);\n}\n`;\n","/** Indigo theme tokens — steady business, premium texture. 靛蓝主题令牌 — 沉稳商务、高端质感,适合企业后台、金融平台、专业服务。 */\nexport const indigoThemeTokens = `\n.aithe-theme-indigo,\n[data-aithe-theme='indigo'] {\n color-scheme: light;\n --aithe-primary-1: #f0f0ff;\n --aithe-primary-2: #ddd8ff;\n --aithe-primary-3: #c0b8ff;\n --aithe-primary-4: #9e90ff;\n --aithe-primary-5: #7a68f0;\n --aithe-primary-6: #5c48d6;\n --aithe-primary-7: #4634b0;\n --aithe-primary-8: #34268a;\n --aithe-primary-9: #261a66;\n --aithe-primary-10: #1a1048;\n --aithe-success-1: #f0faf4;\n --aithe-success-2: #d6f0e0;\n --aithe-success-3: #aee0be;\n --aithe-success-4: #78cc96;\n --aithe-success-5: #4db872;\n --aithe-success-6: #2f9e56;\n --aithe-success-7: #1f8040;\n --aithe-success-8: #186432;\n --aithe-success-9: #124c26;\n --aithe-success-10: #0c361a;\n --aithe-warning-1: #fff9f0;\n --aithe-warning-2: #ffefcc;\n --aithe-warning-3: #ffe0a0;\n --aithe-warning-4: #ffcc6a;\n --aithe-warning-5: #f0b030;\n --aithe-warning-6: #c89018;\n --aithe-warning-7: #a07010;\n --aithe-warning-8: #7a550c;\n --aithe-warning-9: #563e08;\n --aithe-warning-10: #3a2a05;\n --aithe-danger-1: #fff2f4;\n --aithe-danger-2: #ffdde3;\n --aithe-danger-3: #ffc0cc;\n --aithe-danger-4: #ff96aa;\n --aithe-danger-5: #f06888;\n --aithe-danger-6: #d44068;\n --aithe-danger-7: #b02450;\n --aithe-danger-8: #8c183e;\n --aithe-danger-9: #6a1030;\n --aithe-danger-10: #480a20;\n --aithe-neutral-1: #f7f7fa;\n --aithe-neutral-2: #ededf2;\n --aithe-neutral-3: #d8d8e4;\n --aithe-neutral-4: #bcbcd0;\n --aithe-neutral-5: #9e9eb6;\n --aithe-neutral-6: #80809c;\n --aithe-neutral-7: #626280;\n --aithe-neutral-8: #484862;\n --aithe-neutral-9: #303044;\n --aithe-neutral-10: #18182a;\n --aithe-color-bg: #f4f4fc;\n --aithe-color-bg-subtle: linear-gradient(180deg, #f8f8ff 0%, #ededf8 100%);\n --aithe-color-surface: rgba(252, 252, 255, 0.86);\n --aithe-color-surface-elevated: rgba(255, 255, 255, 0.98);\n --aithe-color-surface-muted: #e4e4f0;\n --aithe-color-border: rgba(70, 50, 160, 0.16);\n --aithe-color-border-strong: rgba(55, 35, 140, 0.26);\n --aithe-color-text: #14102e;\n --aithe-color-text-muted: #3e346e;\n --aithe-color-text-subtle: #6e64a0;\n --aithe-color-overlay: rgba(10, 6, 30, 0.48);\n --aithe-color-selection: rgba(92, 72, 214, 0.16);\n --aithe-color-focus-ring: rgba(92, 72, 214, 0.36);\n}\n`;\n","/** Ink theme tokens — deep indigo-black, literary & focused. 墨色暗色主题令牌 — 深靛黑,文雅专注,适合写作工具、笔记应用、阅读器。 */\nexport const inkThemeTokens = `\n.aithe-theme-ink,\n[data-aithe-theme='ink'] {\n color-scheme: dark;\n --aithe-primary-1: #f2f0ff;\n --aithe-primary-2: #ddd8ff;\n --aithe-primary-3: #c0b8ff;\n --aithe-primary-4: #9e90ff;\n --aithe-primary-5: #7e6ef0;\n --aithe-primary-6: #6454d4;\n --aithe-primary-7: #5040ae;\n --aithe-primary-8: #3e308c;\n --aithe-primary-9: #30246c;\n --aithe-primary-10: #241a50;\n --aithe-success-1: #eefbf4;\n --aithe-success-2: #ccf2dc;\n --aithe-success-3: #9fe4be;\n --aithe-success-4: #6ecf9a;\n --aithe-success-5: #48b87c;\n --aithe-success-6: #2f9a62;\n --aithe-success-7: #247e50;\n --aithe-success-8: #1c6440;\n --aithe-success-9: #164f34;\n --aithe-success-10: #113d28;\n --aithe-warning-1: #fff8ec;\n --aithe-warning-2: #ffedc4;\n --aithe-warning-3: #ffdb8e;\n --aithe-warning-4: #ffc45c;\n --aithe-warning-5: #e8a83a;\n --aithe-warning-6: #c48a22;\n --aithe-warning-7: #9e6e18;\n --aithe-warning-8: #7a5612;\n --aithe-warning-9: #5e420e;\n --aithe-warning-10: #46320a;\n --aithe-danger-1: #fff1f3;\n --aithe-danger-2: #ffdde1;\n --aithe-danger-3: #ffbcc5;\n --aithe-danger-4: #ff92a0;\n --aithe-danger-5: #f06880;\n --aithe-danger-6: #d44a66;\n --aithe-danger-7: #b03450;\n --aithe-danger-8: #8c2440;\n --aithe-danger-9: #6e1a32;\n --aithe-danger-10: #521226;\n --aithe-neutral-1: #eeeef6;\n --aithe-neutral-2: #d0d0e0;\n --aithe-neutral-3: #aaaac0;\n --aithe-neutral-4: #8484a0;\n --aithe-neutral-5: #646480;\n --aithe-neutral-6: #4a4a64;\n --aithe-neutral-7: #363650;\n --aithe-neutral-8: #26263c;\n --aithe-neutral-9: #18182c;\n --aithe-neutral-10: #0c0c1c;\n --aithe-color-bg: #100e1a;\n --aithe-color-bg-subtle: radial-gradient(circle at top, rgba(80, 60, 140, 0.16) 0%, rgba(16, 14, 26, 1) 55%);\n --aithe-color-surface: rgba(18, 16, 28, 0.84);\n --aithe-color-surface-elevated: rgba(24, 22, 38, 0.96);\n --aithe-color-surface-muted: #16142a;\n --aithe-color-border: rgba(150, 140, 200, 0.14);\n --aithe-color-border-strong: rgba(170, 160, 220, 0.22);\n --aithe-color-text: #e6e4f4;\n --aithe-color-text-muted: #a4a0c0;\n --aithe-color-text-subtle: #747098;\n --aithe-color-overlay: rgba(4, 2, 10, 0.68);\n --aithe-color-selection: rgba(100, 84, 212, 0.22);\n --aithe-color-focus-ring: rgba(100, 84, 212, 0.40);\n --aithe-shadow-1: 0 8px 18px rgba(0, 0, 0, 0.24);\n --aithe-shadow-2: 0 14px 34px rgba(0, 0, 0, 0.30);\n --aithe-shadow-3: 0 20px 44px rgba(0, 0, 0, 0.36);\n --aithe-shadow-4: 0 24px 56px rgba(0, 0, 0, 0.42);\n --aithe-shadow-5: 0 30px 72px rgba(0, 0, 0, 0.48);\n}\n`;\n","/** Light theme tokens — primary, success, warning, danger, neutral scales plus semantic color aliases. 浅色主题令牌 — primary、success、warning、danger、neutral 色阶及语义颜色别名。 */\nexport const lightThemeTokens = `\n.aithe-theme-light,\n[data-aithe-theme='light'],\n:root {\n color-scheme: light;\n --aithe-primary-1: #f2f7ff;\n --aithe-primary-2: #e3efff;\n --aithe-primary-3: #c8deff;\n --aithe-primary-4: #9ec5ff;\n --aithe-primary-5: #74aaff;\n --aithe-primary-6: #4d8dff;\n --aithe-primary-7: #326fe1;\n --aithe-primary-8: #2859b5;\n --aithe-primary-9: #22488f;\n --aithe-primary-10: #1d3970;\n --aithe-success-1: #effcf6;\n --aithe-success-2: #d9f5e6;\n --aithe-success-3: #b7ebcf;\n --aithe-success-4: #84d9ae;\n --aithe-success-5: #52c48a;\n --aithe-success-6: #2eae70;\n --aithe-success-7: #1f915d;\n --aithe-success-8: #1b754e;\n --aithe-success-9: #185e40;\n --aithe-success-10: #144b34;\n --aithe-warning-1: #fff8e8;\n --aithe-warning-2: #ffefc7;\n --aithe-warning-3: #ffe08c;\n --aithe-warning-4: #ffcc59;\n --aithe-warning-5: #f6b73a;\n --aithe-warning-6: #dd9621;\n --aithe-warning-7: #b97516;\n --aithe-warning-8: #955b14;\n --aithe-warning-9: #754712;\n --aithe-warning-10: #5c390f;\n --aithe-danger-1: #fff1f2;\n --aithe-danger-2: #ffe0e4;\n --aithe-danger-3: #ffc4cb;\n --aithe-danger-4: #ff9ca8;\n --aithe-danger-5: #ff7283;\n --aithe-danger-6: #f04f64;\n --aithe-danger-7: #cf3950;\n --aithe-danger-8: #ab3144;\n --aithe-danger-9: #882c3a;\n --aithe-danger-10: #6d2630;\n --aithe-neutral-1: #f7f8fb;\n --aithe-neutral-2: #eef1f6;\n --aithe-neutral-3: #e1e6ef;\n --aithe-neutral-4: #c9d1df;\n --aithe-neutral-5: #aeb8cb;\n --aithe-neutral-6: #8f9ab0;\n --aithe-neutral-7: #6d788f;\n --aithe-neutral-8: #4d576b;\n --aithe-neutral-9: #2f3747;\n --aithe-neutral-10: #151a22;\n --aithe-color-bg: #f5f7fb;\n --aithe-color-bg-subtle: linear-gradient(180deg, #f9fbff 0%, #f2f5fb 100%);\n --aithe-color-surface: rgba(255, 255, 255, 0.82);\n --aithe-color-surface-elevated: rgba(255, 255, 255, 0.98);\n --aithe-color-surface-muted: #eef2f8;\n --aithe-color-border: rgba(76, 94, 132, 0.18);\n --aithe-color-border-strong: rgba(52, 66, 96, 0.28);\n --aithe-color-text: #152033;\n --aithe-color-text-muted: #526079;\n --aithe-color-text-subtle: #7b879b;\n --aithe-color-overlay: rgba(11, 17, 29, 0.54);\n --aithe-color-selection: rgba(77, 141, 255, 0.18);\n --aithe-color-focus-ring: rgba(77, 141, 255, 0.38);\n}\n`;\n","/** Midnight theme tokens — deep blue-black, serene & immersive. 午夜暗色主题令牌 — 深邃蓝黑,宁静沉浸,适合数据大屏、监控面板、夜间模式。 */\nexport const midnightThemeTokens = `\n.aithe-theme-midnight,\n[data-aithe-theme='midnight'] {\n color-scheme: dark;\n --aithe-primary-1: #edf2ff;\n --aithe-primary-2: #d4e0ff;\n --aithe-primary-3: #afc6ff;\n --aithe-primary-4: #84a8ff;\n --aithe-primary-5: #5c8af5;\n --aithe-primary-6: #4070e0;\n --aithe-primary-7: #3458b8;\n --aithe-primary-8: #2a4494;\n --aithe-primary-9: #223472;\n --aithe-primary-10: #1a2654;\n --aithe-success-1: #eefbf4;\n --aithe-success-2: #ccf2dc;\n --aithe-success-3: #9fe4be;\n --aithe-success-4: #6ecf9a;\n --aithe-success-5: #48b87c;\n --aithe-success-6: #2f9a62;\n --aithe-success-7: #247e50;\n --aithe-success-8: #1c6440;\n --aithe-success-9: #164f34;\n --aithe-success-10: #113d28;\n --aithe-warning-1: #fff8ec;\n --aithe-warning-2: #ffedc4;\n --aithe-warning-3: #ffdb8e;\n --aithe-warning-4: #ffc45c;\n --aithe-warning-5: #e8a83a;\n --aithe-warning-6: #c48a22;\n --aithe-warning-7: #9e6e18;\n --aithe-warning-8: #7a5612;\n --aithe-warning-9: #5e420e;\n --aithe-warning-10: #46320a;\n --aithe-danger-1: #fff1f3;\n --aithe-danger-2: #ffdde1;\n --aithe-danger-3: #ffbcc5;\n --aithe-danger-4: #ff92a0;\n --aithe-danger-5: #f06880;\n --aithe-danger-6: #d44a66;\n --aithe-danger-7: #b03450;\n --aithe-danger-8: #8c2440;\n --aithe-danger-9: #6e1a32;\n --aithe-danger-10: #521226;\n --aithe-neutral-1: #eef0f8;\n --aithe-neutral-2: #d2d8e8;\n --aithe-neutral-3: #aeb8ce;\n --aithe-neutral-4: #8a96b2;\n --aithe-neutral-5: #6a7894;\n --aithe-neutral-6: #4e5c76;\n --aithe-neutral-7: #384460;\n --aithe-neutral-8: #26304c;\n --aithe-neutral-9: #18203a;\n --aithe-neutral-10: #0e1428;\n --aithe-color-bg: #0c101e;\n --aithe-color-bg-subtle: radial-gradient(circle at top, rgba(50, 80, 160, 0.20) 0%, rgba(12, 16, 30, 1) 55%);\n --aithe-color-surface: rgba(14, 20, 36, 0.84);\n --aithe-color-surface-elevated: rgba(18, 26, 48, 0.96);\n --aithe-color-surface-muted: #121828;\n --aithe-color-border: rgba(140, 170, 230, 0.14);\n --aithe-color-border-strong: rgba(160, 190, 245, 0.22);\n --aithe-color-text: #e4eaf8;\n --aithe-color-text-muted: #a0b0cc;\n --aithe-color-text-subtle: #6e82a6;\n --aithe-color-overlay: rgba(2, 4, 12, 0.68);\n --aithe-color-selection: rgba(64, 112, 224, 0.22);\n --aithe-color-focus-ring: rgba(64, 112, 224, 0.40);\n --aithe-shadow-1: 0 8px 18px rgba(0, 0, 0, 0.24);\n --aithe-shadow-2: 0 14px 34px rgba(0, 0, 0, 0.30);\n --aithe-shadow-3: 0 20px 44px rgba(0, 0, 0, 0.36);\n --aithe-shadow-4: 0 24px 56px rgba(0, 0, 0, 0.42);\n --aithe-shadow-5: 0 30px 72px rgba(0, 0, 0, 0.48);\n}\n`;\n","/** Navy theme tokens — deep navy blue, authoritative & trustworthy. 海军蓝暗色主题令牌 — 深邃藏蓝,权威可信,适合金融后台、企业管理、政务系统。 */\nexport const navyThemeTokens = `\n.aithe-theme-navy,\n[data-aithe-theme='navy'] {\n color-scheme: dark;\n --aithe-primary-1: #ecf0ff;\n --aithe-primary-2: #d0dcff;\n --aithe-primary-3: #a8c0ff;\n --aithe-primary-4: #789ef5;\n --aithe-primary-5: #5880e0;\n --aithe-primary-6: #4066c0;\n --aithe-primary-7: #3450a0;\n --aithe-primary-8: #283e80;\n --aithe-primary-9: #1e3062;\n --aithe-primary-10: #162448;\n --aithe-success-1: #eefbf4;\n --aithe-success-2: #ccf2dc;\n --aithe-success-3: #9fe4be;\n --aithe-success-4: #6ecf9a;\n --aithe-success-5: #48b87c;\n --aithe-success-6: #2f9a62;\n --aithe-success-7: #247e50;\n --aithe-success-8: #1c6440;\n --aithe-success-9: #164f34;\n --aithe-success-10: #113d28;\n --aithe-warning-1: #fff8ec;\n --aithe-warning-2: #ffedc4;\n --aithe-warning-3: #ffdb8e;\n --aithe-warning-4: #ffc45c;\n --aithe-warning-5: #e8a83a;\n --aithe-warning-6: #c48a22;\n --aithe-warning-7: #9e6e18;\n --aithe-warning-8: #7a5612;\n --aithe-warning-9: #5e420e;\n --aithe-warning-10: #46320a;\n --aithe-danger-1: #fff1f3;\n --aithe-danger-2: #ffdde1;\n --aithe-danger-3: #ffbcc5;\n --aithe-danger-4: #ff92a0;\n --aithe-danger-5: #f06880;\n --aithe-danger-6: #d44a66;\n --aithe-danger-7: #b03450;\n --aithe-danger-8: #8c2440;\n --aithe-danger-9: #6e1a32;\n --aithe-danger-10: #521226;\n --aithe-neutral-1: #e8ecf8;\n --aithe-neutral-2: #c8d0e4;\n --aithe-neutral-3: #9eaac8;\n --aithe-neutral-4: #7484a8;\n --aithe-neutral-5: #566488;\n --aithe-neutral-6: #3e4c6c;\n --aithe-neutral-7: #2c3854;\n --aithe-neutral-8: #1e2840;\n --aithe-neutral-9: #141c30;\n --aithe-neutral-10: #0a1020;\n --aithe-color-bg: #0a0e1a;\n --aithe-color-bg-subtle: radial-gradient(circle at top, rgba(40, 70, 150, 0.18) 0%, rgba(10, 14, 26, 1) 55%);\n --aithe-color-surface: rgba(12, 16, 28, 0.84);\n --aithe-color-surface-elevated: rgba(16, 22, 40, 0.96);\n --aithe-color-surface-muted: #101628;\n --aithe-color-border: rgba(120, 150, 220, 0.14);\n --aithe-color-border-strong: rgba(140, 170, 240, 0.22);\n --aithe-color-text: #e0e8f8;\n --aithe-color-text-muted: #98a8c8;\n --aithe-color-text-subtle: #6878a0;\n --aithe-color-overlay: rgba(2, 4, 10, 0.68);\n --aithe-color-selection: rgba(64, 102, 192, 0.22);\n --aithe-color-focus-ring: rgba(64, 102, 192, 0.40);\n --aithe-shadow-1: 0 8px 18px rgba(0, 0, 0, 0.24);\n --aithe-shadow-2: 0 14px 34px rgba(0, 0, 0, 0.30);\n --aithe-shadow-3: 0 20px 44px rgba(0, 0, 0, 0.36);\n --aithe-shadow-4: 0 24px 56px rgba(0, 0, 0, 0.42);\n --aithe-shadow-5: 0 30px 72px rgba(0, 0, 0, 0.48);\n}\n`;\n","/** Obsidian theme tokens — volcanic glass black, pure & authoritative. 黑曜石暗色主题令牌 — 火山玻璃黑,纯粹权威,适合安全平台、终端工具、极简暗色。 */\nexport const obsidianThemeTokens = `\n.aithe-theme-obsidian,\n[data-aithe-theme='obsidian'] {\n color-scheme: dark;\n --aithe-primary-1: #f0f4ff;\n --aithe-primary-2: #d8e2ff;\n --aithe-primary-3: #b4c8ff;\n --aithe-primary-4: #88a8ff;\n --aithe-primary-5: #6288f0;\n --aithe-primary-6: #4c6cd4;\n --aithe-primary-7: #3c54ae;\n --aithe-primary-8: #2e408a;\n --aithe-primary-9: #223068;\n --aithe-primary-10: #18224c;\n --aithe-success-1: #eefbf4;\n --aithe-success-2: #ccf2dc;\n --aithe-success-3: #9fe4be;\n --aithe-success-4: #6ecf9a;\n --aithe-success-5: #48b87c;\n --aithe-success-6: #2f9a62;\n --aithe-success-7: #247e50;\n --aithe-success-8: #1c6440;\n --aithe-success-9: #164f34;\n --aithe-success-10: #113d28;\n --aithe-warning-1: #fff8ec;\n --aithe-warning-2: #ffedc4;\n --aithe-warning-3: #ffdb8e;\n --aithe-warning-4: #ffc45c;\n --aithe-warning-5: #e8a83a;\n --aithe-warning-6: #c48a22;\n --aithe-warning-7: #9e6e18;\n --aithe-warning-8: #7a5612;\n --aithe-warning-9: #5e420e;\n --aithe-warning-10: #46320a;\n --aithe-danger-1: #fff1f3;\n --aithe-danger-2: #ffdde1;\n --aithe-danger-3: #ffbcc5;\n --aithe-danger-4: #ff92a0;\n --aithe-danger-5: #f06880;\n --aithe-danger-6: #d44a66;\n --aithe-danger-7: #b03450;\n --aithe-danger-8: #8c2440;\n --aithe-danger-9: #6e1a32;\n --aithe-danger-10: #521226;\n --aithe-neutral-1: #eef0f4;\n --aithe-neutral-2: #d0d4dc;\n --aithe-neutral-3: #a8aec0;\n --aithe-neutral-4: #828a9e;\n --aithe-neutral-5: #606880;\n --aithe-neutral-6: #464e64;\n --aithe-neutral-7: #323a50;\n --aithe-neutral-8: #22283c;\n --aithe-neutral-9: #161a2c;\n --aithe-neutral-10: #0c0e1a;\n --aithe-color-bg: #0a0c14;\n --aithe-color-bg-subtle: radial-gradient(circle at top, rgba(60, 70, 120, 0.14) 0%, rgba(10, 12, 20, 1) 55%);\n --aithe-color-surface: rgba(12, 14, 22, 0.86);\n --aithe-color-surface-elevated: rgba(16, 20, 32, 0.96);\n --aithe-color-surface-muted: #10121c;\n --aithe-color-border: rgba(130, 150, 200, 0.12);\n --aithe-color-border-strong: rgba(150, 170, 220, 0.20);\n --aithe-color-text: #e0e4f0;\n --aithe-color-text-muted: #98a0b8;\n --aithe-color-text-subtle: #687088;\n --aithe-color-overlay: rgba(2, 2, 8, 0.70);\n --aithe-color-selection: rgba(76, 108, 212, 0.20);\n --aithe-color-focus-ring: rgba(76, 108, 212, 0.38);\n --aithe-shadow-1: 0 8px 18px rgba(0, 0, 0, 0.28);\n --aithe-shadow-2: 0 14px 34px rgba(0, 0, 0, 0.34);\n --aithe-shadow-3: 0 20px 44px rgba(0, 0, 0, 0.40);\n --aithe-shadow-4: 0 24px 56px rgba(0, 0, 0, 0.46);\n --aithe-shadow-5: 0 30px 72px rgba(0, 0, 0, 0.52);\n}\n`;\n","/** Onyx theme tokens — pure deep black, minimal & bold. 缟玛瑙暗色主题令牌 — 纯粹深黑,极简大胆,适合高端展示、摄影作品、暗色画廊。 */\nexport const onyxThemeTokens = `\n.aithe-theme-onyx,\n[data-aithe-theme='onyx'] {\n color-scheme: dark;\n --aithe-primary-1: #f0f2f6;\n --aithe-primary-2: #d8dce8;\n --aithe-primary-3: #b4bcd0;\n --aithe-primary-4: #8c98b8;\n --aithe-primary-5: #6878a0;\n --aithe-primary-6: #506088;\n --aithe-primary-7: #3e4e70;\n --aithe-primary-8: #2e3e5a;\n --aithe-primary-9: #223046;\n --aithe-primary-10: #182234;\n --aithe-success-1: #eefbf4;\n --aithe-success-2: #ccf2dc;\n --aithe-success-3: #9fe4be;\n --aithe-success-4: #6ecf9a;\n --aithe-success-5: #48b87c;\n --aithe-success-6: #2f9a62;\n --aithe-success-7: #247e50;\n --aithe-success-8: #1c6440;\n --aithe-success-9: #164f34;\n --aithe-success-10: #113d28;\n --aithe-warning-1: #fff8ec;\n --aithe-warning-2: #ffedc4;\n --aithe-warning-3: #ffdb8e;\n --aithe-warning-4: #ffc45c;\n --aithe-warning-5: #e8a83a;\n --aithe-warning-6: #c48a22;\n --aithe-warning-7: #9e6e18;\n --aithe-warning-8: #7a5612;\n --aithe-warning-9: #5e420e;\n --aithe-warning-10: #46320a;\n --aithe-danger-1: #fff1f3;\n --aithe-danger-2: #ffdde1;\n --aithe-danger-3: #ffbcc5;\n --aithe-danger-4: #ff92a0;\n --aithe-danger-5: #f06880;\n --aithe-danger-6: #d44a66;\n --aithe-danger-7: #b03450;\n --aithe-danger-8: #8c2440;\n --aithe-danger-9: #6e1a32;\n --aithe-danger-10: #521226;\n --aithe-neutral-1: #eceef2;\n --aithe-neutral-2: #ccd0d8;\n --aithe-neutral-3: #a4aab8;\n --aithe-neutral-4: #808898;\n --aithe-neutral-5: #606878;\n --aithe-neutral-6: #484e5e;\n --aithe-neutral-7: #343a48;\n --aithe-neutral-8: #242834;\n --aithe-neutral-9: #161a24;\n --aithe-neutral-10: #0a0c14;\n --aithe-color-bg: #08090e;\n --aithe-color-bg-subtle: radial-gradient(circle at top, rgba(50, 56, 80, 0.12) 0%, rgba(8, 9, 14, 1) 55%);\n --aithe-color-surface: rgba(10, 12, 18, 0.88);\n --aithe-color-surface-elevated: rgba(14, 16, 24, 0.96);\n --aithe-color-surface-muted: #0e1018;\n --aithe-color-border: rgba(120, 130, 170, 0.12);\n --aithe-color-border-strong: rgba(140, 150, 190, 0.20);\n --aithe-color-text: #dce0ec;\n --aithe-color-text-muted: #949cb0;\n --aithe-color-text-subtle: #646c80;\n --aithe-color-overlay: rgba(0, 0, 4, 0.72);\n --aithe-color-selection: rgba(80, 96, 136, 0.20);\n --aithe-color-focus-ring: rgba(80, 96, 136, 0.38);\n --aithe-shadow-1: 0 8px 18px rgba(0, 0, 0, 0.30);\n --aithe-shadow-2: 0 14px 34px rgba(0, 0, 0, 0.36);\n --aithe-shadow-3: 0 20px 44px rgba(0, 0, 0, 0.42);\n --aithe-shadow-4: 0 24px 56px rgba(0, 0, 0, 0.48);\n --aithe-shadow-5: 0 30px 72px rgba(0, 0, 0, 0.54);\n}\n`;\n","/** Orange theme tokens — warm & vibrant, ideal for operational emphasis and promotional campaigns. 橙色主题令牌 — 温暖活力、运营强调色,适合促销活动、运营引导。 */\nexport const orangeThemeTokens = `\n.aithe-theme-orange,\n[data-aithe-theme='orange'] {\n color-scheme: light;\n --aithe-primary-1: #fff7e6;\n --aithe-primary-2: #ffe8c1;\n --aithe-primary-3: #ffd591;\n --aithe-primary-4: #ffba5c;\n --aithe-primary-5: #ff9c2e;\n --aithe-primary-6: #e87a18;\n --aithe-primary-7: #c45e0a;\n --aithe-primary-8: #9e4808;\n --aithe-primary-9: #7a3606;\n --aithe-primary-10: #562504;\n --aithe-success-1: #f0faf2;\n --aithe-success-2: #d8f0dc;\n --aithe-success-3: #b3e2bb;\n --aithe-success-4: #7dce8c;\n --aithe-success-5: #4db866;\n --aithe-success-6: #2f9e4a;\n --aithe-success-7: #1f8138;\n --aithe-success-8: #18652e;\n --aithe-success-9: #124e24;\n --aithe-success-10: #0c381a;\n --aithe-warning-1: #fffbe6;\n --aithe-warning-2: #fff3c4;\n --aithe-warning-3: #ffe78a;\n --aithe-warning-4: #ffd84d;\n --aithe-warning-5: #f0c020;\n --aithe-warning-6: #c89e14;\n --aithe-warning-7: #a47e0e;\n --aithe-warning-8: #7f610a;\n --aithe-warning-9: #5c4608;\n --aithe-warning-10: #3d2f05;\n --aithe-danger-1: #fff1f0;\n --aithe-danger-2: #ffddd9;\n --aithe-danger-3: #ffc0b8;\n --aithe-danger-4: #ff9a8e;\n --aithe-danger-5: #f07068;\n --aithe-danger-6: #d44844;\n --aithe-danger-7: #b02e2c;\n --aithe-danger-8: #8c201e;\n --aithe-danger-9: #6a1616;\n --aithe-danger-10: #4a0e0e;\n --aithe-neutral-1: #faf9f7;\n --aithe-neutral-2: #f2efeb;\n --aithe-neutral-3: #e6e0d8;\n --aithe-neutral-4: #d0c7ba;\n --aithe-neutral-5: #b3a794;\n --aithe-neutral-6: #948774;\n --aithe-neutral-7: #746a5c;\n --aithe-neutral-8: #544c42;\n --aithe-neutral-9: #36302a;\n --aithe-neutral-10: #1c1814;\n --aithe-color-bg: #fdf8f2;\n --aithe-color-bg-subtle: linear-gradient(180deg, #fffbf7 0%, #fdf4ea 100%);\n --aithe-color-surface: rgba(255, 253, 250, 0.86);\n --aithe-color-surface-elevated: rgba(255, 255, 255, 0.98);\n --aithe-color-surface-muted: #f5ede2;\n --aithe-color-border: rgba(160, 110, 50, 0.16);\n --aithe-color-border-strong: rgba(140, 85, 30, 0.26);\n --aithe-color-text: #2a1e10;\n --aithe-color-text-muted: #6e5230;\n --aithe-color-text-subtle: #9a7e5a;\n --aithe-color-overlay: rgba(30, 18, 5, 0.48);\n --aithe-color-selection: rgba(232, 122, 24, 0.16);\n --aithe-color-focus-ring: rgba(232, 122, 24, 0.36);\n}\n`;\n","/** Pink theme tokens — soft & fresh, young & friendly. 粉色主题令牌 — 柔和清新、年轻友好,适合社交、生活方式、女性向产品。 */\nexport const pinkThemeTokens = `\n.aithe-theme-pink,\n[data-aithe-theme='pink'] {\n color-scheme: light;\n --aithe-primary-1: #fff0f6;\n --aithe-primary-2: #ffdce8;\n --aithe-primary-3: #ffc0d6;\n --aithe-primary-4: #ff9ebe;\n --aithe-primary-5: #f574a8;\n --aithe-primary-6: #e04d8a;\n --aithe-primary-7: #c03070;\n --aithe-primary-8: #9e1e5a;\n --aithe-primary-9: #7a1246;\n --aithe-primary-10: #560a32;\n --aithe-success-1: #f0faf4;\n --aithe-success-2: #d6f0e0;\n --aithe-success-3: #aee0be;\n --aithe-success-4: #78cc96;\n --aithe-success-5: #4db872;\n --aithe-success-6: #2f9e56;\n --aithe-success-7: #1f8040;\n --aithe-success-8: #186432;\n --aithe-success-9: #124c26;\n --aithe-success-10: #0c361a;\n --aithe-warning-1: #fff9f0;\n --aithe-warning-2: #ffefcc;\n --aithe-warning-3: #ffe0a0;\n --aithe-warning-4: #ffcc6a;\n --aithe-warning-5: #f0b030;\n --aithe-warning-6: #c89018;\n --aithe-warning-7: #a07010;\n --aithe-warning-8: #7a550c;\n --aithe-warning-9: #563e08;\n --aithe-warning-10: #3a2a05;\n --aithe-danger-1: #fff2f4;\n --aithe-danger-2: #ffdde3;\n --aithe-danger-3: #ffc0cc;\n --aithe-danger-4: #ff96aa;\n --aithe-danger-5: #f06888;\n --aithe-danger-6: #d44068;\n --aithe-danger-7: #b02450;\n --aithe-danger-8: #8c183e;\n --aithe-danger-9: #6a1030;\n --aithe-danger-10: #480a20;\n --aithe-neutral-1: #faf8f9;\n --aithe-neutral-2: #f2eef0;\n --aithe-neutral-3: #e4dce0;\n --aithe-neutral-4: #cec0c8;\n --aithe-neutral-5: #b0a0aa;\n --aithe-neutral-6: #92828e;\n --aithe-neutral-7: #746474;\n --aithe-neutral-8: #564858;\n --aithe-neutral-9: #382e3a;\n --aithe-neutral-10: #1c161e;\n --aithe-color-bg: #fdf4f7;\n --aithe-color-bg-subtle: linear-gradient(180deg, #fff8fa 0%, #fcedf3 100%);\n --aithe-color-surface: rgba(255, 252, 254, 0.86);\n --aithe-color-surface-elevated: rgba(255, 255, 255, 0.98);\n --aithe-color-surface-muted: #f5e6ee;\n --aithe-color-border: rgba(160, 60, 100, 0.16);\n --aithe-color-border-strong: rgba(140, 40, 80, 0.26);\n --aithe-color-text: #2e1220;\n --aithe-color-text-muted: #6e3a56;\n --aithe-color-text-subtle: #9e6a86;\n --aithe-color-overlay: rgba(30, 10, 20, 0.48);\n --aithe-color-selection: rgba(224, 77, 138, 0.16);\n --aithe-color-focus-ring: rgba(224, 77, 138, 0.36);\n}\n`;\n","/** Purple theme tokens — refined luxury, tech elegance. 紫色主题令牌 — 轻奢高级、科技优雅,适合高端产品、创意平台。 */\nexport const purpleThemeTokens = `\n.aithe-theme-purple,\n[data-aithe-theme='purple'] {\n color-scheme: light;\n --aithe-primary-1: #f5f0ff;\n --aithe-primary-2: #e8dbff;\n --aithe-primary-3: #d3bfff;\n --aithe-primary-4: #b899ff;\n --aithe-primary-5: #9b6ff5;\n --aithe-primary-6: #7c4de0;\n --aithe-primary-7: #6334c0;\n --aithe-primary-8: #4e259e;\n --aithe-primary-9: #3b1a7a;\n --aithe-primary-10: #281056;\n --aithe-success-1: #f0faf4;\n --aithe-success-2: #d6f0e0;\n --aithe-success-3: #aee0be;\n --aithe-success-4: #78cc96;\n --aithe-success-5: #4db872;\n --aithe-success-6: #2f9e56;\n --aithe-success-7: #1f8040;\n --aithe-success-8: #186432;\n --aithe-success-9: #124c26;\n --aithe-success-10: #0c361a;\n --aithe-warning-1: #fff9f0;\n --aithe-warning-2: #ffefcc;\n --aithe-warning-3: #ffe0a0;\n --aithe-warning-4: #ffcc6a;\n --aithe-warning-5: #f0b030;\n --aithe-warning-6: #c89018;\n --aithe-warning-7: #a07010;\n --aithe-warning-8: #7a550c;\n --aithe-warning-9: #563e08;\n --aithe-warning-10: #3a2a05;\n --aithe-danger-1: #fff2f4;\n --aithe-danger-2: #ffdde3;\n --aithe-danger-3: #ffc0cc;\n --aithe-danger-4: #ff96aa;\n --aithe-danger-5: #f06888;\n --aithe-danger-6: #d44068;\n --aithe-danger-7: #b02450;\n --aithe-danger-8: #8c183e;\n --aithe-danger-9: #6a1030;\n --aithe-danger-10: #480a20;\n --aithe-neutral-1: #f8f7fa;\n --aithe-neutral-2: #eeeef4;\n --aithe-neutral-3: #dddde8;\n --aithe-neutral-4: #c4c3d4;\n --aithe-neutral-5: #a8a6bc;\n --aithe-neutral-6: #8a88a0;\n --aithe-neutral-7: #6c6a82;\n --aithe-neutral-8: #504e64;\n --aithe-neutral-9: #343246;\n --aithe-neutral-10: #1a1926;\n --aithe-color-bg: #f6f4fb;\n --aithe-color-bg-subtle: linear-gradient(180deg, #faf9ff 0%, #f0edf8 100%);\n --aithe-color-surface: rgba(255, 254, 255, 0.86);\n --aithe-color-surface-elevated: rgba(255, 255, 255, 0.98);\n --aithe-color-surface-muted: #edeaf4;\n --aithe-color-border: rgba(100, 70, 160, 0.16);\n --aithe-color-border-strong: rgba(80, 50, 140, 0.26);\n --aithe-color-text: #1e1530;\n --aithe-color-text-muted: #4e3a6e;\n --aithe-color-text-subtle: #7e6a9e;\n --aithe-color-overlay: rgba(18, 10, 36, 0.48);\n --aithe-color-selection: rgba(124, 77, 224, 0.16);\n --aithe-color-focus-ring: rgba(124, 77, 224, 0.36);\n}\n`;\n","/** Raisin theme tokens — dark purple-black, creative & mysterious. 葡萄干暗色主题令牌 — 深紫黑,创意神秘,适合创意工具、音乐平台、艺术展示。 */\nexport const raisinThemeTokens = `\n.aithe-theme-raisin,\n[data-aithe-theme='raisin'] {\n color-scheme: dark;\n --aithe-primary-1: #f4f0ff;\n --aithe-primary-2: #e0d8ff;\n --aithe-primary-3: #c4b4ff;\n --aithe-primary-4: #a48cf5;\n --aithe-primary-5: #8868e0;\n --aithe-primary-6: #6e50c0;\n --aithe-primary-7: #583ca0;\n --aithe-primary-8: #442e80;\n --aithe-primary-9: #342264;\n --aithe-primary-10: #26184a;\n --aithe-success-1: #eefbf4;\n --aithe-success-2: #ccf2dc;\n --aithe-success-3: #9fe4be;\n --aithe-success-4: #6ecf9a;\n --aithe-success-5: #48b87c;\n --aithe-success-6: #2f9a62;\n --aithe-success-7: #247e50;\n --aithe-success-8: #1c6440;\n --aithe-success-9: #164f34;\n --aithe-success-10: #113d28;\n --aithe-warning-1: #fff8ec;\n --aithe-warning-2: #ffedc4;\n --aithe-warning-3: #ffdb8e;\n --aithe-warning-4: #ffc45c;\n --aithe-warning-5: #e8a83a;\n --aithe-warning-6: #c48a22;\n --aithe-warning-7: #9e6e18;\n --aithe-warning-8: #7a5612;\n --aithe-warning-9: #5e420e;\n --aithe-warning-10: #46320a;\n --aithe-danger-1: #fff1f3;\n --aithe-danger-2: #ffdde1;\n --aithe-danger-3: #ffbcc5;\n --aithe-danger-4: #ff92a0;\n --aithe-danger-5: #f06880;\n --aithe-danger-6: #d44a66;\n --aithe-danger-7: #b03450;\n --aithe-danger-8: #8c2440;\n --aithe-danger-9: #6e1a32;\n --aithe-danger-10: #521226;\n --aithe-neutral-1: #eeeef6;\n --aithe-neutral-2: #d0cee0;\n --aithe-neutral-3: #aaa8c0;\n --aithe-neutral-4: #8680a0;\n --aithe-neutral-5: #666080;\n --aithe-neutral-6: #4e4868;\n --aithe-neutral-7: #3a3452;\n --aithe-neutral-8: #2a263e;\n --aithe-neutral-9: #1c1a2e;\n --aithe-neutral-10: #0e0c1e;\n --aithe-color-bg: #120e1a;\n --aithe-color-bg-subtle: radial-gradient(circle at top, rgba(90, 50, 140, 0.18) 0%, rgba(18, 14, 26, 1) 55%);\n --aithe-color-surface: rgba(16, 12, 24, 0.84);\n --aithe-color-surface-elevated: rgba(22, 18, 34, 0.96);\n --aithe-color-surface-muted: #18142a;\n --aithe-color-border: rgba(150, 130, 200, 0.14);\n --aithe-color-border-strong: rgba(170, 150, 220, 0.22);\n --aithe-color-text: #e6e0f4;\n --aithe-color-text-muted: #a498c0;\n --aithe-color-text-subtle: #746898;\n --aithe-color-overlay: rgba(4, 2, 8, 0.68);\n --aithe-color-selection: rgba(110, 80, 192, 0.22);\n --aithe-color-focus-ring: rgba(110, 80, 192, 0.40);\n --aithe-shadow-1: 0 8px 18px rgba(0, 0, 0, 0.24);\n --aithe-shadow-2: 0 14px 34px rgba(0, 0, 0, 0.30);\n --aithe-shadow-3: 0 20px 44px rgba(0, 0, 0, 0.36);\n --aithe-shadow-4: 0 24px 56px rgba(0, 0, 0, 0.42);\n --aithe-shadow-5: 0 30px 72px rgba(0, 0, 0, 0.48);\n}\n`;\n","/** Slate theme tokens — cool blue-gray dark, calm & professional. 石板暗色主题令牌 — 冷调蓝灰暗色,沉稳专业,适合 IDE、开发者工具、技术后台。 */\nexport const slateThemeTokens = `\n.aithe-theme-slate,\n[data-aithe-theme='slate'] {\n color-scheme: dark;\n --aithe-primary-1: #f0f4ff;\n --aithe-primary-2: #d9e4ff;\n --aithe-primary-3: #b8ccff;\n --aithe-primary-4: #8eaaff;\n --aithe-primary-5: #6b8cf5;\n --aithe-primary-6: #5470e0;\n --aithe-primary-7: #4358b8;\n --aithe-primary-8: #364590;\n --aithe-primary-9: #2b3670;\n --aithe-primary-10: #212954;\n --aithe-success-1: #eefbf4;\n --aithe-success-2: #ccf2dc;\n --aithe-success-3: #9fe4be;\n --aithe-success-4: #6ecf9a;\n --aithe-success-5: #48b87c;\n --aithe-success-6: #2f9a62;\n --aithe-success-7: #247e50;\n --aithe-success-8: #1c6440;\n --aithe-success-9: #164f34;\n --aithe-success-10: #113d28;\n --aithe-warning-1: #fff8ec;\n --aithe-warning-2: #ffedc4;\n --aithe-warning-3: #ffdb8e;\n --aithe-warning-4: #ffc45c;\n --aithe-warning-5: #e8a83a;\n --aithe-warning-6: #c48a22;\n --aithe-warning-7: #9e6e18;\n --aithe-warning-8: #7a5612;\n --aithe-warning-9: #5e420e;\n --aithe-warning-10: #46320a;\n --aithe-danger-1: #fff1f3;\n --aithe-danger-2: #ffdde1;\n --aithe-danger-3: #ffbcc5;\n --aithe-danger-4: #ff92a0;\n --aithe-danger-5: #f06880;\n --aithe-danger-6: #d44a66;\n --aithe-danger-7: #b03450;\n --aithe-danger-8: #8c2440;\n --aithe-danger-9: #6e1a32;\n --aithe-danger-10: #521226;\n --aithe-neutral-1: #f1f3f8;\n --aithe-neutral-2: #d8dce6;\n --aithe-neutral-3: #b8bfce;\n --aithe-neutral-4: #96a0b4;\n --aithe-neutral-5: #76829a;\n --aithe-neutral-6: #5a6680;\n --aithe-neutral-7: #424d64;\n --aithe-neutral-8: #2e374c;\n --aithe-neutral-9: #1e2536;\n --aithe-neutral-10: #111620;\n --aithe-color-bg: #141a24;\n --aithe-color-bg-subtle: radial-gradient(circle at top, rgba(70, 90, 140, 0.18) 0%, rgba(20, 26, 36, 1) 55%);\n --aithe-color-surface: rgba(22, 30, 44, 0.84);\n --aithe-color-surface-elevated: rgba(26, 36, 54, 0.96);\n --aithe-color-surface-muted: #1a2230;\n --aithe-color-border: rgba(160, 180, 220, 0.14);\n --aithe-color-border-strong: rgba(175, 195, 235, 0.22);\n --aithe-color-text: #e8edf8;\n --aithe-color-text-muted: #a8b4cc;\n --aithe-color-text-subtle: #7a88a2;\n --aithe-color-overlay: rgba(4, 8, 16, 0.66);\n --aithe-color-selection: rgba(84, 112, 224, 0.22);\n --aithe-color-focus-ring: rgba(84, 112, 224, 0.40);\n --aithe-shadow-1: 0 8px 18px rgba(0, 0, 0, 0.20);\n --aithe-shadow-2: 0 14px 34px rgba(0, 0, 0, 0.26);\n --aithe-shadow-3: 0 20px 44px rgba(0, 0, 0, 0.32);\n --aithe-shadow-4: 0 24px 56px rgba(0, 0, 0, 0.38);\n --aithe-shadow-5: 0 30px 72px rgba(0, 0, 0, 0.44);\n}\n`;\n","/** Teal theme tokens — crisp & professional, calm tech. 青色主题令牌 — 清爽专业、冷静科技,适合 SaaS、数据平台、专业工具。 */\nexport const tealThemeTokens = `\n.aithe-theme-teal,\n[data-aithe-theme='teal'] {\n color-scheme: light;\n --aithe-primary-1: #e6fffb;\n --aithe-primary-2: #b5f5ec;\n --aithe-primary-3: #87e8de;\n --aithe-primary-4: #5cdbd3;\n --aithe-primary-5: #36cfc9;\n --aithe-primary-6: #13a8a8;\n --aithe-primary-7: #088a8a;\n --aithe-primary-8: #006d6d;\n --aithe-primary-9: #005252;\n --aithe-primary-10: #003a3a;\n --aithe-success-1: #f0faf4;\n --aithe-success-2: #d6f0e0;\n --aithe-success-3: #aee0be;\n --aithe-success-4: #78cc96;\n --aithe-success-5: #4db872;\n --aithe-success-6: #2f9e56;\n --aithe-success-7: #1f8040;\n --aithe-success-8: #186432;\n --aithe-success-9: #124c26;\n --aithe-success-10: #0c361a;\n --aithe-warning-1: #fffbe6;\n --aithe-warning-2: #fff3c4;\n --aithe-warning-3: #ffe78a;\n --aithe-warning-4: #ffd84d;\n --aithe-warning-5: #f0c020;\n --aithe-warning-6: #c89e14;\n --aithe-warning-7: #a47e0e;\n --aithe-warning-8: #7f610a;\n --aithe-warning-9: #5c4608;\n --aithe-warning-10: #3d2f05;\n --aithe-danger-1: #fff1f0;\n --aithe-danger-2: #ffddd9;\n --aithe-danger-3: #ffc0b8;\n --aithe-danger-4: #ff9a8e;\n --aithe-danger-5: #f07068;\n --aithe-danger-6: #d44844;\n --aithe-danger-7: #b02e2c;\n --aithe-danger-8: #8c201e;\n --aithe-danger-9: #6a1616;\n --aithe-danger-10: #4a0e0e;\n --aithe-neutral-1: #f7faf9;\n --aithe-neutral-2: #ecf2f0;\n --aithe-neutral-3: #d8e6e2;\n --aithe-neutral-4: #bad0ca;\n --aithe-neutral-5: #9ab4ac;\n --aithe-neutral-6: #7c968e;\n --aithe-neutral-7: #5e7872;\n --aithe-neutral-8: #425a56;\n --aithe-neutral-9: #2a3e3a;\n --aithe-neutral-10: #162624;\n --aithe-color-bg: #f2faf8;\n --aithe-color-bg-subtle: linear-gradient(180deg, #f6fcfb 0%, #eaf5f2 100%);\n --aithe-color-surface: rgba(250, 255, 254, 0.86);\n --aithe-color-surface-elevated: rgba(255, 255, 255, 0.98);\n --aithe-color-surface-muted: #e2f0ec;\n --aithe-color-border: rgba(40, 120, 110, 0.16);\n --aithe-color-border-strong: rgba(30, 100, 90, 0.26);\n --aithe-color-text: #0e2a26;\n --aithe-color-text-muted: #2e5e56;\n --aithe-color-text-subtle: #5e8e86;\n --aithe-color-overlay: rgba(5, 24, 22, 0.48);\n --aithe-color-selection: rgba(19, 168, 168, 0.16);\n --aithe-color-focus-ring: rgba(19, 168, 168, 0.36);\n}\n`;\n","import { aitheGlobalCssText } from './global.css';\nimport { amberThemeTokens } from './theme/amber';\nimport { blueThemeTokens } from './theme/blue';\nimport { charcoalThemeTokens } from './theme/charcoal';\nimport { cyanThemeTokens } from './theme/cyan';\nimport { darkThemeTokens } from './theme/dark';\nimport { ebonyThemeTokens } from './theme/ebony';\nimport { festiveThemeTokens } from './theme/festive';\nimport { graphiteThemeTokens } from './theme/graphite';\nimport { grayThemeTokens } from './theme/gray';\nimport { indigoThemeTokens } from './theme/indigo';\nimport { inkThemeTokens } from './theme/ink';\nimport { lightThemeTokens } from './theme/light';\nimport { midnightThemeTokens } from './theme/midnight';\nimport { navyThemeTokens } from './theme/navy';\nimport { obsidianThemeTokens } from './theme/obsidian';\nimport { onyxThemeTokens } from './theme/onyx';\nimport { orangeThemeTokens } from './theme/orange';\nimport { pinkThemeTokens } from './theme/pink';\nimport { purpleThemeTokens } from './theme/purple';\nimport { raisinThemeTokens } from './theme/raisin';\nimport { slateThemeTokens } from './theme/slate';\nimport { tealThemeTokens } from './theme/teal';\n\n/** DOM style element ID used to identify the injected theme stylesheet. 用于标识注入的主题样式表的 DOM style 元素 ID。 */\nconst AITHE_THEME_STYLE_ID = 'aithe-theme-tokens';\n\n/** Concatenated CSS text containing all theme tokens and global styles. 包含所有主题令牌和全局样式的拼接 CSS 文本。 */\nexport const aitheThemeText = `\n${lightThemeTokens}\n${darkThemeTokens}\n${grayThemeTokens}\n${blueThemeTokens}\n${festiveThemeTokens}\n${orangeThemeTokens}\n${purpleThemeTokens}\n${pinkThemeTokens}\n${tealThemeTokens}\n${indigoThemeTokens}\n${cyanThemeTokens}\n${amberThemeTokens}\n${charcoalThemeTokens}\n${ebonyThemeTokens}\n${graphiteThemeTokens}\n${inkThemeTokens}\n${midnightThemeTokens}\n${navyThemeTokens}\n${obsidianThemeTokens}\n${onyxThemeTokens}\n${raisinThemeTokens}\n${slateThemeTokens}\n${aitheGlobalCssText}\n`;\n\n/**\n * Register Aithe theme tokens by injecting a global `<style>` element into the document head.\n * 通过向 document head 注入全局 `<style>` 元素来注册 Aithe 主题令牌。\n *\n * The style element is only created once; subsequent calls are idempotent.\n * 样式元素仅创建一次,后续调用是幂等的。\n */\nexport function registerAitheTheme(): void {\n if (typeof document === 'undefined') {\n return;\n }\n\n const existing = document.getElementById(AITHE_THEME_STYLE_ID);\n if (existing) {\n return;\n }\n\n const style = document.createElement('style');\n style.id = AITHE_THEME_STYLE_ID;\n style.textContent = aitheThemeText;\n document.head.appendChild(style);\n}\n","/**\n * Walk up the DOM tree to find the closest element that carries a theme\n * (via `data-aithe-theme` attribute or `aithe-theme-*` class).\n * 向上遍历 DOM 树,查找携带主题的最近元素(通过 `data-aithe-theme` 属性或 `aithe-theme-*` 类)。\n *\n * @param element - Starting element. 起始元素。\n * @returns The themed ancestor, or `null` if none found. 携带主题的祖先元素,或 `null`。\n */\nexport function findClosestThemeElement(element: HTMLElement | null): HTMLElement | null {\n let current = element?.parentElement ?? null;\n\n while (current) {\n if (Object.hasOwn(current.dataset, 'aitheTheme')) {\n return current;\n }\n\n const className = Array.from(current.classList).find((token) =>\n token.startsWith('aithe-theme-'),\n );\n if (className) {\n return current;\n }\n\n current = current.parentElement;\n }\n\n return null;\n}\n\n/**\n * Collect all focusable elements inside a root container.\n * 收集根容器中所有可聚焦元素。\n *\n * @param root - Parent node to search within. 要搜索的父节点。\n * @returns Array of visible, non-disabled focusable elements. 可见、非禁用的可聚焦元素数组。\n */\nexport function getFocusableElements(root: ParentNode): HTMLElement[] {\n const selectors = [\n 'button:not([disabled])',\n '[href]',\n 'input:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n '[role=\"button\"]',\n ];\n\n return Array.from(root.querySelectorAll<HTMLElement>(selectors.join(','))).filter(\n (item) => !item.hasAttribute('hidden') && item.offsetParent !== null,\n );\n}\n\n/**\n * Find the first focusable element inside a root container.\n * 在根容器中查找第一个可聚焦元素。\n *\n * @param root - Parent node to search within. 要搜索的父节点。\n * @returns The first focusable element, or `null`. 第一个可聚焦元素,或 `null`。\n */\nexport function findFirstFocusable(root: ParentNode): HTMLElement | null {\n return getFocusableElements(root)[0] ?? null;\n}\n","/**\n * Dispatch a composed, bubbling `CustomEvent` with Aithe defaults.\n * 使用 Aithe 默认值分发一个组合、冒泡的 `CustomEvent`。\n *\n * @param target - Event target element. 事件目标元素。\n * @param type - Event type string. 事件类型字符串。\n * @param detail - Optional event detail payload. 可选的事件详情载荷。\n * @typeparam T - Type of the event detail. 事件详情的类型。\n */\nexport function emitAitheEvent<T>(target: EventTarget, type: string, detail?: T): void {\n target.dispatchEvent(\n new CustomEvent<T>(type, {\n bubbles: true,\n composed: true,\n cancelable: false,\n detail,\n }),\n );\n}\n","import type { AitheThemeName } from '../types';\nimport { findClosestThemeElement } from './dom';\n\n/** Default theme name used when no theme is explicitly set. 未显式设置主题时使用的默认主题名称。 */\nexport const AITHE_DEFAULT_THEME: AitheThemeName = 'light';\n/** localStorage key for persisting the user's theme preference. 用于持久化用户主题偏好的 localStorage 键。 */\nexport const AITHE_THEME_STORAGE_KEY = 'aithe-ui-theme';\n\n/**\n * Convert a theme name to its corresponding CSS class name.\n * 将主题名称转换为对应的 CSS 类名。\n *\n * @param theme - Theme name. 主题名称。\n * @returns CSS class string like `\"aithe-theme-light\"`. 类似 `\"aithe-theme-light\"` 的 CSS 类字符串。\n */\nexport function getThemeClassName(theme: AitheThemeName): string {\n return `aithe-theme-${theme}`;\n}\n\n/**\n * Read the current global theme from the document root.\n * 从文档根元素读取当前全局主题。\n *\n * @returns The resolved theme name. 解析后的主题名称。\n */\nexport function getGlobalTheme(): AitheThemeName {\n if (typeof document === 'undefined') {\n return AITHE_DEFAULT_THEME;\n }\n\n const explicit = document.documentElement.dataset.aitheTheme;\n if (explicit) {\n return explicit;\n }\n\n const themedClass = Array.from(document.documentElement.classList).find((token) =>\n token.startsWith('aithe-theme-'),\n );\n\n return themedClass?.replace('aithe-theme-', '') || AITHE_DEFAULT_THEME;\n}\n\n/**\n * Apply a theme globally on the document root and optionally persist it.\n * 在文档根元素上全局应用主题,并可选地持久化。\n *\n * @param theme - Theme name to apply. 要应用的主题名称。\n * @param persist - Whether to save to localStorage. Defaults to `true`. 是否保存到 localStorage,默认为 `true`。\n */\nexport function setGlobalTheme(theme: AitheThemeName, persist = true): void {\n if (typeof document === 'undefined') {\n return;\n }\n\n const root = document.documentElement;\n Array.from(root.classList)\n .filter((token) => token.startsWith('aithe-theme-'))\n .forEach((token) => root.classList.remove(token));\n\n root.classList.add(getThemeClassName(theme));\n root.dataset.aitheTheme = theme;\n\n if (persist && typeof localStorage !== 'undefined') {\n localStorage.setItem(AITHE_THEME_STORAGE_KEY, theme);\n }\n}\n\n/**\n * Load a previously stored theme from localStorage.\n * 从 localStorage 加载之前存储的主题。\n *\n * @returns The stored theme name, or `null` if none exists. 存储的主题名称,或 `null`。\n */\nexport function loadStoredTheme(): AitheThemeName | null {\n if (typeof localStorage === 'undefined') {\n return null;\n }\n\n return localStorage.getItem(AITHE_THEME_STORAGE_KEY);\n}\n\n/**\n * Resolve the effective theme for a component by checking its local override,\n * its closest themed ancestor, and finally the global theme.\n * 通过检查组件的本地覆盖、最近的带主题祖先元素,最终全局主题,来解析组件的有效主题。\n *\n * @param element - The component element. 组件元素。\n * @param componentTheme - Optional local theme override. 可选的本地主题覆盖。\n * @returns The resolved theme name. 解析后的主题名称。\n */\nexport function resolveComputedTheme(\n element: HTMLElement,\n componentTheme?: AitheThemeName,\n): AitheThemeName {\n if (componentTheme) {\n return componentTheme;\n }\n\n const themedParent = findClosestThemeElement(element);\n if (themedParent) {\n return (\n themedParent.dataset.aitheTheme ||\n Array.from(themedParent.classList)\n .find((token) => token.startsWith('aithe-theme-'))\n ?.replace('aithe-theme-', '') ||\n AITHE_DEFAULT_THEME\n );\n }\n\n return getGlobalTheme();\n}\n","/**\n * Check whether a value is `null` or `undefined`.\n * 检查值是否为 `null` 或 `undefined`。\n *\n * @param value - Value to check. 要检查的值。\n * @returns `true` when the value is nullish. 当值为空时返回 `true`。\n */\nexport function isNil(value: unknown): value is null | undefined {\n return value === null || value === undefined;\n}\n\n/**\n * Convert an HTML attribute value to a boolean, treating empty string and\n * `\"true\"` as truthy (matches HTML boolean attribute semantics).\n * 将 HTML 属性值转换为布尔值,将空字符串和 `\"true\"` 视为真值(符合 HTML 布尔属性语义)。\n *\n * @param value - Attribute value to convert. 要转换的属性值。\n * @returns Boolean interpretation. 布尔解释。\n */\nexport function toBooleanAttribute(value: unknown): boolean {\n return value === '' || value === true || value === 'true';\n}\n\n/**\n * Normalize a CSS dimension value: bare numbers get `px` appended,\n * size aliases (`xs`/`sm`/`md`/`lg`/`xl`) resolve to design tokens,\n * and already-valid CSS values pass through unchanged.\n * 规范化 CSS 尺寸值:纯数字追加 `px`,尺寸别名(`xs`/`sm`/`md`/`lg`/`xl`)解析为设计令牌,\n * 已有效的 CSS 值直接通过。\n *\n * @param value - Raw value to normalize. 要规范化的原始值。\n * @param fallback - Default value when input is empty. Defaults to `\"\"`. 输入为空时的默认值,默认为 `\"\"`。\n * @returns A valid CSS dimension string. 有效的 CSS 尺寸字符串。\n */\nexport function normalizeCssUnit(value: string | number | null | undefined, fallback = ''): string {\n if (typeof value === 'number') {\n return `${value}px`;\n }\n\n const normalized = String(value ?? '').trim();\n if (!normalized) {\n return fallback;\n }\n\n if (/^-?\\d+(\\.\\d+)?$/.test(normalized)) {\n return `${normalized}px`;\n }\n\n const sizeAliasMap: Record<string, string> = {\n xs: 'var(--aithe-space-xs)',\n sm: 'var(--aithe-space-sm)',\n md: 'var(--aithe-space-md)',\n lg: 'var(--aithe-space-lg)',\n xl: 'var(--aithe-space-xl)',\n };\n\n return sizeAliasMap[normalized] ?? normalized;\n}\n","/** Auto-incrementing ID counter for unique element identifiers. 自增ID计数器,用于生成唯一元素标识符。 */\nlet aitheId = 0;\n\n/**\n * Clamp a numeric value between a minimum and maximum bound.\n * 将数值限制在最小值和最大值之间。\n *\n * @param value - The number to clamp. 要限制的数值。\n * @param min - Lower bound. 下界。\n * @param max - Upper bound. 上界。\n * @returns The clamped value. 限制后的值。\n */\nexport function clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n}\n\n/**\n * Resolve a nested property from an object using a dot-separated path.\n * 使用点分隔路径从对象中解析嵌套属性。\n *\n * @param record - Source object. 源对象。\n * @param dataIndex - Dot-separated key path, e.g. `\"user.name\"`. 点分隔的键路径,如 `\"user.name\"`。\n * @returns The resolved value, or `undefined` if the path cannot be traversed. 解析后的值,若路径无法遍历则返回 `undefined`。\n */\nexport function getValueByPath(record: unknown, dataIndex?: string): unknown {\n if (!dataIndex || typeof record !== 'object' || record === null) {\n return dataIndex ? undefined : record;\n }\n\n return dataIndex.split('.').reduce<unknown>((current, key) => {\n if (typeof current === 'object' && current !== null && key in current) {\n return (current as Record<string, unknown>)[key];\n }\n\n return undefined;\n }, record);\n}\n\n/**\n * Generate a unique ID string with the given prefix.\n * 使用给定前缀生成唯一ID字符串。\n *\n * @param prefix - Prefix for the ID. Defaults to `\"aithe\"`. ID前缀,默认为 `\"aithe\"`。\n * @returns A unique string like `\"aithe-1\"`. 类似 `\"aithe-1\"` 的唯一字符串。\n */\nexport function uid(prefix = 'aithe'): string {\n aitheId += 1;\n return `${prefix}-${aitheId}`;\n}\n\n/**\n * Find the first focusable element inside a root container.\n * 在根容器中查找第一个可聚焦元素。\n *\n * @param root - Parent node to search within. 要搜索的父节点。\n * @returns The first visible, non-disabled focusable element, or `null`. 第一个可见、非禁用的可聚焦元素,或 `null`。\n */\nexport function findFirstFocusable(root: ParentNode): HTMLElement | null {\n const selectors = [\n 'button:not([disabled])',\n '[href]',\n 'input:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n ];\n\n const items = Array.from(root.querySelectorAll<HTMLElement>(selectors.join(',')));\n return items.find((item) => !item.hasAttribute('hidden') && item.offsetParent !== null) ?? null;\n}\n\n/**\n * Collect all focusable elements inside a root container.\n * 收集根容器中所有可聚焦元素。\n *\n * @param root - Parent node to search within. 要搜索的父节点。\n * @returns Array of visible, non-disabled focusable elements. 可见、非禁用的可聚焦元素数组。\n */\nexport function getFocusableElements(root: ParentNode): HTMLElement[] {\n const selectors = [\n 'button:not([disabled])',\n '[href]',\n 'input:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n ];\n\n return Array.from(root.querySelectorAll<HTMLElement>(selectors.join(','))).filter(\n (item) => !item.hasAttribute('hidden') && item.offsetParent !== null,\n );\n}\n","/**\n * Aithe UI 核心英文翻译资源\n * Core English (en-US) translation resource for Aithe UI components.\n */\nimport type { AitheTranslationKeys } from '../index';\n\nexport const en: Partial<AitheTranslationKeys> = {\n 'basic.input.ariaLabel': 'Input',\n 'basic.avatar.ariaLabel': 'Avatar',\n 'basic.empty.defaultText': 'No data',\n 'navigation.breadcrumb.ariaLabel': 'Breadcrumb',\n 'navigation.backTop.ariaLabel': 'Back to top',\n 'form.select.placeholder': 'Please select',\n 'form.select.searchAriaLabel': 'Search options',\n 'form.select.searchPlaceholder': 'Search options',\n 'form.select.clearAriaLabel': 'Clear value',\n 'form.select.emptyText': 'No matching options',\n 'form.combobox.placeholder': 'Search or select',\n 'form.combobox.emptyText': 'No matching options',\n 'form.dialog.confirmText': 'Confirm',\n 'form.dialog.cancelText': 'Cancel',\n 'form.dialog.closeAriaLabel': 'Close',\n 'form.rate.ariaLabel': (index: unknown) => `Rate ${String(index)}`,\n 'form.upload.chooseFiles': 'Choose files',\n 'form.upload.kb': 'KB',\n 'form.transfer.sourceTitle': 'Source',\n 'form.transfer.targetTitle': 'Target',\n 'form.formItem.required': (label: unknown) => `${String(label || 'Field')} is required`,\n 'form.formItem.requiredField': 'Field',\n 'feedback.modal.closeAriaLabel': 'Close modal',\n 'feedback.drawer.closeAriaLabel': 'Close drawer',\n 'data.tabs.removeTabAriaLabel': 'Remove tab',\n 'data.tabs.addTabAriaLabel': 'Add tab',\n 'data.table.selectAllAriaLabel': 'Select all rows',\n 'data.table.selectRowAriaLabel': 'Select row',\n 'data.table.emptyText': 'No data',\n 'display.carousel.prevSlideAriaLabel': 'Previous slide',\n 'display.carousel.nextSlideAriaLabel': 'Next slide',\n 'display.comparison.beforeAlt': 'Before',\n 'display.comparison.afterAlt': 'After',\n 'container.details.defaultSummary': 'Details',\n 'theme.light': 'Light',\n 'theme.dark': 'Dark',\n 'theme.preview.title': 'Theme Preview',\n 'theme.preview.applyTheme': 'Apply Theme',\n 'theme.preview.dashboard': 'Dashboard',\n 'theme.preview.components': 'Components',\n 'theme.preview.themes': 'Themes',\n 'theme.preview.settings': 'Settings',\n 'theme.preview.buttons': 'Buttons',\n 'theme.preview.input': 'Input',\n 'theme.preview.tags': 'Tags',\n 'theme.preview.table': 'Table',\n 'theme.preview.primary': 'Primary',\n 'theme.preview.default': 'Default',\n 'theme.preview.dashed': 'Dashed',\n 'theme.preview.text': 'Text',\n 'theme.preview.link': 'Link',\n 'theme.preview.danger': 'Danger',\n 'theme.preview.enterText': 'Enter text...',\n 'theme.preview.search': 'Search...',\n 'theme.preview.brand': 'Aithe UI',\n 'theme.preview.success': 'Success',\n 'theme.preview.warning': 'Warning',\n 'theme.preview.name': 'Name',\n 'theme.preview.role': 'Role',\n 'theme.preview.status': 'Status',\n 'theme.preview.admin': 'Admin',\n 'theme.preview.editor': 'Editor',\n 'theme.preview.viewer': 'Viewer',\n 'theme.preview.active': 'Active',\n 'theme.preview.inactive': 'Inactive',\n 'localeSwitch.label': 'Language',\n 'localeSwitch.english': 'English',\n 'localeSwitch.chinese': '中文',\n};\n","/**\n * Aithe UI 核心中文翻译资源\n * Core Chinese (zh-CN) translation resource for Aithe UI components.\n */\nimport type { AitheTranslationValue } from '../index';\n\nexport const zh: Record<string, AitheTranslationValue> = {\n 'basic.input.ariaLabel': '输入框',\n 'basic.avatar.ariaLabel': '头像',\n 'basic.empty.defaultText': '暂无数据',\n 'navigation.breadcrumb.ariaLabel': '面包屑',\n 'navigation.backTop.ariaLabel': '回到顶部',\n 'form.select.placeholder': '请选择',\n 'form.select.searchAriaLabel': '搜索选项',\n 'form.select.searchPlaceholder': '搜索选项',\n 'form.select.clearAriaLabel': '清除',\n 'form.select.emptyText': '暂无匹配项',\n 'form.combobox.placeholder': '搜索或选择',\n 'form.combobox.emptyText': '暂无匹配项',\n 'form.dialog.confirmText': '确认',\n 'form.dialog.cancelText': '取消',\n 'form.dialog.closeAriaLabel': '关闭',\n 'form.rate.ariaLabel': (index: unknown) => `评分 ${String(index)}`,\n 'form.upload.chooseFiles': '选择文件',\n 'form.upload.kb': 'KB',\n 'form.transfer.sourceTitle': '源列表',\n 'form.transfer.targetTitle': '目标列表',\n 'form.formItem.required': (label: unknown) => `${String(label || '字段')}为必填项`,\n 'form.formItem.requiredField': '字段',\n 'feedback.modal.closeAriaLabel': '关闭弹窗',\n 'feedback.drawer.closeAriaLabel': '关闭抽屉',\n 'data.tabs.removeTabAriaLabel': '移除标签页',\n 'data.tabs.addTabAriaLabel': '添加标签页',\n 'data.table.selectAllAriaLabel': '全选',\n 'data.table.selectRowAriaLabel': '选择行',\n 'data.table.emptyText': '暂无数据',\n 'display.carousel.prevSlideAriaLabel': '上一张',\n 'display.carousel.nextSlideAriaLabel': '下一张',\n 'display.comparison.beforeAlt': '之前',\n 'display.comparison.afterAlt': '之后',\n 'container.details.defaultSummary': '详情',\n 'theme.light': '浅色',\n 'theme.dark': '深色',\n 'theme.preview.title': '主题预览',\n 'theme.preview.applyTheme': '应用主题',\n 'theme.preview.dashboard': '仪表盘',\n 'theme.preview.components': '组件',\n 'theme.preview.themes': '主题',\n 'theme.preview.settings': '设置',\n 'theme.preview.buttons': '按钮',\n 'theme.preview.input': '输入框',\n 'theme.preview.tags': '标签',\n 'theme.preview.table': '表格',\n 'theme.preview.primary': '主要',\n 'theme.preview.default': '默认',\n 'theme.preview.dashed': '虚线',\n 'theme.preview.text': '文本',\n 'theme.preview.link': '链接',\n 'theme.preview.danger': '危险',\n 'theme.preview.enterText': '请输入文本...',\n 'theme.preview.search': '搜索...',\n 'theme.preview.brand': 'Aithe UI',\n 'theme.preview.success': '成功',\n 'theme.preview.warning': '警告',\n 'theme.preview.name': '姓名',\n 'theme.preview.role': '角色',\n 'theme.preview.status': '状态',\n 'theme.preview.admin': '管理员',\n 'theme.preview.editor': '编辑者',\n 'theme.preview.viewer': '查看者',\n 'theme.preview.active': '活跃',\n 'theme.preview.inactive': '未激活',\n 'localeSwitch.label': '语言',\n 'localeSwitch.english': 'English',\n 'localeSwitch.chinese': '中文',\n};\n","/**\n * Aithe UI 国际化(i18n)核心模块\n * Core internationalization module for the Aithe UI component library.\n *\n * 提供 locale 管理、翻译注册、翻译函数和 locale 变更订阅。\n * Provides locale management, translation registration, translate function,\n * and locale change subscription.\n *\n * 支持的 locale / Supported locales: en-US, zh-CN (BCP 47)\n *\n * 用法 / Usage:\n * - registerAitheLocale() — 注册完整 locale 翻译映射(替换)/ Register full locale map (replace)\n * - registerAitheTranslations() — 合并追加翻译条目(用于应用层)/ Merge additional entries (for app-level)\n * - setAitheLocale() — 切换当前 locale / Switch current locale\n * - t() — 翻译键值 / Translate key\n * - onAitheLocaleChange() — 订阅 locale 变更 / Subscribe to locale changes\n */\n\n/** BCP 47 locale 标识 / BCP 47 locale identifier */\nexport type AitheLocale = 'en-US' | 'zh-CN';\n\n/** 翻译值类型:静态字符串或插值函数 / Translation value: static string or interpolation function */\nexport type AitheTranslationValue = string | ((...args: unknown[]) => string);\n\n/** 核心翻译键类型定义 / Core translation key type definition */\nexport type AitheTranslationKeys = {\n 'basic.input.ariaLabel': string;\n 'basic.avatar.ariaLabel': string;\n 'basic.empty.defaultText': string;\n 'navigation.breadcrumb.ariaLabel': string;\n 'navigation.backTop.ariaLabel': string;\n 'form.select.placeholder': string;\n 'form.select.searchAriaLabel': string;\n 'form.select.searchPlaceholder': string;\n 'form.select.clearAriaLabel': string;\n 'form.select.emptyText': string;\n 'form.combobox.placeholder': string;\n 'form.combobox.emptyText': string;\n 'form.dialog.confirmText': string;\n 'form.dialog.cancelText': string;\n 'form.dialog.closeAriaLabel': string;\n 'form.rate.ariaLabel': AitheTranslationValue;\n 'form.upload.chooseFiles': string;\n 'form.upload.kb': string;\n 'form.transfer.sourceTitle': string;\n 'form.transfer.targetTitle': string;\n 'form.formItem.required': AitheTranslationValue;\n 'form.formItem.requiredField': string;\n 'feedback.modal.closeAriaLabel': string;\n 'feedback.drawer.closeAriaLabel': string;\n 'data.tabs.removeTabAriaLabel': string;\n 'data.tabs.addTabAriaLabel': string;\n 'data.table.selectAllAriaLabel': string;\n 'data.table.selectRowAriaLabel': string;\n 'data.table.emptyText': string;\n 'display.carousel.prevSlideAriaLabel': string;\n 'display.carousel.nextSlideAriaLabel': string;\n 'display.comparison.beforeAlt': string;\n 'display.comparison.afterAlt': string;\n 'container.details.defaultSummary': string;\n 'theme.light': string;\n 'theme.dark': string;\n 'theme.preview.title': string;\n 'theme.preview.applyTheme': string;\n 'theme.preview.dashboard': string;\n 'theme.preview.components': string;\n 'theme.preview.themes': string;\n 'theme.preview.settings': string;\n 'theme.preview.buttons': string;\n 'theme.preview.input': string;\n 'theme.preview.tags': string;\n 'theme.preview.table': string;\n 'theme.preview.primary': string;\n 'theme.preview.default': string;\n 'theme.preview.dashed': string;\n 'theme.preview.text': string;\n 'theme.preview.link': string;\n 'theme.preview.danger': string;\n 'theme.preview.enterText': string;\n 'theme.preview.search': string;\n 'theme.preview.brand': string;\n 'theme.preview.success': string;\n 'theme.preview.warning': string;\n 'theme.preview.name': string;\n 'theme.preview.role': string;\n 'theme.preview.status': string;\n 'theme.preview.admin': string;\n 'theme.preview.editor': string;\n 'theme.preview.viewer': string;\n 'theme.preview.active': string;\n 'theme.preview.inactive': string;\n 'localeSwitch.label': string;\n 'localeSwitch.english': string;\n 'localeSwitch.chinese': string;\n};\n\n/** localStorage 存储键 / localStorage key for persisting locale preference */\nconst STORAGE_KEY = 'aithe-locale';\n\n/** 当前 locale / Current active locale */\nlet currentLocale: AitheLocale = 'en-US';\n\n/** locale → 翻译映射注册表 / locale → translations registry */\nconst localeRegistry = new Map<AitheLocale, Record<string, AitheTranslationValue>>();\n\n/** locale 变更监听器集合 / Set of locale change listeners */\nconst listeners = new Set<() => void>();\n\n/**\n * 从 localStorage 读取已存储的 locale,兼容旧版 'en'/'zh' 值\n * Load stored locale from localStorage, with migration from legacy 'en'/'zh' values.\n */\nfunction loadStoredLocale(): AitheLocale | null {\n try {\n const raw = localStorage.getItem(STORAGE_KEY);\n if (!raw) return null;\n if (raw === 'en') return 'en-US';\n if (raw === 'zh') return 'zh-CN';\n return raw as AitheLocale;\n } catch {\n return null;\n }\n}\n\n/** 将 locale 持久化到 localStorage / Persist locale to localStorage */\nfunction storeLocale(locale: AitheLocale): void {\n try {\n localStorage.setItem(STORAGE_KEY, locale);\n } catch {\n // ignore\n }\n}\n\n/**\n * 注册完整 locale 翻译映射(替换已有)/ Register full locale translations (replaces existing).\n * 适用于核心库初始化 / Used for core library initialization.\n */\nexport function registerAitheLocale(\n locale: AitheLocale,\n translations: Record<string, AitheTranslationValue>,\n): void {\n localeRegistry.set(locale, translations);\n}\n\n/**\n * 合并追加翻译条目到已有 locale / Merge additional translations into existing locale.\n * 适用于应用层注册自定义翻译 / Used by apps to register custom translations.\n */\nexport function registerAitheTranslations(\n locale: AitheLocale,\n translations: Record<string, AitheTranslationValue>,\n): void {\n const existing = localeRegistry.get(locale) ?? {};\n localeRegistry.set(locale, { ...existing, ...translations });\n}\n\n/** 设置当前 locale 并通知监听器 / Set current locale and notify listeners */\nexport function setAitheLocale(locale: AitheLocale, persist = true): void {\n if (locale === currentLocale) return;\n currentLocale = locale;\n if (persist) storeLocale(locale);\n document.documentElement.setAttribute('lang', locale);\n listeners.forEach((fn) => fn());\n}\n\n/** 获取当前 locale / Get current locale */\nexport function getAitheLocale(): AitheLocale {\n return currentLocale;\n}\n\n/**\n * 初始化 locale(从 localStorage 恢复或使用默认值)\n * Initialize locale from localStorage or fall back to defaultLocale.\n */\nexport function initAitheLocale(defaultLocale: AitheLocale = 'en-US'): void {\n const stored = loadStoredLocale();\n currentLocale = stored || defaultLocale;\n document.documentElement.setAttribute('lang', currentLocale);\n}\n\n/**\n * 翻译函数:根据 key 获取当前 locale 的翻译文本\n * Translate function: resolve key to translated text in current locale.\n * 支持插值函数和 en-US 回退 / Supports interpolation functions and en-US fallback.\n */\nexport function t(key: string, ...args: unknown[]): string {\n const dict = localeRegistry.get(currentLocale) ?? {};\n const value = dict[key];\n if (typeof value === 'function') {\n return value(...args);\n }\n if (value !== undefined) return value;\n const enDict = localeRegistry.get('en-US') ?? {};\n const enValue = enDict[key];\n if (enValue !== undefined) {\n return typeof enValue === 'function' ? enValue(...args) : enValue;\n }\n return key;\n}\n\n/**\n * 订阅 locale 变更事件 / Subscribe to locale changes.\n * 返回取消订阅函数 / Returns unsubscribe function.\n */\nexport function onAitheLocaleChange(fn: () => void): () => void {\n listeners.add(fn);\n return () => listeners.delete(fn);\n}\n\nexport { en } from './locales/en-US';\nexport { zh } from './locales/zh-CN';\n","import { registerAitheTheme } from './styles/theme';\nimport type { AitheThemeName } from './types';\nimport { AITHE_DEFAULT_THEME, loadStoredTheme, setGlobalTheme } from './utils';\nimport { initAitheLocale, registerAitheLocale } from './core/i18n';\nimport { en } from './core/i18n/locales/en-US';\nimport { zh } from './core/i18n/locales/zh-CN';\n\n/**\n * Initialize the Aithe UI runtime: register themes and apply the stored\n * or default theme to the document root.\n * 初始化 Aithe UI 运行时:注册主题并将存储的或默认主题应用到文档根元素。\n *\n * @param defaultTheme - Theme to use when no stored preference exists. Defaults to `\"light\"`. 无存储偏好时使用的主题,默认为 `\"light\"`。\n */\nexport function initializeAitheUI(defaultTheme: AitheThemeName = AITHE_DEFAULT_THEME): void {\n registerAitheTheme();\n const stored = loadStoredTheme();\n setGlobalTheme(stored || defaultTheme, false);\n\n registerAitheLocale('en-US', en);\n registerAitheLocale('zh-CN', zh);\n initAitheLocale('en-US');\n}\n\n/**\n * Switch the global Aithe theme and optionally persist the choice.\n * 切换全局 Aithe 主题,并可选地持久化选择。\n *\n * @param theme - Theme name to apply. 要应用的主题名称。\n * @param persist - Whether to save to localStorage. Defaults to `true`. 是否保存到 localStorage,默认为 `true`。\n */\nexport function setAitheTheme(theme: AitheThemeName, persist = true): void {\n registerAitheTheme();\n setGlobalTheme(theme, persist);\n}\n\n/**\n * Read the current global Aithe theme.\n * 读取当前全局 Aithe 主题。\n *\n * @returns The active theme name. 当前活动的主题名称。\n */\nexport function getAitheTheme(): AitheThemeName {\n registerAitheTheme();\n return document.documentElement.dataset.aitheTheme || AITHE_DEFAULT_THEME;\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=t=>(e,o)=>{void 0!==o?o.addInitializer(()=>{customElements.define(t,e)}):customElements.define(t,e)};export{t as customElement};\n//# sourceMappingURL=custom-element.js.map\n","import{notEqual as t,defaultConverter as e}from\"../reactive-element.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const o={attribute:!0,type:String,converter:e,reflect:!1,hasChanged:t},r=(t=o,e,r)=>{const{kind:n,metadata:i}=r;let s=globalThis.litPropertyMetadata.get(i);if(void 0===s&&globalThis.litPropertyMetadata.set(i,s=new Map),\"setter\"===n&&((t=Object.create(t)).wrapped=!0),s.set(r.name,t),\"accessor\"===n){const{name:o}=r;return{set(r){const n=e.get.call(this);e.set.call(this,r),this.requestUpdate(o,n,t,!0,r)},init(e){return void 0!==e&&this.C(o,void 0,t,e),e}}}if(\"setter\"===n){const{name:o}=r;return function(r){const n=this[o];e.call(this,r),this.requestUpdate(o,n,t,!0,r)}}throw Error(\"Unsupported decorator location: \"+n)};function n(t){return(e,o)=>\"object\"==typeof o?r(t,e,o):((t,e,o)=>{const r=e.hasOwnProperty(o);return e.constructor.createProperty(o,t),r?Object.getOwnPropertyDescriptor(e,o):void 0})(t,e,o)}export{n as property,r as standardProperty};\n//# sourceMappingURL=property.js.map\n","import{property as t}from\"./property.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function r(r){return t({...r,state:!0,attribute:!1})}export{r as state};\n//# sourceMappingURL=state.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst e=(e,t,c)=>(c.configurable=!0,c.enumerable=!0,Reflect.decorate&&\"object\"!=typeof t&&Object.defineProperty(e,t,c),c);export{e as desc};\n//# sourceMappingURL=base.js.map\n","import{desc as t}from\"./base.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function e(e,r){return(n,s,i)=>{const o=t=>t.renderRoot?.querySelector(e)??null;if(r){const{get:e,set:r}=\"object\"==typeof s?n:i??(()=>{const t=Symbol();return{get(){return this[t]},set(e){this[t]=e}}})();return t(n,s,{get(){let t=e.call(this);return void 0===t&&(t=o(this),(null!==t||this.hasUpdated)&&r.call(this,t)),t}})}return t(n,s,{get(){return o(this)}})}}export{e as query};\n//# sourceMappingURL=query.js.map\n","import{desc as t}from\"./base.js\";\n/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function o(o){return(e,n)=>{const{slot:r,selector:s}=o??{},c=\"slot\"+(r?`[name=${r}]`:\":not([name])\");return t(e,n,{get(){const t=this.renderRoot?.querySelector(c),e=t?.assignedElements(o)??[];return void 0===s?e:e.filter(t=>t.matches(s))}})}}export{o as queryAssignedElements};\n//# sourceMappingURL=query-assigned-elements.js.map\n","import { LitElement } from 'lit';\nimport { property } from 'lit/decorators.js';\n\nimport { registerAitheTheme } from '../styles/theme';\nimport {\n emitAitheEvent,\n findFirstFocusable,\n getFocusableElements,\n resolveComputedTheme,\n} from '../utils';\n\n/**\n * Minimal shared base element for all Aithe UI components.\n * 所有 Aithe UI 组件的最小共享基元素。\n *\n * Provides common reactive properties (`variant`, `size`, `theme`, `disabled`),\n * an `emit()` helper for composed custom events, theme resolution, and\n * focus-trapping utilities.\n * 提供通用响应式属性(`variant`、`size`、`theme`、`disabled`)、\n * 组合自定义事件的 `emit()` 辅助方法、主题解析和焦点陷阱工具。\n */\nexport class AitheElement extends LitElement {\n /** Visual variant. Default: `default`. 视觉变体,默认 `default`。 */\n @property({ type: String }) variant = 'default';\n\n /** Shared size scale. Default: `md`. 共享尺寸规格,默认 `md`。 */\n @property({ type: String }) size = 'md';\n\n /** Optional local theme override. 可选的本地主题覆盖。 */\n @property({ type: String }) theme = '';\n\n /** Disabled state. Default: `false`. 禁用状态,默认 `false`。 */\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n /**\n * Register the default theme on first instantiation.\n * 在首次实例化时注册默认主题。\n */\n constructor() {\n super();\n registerAitheTheme();\n }\n\n /**\n * Emits a composed custom event with standard Aithe defaults.\n * 使用 Aithe 默认值发出组合自定义事件。\n *\n * @param type - Event type string. 事件类型字符串。\n * @param detail - Optional payload attached to the event. 附带在事件上的可选载荷。\n */\n emit(type: string, detail?: unknown): void {\n emitAitheEvent(this, type, detail);\n }\n\n /**\n * Final resolved theme name (local override → closest themed ancestor → global).\n * 最终解析的主题名称(本地覆盖 → 最近带主题祖先 → 全局)。\n */\n get computedTheme(): string {\n return resolveComputedTheme(this, this.theme || undefined);\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.syncBaseA11yState();\n }\n\n /**\n * Focus the first focusable child inside the render root.\n * 聚焦渲染根中的第一个可聚焦子元素。\n *\n * @param root - Scope to search within. Defaults to `this.renderRoot`. 搜索范围,默认为 `this.renderRoot`。\n */\n protected focusFirst(root: ParentNode = this.renderRoot): void {\n findFirstFocusable(root)?.focus();\n }\n\n /**\n * Trap Tab focus within a root container (shift+Tab wraps to last, Tab wraps to first).\n * 在根容器内捕获 Tab 焦点(shift+Tab 跳到最后,Tab 跳到第一个)。\n *\n * @param event - The keyboard event. 键盘事件。\n * @param root - Scope to trap within. Defaults to `this.renderRoot`. 捕获范围,默认为 `this.renderRoot`。\n */\n protected trapFocus(event: KeyboardEvent, root: ParentNode = this.renderRoot): void {\n if (event.key !== 'Tab') {\n return;\n }\n\n const items = getFocusableElements(root);\n if (!items.length) {\n return;\n }\n\n const first = items[0]!;\n const last = items.at(-1)!;\n const current = this.shadowRoot?.activeElement as HTMLElement | null;\n\n if (event.shiftKey && current === first) {\n event.preventDefault();\n last.focus();\n return;\n }\n\n if (!event.shiftKey && current === last) {\n event.preventDefault();\n first.focus();\n }\n }\n\n /** Sync `aria-disabled` and `data-aithe-theme` on attribute changes. 在属性变化时同步 `aria-disabled` 和 `data-aithe-theme`。 */\n private syncBaseA11yState(): void {\n if (this.disabled) {\n this.setAttribute('aria-disabled', 'true');\n } else {\n this.removeAttribute('aria-disabled');\n }\n\n if (!Object.hasOwn(this.dataset, 'aitheTheme')) {\n this.dataset.aitheTheme = this.computedTheme;\n }\n }\n\n override attributeChangedCallback(\n name: string,\n oldValue: string | null,\n newValue: string | null,\n ): void {\n super.attributeChangedCallback(name, oldValue, newValue);\n queueMicrotask(() => this.syncBaseA11yState());\n }\n}\n","import { css } from 'lit';\n\n/** Primitive design tokens (spacing, radius, shadow, typography, z-index, duration, control heights) scoped to `:host`. 作用域为 `:host` 的基础设计令牌(间距、圆角、阴影、排版、z-index、时长、控件高度)。 */\nexport const aithePrimitiveTokens = css`\n :host {\n --aithe-space-0: 0;\n --aithe-space-1: 4px;\n --aithe-space-2: 8px;\n --aithe-space-3: 12px;\n --aithe-space-4: 16px;\n --aithe-space-5: 20px;\n --aithe-space-6: 24px;\n --aithe-space-7: 32px;\n --aithe-space-8: 40px;\n --aithe-space-9: 48px;\n --aithe-space-10: 64px;\n --aithe-space-xs: var(--aithe-space-2);\n --aithe-space-sm: var(--aithe-space-3);\n --aithe-space-md: var(--aithe-space-4);\n --aithe-space-lg: var(--aithe-space-6);\n --aithe-space-xl: var(--aithe-space-8);\n --aithe-radius-sm: 6px;\n --aithe-radius-md: 10px;\n --aithe-radius-lg: 14px;\n --aithe-radius-xl: 20px;\n --aithe-radius-full: 999px;\n --aithe-shadow-1: 0 6px 18px rgba(18, 24, 38, 0.06);\n --aithe-shadow-2: 0 12px 28px rgba(18, 24, 38, 0.08);\n --aithe-shadow-3: 0 18px 40px rgba(18, 24, 38, 0.1);\n --aithe-shadow-4: 0 22px 56px rgba(18, 24, 38, 0.14);\n --aithe-shadow-5: 0 28px 72px rgba(18, 24, 38, 0.18);\n --aithe-font-family: 'Sora', 'IBM Plex Sans', 'PingFang SC', 'Microsoft YaHei', sans-serif;\n --aithe-font-family-mono: 'JetBrains Mono', 'SFMono-Regular', 'Consolas', monospace;\n --aithe-font-size-xs: 12px;\n --aithe-font-size-sm: 13px;\n --aithe-font-size-md: 14px;\n --aithe-font-size-lg: 16px;\n --aithe-font-size-xl: 20px;\n --aithe-font-size-2xl: 28px;\n --aithe-font-weight-regular: 400;\n --aithe-font-weight-medium: 500;\n --aithe-font-weight-semibold: 600;\n --aithe-font-weight-bold: 700;\n --aithe-line-height-tight: 1.2;\n --aithe-line-height-base: 1.5;\n --aithe-line-height-loose: 1.7;\n --aithe-z-base: 1;\n --aithe-z-dropdown: 1000;\n --aithe-z-popover: 1010;\n --aithe-z-modal: 1080;\n --aithe-z-drawer: 1090;\n --aithe-z-tooltip: 1120;\n --aithe-duration-fast: 140ms;\n --aithe-duration-base: 220ms;\n --aithe-duration-slow: 320ms;\n --aithe-ease-standard: cubic-bezier(0.2, 0.8, 0.2, 1);\n --aithe-control-height-sm: 32px;\n --aithe-control-height-md: 40px;\n --aithe-control-height-lg: 48px;\n }\n`;\n\n/** Panel surface styles (background, border, radius, shadow, backdrop-filter). 面板表面样式(背景、边框、圆角、阴影、背景滤镜)。 */\nexport const aitheSurfaceStyles = css`\n background: var(--aithe-color-surface-elevated);\n border: 1px solid var(--aithe-color-border);\n border-radius: var(--aithe-radius-lg);\n box-shadow: var(--aithe-shadow-2);\n backdrop-filter: blur(16px);\n`;\n\n/** Base styles for interactive controls (border, radius, background, color, transitions). 交互控件的基础样式(边框、圆角、背景、颜色、过渡)。 */\nexport const aitheControlStyles = css`\n border: 1px solid var(--aithe-color-border);\n border-radius: var(--aithe-radius-md);\n background: var(--aithe-color-surface-elevated);\n color: var(--aithe-color-text);\n transition:\n border-color var(--aithe-duration-fast) var(--aithe-ease-standard),\n box-shadow var(--aithe-duration-fast) var(--aithe-ease-standard),\n background var(--aithe-duration-fast) var(--aithe-ease-standard),\n color var(--aithe-duration-fast) var(--aithe-ease-standard);\n`;\n\n/** Focus ring styles for interactive controls (border-color + box-shadow). 交互控件的聚焦环样式(边框颜色 + box-shadow)。 */\nexport const aitheControlFocusStyles = css`\n border-color: var(--aithe-primary-5);\n box-shadow: 0 0 0 4px var(--aithe-color-focus-ring);\n`;\n","import { css, unsafeCSS } from 'lit';\n\nimport { aitheGlobalResetStyles } from '../styles/global.css';\nimport {\n aitheControlFocusStyles,\n aitheControlStyles,\n aithePrimitiveTokens,\n aitheSurfaceStyles,\n} from '../styles/mixins';\n\n/** Base styles shared by every Aithe component (reset + primitive tokens). 所有 Aithe 组件共享的基础样式(重置 + 基础令牌)。 */\nexport const aitheBaseStyles = [aithePrimitiveTokens, aitheGlobalResetStyles];\n\n/**\n * Generate panel surface styles for a given CSS selector.\n * 为给定 CSS 选择器生成面板表面样式。\n *\n * @param selector - CSS selector to target. Defaults to `.panel`. 目标 CSS 选择器,默认为 `.panel`。\n * @returns A Lit `CSSResult` with surface background and border styles. 包含表面背景和边框样式的 Lit `CSSResult`。\n */\nexport const aithePanelStyles = (selector = '.panel') => css`\n ${unsafeCSS(selector)} {\n ${aitheSurfaceStyles}\n }\n`;\n\n/** Reusable control (input-like) base styles. 可复用的控件(输入类)基础样式。 */\nexport const aitheControlStyleBlock = css`\n ${aitheControlStyles}\n`;\n\n/** Focus ring styles for controls. 控件的聚焦环样式。 */\nexport const aitheControlFocusStyleBlock = css`\n ${aitheControlFocusStyles}\n`;\n\n/** Cross-browser thin scrollbar styles. 跨浏览器细滚动条样式。 */\nexport const aitheScrollbarStyles = css`\n * {\n scrollbar-color: var(--aithe-neutral-5) transparent;\n scrollbar-width: thin;\n }\n\n *::-webkit-scrollbar {\n width: 10px;\n height: 10px;\n }\n\n *::-webkit-scrollbar-thumb {\n background: rgba(130, 145, 171, 0.42);\n border: 2px solid transparent;\n border-radius: 999px;\n background-clip: padding-box;\n }\n`;\n","import { css, html, nothing, svg } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\nimport { normalizeCssUnit } from '../../utils';\n\nconst iconMap: Record<string, unknown> = {\n // ── General / 通用 ──\n sparkles: svg`<path d=\"M12 3l1.8 4.2L18 9l-4.2 1.8L12 15l-1.8-4.2L6 9l4.2-1.8L12 3z\"></path><path d=\"M5 14l.9 2.1L8 17l-2.1.9L5 20l-.9-2.1L2 17l2.1-.9L5 14z\"></path>`,\n close: svg`<path d=\"M6 6l12 12M18 6L6 18\"></path>`,\n check: svg`<path d=\"M5 13l4 4L19 7\"></path>`,\n info: svg`<circle cx=\"12\" cy=\"12\" r=\"9\"></circle><path d=\"M12 10v5\"></path><path d=\"M12 7h.01\"></path>`,\n warning: svg`<path d=\"M12 4l9 16H3L12 4z\"></path><path d=\"M12 10v4\"></path><path d=\"M12 17h.01\"></path>`,\n image: svg`<rect x=\"4\" y=\"5\" width=\"16\" height=\"14\" rx=\"2\"></rect><path d=\"M8 14l3-3 5 5\"></path><path d=\"M14 12l2-2 4 4\"></path><circle cx=\"9\" cy=\"9\" r=\"1.5\"></circle>`,\n search: svg`<circle cx=\"11\" cy=\"11\" r=\"7\"></circle><path d=\"M21 21l-4.35-4.35\"></path>`,\n plus: svg`<path d=\"M12 5v14M5 12h14\"></path>`,\n minus: svg`<path d=\"M5 12h14\"></path>`,\n menu: svg`<path d=\"M4 6h16M4 12h16M4 18h16\"></path>`,\n more: svg`<circle cx=\"12\" cy=\"5\" r=\"1.5\"></circle><circle cx=\"12\" cy=\"12\" r=\"1.5\"></circle><circle cx=\"12\" cy=\"19\" r=\"1.5\"></circle>`,\n settings: svg`<circle cx=\"12\" cy=\"12\" r=\"3\"></circle><path d=\"M19.4 15a1.65 1.65 0 00.5 1.8l.05.05a2 2 0 010 2.83 2 2 0 01-2.83 0l-.05-.05a1.65 1.65 0 00-1.8-.5 1.65 1.65 0 00-1 1.51V21a2 2 0 01-4 0v-.09a1.65 1.65 0 00-1-1.51 1.65 1.65 0 00-1.8.5l-.05.05a2 2 0 01-2.83 0 2 2 0 010-2.83l.05-.05a1.65 1.65 0 00.5-1.8 1.65 1.65 0 00-1.51-1H3a2 2 0 010-4h.09a1.65 1.65 0 001.51-1 1.65 1.65 0 00-.5-1.8l-.05-.05a2 2 0 010-2.83 2 2 0 012.83 0l.05.05a1.65 1.65 0 001.8.5H9a1.65 1.65 0 001-1.51V3a2 2 0 014 0v.09a1.65 1.65 0 001 1.51 1.65 1.65 0 001.8-.5l.05-.05a2 2 0 012.83 0 2 2 0 010 2.83l-.05.05a1.65 1.65 0 00-.5 1.8 1.65 1.65 0 001.51 1H21a2 2 0 010 4h-.09a1.65 1.65 0 00-1.51 1z\"></path>`,\n home: svg`<path d=\"M3 12l9-9 9 9\"></path><path d=\"M9 21V12h6v9\"></path>`,\n star: svg`<path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\"></path>`,\n heart: svg`<path d=\"M20.84 4.61a5.5 5.5 0 00-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 00-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 000-7.78z\"></path>`,\n copy: svg`<rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"></rect><path d=\"M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1\"></path>`,\n download: svg`<path d=\"M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4\"></path><path d=\"M7 10l5 5 5-5\"></path><path d=\"M12 15V3\"></path>`,\n upload: svg`<path d=\"M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4\"></path><path d=\"M17 8l-5-5-5 5\"></path><path d=\"M12 3v12\"></path>`,\n share: svg`<circle cx=\"18\" cy=\"5\" r=\"3\"></circle><circle cx=\"6\" cy=\"12\" r=\"3\"></circle><circle cx=\"18\" cy=\"19\" r=\"3\"></circle><path d=\"M8.59 13.51l6.83 3.98M15.41 6.51l-6.82 3.98\"></path>`,\n link: svg`<path d=\"M10 13a5 5 0 007.54.54l3-3a5 5 0 00-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 00-7.54-.54l-3 3a5 5 0 007.07 7.07l1.71-1.71\"></path>`,\n external: svg`<path d=\"M18 13v6a2 2 0 01-2 2H5a2 2 0 01-2-2V8a2 2 0 012-2h6\"></path><path d=\"M15 3h6v6\"></path><path d=\"M10 14L21 3\"></path>`,\n refresh: svg`<path d=\"M21.5 2v6h-6\"></path><path d=\"M2.5 22v-6h6\"></path><path d=\"M21.5 8A10 10 0 003.5 8\"></path><path d=\"M2.5 16A10 10 0 0020.5 16\"></path>`,\n edit: svg`<path d=\"M11 4H4a2 2 0 00-2 2v14a2 2 0 002 2h14a2 2 0 002-2v-7\"></path><path d=\"M18.5 2.5a2.12 2.12 0 013 3L12 15l-4 1 1-4 9.5-9.5z\"></path>`,\n trash: svg`<path d=\"M3 6h18M8 6V4a2 2 0 012-2h4a2 2 0 012 2v2m3 0v14a2 2 0 01-2 2H7a2 2 0 01-2-2V6h14\"></path>`,\n filter: svg`<path d=\"M22 3H2l8 9.46V19l4 2v-8.54L22 3z\"></path>`,\n sort: svg`<path d=\"M7 4l-4 4 4 4\"></path><path d=\"M17 4l4 4-4 4\"></path><path d=\"M3 8h18\"></path>`,\n lock: svg`<rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\"></rect><path d=\"M7 11V7a5 5 0 0110 0v4\"></path>`,\n unlock: svg`<rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\"></rect><path d=\"M7 11V7a5 5 0 019.9-1\"></path>`,\n eye: svg`<path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\"></path><circle cx=\"12\" cy=\"12\" r=\"3\"></circle>`,\n eyeOff: svg`<path d=\"M17.94 17.94A10.07 10.07 0 0112 20c-7 0-11-8-11-8a18.45 18.45 0 015.06-5.94\"></path><path d=\"M9.9 4.24A9.12 9.12 0 0112 4c7 0 11 8 11 8a18.5 18.5 0 01-2.16 3.19\"></path><path d=\"M14.12 14.12a3 3 0 11-4.24-4.24\"></path><path d=\"M1 1l22 22\"></path>`,\n clock: svg`<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><path d=\"M12 6v6l4 2\"></path>`,\n calendar: svg`<rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\"></rect><path d=\"M16 2v4M8 2v4M3 10h18\"></path>`,\n pin: svg`<path d=\"M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7z\"></path><circle cx=\"12\" cy=\"9\" r=\"2.5\"></circle>`,\n flag: svg`<path d=\"M4 22V4\"></path><path d=\"M4 4l8 4-8 4 8 4-8 4\"></path>`,\n bookmark: svg`<path d=\"M19 21l-7-5-7 5V5a2 2 0 012-2h10a2 2 0 012 2z\"></path>`,\n paperclip: svg`<path d=\"M21.44 11.05l-9.19 9.19a6 6 0 01-8.49-8.49l9.19-9.19a4 4 0 015.66 5.66l-9.2 9.19a2 2 0 01-2.83-2.83l8.49-8.48\"></path>`,\n tag: svg`<path d=\"M20.59 13.41l-7.17 7.17a2 2 0 01-2.83 0L2 12V2h10l8.59 8.59a2 2 0 010 2.82z\"></path><path d=\"M7 7h.01\"></path>`,\n thumbUp: svg`<path d=\"M14 9V5a3 3 0 00-3-3l-4 9v11h11.56a2 2 0 002-1.72l1.67-8a2 2 0 00-2-2.28H14z\"></path><path d=\"M7 22H4a2 2 0 01-2-2v-7a2 2 0 012-2h3\"></path>`,\n thumbDown: svg`<path d=\"M10 15v4a3 3 0 003 3l4-9V2H5.44a2 2 0 00-2 1.72l-1.67 8a2 2 0 002 2.28H10z\"></path><path d=\"M17 2h3a2 2 0 012 2v7a2 2 0 01-2 2h-3\"></path>`,\n // ── Arrows / 箭头 ──\n arrowUp: svg`<path d=\"M12 19V5M5 12l7-7 7 7\"></path>`,\n arrowDown: svg`<path d=\"M12 5v14M19 12l-7 7-7-7\"></path>`,\n arrowLeft: svg`<path d=\"M19 12H5M12 19l-7-7 7-7\"></path>`,\n arrowRight: svg`<path d=\"M5 12h14M12 5l7 7-7 7\"></path>`,\n chevronUp: svg`<path d=\"M6 15l6-6 6 6\"></path>`,\n chevronDown: svg`<path d=\"M6 9l6 6 6-6\"></path>`,\n chevronLeft: svg`<path d=\"M15 6l-6 6 6 6\"></path>`,\n chevronRight: svg`<path d=\"M9 6l6 6-6 6\"></path>`,\n expand: svg`<path d=\"M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7\"></path>`,\n collapse: svg`<path d=\"M4 14h6v6M20 10h-6V4M14 10l7-7M3 21l7-7\"></path>`,\n // ── Status / 状态 ──\n success: svg`<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><path d=\"M8 12l3 3 5-5\"></path>`,\n error: svg`<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><path d=\"M15 9l-6 6M9 9l6 6\"></path>`,\n question: svg`<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><path d=\"M9.09 9a3 3 0 015.83 1c0 2-3 3-3 3\"></path><path d=\"M12 17h.01\"></path>`,\n // ── Media / 媒体 ──\n play: svg`<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><path d=\"M10 8l6 4-6 4V8z\"></path>`,\n pause: svg`<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><rect x=\"9\" y=\"8\" width=\"2\" height=\"8\"></rect><rect x=\"15\" y=\"8\" width=\"2\" height=\"8\"></rect>`,\n volume: svg`<path d=\"M11 5L6 9H2v6h4l5 4V5z\"></path><path d=\"M19.07 4.93a10 10 0 010 14.14M15.54 8.46a5 5 0 010 7.07\"></path>`,\n mute: svg`<path d=\"M11 5L6 9H2v6h4l5 4V5z\"></path><path d=\"M23 9l-6 6M17 9l6 6\"></path>`,\n camera: svg`<path d=\"M23 19a2 2 0 01-2 2H3a2 2 0 01-2-2V8a2 2 0 012-2h4l2-3h6l2 3h4a2 2 0 012 2z\"></path><circle cx=\"12\" cy=\"13\" r=\"4\"></circle>`,\n video: svg`<polygon points=\"23 7 16 12 23 17 23 7\"></polygon><rect x=\"1\" y=\"5\" width=\"15\" height=\"14\" rx=\"2\"></rect>`,\n music: svg`<path d=\"M9 18V5l12-2v13\"></path><circle cx=\"6\" cy=\"18\" r=\"3\"></circle><circle cx=\"18\" cy=\"16\" r=\"3\"></circle>`,\n // ── Communication / 交流 ──\n mail: svg`<path d=\"M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z\"></path><path d=\"M22 6l-10 7L2 6\"></path>`,\n bell: svg`<path d=\"M18 8A6 6 0 006 8c0 7-3 9-3 9h18s-3-2-3-9M13.73 21a2 2 0 01-3.46 0\"></path>`,\n chat: svg`<path d=\"M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z\"></path>`,\n phone: svg`<path d=\"M22 16.92v3a2 2 0 01-2.18 2 19.79 19.79 0 01-8.63-3.07 19.5 19.5 0 01-6-6 19.79 19.79 0 01-3.07-8.67A2 2 0 014.11 2h3a2 2 0 012 1.72c.127.96.361 1.903.7 2.81a2 2 0 01-.45 2.11L8.09 9.91a16 16 0 006 6l1.27-1.27a2 2 0 012.11-.45c.907.339 1.85.573 2.81.7A2 2 0 0122 16.92z\"></path>`,\n // ── Data / 数据 ──\n barChart: svg`<path d=\"M12 20V10M18 20V4M6 20v-4\"></path>`,\n pieChart: svg`<path d=\"M21.21 15.89A10 10 0 118 2.83\"></path><path d=\"M22 12A10 10 0 0012 2v10z\"></path>`,\n database: svg`<ellipse cx=\"12\" cy=\"5\" rx=\"9\" ry=\"3\"></ellipse><path d=\"M21 12c0 1.66-4 3-9 3s-9-1.34-9-3\"></path><path d=\"M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5\"></path>`,\n code: svg`<path d=\"M16 18l6-6-6-6M8 6l-6 6 6 6\"></path>`,\n terminal: svg`<polyline points=\"4 17 10 11 4 5\"></polyline><path d=\"M12 19h8\"></path>`,\n file: svg`<path d=\"M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z\"></path><path d=\"M14 2v6h6\"></path>`,\n folder: svg`<path d=\"M22 19a2 2 0 01-2 2H4a2 2 0 01-2-2V5a2 2 0 012-2h5l2 3h9a2 2 0 012 2z\"></path>`,\n // ── Layout / 布局 ──\n grid: svg`<rect x=\"3\" y=\"3\" width=\"7\" height=\"7\"></rect><rect x=\"14\" y=\"3\" width=\"7\" height=\"7\"></rect><rect x=\"3\" y=\"14\" width=\"7\" height=\"7\"></rect><rect x=\"14\" y=\"14\" width=\"7\" height=\"7\"></rect>`,\n list: svg`<path d=\"M8 6h13M8 12h13M8 18h13M3 6h.01M3 12h.01M3 18h.01\"></path>`,\n sidebar: svg`<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"></rect><path d=\"M9 3v18\"></path>`,\n maximize: svg`<path d=\"M8 3H5a2 2 0 00-2 2v3M21 8V5a2 2 0 00-2-2h-3M3 16v3a2 2 0 002 2h3M16 21h3a2 2 0 002-2v-3\"></path>`,\n minimize: svg`<path d=\"M8 3v3a2 2 0 01-2 2H3M21 8h-3a2 2 0 01-2-2V3M3 16h3a2 2 0 012 2v3M16 21v-3a2 2 0 012-2h3\"></path>`,\n // ── User / 用户 ──\n user: svg`<path d=\"M20 21v-2a4 4 0 00-4-4H8a4 4 0 00-4 4v2\"></path><circle cx=\"12\" cy=\"7\" r=\"4\"></circle>`,\n users: svg`<path d=\"M17 21v-2a4 4 0 00-4-4H5a4 4 0 00-4 4v2\"></path><circle cx=\"9\" cy=\"7\" r=\"4\"></circle><path d=\"M23 21v-2a4 4 0 00-3-3.87M16 3.13a4 4 0 010 7.75\"></path>`,\n // ── Weather / 天气 ──\n sun: svg`<circle cx=\"12\" cy=\"12\" r=\"5\"></circle><path d=\"M12 1v2M12 21v2M4.22 4.22l1.42 1.42M18.36 18.36l1.42 1.42M1 12h2M21 12h2M4.22 19.78l1.42-1.42M18.36 5.64l1.42-1.42\"></path>`,\n moon: svg`<path d=\"M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z\"></path>`,\n cloud: svg`<path d=\"M18 10h-1.26A8 8 0 109 20h9a5 5 0 000-10z\"></path>`,\n};\n\n/**\n * Vector icon entry for the Aithe UI icon system.\n * 矢量图标组件,用于 Aithe UI 图标系统。\n *\n * Renders an SVG glyph from the built-in icon map based on the `name` property.\n * All icons use a 24×24 viewBox, stroke-based rendering with `stroke-width: 1.8`,\n * and inherit color via `currentColor`.\n * 根据 `name` 属性从内置图标映射中渲染 SVG 图形。\n * 所有图标使用 24×24 视口,基于描边渲染(stroke-width: 1.8),颜色继承 currentColor。\n *\n * Built-in icon names (60+ glyphs):\n * 内置图标名称(60+ 图形):\n *\n * **General / 通用**: sparkles, close, check, info, warning, image, search, plus, minus,\n * menu, more, settings, home, star, heart, copy, download, upload, share, link,\n * external, refresh, edit, trash, filter, sort, lock, unlock, eye, eyeOff, clock,\n * calendar, pin, flag, bookmark, paperclip, tag, thumbUp, thumbDown\n *\n * **Arrows / 箭头**: arrowUp, arrowDown, arrowLeft, arrowRight, chevronUp, chevronDown,\n * chevronLeft, chevronRight, expand, collapse\n *\n * **Status / 状态**: success, error, question\n *\n * **Media / 媒体**: play, pause, volume, mute, camera, video, music\n *\n * **Communication / 交流**: mail, bell, chat, phone\n *\n * **Data / 数据**: barChart, pieChart, database, code, terminal, file, folder\n *\n * **Layout / 布局**: grid, list, sidebar, maximize, minimize\n *\n * **User / 用户**: user, users\n *\n * **Weather / 天气**: sun, moon, cloud\n *\n * @slot - Default slot for custom SVG content (overrides built-in glyph).\n * 默认插槽,用于自定义 SVG 内容(覆盖内置图形)。\n *\n * @cssproperty --aithe-icon-size - Controls the SVG width/height. Set dynamically from `size` property.\n * @cssproperty --aithe-icon-color - Controls the host `color` which cascades to `stroke: currentColor`.\n *\n * @example\n * ```html\n * <aithe-icon name=\"sparkles\" size=\"lg\" color=\"#4d8dff\"></aithe-icon>\n * <aithe-icon name=\"check\" size=\"sm\"></aithe-icon>\n * <aithe-icon name=\"heart\" color=\"var(--aithe-danger-6)\"></aithe-icon>\n * ```\n */\n@customElement('aithe-icon')\nexport class AitheIcon extends AitheElement {\n /** Icon glyph name from the built-in map. 内置图标名称。 */\n @property({ type: String }) name = 'sparkles';\n /** Custom stroke/fill color. 自定义颜色。 */\n @property({ type: String }) color = '';\n /** Icon size preset or explicit CSS value. 图标尺寸预设或显式 CSS 值。 */\n @property({ type: String }) size = 'md';\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: inline-flex;\n color: var(--aithe-icon-color, currentColor);\n }\n\n svg {\n width: var(--aithe-icon-size, 18px);\n height: var(--aithe-icon-size, 18px);\n fill: none;\n stroke: currentColor;\n stroke-linecap: round;\n stroke-linejoin: round;\n stroke-width: 1.8;\n }\n `,\n ];\n\n render() {\n const sizeMap = { sm: '14px', md: '18px', lg: '22px' } as const;\n const glyph = iconMap[this.name] ?? nothing;\n const normalizedSize = normalizeCssUnit(\n sizeMap[this.size as keyof typeof sizeMap] ?? this.size,\n '18px',\n );\n\n this.style.setProperty('--aithe-icon-size', normalizedSize);\n this.style.setProperty('--aithe-icon-color', this.color || 'currentColor');\n\n return html`\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">${glyph}</svg>\n `;\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},e=t=>(...e)=>({_$litDirective$:t,values:e});class i{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,e,i){this._$Ct=t,this._$AM=e,this._$Ci=i}_$AS(t,e){return this.update(t,e)}update(t,e){return this.render(...e)}}export{i as Directive,t as PartType,e as directive};\n//# sourceMappingURL=directive.js.map\n","import{noChange as t}from\"../lit-html.js\";import{directive as s,Directive as i,PartType as r}from\"../directive.js\";\n/**\n * @license\n * Copyright 2018 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const e=s(class extends i{constructor(t){if(super(t),t.type!==r.ATTRIBUTE||\"class\"!==t.name||t.strings?.length>2)throw Error(\"`classMap()` can only be used in the `class` attribute and must be the only part in the attribute.\")}render(t){return\" \"+Object.keys(t).filter(s=>t[s]).join(\" \")+\" \"}update(s,[i]){if(void 0===this.st){this.st=new Set,void 0!==s.strings&&(this.nt=new Set(s.strings.join(\" \").split(/\\s/).filter(t=>\"\"!==t)));for(const t in i)i[t]&&!this.nt?.has(t)&&this.st.add(t);return this.render(i)}const r=s.element.classList;for(const t of this.st)t in i||(r.remove(t),this.st.delete(t));for(const t in i){const s=!!i[t];s===this.st.has(t)||this.nt?.has(t)||(s?(r.add(t),this.st.add(t)):(r.remove(t),this.st.delete(t)))}return t}});export{e as classMap};\n//# sourceMappingURL=class-map.js.map\n","import { css, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\n\nimport { AitheElement } from '../../core/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\n\n/**\n * Button component with multiple visual types, sizes, and states.\n * 按钮组件,支持多种视觉类型、尺寸和状态。\n *\n * @slot - Default slot for button label. 默认插槽,用于按钮标签。\n * @slot prefix - Icon or content before the label. 标签前的图标或内容。\n * @slot suffix - Icon or content after the label. 标签后的图标或内容。\n *\n * @fires aithe-click - Emitted when the button is clicked (not when disabled/loading). 按钮被点击时发出(禁用/加载时不发出)。\n *\n * @example\n * ```html\n * <aithe-button type=\"primary\" size=\"medium\">Submit</aithe-button>\n * <aithe-button type=\"danger\" loading>Deleting...</aithe-button>\n * ```\n */\n@customElement('aithe-button')\nexport class AitheButton extends AitheElement {\n /** Visual type of the button. 按钮的视觉类型。 */\n @property({ type: String }) type: 'primary' | 'default' | 'dashed' | 'text' | 'link' = 'default';\n /** Size scale of the button. 按钮的尺寸规格。 */\n @property({ type: String }) size: 'small' | 'medium' | 'large' = 'medium';\n /** Display title for the button (shown as tooltip). 按钮的显示标题(作为工具提示)。 */\n @property({ type: String }) title = '';\n /** Icon name to display before the label. 在标签前显示的图标名称。 */\n @property({ type: String }) icon = '';\n /** Whether the button is disabled. 按钮是否禁用。 */\n @property({ type: Boolean, reflect: true }) disabled = false;\n /** Whether the button shows a loading spinner. 按钮是否显示加载旋转器。 */\n @property({ type: Boolean, reflect: true }) loading = false;\n /** Whether the button uses danger styling. 按钮是否使用危险样式。 */\n @property({ type: Boolean, reflect: true }) danger = false;\n /** Whether the button spans the full width of its container. 按钮是否占满容器宽度。 */\n @property({ type: Boolean, reflect: true }) block = false;\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: inline-flex;\n flex: 0 0 auto;\n max-width: 100%;\n }\n\n :host([block]) {\n display: flex;\n width: 100%;\n }\n\n button {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--aithe-space-2);\n width: auto;\n max-width: 100%;\n border: 1px solid transparent;\n border-radius: var(--aithe-radius-md);\n background: var(--aithe-color-surface-elevated);\n color: var(--aithe-color-text);\n cursor: pointer;\n transition:\n transform var(--aithe-duration-fast) var(--aithe-ease-standard),\n background var(--aithe-duration-fast) var(--aithe-ease-standard),\n border-color var(--aithe-duration-fast) var(--aithe-ease-standard),\n color var(--aithe-duration-fast) var(--aithe-ease-standard),\n box-shadow var(--aithe-duration-fast) var(--aithe-ease-standard);\n white-space: nowrap;\n }\n\n button:hover:not(:disabled) {\n transform: translateY(-1px);\n border-color: var(--aithe-color-border-strong);\n box-shadow: var(--aithe-shadow-1);\n }\n\n button:active:not(:disabled) {\n transform: translateY(0);\n }\n\n button:disabled {\n opacity: 0.56;\n cursor: not-allowed;\n }\n\n :host([block]) button {\n width: 100%;\n }\n\n .small {\n min-height: var(--aithe-control-height-sm);\n min-width: 72px;\n padding: 0 var(--aithe-space-3);\n font-size: var(--aithe-font-size-sm);\n }\n\n .medium {\n min-height: var(--aithe-control-height-md);\n min-width: 96px;\n padding: 0 var(--aithe-space-4);\n }\n\n .large {\n min-height: var(--aithe-control-height-lg);\n min-width: 112px;\n padding: 0 var(--aithe-space-5);\n font-size: var(--aithe-font-size-lg);\n }\n\n .text,\n .link {\n min-width: 0;\n }\n\n .primary {\n background: linear-gradient(180deg, var(--aithe-primary-6), var(--aithe-primary-7));\n color: white;\n box-shadow: 0 10px 24px rgba(50, 111, 225, 0.22);\n }\n\n .default {\n border-color: var(--aithe-color-border);\n }\n\n .dashed {\n border-style: dashed;\n border-color: var(--aithe-color-border-strong);\n }\n\n .text,\n .link {\n background: transparent;\n border-color: transparent;\n box-shadow: none;\n }\n\n .link {\n color: var(--aithe-primary-6);\n }\n\n .danger.primary {\n background: linear-gradient(180deg, var(--aithe-danger-6), var(--aithe-danger-7));\n box-shadow: 0 10px 24px rgba(207, 57, 80, 0.24);\n }\n\n .danger.default,\n .danger.dashed,\n .danger.text,\n .danger.link {\n color: var(--aithe-danger-7);\n }\n\n .title-icon {\n flex-shrink: 0;\n color: var(--aithe-color-text-muted);\n }\n\n .icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n\n .spinner {\n width: 1em;\n height: 1em;\n border: 2px solid currentColor;\n border-right-color: transparent;\n border-radius: 50%;\n animation: aithe-spin 0.85s linear infinite;\n }\n\n @keyframes aithe-spin {\n to {\n transform: rotate(360deg);\n }\n }\n `,\n ];\n\n /**\n * Handle click: prevent interaction when disabled or loading,\n * then emit `aithe-click` with the original mouse event.\n * 处理点击:在禁用或加载时阻止交互,然后附带原始鼠标事件发出 `aithe-click`。\n */\n private readonly handleClick = (event: MouseEvent): void => {\n if (this.disabled || this.loading) {\n event.preventDefault();\n event.stopImmediatePropagation();\n return;\n }\n\n this.emit('aithe-click', { originalEvent: event });\n };\n\n render() {\n const classes = {\n [this.type]: true,\n [this.size]: true,\n danger: this.danger,\n };\n let prefixSlot: unknown;\n if (this.loading) {\n prefixSlot = html`\n <span class=\"spinner\" aria-hidden=\"true\"></span>\n `;\n } else if (this.icon) {\n prefixSlot = html`\n <aithe-icon class=\"title-icon\" name=${this.icon} size=\"16\"></aithe-icon>\n `;\n } else {\n prefixSlot = html`\n <slot name=\"prefix\"></slot>\n `;\n }\n\n return html`\n <button\n class=${classMap(classes)}\n ?disabled=${this.disabled || this.loading}\n title=${this.title}\n type=\"button\"\n @click=${this.handleClick}\n >\n <span class=\"icon\">${prefixSlot}</span>\n <slot></slot>\n <span class=\"icon\"><slot name=\"suffix\"></slot></span>\n </button>\n `;\n }\n}\n","import{noChange as t}from\"../lit-html.js\";import{directive as e,Directive as r,PartType as s}from\"../directive.js\";\n/**\n * @license\n * Copyright 2018 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const n=\"important\",i=\" !\"+n,o=e(class extends r{constructor(t){if(super(t),t.type!==s.ATTRIBUTE||\"style\"!==t.name||t.strings?.length>2)throw Error(\"The `styleMap` directive must be used in the `style` attribute and must be the only part in the attribute.\")}render(t){return Object.keys(t).reduce((e,r)=>{const s=t[r];return null==s?e:e+`${r=r.includes(\"-\")?r:r.replace(/(?:^(webkit|moz|ms|o)|)(?=[A-Z])/g,\"-$&\").toLowerCase()}:${s};`},\"\")}update(e,[r]){const{style:s}=e.element;if(void 0===this.ft)return this.ft=new Set(Object.keys(r)),this.render(r);for(const t of this.ft)null==r[t]&&(this.ft.delete(t),t.includes(\"-\")?s.removeProperty(t):s[t]=null);for(const t in r){const e=r[t];if(null!=e){this.ft.add(t);const r=\"string\"==typeof e&&e.endsWith(i);t.includes(\"-\")||r?s.setProperty(t,r?e.slice(0,-11):e,r?n:\"\"):s[t]=e}}return t}});export{o as styleMap};\n//# sourceMappingURL=style-map.js.map\n","import { css, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { styleMap } from 'lit/directives/style-map.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\nimport { normalizeCssUnit } from '../../utils';\n\n/**\n * Button group layout helper for consistent spacing.\n * 按钮组布局辅助组件,提供统一间距。\n *\n * @slot - Default slot for button elements. 按钮元素内容。\n * @example\n * ```html\n * <aithe-button-group gap=\"var(--aithe-space-3)\">\n * <aithe-button>Cancel</aithe-button>\n * <aithe-button type=\"primary\">Submit</aithe-button>\n * </aithe-button-group>\n * ```\n */\n@customElement('aithe-button-group')\nexport class AitheButtonGroup extends AitheElement {\n /** Gap between buttons (CSS value). 按钮间距(CSS 值)。 */\n @property({ type: String }) gap = 'var(--aithe-space-2)';\n /** Whether buttons are stacked vertically. 是否垂直排列按钮。 */\n @property({ type: Boolean }) vertical = false;\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: inline-flex;\n max-width: 100%;\n }\n `,\n ];\n\n render() {\n const gap = normalizeCssUnit(this.gap, 'var(--aithe-space-2)');\n\n return html`\n <div\n style=${styleMap({\n alignItems: 'stretch',\n display: 'inline-flex',\n flexDirection: this.vertical ? 'column' : 'row',\n flexWrap: 'wrap',\n gap,\n maxWidth: '100%',\n })}\n >\n <slot></slot>\n </div>\n `;\n }\n}\n","import{nothing as t}from\"../lit-html.js\";\n/**\n * @license\n * Copyright 2018 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const o=o=>o??t;export{o as ifDefined};\n//# sourceMappingURL=if-defined.js.map\n","import { css, html, nothing } from 'lit';\nimport { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\n\nimport { AitheElement } from '../../core/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\nimport { t } from '../../core/i18n';\n\n/**\n * Single-line text input field with prefix/suffix slots, status states, and clearable support.\n * 单行文本输入框,支持前缀/后缀插槽、状态标记和可清除功能。\n *\n * @slot - Default slot (unused). 默认插槽(未使用)。\n * @slot prefix - Content before the input (icon, label, etc.). 输入框前的内容(图标、标签等)。\n * @slot suffix - Content after the input (icon, unit, etc.). 输入框后的内容(图标、单位等)。\n *\n * @fires aithe-input - Emitted on every keystroke with `{ value }`. 每次按键时发出 `{ value }`。\n * @fires aithe-change - Emitted when the value is committed with `{ value }`. 值提交时发出 `{ value }`。\n * @fires aithe-clear - Emitted when the clear button is clicked. 清除按钮被点击时发出。\n *\n * @example\n * ```html\n * <aithe-input placeholder=\"Search...\" clearable></aithe-input>\n * <aithe-input status=\"error\" label=\"Email\">invalid@</aithe-input>\n * ```\n */\n@customElement('aithe-input')\nexport class AitheInput extends AitheElement {\n /** HTML input type attribute. HTML input 类型属性。 */\n @property({ type: String }) type: 'text' | 'password' | 'number' | 'tel' | 'email' = 'text';\n /** Size scale of the input. 输入框的尺寸规格。 */\n @property({ type: String }) size: 'sm' | 'md' | 'lg' = 'md';\n /** Validation status indicator. 验证状态指示器。 */\n @property({ type: String }) status: 'normal' | 'error' | 'success' = 'normal';\n /** Current value of the input. 输入框的当前值。 */\n @property({ type: String }) value = '';\n /** Placeholder text. 占位符文本。 */\n @property({ type: String }) placeholder = '';\n /** Whether the input is disabled. 输入框是否禁用。 */\n @property({ type: Boolean, reflect: true }) disabled = false;\n /** Whether the input is read-only. 输入框是否只读。 */\n @property({ type: Boolean }) readonly = false;\n /** Whether to show a clear button when the input has a value. 输入框有值时是否显示清除按钮。 */\n @property({ type: Boolean }) clearable = false;\n /** HTML `name` attribute. HTML `name` 属性。 */\n @property({ type: String }) name = '';\n /** HTML `autocomplete` attribute. HTML `autocomplete` 属性。 */\n @property({ type: String }) autocomplete = 'off';\n /** Accessible label (used as `aria-label` when no visible label exists). 无障碍标签(当无可见标签时用作 `aria-label`)。 */\n @property({ type: String }) label = '';\n\n @query('input') private readonly inputElement?: HTMLInputElement;\n @queryAssignedElements({ slot: 'prefix' }) private readonly prefixNodes!: HTMLElement[];\n @queryAssignedElements({ slot: 'suffix' }) private readonly suffixNodes!: HTMLElement[];\n\n @state() private hasPrefix = false;\n @state() private hasSuffix = false;\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: inline-flex;\n width: 100%;\n }\n\n .field {\n display: inline-flex;\n align-items: center;\n min-width: 0;\n width: 100%;\n border: 1px solid var(--aithe-color-border);\n border-radius: var(--aithe-radius-md);\n background: var(--aithe-color-surface-elevated);\n transition:\n border-color var(--aithe-duration-fast) var(--aithe-ease-standard),\n box-shadow var(--aithe-duration-fast) var(--aithe-ease-standard),\n background var(--aithe-duration-fast) var(--aithe-ease-standard);\n }\n\n .field:focus-within {\n border-color: var(--aithe-primary-5);\n box-shadow: 0 0 0 4px var(--aithe-color-focus-ring);\n }\n\n .field.error {\n border-color: var(--aithe-danger-5);\n }\n\n .field.success {\n border-color: var(--aithe-success-5);\n }\n\n .field.disabled {\n opacity: 0.58;\n cursor: not-allowed;\n background: var(--aithe-color-surface-muted);\n }\n\n .field.sm {\n min-height: var(--aithe-control-height-sm);\n padding-inline: var(--aithe-space-3);\n }\n\n .field.md {\n min-height: var(--aithe-control-height-md);\n padding-inline: var(--aithe-space-4);\n }\n\n .field.lg {\n min-height: var(--aithe-control-height-lg);\n padding-inline: var(--aithe-space-4);\n }\n\n .prefix,\n .suffix {\n display: inline-flex;\n align-items: center;\n flex-shrink: 0;\n color: var(--aithe-color-text-muted);\n }\n\n .prefix {\n margin-inline-end: var(--aithe-space-2);\n }\n\n .suffix {\n margin-inline-start: var(--aithe-space-2);\n gap: var(--aithe-space-1);\n }\n\n input {\n width: 100%;\n min-width: 0;\n border: none;\n outline: none;\n background: transparent;\n color: inherit;\n }\n\n input::placeholder {\n color: var(--aithe-color-text-subtle);\n }\n\n .clear {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n border: none;\n border-radius: 50%;\n background: transparent;\n color: var(--aithe-color-text-subtle);\n cursor: pointer;\n }\n\n .clear:hover {\n background: var(--aithe-neutral-2);\n color: var(--aithe-color-text);\n }\n `,\n ];\n\n focus(options?: FocusOptions): void {\n this.inputElement?.focus(options);\n }\n\n updated(changed: Map<string, unknown>): void {\n if (changed.has('value') && this.inputElement && this.inputElement.value !== this.value) {\n this.inputElement.value = this.value;\n }\n }\n\n private readonly syncSlots = (): void => {\n this.hasPrefix = this.prefixNodes.length > 0;\n this.hasSuffix = this.suffixNodes.length > 0;\n };\n\n private readonly handleInput = (event: Event): void => {\n const input = event.currentTarget as HTMLInputElement;\n this.value = input.value;\n this.emit('aithe-input', { value: this.value });\n };\n\n private readonly handleChange = (event: Event): void => {\n const input = event.currentTarget as HTMLInputElement;\n this.value = input.value;\n this.emit('aithe-change', { value: this.value });\n };\n\n private readonly clearValue = (): void => {\n if (this.disabled || this.readonly) {\n return;\n }\n\n this.value = '';\n this.inputElement?.focus();\n this.emit('aithe-clear');\n this.emit('aithe-input', { value: this.value });\n this.emit('aithe-change', { value: this.value });\n };\n\n render() {\n const clearTabindex = this.disabled ? -1 : 0;\n return html`\n <label\n class=${classMap({\n field: true,\n [this.size]: true,\n [this.status]: this.status !== 'normal',\n disabled: this.disabled,\n })}\n >\n ${this.hasPrefix\n ? html`\n <span class=\"prefix\"><slot name=\"prefix\" @slotchange=${this.syncSlots}></slot></span>\n `\n : html`\n <slot name=\"prefix\" hidden @slotchange=${this.syncSlots}></slot>\n `}\n <input\n .value=${this.value}\n aria-invalid=${String(this.status === 'error')}\n aria-label=${this.label || this.placeholder || t('basic.input.ariaLabel')}\n autocomplete=${this.autocomplete}\n ?disabled=${this.disabled}\n ?readonly=${this.readonly}\n name=${this.name}\n placeholder=${this.placeholder}\n type=${this.type}\n @change=${this.handleChange}\n @input=${this.handleInput}\n />\n <span class=\"suffix\">\n ${this.clearable && this.value\n ? html`\n <button\n class=\"clear\"\n type=\"button\"\n tabindex=${clearTabindex}\n @click=${this.clearValue}\n >\n ×\n </button>\n `\n : nothing}\n <slot name=\"suffix\" @slotchange=${this.syncSlots}></slot>\n </span>\n ${this.hasSuffix || (this.clearable && this.value)\n ? null\n : html`\n <span hidden>${ifDefined(undefined)}</span>\n `}\n </label>\n `;\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { styleMap } from 'lit/directives/style-map.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport {\n aitheBaseStyles,\n aitheControlFocusStyleBlock,\n aitheControlStyleBlock,\n} from '../../core/styles';\n\n/**\n * Multi-line text input component with auto-grow support.\n * 多行文本输入组件,支持自动增长。\n *\n * @slot - Default slot (unused; content controlled by value property). 默认插槽(未使用,内容由 value 属性控制)。\n * @fires aithe-input - Emitted on each keystroke with current value. 每次输入时触发。\n * @fires aithe-change - Emitted when the value is committed. 值提交时触发。\n * @example\n * ```html\n * <aithe-textarea rows=\"4\" placeholder=\"Enter text...\" maxlength=\"200\"></aithe-textarea>\n * ```\n */\n@customElement('aithe-textarea')\nexport class AitheTextarea extends AitheElement {\n /** Number of visible text rows. 可见文本行数。 */\n @property({ type: Number }) rows = 4;\n /** Placeholder text shown when empty. 空内容时的占位文本。 */\n @property({ type: String }) placeholder = '';\n /** Resize direction allowed for the textarea. 允许的调整大小方向。 */\n @property({ type: String }) resize: 'none' | 'both' | 'horizontal' | 'vertical' = 'vertical';\n /** Current textarea value. 当前文本值。 */\n @property({ type: String }) value = '';\n /** Maximum character length (-1 means unlimited). 最大字符长度(-1 表示不限)。 */\n @property({ type: Number }) maxlength = -1;\n /** Whether the textarea is disabled. 是否禁用。 */\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: inline-flex;\n width: 100%;\n }\n\n .field {\n ${aitheControlStyleBlock}\n width: 100%;\n min-height: 112px;\n padding: var(--aithe-space-3) var(--aithe-space-4);\n }\n\n .field:focus-within {\n ${aitheControlFocusStyleBlock}\n }\n\n .field.disabled {\n opacity: 0.56;\n cursor: not-allowed;\n }\n\n textarea {\n width: 100%;\n min-height: 100%;\n border: none;\n outline: none;\n background: transparent;\n color: inherit;\n }\n `,\n ];\n\n /** Handles input events and emits value. 处理输入事件并触发 input 事件。 */\n private readonly handleInput = (event: Event): void => {\n this.value = (event.currentTarget as HTMLTextAreaElement).value;\n this.emit('aithe-input', { value: this.value });\n };\n\n /** Handles change events and emits value. 处理变更事件并触发 change 事件。 */\n private readonly handleChange = (event: Event): void => {\n this.value = (event.currentTarget as HTMLTextAreaElement).value;\n this.emit('aithe-change', { value: this.value });\n };\n\n render() {\n return html`\n <label class=${classMap({ field: true, disabled: this.disabled })}>\n <textarea\n .value=${this.value}\n ?disabled=${this.disabled}\n maxlength=${this.maxlength > -1 ? String(this.maxlength) : ''}\n placeholder=${this.placeholder}\n rows=${String(this.rows)}\n style=${styleMap({ resize: this.resize })}\n @change=${this.handleChange}\n @input=${this.handleInput}\n ></textarea>\n </label>\n `;\n }\n}\n","import { css, html, nothing } from 'lit';\nimport { customElement, property, queryAssignedElements, state } from 'lit/decorators.js';\nimport { styleMap } from 'lit/directives/style-map.js';\n\nimport { AitheElement } from '../../core/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\n\n/**\n * Card container with header, body, and footer sections.\n * 卡片容器,包含标题、正文和底部区域。\n *\n * @slot - Default slot for card body content. 卡片正文内容。\n * @slot header - Custom header content (overrides title). 自定义头部内容。\n * @slot footer - Footer action area. 底部操作区域。\n * @example\n * ```html\n * <aithe-card title=\"Settings\" icon=\"settings\" shadow=\"2\">\n * <p>Card body content here.</p>\n * <slot name=\"footer\"><button>Save</button></slot>\n * </aithe-card>\n * ```\n */\n@customElement('aithe-card')\nexport class AitheCard extends AitheElement {\n /** Card title text. 卡片标题文本。 */\n @property({ type: String }) title = '';\n /** Icon name to display before the title. 在标题前显示的图标名称。 */\n @property({ type: String }) icon = '';\n /** Shadow elevation level (0–4). 阴影层级(0–4)。 */\n @property({ type: Number }) shadow = 2;\n /** Padding for the card body section. 卡片正文区域内边距。 */\n @property({ type: String, attribute: 'body-padding' }) bodyPadding = 'var(--aithe-space-lg)';\n /** Whether to show a border around the card. 是否显示卡片边框。 */\n @property({ type: Boolean }) bordered = true;\n /** Divider style between sections: 'border' | 'none'. 区域间分割线样式:'border' | 'none'。 */\n @property({ type: String }) divider: 'border' | 'none' = 'border';\n\n @queryAssignedElements({ slot: 'header' }) private headerSlotNodes!: HTMLElement[];\n @queryAssignedElements({ slot: 'footer' }) private footerSlotNodes!: HTMLElement[];\n\n @state() private hasHeaderSlot = false;\n @state() private hasFooterSlot = false;\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: block;\n min-width: 0;\n }\n\n .card {\n width: 100%;\n min-width: 0;\n overflow: hidden;\n border-radius: var(--aithe-radius-xl);\n background: var(--aithe-color-surface-elevated);\n backdrop-filter: blur(16px);\n }\n\n .header {\n display: flex;\n flex-direction: column;\n gap: var(--aithe-space-1);\n min-width: 0;\n padding: var(--aithe-space-lg) var(--aithe-space-lg) 0;\n }\n\n .header-divider {\n border-bottom: 1px solid var(--aithe-color-border);\n margin: var(--aithe-space-sm) var(--aithe-space-lg) 0;\n }\n\n .title {\n margin: 0;\n display: inline-flex;\n align-items: center;\n gap: var(--aithe-space-2);\n font-size: var(--aithe-font-size-lg);\n font-weight: var(--aithe-font-weight-semibold);\n }\n\n .title-icon {\n flex-shrink: 0;\n color: var(--aithe-color-text-muted);\n }\n\n .body {\n min-width: 0;\n }\n\n .footer-divider {\n border-top: 1px solid var(--aithe-color-border);\n margin: 0 var(--aithe-space-lg);\n }\n\n .footer {\n min-width: 0;\n padding: var(--aithe-space-sm) var(--aithe-space-lg) var(--aithe-space-lg);\n color: var(--aithe-color-text-muted);\n }\n `,\n ];\n\n private readonly syncSlots = (): void => {\n this.hasHeaderSlot = this.headerSlotNodes.length > 0;\n this.hasFooterSlot = this.footerSlotNodes.length > 0;\n };\n\n render() {\n const showHeader = this.title || this.hasHeaderSlot;\n const showDivider = this.divider !== 'none';\n const titleIcon = this.icon\n ? html`\n <aithe-icon class=\"title-icon\" name=${this.icon} size=\"18\"></aithe-icon>\n `\n : nothing;\n\n return html`\n <article\n class=\"card\"\n style=${styleMap({\n border: this.bordered ? '1px solid var(--aithe-color-border)' : 'none',\n boxShadow: this.shadow > 0 ? `var(--aithe-shadow-${this.shadow})` : 'none',\n })}\n >\n <header class=\"header\" ?hidden=${!showHeader}>\n <slot name=\"header\" @slotchange=${this.syncSlots}></slot>\n ${this.title\n ? html`\n <div class=\"title\">${titleIcon}${this.title}</div>\n `\n : null}\n </header>\n ${showHeader && showDivider\n ? html`\n <div class=\"header-divider\"></div>\n `\n : nothing}\n <section class=\"body\" style=${styleMap({ padding: this.bodyPadding })}>\n <slot></slot>\n </section>\n ${this.hasFooterSlot && showDivider\n ? html`\n <div class=\"footer-divider\"></div>\n `\n : nothing}\n <footer class=\"footer\" ?hidden=${!this.hasFooterSlot}>\n <slot name=\"footer\" @slotchange=${this.syncSlots}></slot>\n </footer>\n </article>\n `;\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property, queryAssignedElements, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\n\nimport { AitheElement } from '../../core/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\n\n/**\n * Badge / count indicator overlaid on an anchor element.\n * 徽标/计数指示器,覆盖在锚点元素上。\n *\n * @slot - Default slot for the anchor element. 锚点元素内容。\n * @slot badge - Custom badge content (overrides `value` display). 自定义徽标内容。\n * @example\n * ```html\n * <aithe-badge value=\"5\">\n * <aithe-button type=\"default\">Messages</aithe-button>\n * </aithe-badge>\n * ```\n */\n@customElement('aithe-badge')\nexport class AitheBadge extends AitheElement {\n /** Badge display value (number or string). 徽标显示值(数字或字符串)。 */\n @property({ type: String }) value = '';\n /** Maximum count before showing \"N+\" format. 超过此数值显示\"N+\"格式。 */\n @property({ type: Number, attribute: 'max-count' }) maxCount = 99;\n /** Whether to show a small dot instead of a count. 是否显示小圆点而非数字。 */\n @property({ type: Boolean }) dot = false;\n /** Badge position relative to the anchor. 徽标相对于锚点的位置。 */\n @property({ type: String }) position: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' =\n 'top-right';\n\n @queryAssignedElements({ slot: 'badge' }) private readonly badgeSlotNodes!: HTMLElement[];\n @state() private hasBadgeSlot = false;\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n position: relative;\n display: inline-flex;\n }\n\n .anchor {\n position: relative;\n display: inline-flex;\n }\n\n .badge {\n position: absolute;\n z-index: 2;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 22px;\n min-height: 22px;\n padding: 0 var(--aithe-space-2);\n border: 2px solid var(--aithe-color-surface-elevated);\n border-radius: var(--aithe-radius-full);\n background: linear-gradient(180deg, var(--aithe-danger-5), var(--aithe-danger-7));\n color: white;\n font-size: var(--aithe-font-size-xs);\n font-weight: var(--aithe-font-weight-semibold);\n box-shadow: var(--aithe-shadow-1);\n }\n\n .badge.dot {\n min-width: 12px;\n min-height: 12px;\n padding: 0;\n }\n\n .top-right {\n top: 0;\n right: 0;\n transform: translate(50%, -50%);\n }\n\n .top-left {\n top: 0;\n left: 0;\n transform: translate(-50%, -50%);\n }\n\n .bottom-right {\n right: 0;\n bottom: 0;\n transform: translate(50%, 50%);\n }\n\n .bottom-left {\n bottom: 0;\n left: 0;\n transform: translate(-50%, 50%);\n }\n `,\n ];\n\n /** Syncs badge slot presence state. 同步徽标插槽状态。 */\n private readonly syncSlot = (): void => {\n this.hasBadgeSlot = this.badgeSlotNodes.length > 0;\n };\n\n /** Computes the formatted badge display value. 计算格式化后的徽标显示值。 */\n private get displayValue(): string {\n if (this.dot) {\n return '';\n }\n\n const parsed = Number(this.value);\n if (Number.isFinite(parsed) && this.value !== '') {\n if (parsed === 0) return '';\n return parsed > this.maxCount ? `${this.maxCount}+` : String(parsed);\n }\n\n return this.value;\n }\n\n render() {\n const showBadge = this.dot || this.hasBadgeSlot || Boolean(this.displayValue);\n\n return html`\n <span class=\"anchor\">\n <slot></slot>\n <span\n ?hidden=${!showBadge}\n class=${classMap({\n badge: true,\n dot: this.dot,\n [this.position]: true,\n })}\n >\n <slot name=\"badge\" @slotchange=${this.syncSlot}>${this.displayValue}</slot>\n </span>\n </span>\n `;\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\n\nimport { AitheElement } from '../../core/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\n\n/**\n * Colored tag / label with optional close and select behavior.\n * 彩色标签,支持关闭和选中交互。\n *\n * @slot - Default slot for tag label text. 标签文本内容。\n * @fires aithe-change - Emitted when selectable tag is toggled. 选中状态变更时触发。\n * @fires aithe-close - Emitted when the close button is clicked. 关闭按钮点击时触发。\n * @example\n * ```html\n * <aithe-tag type=\"primary\" closable>Selectable Tag</aithe-tag>\n * ```\n */\n@customElement('aithe-tag')\nexport class AitheTag extends AitheElement {\n /** Tag color variant. 标签颜色类型。 */\n @property({ type: String }) type: 'primary' | 'success' | 'warning' | 'danger' | 'default' =\n 'default';\n /** Whether the tag shows a close button. 是否显示关闭按钮。 */\n @property({ type: Boolean }) closable = false;\n /** Whether the tag can be toggled (selected/unselected). 是否可选中切换。 */\n @property({ type: Boolean }) selectable = false;\n /** Whether the tag is currently selected. 当前是否选中。 */\n @property({ type: Boolean, reflect: true }) selected = false;\n /** Border-radius preset. 圆角预设。 */\n @property({ type: String }) rounded: 'sm' | 'md' | 'lg' | 'full' = 'full';\n /** Whether the tag is disabled. 是否禁用。 */\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: inline-flex;\n }\n\n .tag {\n display: inline-flex;\n align-items: center;\n gap: var(--aithe-space-2);\n padding: 0 var(--aithe-space-3);\n min-height: 30px;\n border: 1px solid transparent;\n color: var(--aithe-color-text);\n font-size: var(--aithe-font-size-sm);\n transition:\n background var(--aithe-duration-fast) var(--aithe-ease-standard),\n border-color var(--aithe-duration-fast) var(--aithe-ease-standard),\n color var(--aithe-duration-fast) var(--aithe-ease-standard),\n box-shadow var(--aithe-duration-fast) var(--aithe-ease-standard);\n }\n\n .tag.selectable {\n cursor: pointer;\n }\n\n .tag.disabled {\n opacity: 0.56;\n cursor: not-allowed;\n }\n\n .default {\n border-color: var(--aithe-color-border);\n background: var(--aithe-color-surface);\n }\n\n .primary {\n color: var(--aithe-primary-8);\n background: var(--aithe-primary-1);\n border-color: var(--aithe-primary-3);\n }\n\n .success {\n color: var(--aithe-success-8);\n background: var(--aithe-success-1);\n border-color: var(--aithe-success-3);\n }\n\n .warning {\n color: var(--aithe-warning-8);\n background: var(--aithe-warning-1);\n border-color: var(--aithe-warning-3);\n }\n\n .danger {\n color: var(--aithe-danger-8);\n background: var(--aithe-danger-1);\n border-color: var(--aithe-danger-3);\n }\n\n .selected {\n box-shadow: 0 0 0 3px var(--aithe-color-focus-ring);\n }\n\n .radius-sm {\n border-radius: var(--aithe-radius-sm);\n }\n\n .radius-md {\n border-radius: var(--aithe-radius-md);\n }\n\n .radius-lg {\n border-radius: var(--aithe-radius-lg);\n }\n\n .radius-full {\n border-radius: var(--aithe-radius-full);\n }\n\n .close {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 18px;\n height: 18px;\n border: none;\n border-radius: 50%;\n background: transparent;\n color: inherit;\n cursor: pointer;\n }\n `,\n ];\n\n /** Toggles the selected state and emits change event. 切换选中状态并触发变更事件。 */\n private readonly toggleTag = (): void => {\n if (!this.selectable || this.disabled) {\n return;\n }\n\n this.selected = !this.selected;\n this.emit('aithe-change', { selected: this.selected });\n };\n\n /** Handles close button click: emits event, then removes the tag from DOM. 处理关闭按钮点击:触发事件、然后从 DOM 移除标签。 */\n private readonly handleClose = (event: MouseEvent): void => {\n event.stopPropagation();\n if (this.disabled) return;\n\n this.emit('aithe-close');\n this.remove();\n };\n\n render() {\n return html`\n <span\n class=${classMap({\n tag: true,\n [this.type]: true,\n [`radius-${this.rounded}`]: true,\n selectable: this.selectable,\n selected: this.selected,\n disabled: this.disabled,\n })}\n aria-pressed=${this.selectable ? String(this.selected) : 'false'}\n role=${this.selectable ? 'button' : 'status'}\n tabindex=${this.selectable && !this.disabled ? 0 : -1}\n @click=${this.toggleTag}\n @keydown=${(event: KeyboardEvent) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.toggleTag();\n }\n }}\n >\n <slot></slot>\n ${this.closable\n ? html`\n <button class=\"close\" type=\"button\" tabindex=\"-1\" @click=${this.handleClose}>\n ×\n </button>\n `\n : null}\n </span>\n `;\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\n\nimport { AitheElement } from '../../core/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\nimport { t } from '../../core/i18n';\n\n/**\n * Avatar displaying an image, initials, or custom content.\n * 头像组件,显示图片、首字母或自定义内容。\n *\n * @slot - Default slot for fallback content when image fails. 图片加载失败时的后备内容。\n * @example\n * ```html\n * <aithe-avatar src=\"/photo.jpg\" alt=\"User\" shape=\"circle\" size=\"md\"></aithe-avatar>\n * <aithe-avatar text=\"Jane Smith\" shape=\"square\" size=\"lg\"></aithe-avatar>\n * ```\n */\n@customElement('aithe-avatar')\nexport class AitheAvatar extends AitheElement {\n /** Image source URL. 图片源地址。 */\n @property({ type: String }) src = '';\n /** Alt text for the image. 图片替代文本。 */\n @property({ type: String }) alt = '';\n /** Text used to generate initials fallback. 用于生成首字母后备显示的文本。 */\n @property({ type: String }) text = '';\n /** Avatar shape variant. 头像形状。 */\n @property({ type: String }) shape: 'circle' | 'square' = 'circle';\n /** Avatar size preset. 头像尺寸预设。 */\n @property({ type: String }) size: 'sm' | 'md' | 'lg' = 'md';\n\n /** Whether the image failed to load. 图片是否加载失败。 */\n @state() private imageBroken = false;\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: inline-flex;\n }\n\n .avatar {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n overflow: hidden;\n background: linear-gradient(135deg, var(--aithe-primary-4), var(--aithe-primary-7));\n color: white;\n font-weight: var(--aithe-font-weight-semibold);\n box-shadow: var(--aithe-shadow-1);\n }\n\n .circle {\n border-radius: 50%;\n }\n\n .square {\n border-radius: var(--aithe-radius-lg);\n }\n\n .sm {\n width: 32px;\n height: 32px;\n font-size: var(--aithe-font-size-sm);\n }\n\n .md {\n width: 40px;\n height: 40px;\n font-size: var(--aithe-font-size-md);\n }\n\n .lg {\n width: 56px;\n height: 56px;\n font-size: var(--aithe-font-size-lg);\n }\n\n img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n `,\n ];\n\n /** Extracts up to two initials from the text property. 从 text 属性提取最多两个首字母。 */\n private get fallbackText(): string {\n const source = this.text.trim();\n if (!source) {\n return '';\n }\n\n const chunks = source.split(/\\s+/).slice(0, 2);\n return chunks.map((chunk) => chunk[0]?.toUpperCase() ?? '').join('');\n }\n\n render() {\n const showImage = Boolean(this.src) && !this.imageBroken;\n\n return html`\n <span\n class=${classMap({\n avatar: true,\n [this.shape]: true,\n [this.size]: true,\n })}\n aria-label=${this.alt || this.text || t('basic.avatar.ariaLabel')}\n role=\"img\"\n >\n ${showImage\n ? html`\n <img alt=${this.alt} src=${this.src} @error=${() => (this.imageBroken = true)} />\n `\n : html`\n <slot>${this.fallbackText}</slot>\n `}\n </span>\n `;\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport { AitheElement } from '../../core/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\n\n/**\n * Horizontal or vertical divider line with optional label.\n * 水平或垂直分割线,支持可选标签。\n *\n * @slot - Default slot for divider label text (horizontal mode). 分割线标签文本(水平模式)。\n * @example\n * ```html\n * <aithe-divider label=\"Section\"></aithe-divider>\n * <aithe-divider vertical dashed></aithe-divider>\n * ```\n */\n@customElement('aithe-divider')\nexport class AitheDivider extends AitheElement {\n /** Whether the divider renders vertically. 是否垂直渲染分割线。 */\n @property({ type: Boolean, reflect: true }) vertical = false;\n /** Whether the line style is dashed. 是否使用虚线样式。 */\n @property({ type: Boolean }) dashed = false;\n /** Center label text for horizontal divider. 水平分割线的居中标签文本。 */\n @property({ type: String }) label = '';\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: block;\n width: 100%;\n }\n\n :host([vertical]) {\n display: inline-flex;\n width: auto;\n height: 100%;\n }\n\n .divider {\n display: flex;\n align-items: center;\n width: 100%;\n color: var(--aithe-color-text-subtle);\n font-size: var(--aithe-font-size-sm);\n }\n\n .vertical {\n width: auto;\n height: 100%;\n }\n\n .line {\n flex: 1;\n border-top: 1px solid var(--aithe-color-border);\n }\n\n .line.dashed {\n border-top-style: dashed;\n }\n\n .vertical .line {\n width: 1px;\n height: 100%;\n border-top: none;\n border-left: 1px solid var(--aithe-color-border);\n }\n\n .vertical .line.dashed {\n border-left-style: dashed;\n }\n\n .label {\n padding-inline: var(--aithe-space-3);\n white-space: nowrap;\n }\n `,\n ];\n\n render() {\n if (this.vertical) {\n return html`\n <span class=\"divider vertical\" aria-orientation=\"vertical\" role=\"separator\">\n <span class=\"line ${this.dashed ? 'dashed' : ''}\"></span>\n </span>\n `;\n }\n\n const hasContent = this.label || this.textContent?.trim();\n const dashedClass = this.dashed ? 'dashed' : '';\n const contentSlot = this.label\n ? html`\n <span class=\"label\">${this.label}</span>\n `\n : html`\n <slot></slot>\n `;\n const trailingLine = hasContent\n ? html`\n <span class=\"line ${dashedClass}\"></span>\n `\n : null;\n\n return html`\n <div class=\"divider\" aria-orientation=\"horizontal\" role=\"separator\">\n <span class=\"line ${dashedClass}\"></span>\n ${contentSlot} ${trailingLine}\n </div>\n `;\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\nimport { t } from '../../core/i18n';\nimport './icon';\n\n/**\n * Empty state placeholder with icon and text.\n * 空状态占位组件,显示图标和提示文本。\n *\n * @slot - Default slot for custom empty content (overrides icon + text). 自定义空状态内容。\n * @example\n * ```html\n * <aithe-empty text=\"No results found\" icon=\"sparkles\"></aithe-empty>\n * ```\n */\n@customElement('aithe-empty')\nexport class AitheEmpty extends AitheElement {\n /** Placeholder text. 占位提示文本。 */\n @property({ type: String }) text = '';\n /** Built-in icon name to display. 显示的内置图标名称。 */\n @property({ type: String }) icon = 'sparkles';\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: block;\n }\n\n .empty {\n display: grid;\n justify-items: center;\n gap: var(--aithe-space-3);\n padding: var(--aithe-space-7);\n color: var(--aithe-color-text-muted);\n text-align: center;\n }\n\n aithe-icon {\n color: var(--aithe-primary-6);\n }\n `,\n ];\n\n render() {\n return html`\n <div class=\"empty\">\n <slot>\n <aithe-icon name=${this.icon} size=\"lg\"></aithe-icon>\n <div>${this.text || t('basic.empty.defaultText')}</div>\n </slot>\n </div>\n `;\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\n\n/**\n * Compact selectable chip with optional close button.\n * 紧凑的可选中芯片,支持可选关闭按钮。\n *\n * @slot - Default slot for chip label content. 芯片标签内容。\n * @fires aithe-select - Emitted when chip selection state changes. 选中状态变更时触发。\n * @fires aithe-close - Emitted when the close button is clicked. 关闭按钮点击时触发。\n * @example\n * ```html\n * <aithe-chip closable>Filter Tag</aithe-chip>\n * ```\n */\n@customElement('aithe-chip')\nexport class AitheChip extends AitheElement {\n /** Whether the chip is selected. 是否选中。 */\n @property({ type: Boolean, reflect: true }) selected = false;\n /** Whether the chip shows a close button. 是否显示关闭按钮。 */\n @property({ type: Boolean }) closable = false;\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: inline-flex;\n }\n\n button {\n display: inline-flex;\n align-items: center;\n gap: var(--aithe-space-2);\n min-height: 28px;\n padding: 0 var(--aithe-space-3);\n border: 1px solid var(--aithe-color-border);\n border-radius: var(--aithe-radius-full);\n background: var(--aithe-color-surface-elevated);\n color: var(--aithe-color-text);\n cursor: pointer;\n }\n\n button.selected {\n border-color: var(--aithe-primary-5);\n background: var(--aithe-primary-1);\n color: var(--aithe-primary-8);\n }\n\n .close {\n border: none;\n background: transparent;\n color: inherit;\n cursor: pointer;\n }\n `,\n ];\n\n /** Toggles the selected state and emits select event. 切换选中状态并触发 select 事件。 */\n private readonly toggleSelect = (): void => {\n this.selected = !this.selected;\n this.emit('aithe-select', { selected: this.selected });\n };\n\n /** Handles close button click: emits event, then removes the chip from DOM. 处理关闭按钮点击:触发事件、然后从 DOM 移除芯片。 */\n private readonly handleClose = (event: MouseEvent): void => {\n event.stopPropagation();\n this.emit('aithe-close');\n this.remove();\n };\n\n render() {\n return html`\n <button\n class=${classMap({ selected: this.selected })}\n type=\"button\"\n @click=${this.toggleSelect}\n >\n <slot></slot>\n ${this.closable\n ? html`\n <span class=\"close\" role=\"button\" @click=${this.handleClose}>×</span>\n `\n : null}\n </button>\n `;\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { styleMap } from 'lit/directives/style-map.js';\n\nimport { AitheElement } from '../../core/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\nimport { normalizeCssUnit } from '../../utils';\n\n/**\n * Top-level page layout container with configurable width, padding, and direction.\n * 顶层页面布局容器,支持配置宽度、内边距和方向。\n *\n * @slot - Default slot for container content. 容器内容。\n * @example\n * ```html\n * <aithe-container max-width=\"960px\" padding=\"var(--aithe-space-lg)\" direction=\"column\">\n * <p>Centered content</p>\n * </aithe-container>\n * ```\n */\n@customElement('aithe-container')\nexport class AitheContainer extends AitheElement {\n /** Maximum width of the container (CSS value). 容器最大宽度(CSS 值)。 */\n @property({ type: String }) maxWidth = '1280px';\n /** Horizontal padding of the container (CSS value). 容器水平内边距(CSS 值)。 */\n @property({ type: String }) padding = 'var(--aithe-space-lg)';\n /** Gap between child elements (CSS value). 子元素间距(CSS 值)。 */\n @property({ type: String }) gap = '0';\n /** Whether the container fills the full width without max-width constraint. 是否填满全宽,不受最大宽度限制。 */\n @property({ type: Boolean, reflect: true }) fluid = false;\n /** Whether the container fills the full viewport height. 是否填满整个视口高度。 */\n @property({ type: Boolean }) full = false;\n /** Flex direction for child layout. 子元素排列方向。 */\n @property({ type: String }) direction: 'row' | 'column' = 'column';\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: block;\n width: 100%;\n }\n `,\n ];\n\n render() {\n const gap = normalizeCssUnit(this.gap, '0');\n const padding = normalizeCssUnit(this.padding, 'var(--aithe-space-lg)');\n\n return html`\n <div\n style=${styleMap({\n display: 'flex',\n flexDirection: this.direction,\n gap,\n marginInline: 'auto',\n maxWidth: this.full || this.fluid ? '100%' : this.maxWidth,\n minHeight: this.full ? '100vh' : undefined,\n paddingInline: padding,\n width: '100%',\n })}\n >\n <slot></slot>\n </div>\n `;\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { styleMap } from 'lit/directives/style-map.js';\n\nimport { AitheElement } from '../../core/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\n\n/**\n * 24-grid row container for grid layout system.\n * 24栅格行容器,用于栅格布局系统。\n *\n * @slot - Default slot for `aithe-col` elements. aithe-col 列元素。\n * @example\n * ```html\n * <aithe-row gutter=\"16\" justify=\"space-between\" align=\"center\">\n * <aithe-col span=\"12\">Left</aithe-col>\n * <aithe-col span=\"12\">Right</aithe-col>\n * </aithe-row>\n * ```\n */\n@customElement('aithe-row')\nexport class AitheRow extends AitheElement {\n /** Column gutter in pixels. 列间距(像素)。 */\n @property({ type: Number }) gutter = 24;\n /** Vertical gap between rows in pixels. 行间距(像素)。 */\n @property({ type: Number, attribute: 'row-gap' }) rowGap = 24;\n /** Horizontal alignment of columns. 列水平对齐方式。 */\n @property({ type: String }) justify:\n | 'start'\n | 'center'\n | 'end'\n | 'space-between'\n | 'space-around' = 'start';\n /** Vertical alignment of columns. 列垂直对齐方式。 */\n @property({ type: String }) align: 'stretch' | 'start' | 'center' | 'end' = 'stretch';\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: block;\n min-width: 0;\n }\n\n .row {\n display: flex;\n flex-wrap: wrap;\n min-width: 0;\n width: calc(100% + var(--aithe-row-gutter, 24px));\n margin-inline: calc(var(--aithe-row-gutter, 24px) / -2);\n }\n\n ::slotted(aithe-col) {\n min-width: 0;\n padding-inline: calc(var(--aithe-row-gutter, 24px) / 2);\n }\n `,\n ];\n\n render() {\n const justifyMap = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n 'space-between': 'space-between',\n 'space-around': 'space-around',\n } as const;\n\n const alignMap = {\n stretch: 'stretch',\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n } as const;\n\n return html`\n <div\n class=\"row\"\n style=${styleMap({\n '--aithe-row-gutter': `${this.gutter}px`,\n alignItems: alignMap[this.align],\n justifyContent: justifyMap[this.justify],\n rowGap: `${this.rowGap}px`,\n })}\n >\n <slot></slot>\n </div>\n `;\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport { AitheElement } from '../../core/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\n\n/**\n * 24-grid column item for use inside `aithe-row`.\n * 24栅格列元素,用于 aithe-row 内部。\n *\n * @slot - Default slot for column content. 列内容。\n * @example\n * ```html\n * <aithe-row gutter=\"16\">\n * <aithe-col span=\"8\" offset=\"4\">Content</aithe-col>\n * <aithe-col span=\"12\" flex=\"1 1 auto\">Flexible</aithe-col>\n * </aithe-row>\n * ```\n */\n@customElement('aithe-col')\nexport class AitheCol extends AitheElement {\n /** Number of grid columns to occupy (1–24). 占据的栅格数(1–24)。 */\n @property({ type: Number }) span = 24;\n /** Number of grid columns to offset from the left. 左侧偏移的栅格数。 */\n @property({ type: Number }) offset = 0;\n /** Number of grid columns to push right. 向右推的栅格数。 */\n @property({ type: Number }) push = 0;\n /** Number of grid columns to pull left. 向左拉的栅格数。 */\n @property({ type: Number }) pull = 0;\n /** Custom flex value (overrides span-based width). 自定义 flex 值(覆盖基于 span 的宽度)。 */\n @property({ type: String }) flex = '';\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: block;\n position: relative;\n min-width: 0;\n width: var(--aithe-col-width, 100%);\n max-width: var(--aithe-col-max-width, 100%);\n flex: var(--aithe-col-flex, 0 0 100%);\n margin-inline-start: var(--aithe-col-offset, 0%);\n inset-inline-start: var(--aithe-col-push, 0%);\n inset-inline-end: var(--aithe-col-pull, 0%);\n }\n\n ::slotted(*) {\n min-width: 0;\n }\n `,\n ];\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.applyLayoutStyles();\n }\n\n override updated(): void {\n this.applyLayoutStyles();\n }\n\n private applyLayoutStyles(): void {\n const width = this.span <= 0 ? '0%' : `${(this.span / 24) * 100}%`;\n const marginLeft = this.offset <= 0 ? '0%' : `${(this.offset / 24) * 100}%`;\n const push = this.push <= 0 ? '0%' : `${(this.push / 24) * 100}%`;\n const pull = this.pull <= 0 ? '0%' : `${(this.pull / 24) * 100}%`;\n const flexValue = this.flex || `0 0 ${width}`;\n\n this.hidden = this.span <= 0;\n this.style.setProperty('--aithe-col-width', this.flex ? 'auto' : width);\n this.style.setProperty('--aithe-col-max-width', this.flex ? 'none' : width);\n this.style.setProperty('--aithe-col-flex', flexValue);\n this.style.setProperty('--aithe-col-offset', marginLeft);\n this.style.setProperty('--aithe-col-push', push);\n this.style.setProperty('--aithe-col-pull', pull);\n }\n\n render() {\n return html`\n <slot></slot>\n `;\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { styleMap } from 'lit/directives/style-map.js';\n\nimport { AitheElement } from '../../core/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\nimport { normalizeCssUnit } from '../../utils';\n\n/**\n * Quick flex layout helper with declarative properties.\n * 快速弹性布局辅助组件,支持声明式属性配置。\n *\n * @slot - Default slot for flex child elements. 弹性子元素内容。\n * @example\n * ```html\n * <aithe-flex justify=\"center\" align=\"middle\" gap=\"var(--aithe-space-md)\" direction=\"row\">\n * <div>Item 1</div>\n * <div>Item 2</div>\n * </aithe-flex>\n * ```\n */\n@customElement('aithe-flex')\nexport class AitheFlex extends AitheElement {\n /** Flex justify-content value. flex justify-content 值。 */\n @property({ type: String }) justify = 'flex-start';\n /** Flex align-items value. flex align-items 值。 */\n @property({ type: String }) align = 'stretch';\n /** Flex direction. flex 方向。 */\n @property({ type: String }) direction: 'row' | 'column' = 'row';\n /** Gap between flex items (CSS value). flex 子元素间距(CSS 值)。 */\n @property({ type: String }) gap = 'var(--aithe-space-md)';\n /** Flex wrap behavior. flex 换行方式。 */\n @property({ type: String }) wrap: 'nowrap' | 'wrap' = 'nowrap';\n /** Whether the flex container is inline. 是否为内联弹性容器。 */\n @property({ type: Boolean, reflect: true }) inline = false;\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: block;\n min-width: 0;\n }\n\n .wrap {\n min-width: 0;\n width: 100%;\n }\n\n :host([inline]) .wrap {\n width: auto;\n }\n `,\n ];\n\n render() {\n const gap = normalizeCssUnit(this.gap, 'var(--aithe-space-md)');\n\n return html`\n <div\n class=\"wrap\"\n style=${styleMap({\n alignItems: this.align,\n display: this.inline ? 'inline-flex' : 'flex',\n flexDirection: this.direction,\n flexWrap: this.wrap,\n gap,\n justifyContent: this.justify,\n })}\n >\n <slot></slot>\n </div>\n `;\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { styleMap } from 'lit/directives/style-map.js';\n\nimport { AitheElement } from '../../core/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\nimport { normalizeCssUnit } from '../../utils';\n\n/**\n * Equal spacing helper for consistent gaps between child elements.\n * 等间距辅助组件,为子元素提供统一间距。\n *\n * @slot - Default slot for spaced child elements. 需要间距的子元素内容。\n * @example\n * ```html\n * <aithe-space size=\"var(--aithe-space-md)\" direction=\"horizontal\" wrap>\n * <aithe-button>Save</aithe-button>\n * <aithe-button>Cancel</aithe-button>\n * </aithe-space>\n * ```\n */\n@customElement('aithe-space')\nexport class AitheSpace extends AitheElement {\n /** Gap size between items (CSS value). 子元素间距大小(CSS 值)。 */\n @property({ type: String }) size = 'var(--aithe-space-md)';\n /** Spacing direction. 间距方向。 */\n @property({ type: String }) direction: 'vertical' | 'horizontal' = 'vertical';\n /** Cross-axis alignment. 交叉轴对齐方式。 */\n @property({ type: String }) align = 'stretch';\n /** Whether items wrap when overflowing. 子元素溢出时是否换行。 */\n @property({ type: Boolean, reflect: true }) wrap = false;\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: block;\n min-width: 0;\n }\n\n .wrap {\n min-width: 0;\n width: 100%;\n }\n `,\n ];\n\n render() {\n const gap = normalizeCssUnit(this.size, 'var(--aithe-space-md)');\n\n return html`\n <div\n class=\"wrap\"\n style=${styleMap({\n alignItems: this.align,\n display: 'flex',\n flexDirection: this.direction === 'vertical' ? 'column' : 'row',\n flexWrap: this.wrap ? 'wrap' : 'nowrap',\n gap,\n })}\n >\n <slot></slot>\n </div>\n `;\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\n\n/**\n * Standard page shell with title and consistent spacing.\n * 标准页面外壳,包含标题和统一间距。\n *\n * @slot - Default slot for page body content. 页面正文内容。\n * @example\n * ```html\n * <aithe-page-container title=\"Dashboard\" padding=\"var(--aithe-space-xl)\">\n * <p>Page content here.</p>\n * </aithe-page-container>\n * ```\n */\n@customElement('aithe-page-container')\nexport class AithePageContainer extends AitheElement {\n /** Page title text. 页面标题文本。 */\n @property({ type: String }) title = '';\n /** Body section padding (CSS value). 正文区域内边距(CSS 值)。 */\n @property({ type: String }) padding = 'var(--aithe-space-xl)';\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: block;\n }\n\n .wrap {\n display: grid;\n gap: var(--aithe-space-lg);\n }\n\n .title {\n margin: 0;\n font-size: var(--aithe-font-size-2xl);\n font-weight: var(--aithe-font-weight-semibold);\n }\n\n .body {\n padding: var(--aithe-page-padding, var(--aithe-space-xl));\n border: 1px solid var(--aithe-color-border);\n border-radius: var(--aithe-radius-xl);\n background: var(--aithe-color-surface);\n }\n `,\n ];\n\n render() {\n this.style.setProperty('--aithe-page-padding', this.padding);\n return html`\n <div class=\"wrap\">\n ${this.title\n ? html`\n <h1 class=\"title\">${this.title}</h1>\n `\n : null}\n <div class=\"body\"><slot></slot></div>\n </div>\n `;\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\nimport type { AitheCollapseItem } from './collapse-item';\n\n/**\n * Accordion / multi-expand collapse container for collapsible panels.\n * 手风琴/多展开折叠容器,用于可折叠面板。\n *\n * @slot - Default slot for `aithe-collapse-item` elements. aithe-collapse-item 面板元素。\n * @fires aithe-change - Emitted when the active panel changes. 活动面板变更时触发。\n * @example\n * ```html\n * <aithe-collapse active-key=\"panel-1\" accordion>\n * <aithe-collapse-item title=\"Section A\" name=\"panel-1\">Content A</aithe-collapse-item>\n * <aithe-collapse-item title=\"Section B\" name=\"panel-2\">Content B</aithe-collapse-item>\n * </aithe-collapse>\n * ```\n */\n@customElement('aithe-collapse')\nexport class AitheCollapse extends AitheElement {\n /** Comma-separated keys of active (expanded) panels. 活动(展开)面板的键,逗号分隔。 */\n @property({ type: String, attribute: 'active-key' }) activeKey = '';\n /** Whether only one panel can be open at a time (accordion mode). 是否只允许同时打开一个面板(手风琴模式)。 */\n @property({ type: Boolean }) accordion = false;\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: grid;\n gap: var(--aithe-space-3);\n }\n `,\n ];\n\n connectedCallback(): void {\n super.connectedCallback();\n this.addEventListener('aithe-collapse-toggle', this.handleToggle as EventListener);\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener('aithe-collapse-toggle', this.handleToggle as EventListener);\n }\n\n protected updated(changed: Map<string, unknown>): void {\n if (changed.has('activeKey') || changed.has('accordion')) {\n this.syncItems();\n }\n }\n\n private get items(): AitheCollapseItem[] {\n return Array.from(this.querySelectorAll('aithe-collapse-item'));\n }\n\n private get activeKeys(): Set<string> {\n return new Set(\n this.activeKey\n .split(',')\n .map((item) => item.trim())\n .filter(Boolean),\n );\n }\n\n private readonly syncItems = (): void => {\n const activeKeys = this.activeKeys;\n\n this.items.forEach((item, index) => {\n const name = item.name || `item-${index + 1}`;\n item.name = name;\n item.open = activeKeys.has(name);\n });\n };\n\n private readonly handleToggle = (event: CustomEvent<{ name: string }>): void => {\n event.stopPropagation();\n\n const name = event.detail.name;\n if (!name) {\n return;\n }\n\n const activeKeys = this.activeKeys;\n if (this.accordion) {\n this.activeKey = activeKeys.has(name) ? '' : name;\n } else if (activeKeys.has(name)) {\n activeKeys.delete(name);\n this.activeKey = Array.from(activeKeys).join(',');\n } else {\n activeKeys.add(name);\n this.activeKey = Array.from(activeKeys).join(',');\n }\n\n this.syncItems();\n this.emit('aithe-change', { activeKey: this.activeKey });\n };\n\n render() {\n return html`\n <slot @slotchange=${this.syncItems}></slot>\n `;\n }\n}\n","import { css, html, nothing } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\n\n/**\n * Single collapsible panel for use inside `aithe-collapse`.\n * 单个可折叠面板,用于 aithe-collapse 内部。\n *\n * @slot - Default slot for panel body content. 面板正文内容。\n * @fires aithe-collapse-toggle - Emitted when the panel is toggled. 面板切换时触发。\n * @example\n * ```html\n * <aithe-collapse-item title=\"Details\" name=\"detail-1\" icon=\"info\">\n * <p>Expanded content here.</p>\n * </aithe-collapse-item>\n * ```\n */\n@customElement('aithe-collapse-item')\nexport class AitheCollapseItem extends AitheElement {\n /** Panel header title text. 面板标题文本。 */\n @property({ type: String }) title = '';\n /** Unique key identifying this panel. 面板唯一标识键。 */\n @property({ type: String }) name = '';\n /** Icon name to display before the title. 在标题前显示的图标名称。 */\n @property({ type: String }) icon = '';\n /** Whether the panel is disabled and cannot be toggled. 是否禁用面板切换。 */\n @property({ type: Boolean, reflect: true }) disabled = false;\n /** Whether the panel is currently expanded. 是否当前展开。 */\n @property({ type: Boolean, reflect: true }) open = false;\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: block;\n border: 1px solid var(--aithe-color-border);\n border-radius: var(--aithe-radius-lg);\n background: var(--aithe-color-surface-elevated);\n overflow: hidden;\n }\n\n .trigger {\n display: flex;\n align-items: center;\n gap: var(--aithe-space-4);\n width: 100%;\n min-height: 52px;\n padding: var(--aithe-space-4) var(--aithe-space-5);\n border: none;\n background: transparent;\n color: var(--aithe-color-text);\n text-align: left;\n cursor: pointer;\n }\n\n .trigger.disabled {\n cursor: not-allowed;\n opacity: 0.56;\n }\n\n .trigger:hover:not(.disabled) {\n background: var(--aithe-color-surface-muted);\n }\n\n .title-group {\n display: flex;\n align-items: center;\n gap: var(--aithe-space-2);\n flex: 1;\n min-width: 0;\n }\n\n .title-icon {\n flex-shrink: 0;\n color: var(--aithe-color-text-muted);\n }\n\n .title {\n font-weight: var(--aithe-font-weight-semibold);\n }\n\n .icon {\n color: var(--aithe-color-text-muted);\n transition: transform var(--aithe-duration-fast) var(--aithe-ease-standard);\n }\n\n .icon.open {\n transform: rotate(180deg);\n }\n\n .content {\n padding: 0 var(--aithe-space-5) var(--aithe-space-5);\n color: var(--aithe-color-text-muted);\n }\n `,\n ];\n\n private readonly toggle = (): void => {\n if (this.disabled) {\n return;\n }\n\n this.emit('aithe-collapse-toggle', {\n name: this.name,\n open: !this.open,\n });\n };\n\n private readonly handleKeydown = (event: KeyboardEvent): void => {\n if (event.key !== 'Enter' && event.key !== ' ') {\n return;\n }\n\n event.preventDefault();\n this.toggle();\n };\n\n render() {\n return html`\n <button\n class=${classMap({ trigger: true, disabled: this.disabled })}\n type=\"button\"\n aria-expanded=${String(this.open)}\n ?disabled=${this.disabled}\n @click=${this.toggle}\n @keydown=${this.handleKeydown}\n >\n <span class=\"title-group\">\n ${this.icon\n ? html`\n <aithe-icon class=\"title-icon\" name=${this.icon} size=\"16\"></aithe-icon>\n `\n : nothing}\n <span class=\"title\">${this.title}</span>\n </span>\n <span class=${classMap({ icon: true, open: this.open })} aria-hidden=\"true\">⌄</span>\n </button>\n <div class=\"content\" ?hidden=${!this.open}>\n <slot></slot>\n </div>\n `;\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\n\n/**\n * Sticky / affix wrapper that pins content to a fixed position on scroll.\n * 固定/吸顶包装器,滚动时将内容固定到指定位置。\n *\n * @slot - Default slot for content to be affixed. 需要固定的内容。\n * @fires aithe-affix - Emitted when affix state changes. 固定状态变更时触发。\n * @example\n * ```html\n * <aithe-affix offset-top=\"64\">\n * <aithe-button>Sticky Button</aithe-button>\n * </aithe-affix>\n * ```\n */\n@customElement('aithe-affix')\nexport class AitheAffix extends AitheElement {\n /** Top offset in pixels before affixing. 吸顶前的顶部偏移量(像素)。 */\n @property({ type: Number, attribute: 'offset-top' }) offsetTop = 0;\n /** CSS selector for the scroll container target (defaults to window). 滚动容器目标的 CSS 选择器(默认为 window)。 */\n @property({ type: String }) target = '';\n\n @state() private affixed = false;\n @state() private width = 0;\n @state() private height = 0;\n @state() private left = 0;\n\n private scrollTarget: HTMLElement | Window | null = null;\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: block;\n }\n\n .placeholder {\n width: 100%;\n }\n\n .content.affixed {\n position: fixed;\n top: var(--aithe-affix-offset, 0px);\n left: var(--aithe-affix-left, 0px);\n z-index: var(--aithe-z-dropdown);\n width: var(--aithe-affix-width, auto);\n }\n `,\n ];\n\n connectedCallback(): void {\n super.connectedCallback();\n this.bindTarget();\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n this.unbindTarget();\n }\n\n protected updated(changed: Map<string, unknown>): void {\n if (changed.has('target')) {\n this.unbindTarget();\n this.bindTarget();\n }\n\n if (changed.has('offsetTop')) {\n this.style.setProperty('--aithe-affix-offset', `${this.offsetTop}px`);\n }\n }\n\n private resolveTarget(): HTMLElement | Window {\n const root = this.getRootNode();\n const shadowTarget =\n root instanceof ShadowRoot && this.target\n ? root.querySelector<HTMLElement>(this.target)\n : null;\n const target =\n shadowTarget ?? (this.target ? document.querySelector<HTMLElement>(this.target) : null);\n return target ?? window;\n }\n\n private bindTarget(): void {\n if (typeof window === 'undefined') {\n return;\n }\n\n this.scrollTarget = this.resolveTarget();\n this.scrollTarget.addEventListener('scroll', this.handleScroll, { passive: true });\n window.addEventListener('resize', this.handleScroll, { passive: true });\n queueMicrotask(() => this.handleScroll());\n }\n\n private unbindTarget(): void {\n this.scrollTarget?.removeEventListener('scroll', this.handleScroll as EventListener);\n window.removeEventListener('resize', this.handleScroll as EventListener);\n this.scrollTarget = null;\n }\n\n private readonly handleScroll = (): void => {\n const rect = this.getBoundingClientRect();\n this.width = rect.width;\n this.height = rect.height;\n this.left = rect.left;\n this.affixed = rect.top <= this.offsetTop;\n this.style.setProperty('--aithe-affix-width', `${this.width}px`);\n this.style.setProperty('--aithe-affix-left', `${this.left}px`);\n };\n\n render() {\n const placeholderHeight = this.affixed ? `${this.height}px` : 'auto';\n return html`\n <div class=\"placeholder\" style=${`height:${placeholderHeight};`}>\n <div class=${this.affixed ? 'content affixed' : 'content'}>\n <slot></slot>\n </div>\n </div>\n `;\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport { AitheElement } from '../../core/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\n\n/**\n * Full-page layout with header (title, subtitle, actions) and content area.\n * 全页布局,包含标题区(标题、副标题、操作区)和内容区。\n *\n * @slot - Default slot for page body content. 页面正文内容。\n * @slot title - Custom title content (overrides `title` property). 自定义标题内容。\n * @slot subtitle - Custom subtitle content (overrides `subtitle` property). 自定义副标题内容。\n * @slot actions - Action buttons area in the header. 标题区操作按钮区域。\n * @example\n * ```html\n * <aithe-page title=\"Settings\" subtitle=\"Manage your preferences\">\n * <slot name=\"actions\"><aithe-button type=\"primary\">Save</aithe-button></slot>\n * <p>Page content here.</p>\n * </aithe-page>\n * ```\n */\n@customElement('aithe-page')\nexport class AithePage extends AitheElement {\n /** Page title text. 页面标题文本。 */\n @property({ type: String }) title = '';\n /** Page subtitle text. 页面副标题文本。 */\n @property({ type: String }) subtitle = '';\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: block;\n min-width: 0;\n }\n\n .page {\n display: grid;\n gap: var(--aithe-space-lg);\n min-width: 0;\n }\n\n .header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n flex-wrap: wrap;\n gap: var(--aithe-space-md);\n min-width: 0;\n }\n\n .heading {\n min-width: 0;\n flex: 1 1 360px;\n }\n\n .title {\n margin: 0;\n font-size: var(--aithe-font-size-2xl);\n font-weight: var(--aithe-font-weight-semibold);\n letter-spacing: -0.02em;\n }\n\n .subtitle {\n margin: var(--aithe-space-2) 0 0;\n color: var(--aithe-color-text-muted);\n }\n\n .content {\n min-width: 0;\n padding: var(--aithe-space-xl);\n border: 1px solid var(--aithe-color-border);\n border-radius: var(--aithe-radius-xl);\n background: var(--aithe-color-surface);\n box-shadow: var(--aithe-shadow-2);\n backdrop-filter: blur(18px);\n }\n\n ::slotted([slot='actions']) {\n flex-shrink: 0;\n max-width: 100%;\n }\n\n @media (max-width: 960px) {\n .content {\n padding: var(--aithe-space-lg);\n }\n }\n `,\n ];\n\n render() {\n return html`\n <div class=\"page\">\n <div class=\"header\">\n <div class=\"heading\">\n <slot name=\"title\">\n ${this.title\n ? html`\n <h1 class=\"title\">${this.title}</h1>\n `\n : null}\n </slot>\n <slot name=\"subtitle\">\n ${this.subtitle\n ? html`\n <p class=\"subtitle\">${this.subtitle}</p>\n `\n : null}\n </slot>\n </div>\n <slot name=\"actions\"></slot>\n </div>\n <div class=\"content\">\n <slot></slot>\n </div>\n </div>\n `;\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\nimport type { AitheMenuItem } from './menu-item';\nimport type { AitheSubMenu } from './sub-menu';\n\n/**\n * Cross-framework navigation menu with vertical and horizontal modes.\n * 跨框架导航菜单,支持垂直和水平模式。\n *\n * @slot - Default slot for `aithe-menu-item` and `aithe-sub-menu` elements. aithe-menu-item 和 aithe-sub-menu 元素。\n * @fires aithe-select - Emitted when a menu item is selected. 菜单项选中时触发。\n * @example\n * ```html\n * <aithe-menu mode=\"vertical\" active=\"home\">\n * <aithe-menu-item name=\"home\">Home</aithe-menu-item>\n * <aithe-sub-menu title=\"Settings\">\n * <aithe-menu-item name=\"profile\">Profile</aithe-menu-item>\n * </aithe-sub-menu>\n * </aithe-menu>\n * ```\n */\n@customElement('aithe-menu')\nexport class AitheMenu extends AitheElement {\n /** Menu layout mode. 菜单布局模式。 */\n @property({ type: String }) mode: 'horizontal' | 'vertical' = 'vertical';\n /** Active (selected) menu item key. 当前选中的菜单项键。 */\n @property({ type: String }) active = '';\n /** Whether the menu is in collapsed state. 菜单是否处于折叠状态。 */\n @property({ type: Boolean }) collapsed = false;\n /** Whether menu items can be selected. 菜单项是否可选中。 */\n @property({ type: Boolean }) selectable = true;\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n position: relative;\n display: block;\n }\n\n .menu {\n display: grid;\n gap: var(--aithe-space-2);\n }\n\n .menu.horizontal {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n }\n `,\n ];\n\n connectedCallback(): void {\n super.connectedCallback();\n this.addEventListener('aithe-menu-select', this.handleSelect as EventListener);\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener('aithe-menu-select', this.handleSelect as EventListener);\n }\n\n protected updated(changed: Map<string, unknown>): void {\n if (changed.has('active') || changed.has('mode') || changed.has('collapsed')) {\n this.syncChildren();\n }\n }\n\n private readonly syncChildren = (): void => {\n const items = Array.from(this.querySelectorAll('aithe-menu-item')) as AitheMenuItem[];\n const subMenus = Array.from(this.querySelectorAll('aithe-sub-menu')) as AitheSubMenu[];\n\n items.forEach((item) => {\n item.active = item.name === this.active;\n item.menuMode = this.mode;\n item.collapsed = this.collapsed;\n });\n\n subMenus.forEach((submenu) => {\n submenu.menuMode = this.mode;\n submenu.collapsed = this.collapsed;\n submenu.active = Array.from(submenu.querySelectorAll('aithe-menu-item')).some((item) => {\n const typedItem = item as AitheMenuItem;\n return typedItem.name === this.active;\n });\n if (this.mode === 'horizontal' && submenu.active) {\n submenu.open = true;\n }\n });\n };\n\n private readonly handleSelect = (event: CustomEvent<{ name: string }>): void => {\n event.stopPropagation();\n\n if (!this.selectable) {\n this.emit('aithe-select', event.detail);\n return;\n }\n\n this.active = event.detail.name;\n this.syncChildren();\n this.emit('aithe-select', { active: this.active });\n };\n\n render() {\n return html`\n <div class=${classMap({ menu: true, [this.mode]: true })}>\n <slot @slotchange=${this.syncChildren}></slot>\n </div>\n `;\n }\n}\n","import { css, html, nothing } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\n\n/**\n * Leaf navigation item for `aithe-menu`.\n * aithe-menu 的叶子导航项。\n *\n * @slot - Default slot for menu item label content. 菜单项标签内容。\n * @fires aithe-menu-select - Emitted when the item is clicked. 菜单项点击时触发。\n * @example\n * ```html\n * <aithe-menu-item name=\"dashboard\" title=\"Dashboard\" icon=\"home\" disabled>Dashboard</aithe-menu-item>\n * ```\n */\n@customElement('aithe-menu-item')\nexport class AitheMenuItem extends AitheElement {\n /** Unique key identifying this menu item. 菜单项唯一标识键。 */\n @property({ type: String }) name = '';\n /** Display title for the menu item (shown as tooltip). 菜单项的显示标题(作为工具提示)。 */\n @property({ type: String }) title = '';\n /** Icon name to display before the label. 在标签前显示的图标名称。 */\n @property({ type: String }) icon = '';\n /** Whether the menu item is disabled. 是否禁用菜单项。 */\n @property({ type: Boolean, reflect: true }) disabled = false;\n /** Whether the menu item is currently active (selected). 是否当前选中。 */\n @property({ type: Boolean, reflect: true }) active = false;\n /** Inherited menu mode from parent `aithe-menu`. 从父级 aithe-menu 继承的菜单模式。 */\n @property({ attribute: false }) menuMode: 'horizontal' | 'vertical' = 'vertical';\n /** Inherited collapsed state from parent `aithe-menu`. 从父级 aithe-menu 继承的折叠状态。 */\n @property({ attribute: false }) collapsed = false;\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: block;\n }\n\n button {\n display: flex;\n align-items: center;\n gap: var(--aithe-space-3);\n width: 100%;\n min-height: 42px;\n padding: 0 var(--aithe-space-4);\n border: none;\n border-radius: var(--aithe-radius-md);\n background: transparent;\n color: var(--aithe-color-text-muted);\n text-align: left;\n cursor: pointer;\n }\n\n .item-icon {\n flex-shrink: 0;\n color: var(--aithe-color-text-muted);\n }\n\n button.horizontal {\n min-height: 40px;\n }\n\n button.active {\n background: linear-gradient(180deg, var(--aithe-primary-6), var(--aithe-primary-7));\n color: white;\n box-shadow: var(--aithe-shadow-2);\n }\n\n button:hover:not(:disabled):not(.active) {\n background: var(--aithe-color-surface-muted);\n color: var(--aithe-color-text);\n }\n\n button:disabled {\n opacity: 0.48;\n cursor: not-allowed;\n }\n `,\n ];\n\n private readonly select = (): void => {\n if (this.disabled) {\n return;\n }\n\n this.emit('aithe-menu-select', { name: this.name });\n };\n\n private readonly handleKeydown = (event: KeyboardEvent): void => {\n if (event.key !== 'Enter' && event.key !== ' ') {\n return;\n }\n\n event.preventDefault();\n this.select();\n };\n\n render() {\n return html`\n <button\n class=${classMap({\n horizontal: this.menuMode === 'horizontal',\n active: this.active,\n })}\n type=\"button\"\n role=\"menuitem\"\n title=${this.title}\n ?disabled=${this.disabled}\n @click=${this.select}\n @keydown=${this.handleKeydown}\n >\n ${this.icon\n ? html`\n <aithe-icon class=\"item-icon\" name=${this.icon} size=\"16\"></aithe-icon>\n `\n : nothing}\n <slot></slot>\n </button>\n `;\n }\n}\n","import { css, html, nothing } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\n\n/**\n * Nested branch (sub-menu) item for `aithe-menu` with expandable children.\n * aithe-menu 的嵌套分支(子菜单)项,支持展开子项。\n *\n * @slot - Default slot for nested `aithe-menu-item` elements. 嵌套的 aithe-menu-item 元素。\n * @example\n * ```html\n * <aithe-sub-menu title=\"Settings\" name=\"settings\" icon=\"settings\">\n * <aithe-menu-item name=\"profile\">Profile</aithe-menu-item>\n * <aithe-menu-item name=\"security\">Security</aithe-menu-item>\n * </aithe-sub-menu>\n * ```\n */\n@customElement('aithe-sub-menu')\nexport class AitheSubMenu extends AitheElement {\n /** Unique key identifying this sub-menu. 子菜单唯一标识键。 */\n @property({ type: String }) name = '';\n /** Display title for the sub-menu trigger. 子菜单触发器的显示标题。 */\n @property({ type: String }) title = '';\n /** Icon name to display before the title. 在标题前显示的图标名称。 */\n @property({ type: String }) icon = '';\n /** Whether the sub-menu is disabled. 是否禁用子菜单。 */\n @property({ type: Boolean, reflect: true }) disabled = false;\n /** Whether the sub-menu is currently expanded. 是否当前展开。 */\n @property({ type: Boolean, reflect: true }) open = false;\n /** Whether any child item is currently active. 是否有子项当前选中。 */\n @property({ attribute: false }) active = false;\n /** Inherited menu mode from parent `aithe-menu`. 从父级 aithe-menu 继承的菜单模式。 */\n @property({ attribute: false }) menuMode: 'horizontal' | 'vertical' = 'vertical';\n /** Inherited collapsed state from parent `aithe-menu`. 从父级 aithe-menu 继承的折叠状态。 */\n @property({ attribute: false }) collapsed = false;\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: block;\n }\n\n .toggle {\n display: flex;\n align-items: center;\n gap: var(--aithe-space-3);\n width: 100%;\n min-height: 42px;\n padding: 0 var(--aithe-space-4);\n border: none;\n border-radius: var(--aithe-radius-md);\n background: transparent;\n color: var(--aithe-color-text-muted);\n text-align: left;\n cursor: pointer;\n }\n\n .toggle-label {\n display: flex;\n align-items: center;\n gap: var(--aithe-space-2);\n flex: 1;\n min-width: 0;\n }\n\n .toggle-icon {\n flex-shrink: 0;\n color: var(--aithe-color-text-muted);\n }\n\n .toggle.active {\n color: var(--aithe-color-text);\n background: var(--aithe-color-surface-muted);\n }\n\n .toggle:hover:not(:disabled) {\n background: var(--aithe-color-surface-muted);\n }\n\n .toggle:disabled {\n opacity: 0.48;\n cursor: not-allowed;\n }\n\n .children {\n display: grid;\n gap: var(--aithe-space-2);\n padding-top: var(--aithe-space-2);\n padding-left: var(--aithe-space-4);\n }\n\n :host([open][data-mode='horizontal']) .children {\n position: absolute;\n z-index: var(--aithe-z-dropdown);\n min-width: 220px;\n padding: var(--aithe-space-3);\n border: 1px solid var(--aithe-color-border);\n border-radius: var(--aithe-radius-lg);\n background: var(--aithe-color-surface-elevated);\n box-shadow: var(--aithe-shadow-3);\n }\n\n .arrow {\n transition: transform var(--aithe-duration-fast) var(--aithe-ease-standard);\n }\n\n .arrow.open {\n transform: rotate(180deg);\n }\n `,\n ];\n\n protected updated(changed: Map<string, unknown>): void {\n if (changed.has('menuMode')) {\n this.dataset.mode = this.menuMode;\n }\n }\n\n private readonly toggle = (): void => {\n if (this.disabled) {\n return;\n }\n\n this.open = !this.open;\n };\n\n render() {\n return html`\n <button\n class=${classMap({\n toggle: true,\n active: this.active,\n })}\n type=\"button\"\n ?disabled=${this.disabled}\n aria-expanded=${String(this.open)}\n @click=${this.toggle}\n >\n <span class=\"toggle-label\">\n ${this.icon\n ? html`\n <aithe-icon class=\"toggle-icon\" name=${this.icon} size=\"16\"></aithe-icon>\n `\n : nothing}\n <span>${this.title || this.name}</span>\n </span>\n <span class=${classMap({ arrow: true, open: this.open })}>⌄</span>\n </button>\n <div class=\"children\" ?hidden=${!this.open}>\n <slot></slot>\n </div>\n `;\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property, queryAssignedElements } from 'lit/decorators.js';\n\nimport { AitheElement } from '../../core/aithe-element';\nimport type { AitheBreadcrumbItem } from './breadcrumb-item';\nimport { aitheBaseStyles } from '../../core/styles';\nimport { t } from '../../core/i18n';\n\n/**\n * Breadcrumb navigation container for showing page hierarchy.\n * 面包屑导航容器,用于展示页面层级关系。\n *\n * @slot - Default slot for `aithe-breadcrumb-item` elements. aithe-breadcrumb-item 元素。\n * @example\n * ```html\n * <aithe-breadcrumb separator=\"/\">\n * <aithe-breadcrumb-item href=\"/home\">Home</aithe-breadcrumb-item>\n * <aithe-breadcrumb-item href=\"/products\">Products</aithe-breadcrumb-item>\n * <aithe-breadcrumb-item>Detail</aithe-breadcrumb-item>\n * </aithe-breadcrumb>\n * ```\n */\n@customElement('aithe-breadcrumb')\nexport class AitheBreadcrumb extends AitheElement {\n /** Separator character between breadcrumb items. 面包屑项之间的分隔符。 */\n @property({ type: String }) separator = '/';\n\n @queryAssignedElements() private items!: Element[];\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: block;\n }\n\n nav {\n display: flex;\n flex-wrap: wrap;\n gap: var(--aithe-space-2);\n }\n `,\n ];\n\n private readonly syncItems = (): void => {\n const breadcrumbItems = this.items.filter(\n (item): item is AitheBreadcrumbItem =>\n item instanceof HTMLElement && item.tagName.toLowerCase() === 'aithe-breadcrumb-item',\n );\n\n breadcrumbItems.forEach((item, index) => {\n item.current = index === breadcrumbItems.length - 1;\n item.separator = this.separator;\n });\n };\n\n render() {\n return html`\n <nav aria-label=${t('navigation.breadcrumb.ariaLabel')}>\n <slot @slotchange=${this.syncItems}></slot>\n </nav>\n `;\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport { AitheElement } from '../../core/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\n\n/**\n * Single breadcrumb link or text item for use inside `aithe-breadcrumb`.\n * 单个面包屑链接或文本项,用于 aithe-breadcrumb 内部。\n *\n * @slot - Default slot for breadcrumb item label text. 面包屑项标签文本。\n * @example\n * ```html\n * <aithe-breadcrumb-item href=\"/settings\" target=\"_self\">Settings</aithe-breadcrumb-item>\n * ```\n */\n@customElement('aithe-breadcrumb-item')\nexport class AitheBreadcrumbItem extends AitheElement {\n /** Link URL for navigable breadcrumb items. 可导航面包屑项的链接地址。 */\n @property({ type: String }) href = '';\n /** Link target attribute. 链接 target 属性。 */\n @property({ type: String }) target = '';\n /** Whether the breadcrumb item is disabled. 是否禁用面包屑项。 */\n @property({ type: Boolean, reflect: true }) disabled = false;\n /** Whether this is the current (last) breadcrumb item. 是否为当前(最后一个)面包屑项。 */\n @property({ type: Boolean, reflect: true }) current = false;\n /** Separator character (inherited from parent `aithe-breadcrumb`). 分隔符(从父级 aithe-breadcrumb 继承)。 */\n @property({ type: String }) separator = '/';\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: inline-flex;\n align-items: center;\n }\n\n .content {\n display: inline-flex;\n align-items: center;\n gap: var(--aithe-space-3);\n }\n\n a {\n color: var(--aithe-primary-6);\n text-decoration: none;\n }\n\n .text {\n color: var(--aithe-color-text-muted);\n }\n\n :host([current]) .text {\n color: var(--aithe-color-text);\n font-weight: var(--aithe-font-weight-medium);\n }\n\n .separator {\n color: var(--aithe-color-text-subtle);\n }\n `,\n ];\n\n render() {\n const content =\n this.current || !this.href || this.disabled\n ? html`\n <span class=\"text\"><slot></slot></span>\n `\n : html`\n <a href=${this.href} target=${this.target || '_self'}>\n <slot></slot>\n </a>\n `;\n\n return html`\n <span class=\"content\">\n ${content}\n ${this.current\n ? null\n : html`\n <span class=\"separator\" aria-hidden=\"true\">${this.separator}</span>\n `}\n </span>\n `;\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\n\ninterface StepItem {\n title: string;\n description?: string;\n}\n\n/**\n * Stepper component with JSON-driven items for process flow visualization.\n * 步骤条组件,支持 JSON 驱动的步骤项,用于流程可视化。\n *\n * @example\n * ```html\n * <aithe-steps current=\"1\" direction=\"horizontal\" items='[\"Step 1\",\"Step 2\",\"Step 3\"]'></aithe-steps>\n * <aithe-steps current=\"2\" items='[{\"title\":\"Account\",\"description\":\"Create account\"},{\"title\":\"Profile\",\"description\":\"Fill info\"}]'></aithe-steps>\n * ```\n */\n@customElement('aithe-steps')\nexport class AitheSteps extends AitheElement {\n /** Current active step index (0-based). 当前活动步骤索引(从 0 开始)。 */\n @property({ type: Number }) current = 0;\n /** Step size preset. 步骤尺寸预设。 */\n @property({ type: String }) size: 'sm' | 'md' | 'lg' = 'md';\n /** Steps layout direction. 步骤布局方向。 */\n @property({ type: String }) direction: 'horizontal' | 'vertical' = 'horizontal';\n /** JSON string or comma-separated list of step items. 步骤项的 JSON 字符串或逗号分隔列表。 */\n @property({ type: String }) items = '[]';\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: block;\n }\n\n .steps {\n display: flex;\n gap: var(--aithe-space-4);\n }\n\n .steps.vertical {\n flex-direction: column;\n }\n\n .item {\n position: relative;\n display: grid;\n grid-template-columns: auto minmax(0, 1fr);\n gap: var(--aithe-space-3);\n align-items: start;\n flex: 1;\n }\n\n .steps.vertical .item {\n flex: none;\n }\n\n .item:not(:last-child)::after {\n content: '';\n position: absolute;\n top: 15px;\n left: 36px;\n right: calc(var(--aithe-space-4) * -1);\n height: 2px;\n background: var(--aithe-color-border);\n }\n\n .steps.vertical .item:not(:last-child)::after {\n top: 36px;\n left: 15px;\n right: auto;\n width: 2px;\n height: calc(100% + var(--aithe-space-4));\n }\n\n .dot {\n position: relative;\n z-index: 1;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border-radius: 50%;\n border: 2px solid var(--aithe-color-border);\n background: var(--aithe-color-surface-elevated);\n color: var(--aithe-color-text-muted);\n font-weight: var(--aithe-font-weight-semibold);\n }\n\n .dot.done,\n .dot.active {\n border-color: var(--aithe-primary-6);\n background: var(--aithe-primary-6);\n color: white;\n }\n\n .title {\n font-weight: var(--aithe-font-weight-semibold);\n margin-bottom: var(--aithe-space-1);\n margin-top: 0;\n }\n\n .description {\n color: var(--aithe-color-text-muted);\n font-size: var(--aithe-font-size-sm);\n }\n `,\n ];\n\n private get parsedItems(): StepItem[] {\n try {\n const parsed = JSON.parse(this.items) as Array<string | StepItem>;\n return parsed.map((item) => (typeof item === 'string' ? { title: item } : item));\n } catch {\n return this.items\n .split(',')\n .map((item) => item.trim())\n .filter(Boolean)\n .map((title) => ({ title }));\n }\n }\n\n /**\n * Get the state of a step item based on its index.\n * @param index - The index of the step item\n * @returns The state of the step: 'done', 'active', or 'pending'\n */\n private getStepState(index: number): 'done' | 'active' | 'pending' {\n if (index < this.current) {\n return 'done';\n } else if (index === this.current) {\n return 'active';\n } else {\n return 'pending';\n }\n }\n\n render() {\n const items = this.parsedItems;\n\n return html`\n <div class=${classMap({ steps: true, [this.direction]: true })}>\n ${items.map((item, index) => {\n const state = this.getStepState(index);\n return html`\n <div class=\"item\">\n <span class=${classMap({ dot: true, [state]: true })}>${index + 1}</span>\n <div>\n <div class=\"title\">${item.title}</div>\n ${item.description\n ? html`\n <div class=\"description\">${item.description}</div>\n `\n : null}\n </div>\n </div>\n `;\n })}\n </div>\n `;\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\nimport { t } from '../../core/i18n';\n\n/**\n * Back to top floating action button that appears after scrolling past a threshold.\n * 回到顶部浮动按钮,滚动超过阈值后出现。\n *\n * @slot - Default slot for custom button content (overrides default arrow). 自定义按钮内容(覆盖默认箭头)。\n * @example\n * ```html\n * <aithe-back-top visibility-height=\"300\" target=\"#scroll-container\"></aithe-back-top>\n * ```\n */\n@customElement('aithe-back-top')\nexport class AitheBackTop extends AitheElement {\n /** CSS selector for the scroll container (defaults to window). 滚动容器的 CSS 选择器(默认为 window)。 */\n @property({ type: String }) target = '';\n /** Scroll threshold in pixels before the button appears. 按钮出现前的滚动阈值(像素)。 */\n @property({ type: Number, attribute: 'visibility-height' }) visibilityHeight = 260;\n\n @state() private visible = false;\n private scrollTarget: HTMLElement | Window | null = null;\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n position: fixed;\n right: 28px;\n bottom: 28px;\n z-index: var(--aithe-z-dropdown);\n }\n\n button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 44px;\n height: 44px;\n border: 1px solid var(--aithe-color-border);\n border-radius: 50%;\n background: var(--aithe-color-surface-elevated);\n color: var(--aithe-color-text);\n box-shadow: var(--aithe-shadow-2);\n cursor: pointer;\n }\n `,\n ];\n\n connectedCallback(): void {\n super.connectedCallback();\n this.bindTarget();\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n this.unbindTarget();\n }\n\n protected updated(changed: Map<string, unknown>): void {\n if (changed.has('target')) {\n this.unbindTarget();\n this.bindTarget();\n }\n }\n\n private resolveTarget(): HTMLElement | Window {\n const root = this.getRootNode();\n const shadowTarget =\n root instanceof ShadowRoot && this.target\n ? root.querySelector<HTMLElement>(this.target)\n : null;\n const target =\n shadowTarget ?? (this.target ? document.querySelector<HTMLElement>(this.target) : null);\n return target ?? window;\n }\n\n private bindTarget(): void {\n this.scrollTarget = this.resolveTarget();\n this.scrollTarget.addEventListener('scroll', this.handleScroll, { passive: true });\n this.handleScroll();\n }\n\n private unbindTarget(): void {\n this.scrollTarget?.removeEventListener('scroll', this.handleScroll as EventListener);\n this.scrollTarget = null;\n }\n\n private readonly handleScroll = (): void => {\n const top =\n this.scrollTarget instanceof Window\n ? window.scrollY\n : (this.scrollTarget as HTMLElement).scrollTop;\n this.visible = top >= this.visibilityHeight;\n };\n\n private readonly scrollToTop = (): void => {\n if (this.scrollTarget instanceof Window) {\n window.scrollTo({ top: 0, behavior: 'smooth' });\n return;\n }\n\n (this.scrollTarget as HTMLElement).scrollTo({ top: 0, behavior: 'smooth' });\n };\n\n render() {\n return this.visible\n ? html`\n <button\n type=\"button\"\n aria-label=${t('navigation.backTop.ariaLabel')}\n @click=${this.scrollToTop}\n >\n ↑\n </button>\n `\n : html``;\n }\n}\n","import { clamp } from './utils';\n\n/**\n * Placement positions for floating overlays relative to an anchor element.\n * 浮动叠加层相对于锚点元素的放置位置。\n */\nexport type AithePlacement =\n | 'top'\n | 'top-start'\n | 'top-end'\n | 'right'\n | 'right-start'\n | 'bottom'\n | 'bottom-start'\n | 'bottom-end'\n | 'left'\n | 'left-start';\n\n/**\n * Options for computing a floating overlay position.\n * 计算浮动叠加层位置的选项。\n */\nexport interface FloatingOptions {\n /** Gap between anchor and overlay in pixels. 锚点与叠加层之间的像素间距。 */\n offset?: number;\n /** Minimum viewport padding in pixels. 最小视口内边距(像素)。 */\n padding?: number;\n}\n\n/**\n * Computed position result for a floating overlay.\n * 浮动叠加层的计算位置结果。\n */\nexport interface FloatingPosition {\n /** Left offset in pixels. 左偏移量(像素)。 */\n left: number;\n /** Top offset in pixels. 顶部偏移量(像素)。 */\n top: number;\n /** The resolved placement (may differ from preferred due to viewport constraints). 解析后的放置位置(可能因视口约束而与首选位置不同)。 */\n placement: AithePlacement;\n}\n\n/** Fallback placement order when the preferred position overflows the viewport. 当首选位置溢出视口时的备选放置顺序。 */\nconst fallbackMap: Record<AithePlacement, AithePlacement[]> = {\n top: ['bottom', 'right', 'left'],\n 'top-start': ['bottom-start', 'right-start', 'left-start'],\n 'top-end': ['bottom-end', 'right-start', 'left-start'],\n right: ['left', 'bottom', 'top'],\n 'right-start': ['left-start', 'bottom-start', 'top-start'],\n bottom: ['top', 'right', 'left'],\n 'bottom-start': ['top-start', 'right-start', 'left-start'],\n 'bottom-end': ['top-end', 'right-start', 'left-start'],\n left: ['right', 'bottom', 'top'],\n 'left-start': ['right-start', 'bottom-start', 'top-start'],\n};\n\n/**\n * Compute pixel coordinates for a given placement relative to an anchor rect.\n * 计算给定放置位置相对于锚点矩形的像素坐标。\n *\n * @param anchorRect - Bounding rect of the anchor element. 锚点元素的边界矩形。\n * @param overlayRect - Bounding rect of the overlay element. 叠加层元素的边界矩形。\n * @param placement - Desired placement position. 期望的放置位置。\n * @param offset - Gap between anchor and overlay. 锚点与叠加层之间的间距。\n * @returns Pixel coordinates `{ left, top }`. 像素坐标 `{ left, top }`。\n */\nfunction coordsForPlacement(\n anchorRect: DOMRect,\n overlayRect: DOMRect,\n placement: AithePlacement,\n offset: number,\n): { left: number; top: number } {\n switch (placement) {\n case 'top':\n return {\n left: anchorRect.left + anchorRect.width / 2 - overlayRect.width / 2,\n top: anchorRect.top - overlayRect.height - offset,\n };\n case 'top-start':\n return {\n left: anchorRect.left,\n top: anchorRect.top - overlayRect.height - offset,\n };\n case 'top-end':\n return {\n left: anchorRect.right - overlayRect.width,\n top: anchorRect.top - overlayRect.height - offset,\n };\n case 'right':\n return {\n left: anchorRect.right + offset,\n top: anchorRect.top + anchorRect.height / 2 - overlayRect.height / 2,\n };\n case 'right-start':\n return {\n left: anchorRect.right + offset,\n top: anchorRect.top,\n };\n case 'bottom':\n return {\n left: anchorRect.left + anchorRect.width / 2 - overlayRect.width / 2,\n top: anchorRect.bottom + offset,\n };\n case 'bottom-start':\n return {\n left: anchorRect.left,\n top: anchorRect.bottom + offset,\n };\n case 'bottom-end':\n return {\n left: anchorRect.right - overlayRect.width,\n top: anchorRect.bottom + offset,\n };\n case 'left':\n return {\n left: anchorRect.left - overlayRect.width - offset,\n top: anchorRect.top + anchorRect.height / 2 - overlayRect.height / 2,\n };\n case 'left-start':\n return {\n left: anchorRect.left - overlayRect.width - offset,\n top: anchorRect.top,\n };\n default:\n return { left: 0, top: 0 };\n }\n}\n\n/**\n * Check whether an overlay rect fits inside the viewport with the given padding.\n * 检查叠加层矩形是否在给定内边距下适合视口。\n *\n * @param left - Left offset. 左偏移量。\n * @param top - Top offset. 顶部偏移量。\n * @param overlayRect - Bounding rect of the overlay. 叠加层的边界矩形。\n * @param padding - Minimum viewport padding. 最小视口内边距。\n * @returns `true` if the overlay is fully inside the viewport. 若叠加层完全在视口内则返回 `true`。\n */\nfunction fitsViewport(left: number, top: number, overlayRect: DOMRect, padding: number): boolean {\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n return (\n left >= padding &&\n top >= padding &&\n left + overlayRect.width <= viewportWidth - padding &&\n top + overlayRect.height <= viewportHeight - padding\n );\n}\n\n/**\n * Compute the best position for a floating overlay anchored to an element.\n * 计算锚定到元素的浮动叠加层的最佳位置。\n *\n * Tries the preferred placement first, then falls back to alternative\n * positions that fit within the viewport. If none fit, clamps to the viewport.\n * 首先尝试首选放置位置,然后回退到适合视口的备选位置。若无适合位置,则限制在视口内。\n *\n * @param anchorRect - Bounding rect of the anchor. 锚点的边界矩形。\n * @param overlayRect - Bounding rect of the overlay. 叠加层的边界矩形。\n * @param preferredPlacement - Desired placement. 期望的放置位置。\n * @param options - Offset and padding options. 偏移和内边距选项。\n * @returns The computed position with resolved placement. 计算后的位置及解析后的放置位置。\n */\nexport function computeFloatingPosition(\n anchorRect: DOMRect,\n overlayRect: DOMRect,\n preferredPlacement: AithePlacement,\n options: FloatingOptions = {},\n): FloatingPosition {\n const offset = options.offset ?? 8;\n const padding = options.padding ?? 12;\n const candidates = [preferredPlacement, ...fallbackMap[preferredPlacement]];\n\n for (const placement of candidates) {\n const coords = coordsForPlacement(anchorRect, overlayRect, placement, offset);\n if (fitsViewport(coords.left, coords.top, overlayRect, padding)) {\n return {\n ...coords,\n placement,\n };\n }\n }\n\n const fallback = coordsForPlacement(anchorRect, overlayRect, preferredPlacement, offset);\n return {\n left: clamp(fallback.left, padding, window.innerWidth - overlayRect.width - padding),\n top: clamp(fallback.top, padding, window.innerHeight - overlayRect.height - padding),\n placement: preferredPlacement,\n };\n}\n","import { css, html, nothing } from 'lit';\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { type AithePlacement, computeFloatingPosition } from '../../core/floating';\nimport { aitheBaseStyles } from '../../core/styles';\nimport type { AitheBuiltinTheme } from '../../types';\nimport { t } from '../../core/i18n';\n\nconst LIGHT_THEMES: AitheBuiltinTheme[] = [\n 'light',\n 'gray',\n 'blue',\n 'festive',\n 'orange',\n 'purple',\n 'pink',\n 'teal',\n 'indigo',\n 'cyan',\n 'amber',\n];\n\nconst DARK_THEMES: AitheBuiltinTheme[] = [\n 'dark',\n 'slate',\n 'charcoal',\n 'midnight',\n 'obsidian',\n 'graphite',\n 'ink',\n 'onyx',\n 'ebony',\n 'navy',\n 'raisin',\n];\n\nconst THEME_COLORS: Record<string, string> = {\n light: '#f5f5f5',\n dark: '#1a1a2e',\n gray: '#8c8c8c',\n blue: '#4d8dff',\n festive: '#f5313d',\n orange: '#e87a18',\n purple: '#7c4de0',\n pink: '#e04d8a',\n teal: '#13a8a8',\n indigo: '#5c48d6',\n cyan: '#0ebfc7',\n amber: '#d4a010',\n slate: '#5470e0',\n charcoal: '#6454d4',\n midnight: '#4070e0',\n obsidian: '#4c6cd4',\n graphite: '#4c60a6',\n ink: '#6454d4',\n onyx: '#506088',\n ebony: '#6a5094',\n navy: '#4066c0',\n raisin: '#6e50c0',\n};\n\ninterface ThemeGroup {\n id: string;\n label: string;\n dotColor: string;\n themes: AitheBuiltinTheme[];\n}\n\nconst THEME_GROUPS: ThemeGroup[] = [\n { id: 'light-group', label: '', dotColor: '#f5f5f5', themes: LIGHT_THEMES },\n { id: 'dark-group', label: '', dotColor: '#1a1a2e', themes: DARK_THEMES },\n];\n\n/**\n * Theme picker dropdown for browsing and selecting built-in Aithe UI themes.\n * 主题选择器下拉菜单,用于浏览和选择 Aithe UI 内置主题。\n *\n * Displays themes grouped by light/dark categories with color dot previews.\n * 按 Light/Dark 分组展示主题,并带有颜色圆点预览。\n *\n * @fires aithe-theme-change - Emitted when a theme is selected. 选择主题时发出,detail 包含 `{ theme: string }`。\n *\n * @example\n * ```html\n * <aithe-theme-picker value=\"light\" placement=\"bottom-end\"></aithe-theme-picker>\n * ```\n */\n@customElement('aithe-theme-picker')\nexport class AitheThemePicker extends AitheElement {\n /** Currently selected theme name. 当前选中的主题名称。 */\n @property({ type: String }) value: AitheBuiltinTheme | string = 'light';\n\n /** Placement of the dropdown overlay relative to the trigger. 下拉浮层相对于触发器的弹出位置。 */\n @property({ type: String }) placement: AithePlacement = 'bottom-end';\n\n @state() private open = false;\n @state() private expandedGroup: string | null = null;\n\n @query('.trigger') private triggerEl?: HTMLElement;\n @query('.overlay') private overlayEl?: HTMLElement;\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: inline-flex;\n position: relative;\n }\n\n .trigger {\n display: inline-flex;\n align-items: center;\n gap: var(--aithe-space-2);\n min-height: 34px;\n padding: 0 var(--aithe-space-3);\n border: 1px solid var(--aithe-color-border);\n border-radius: var(--aithe-radius-full);\n background: var(--aithe-color-surface);\n color: var(--aithe-color-text);\n cursor: pointer;\n font-size: var(--aithe-font-size-sm);\n font-family: inherit;\n transition:\n border-color 0.15s,\n background 0.15s;\n }\n\n .trigger:hover {\n border-color: var(--aithe-primary-6);\n }\n\n .dot {\n width: 14px;\n height: 14px;\n border-radius: var(--aithe-radius-full);\n background: var(--aithe-primary-6);\n border: 1px solid rgba(0, 0, 0, 0.15);\n flex-shrink: 0;\n }\n\n .arrow {\n font-size: 10px;\n color: var(--aithe-color-text-muted);\n transition: transform var(--aithe-duration-fast) var(--aithe-ease-standard);\n }\n\n .arrow.open {\n transform: rotate(180deg);\n }\n\n .overlay {\n position: fixed;\n z-index: var(--aithe-z-dropdown);\n width: max-content;\n min-width: 180px;\n max-width: min(320px, calc(100vw - 24px));\n max-height: min(70vh, 480px);\n padding: var(--aithe-space-2);\n overflow-y: auto;\n border: 1px solid var(--aithe-color-border);\n border-radius: var(--aithe-radius-lg);\n background: var(--aithe-color-surface-elevated);\n box-shadow: var(--aithe-shadow-3);\n }\n\n .group-list {\n margin: 0;\n padding: 0;\n list-style: none;\n display: grid;\n gap: var(--aithe-space-1);\n }\n\n .group-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--aithe-space-4);\n width: 100%;\n min-height: 38px;\n padding: 0 var(--aithe-space-3);\n border: none;\n border-radius: var(--aithe-radius-md);\n background: transparent;\n color: var(--aithe-color-text);\n text-align: left;\n cursor: pointer;\n font-size: var(--aithe-font-size-sm);\n font-family: inherit;\n }\n\n .group-header:hover,\n .group-header:focus-visible {\n background: var(--aithe-color-surface-muted);\n outline: none;\n }\n\n .group-header.has-active {\n color: var(--aithe-primary-7);\n font-weight: var(--aithe-font-weight-semibold);\n }\n\n .group-label {\n display: inline-flex;\n align-items: center;\n gap: var(--aithe-space-2);\n }\n\n .color-dot {\n display: inline-block;\n width: 12px;\n height: 12px;\n border-radius: 50%;\n border: 1px solid rgba(0, 0, 0, 0.15);\n flex-shrink: 0;\n }\n\n .group-arrow {\n font-size: 10px;\n color: var(--aithe-color-text-subtle);\n transition: transform var(--aithe-duration-fast) var(--aithe-ease-standard);\n }\n\n .group-arrow.expanded {\n transform: rotate(180deg);\n }\n\n .theme-list {\n margin: 0;\n padding: 0;\n padding-left: var(--aithe-space-4);\n list-style: none;\n display: grid;\n gap: var(--aithe-space-1);\n overflow: hidden;\n }\n\n .divider {\n height: 1px;\n margin: var(--aithe-space-1) 0;\n background: var(--aithe-color-border);\n }\n\n .theme-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--aithe-space-4);\n width: 100%;\n min-height: 36px;\n padding: 0 var(--aithe-space-3);\n border: none;\n border-radius: var(--aithe-radius-md);\n background: transparent;\n color: var(--aithe-color-text);\n text-align: left;\n cursor: pointer;\n font-size: var(--aithe-font-size-sm);\n font-family: inherit;\n }\n\n .theme-item:hover,\n .theme-item:focus-visible {\n background: var(--aithe-color-surface-muted);\n outline: none;\n }\n\n .theme-item.active {\n background: var(--aithe-color-surface-muted);\n color: var(--aithe-primary-7);\n font-weight: var(--aithe-font-weight-semibold);\n }\n\n .theme-label {\n display: inline-flex;\n align-items: center;\n gap: var(--aithe-space-2);\n }\n\n .check {\n width: 16px;\n color: var(--aithe-primary-7);\n font-size: 14px;\n }\n `,\n ];\n\n private readonly handleViewportChange = () => this.updatePosition();\n\n connectedCallback(): void {\n super.connectedCallback();\n document.addEventListener('mousedown', this.handleOutsideClick);\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n document.removeEventListener('mousedown', this.handleOutsideClick);\n this.unbindViewport();\n }\n\n protected updated(): void {\n if (this.open) {\n queueMicrotask(() => this.updatePosition());\n }\n }\n\n private bindViewport(): void {\n window.addEventListener('resize', this.handleViewportChange);\n window.addEventListener('scroll', this.handleViewportChange, true);\n }\n\n private unbindViewport(): void {\n window.removeEventListener('resize', this.handleViewportChange);\n window.removeEventListener('scroll', this.handleViewportChange, true);\n }\n\n private updatePosition(): void {\n const overlay = this.overlayEl;\n const trigger = this.triggerEl;\n if (!overlay || !trigger || !this.open) return;\n\n const anchorRect = trigger.getBoundingClientRect();\n const overlayRect = overlay.getBoundingClientRect();\n const pos = computeFloatingPosition(anchorRect, overlayRect, this.placement, { offset: 8 });\n\n overlay.style.left = `${pos.left}px`;\n overlay.style.top = `${pos.top}px`;\n }\n\n private readonly handleOutsideClick = (event: MouseEvent): void => {\n if (!this.open) return;\n if (!event.composedPath().includes(this)) {\n this.open = false;\n this.expandedGroup = null;\n }\n };\n\n private readonly toggleOpen = (): void => {\n this.open = !this.open;\n if (!this.open) {\n this.expandedGroup = null;\n this.unbindViewport();\n } else {\n this.bindViewport();\n }\n };\n\n private readonly toggleGroup = (groupId: string): void => {\n this.expandedGroup = this.expandedGroup === groupId ? null : groupId;\n };\n\n private readonly handleThemeSelect = (theme: string): void => {\n this.value = theme;\n this.open = false;\n this.expandedGroup = null;\n this.unbindViewport();\n this.emit('aithe-theme-change', { theme });\n };\n\n private renderGroup(group: ThemeGroup, index: number) {\n const isExpanded = this.expandedGroup === group.id;\n const hasActive = group.themes.includes(this.value as AitheBuiltinTheme);\n const groupLabel = group.id === 'light-group' ? t('theme.light') : t('theme.dark');\n\n return html`\n ${index > 0\n ? html`\n <li class=\"divider\" role=\"separator\"></li>\n `\n : nothing}\n <li>\n <button\n class=${classMap({ 'group-header': true, 'has-active': hasActive })}\n type=\"button\"\n aria-expanded=${String(isExpanded)}\n @click=${() => this.toggleGroup(group.id)}\n >\n <span class=\"group-label\">\n <span class=\"color-dot\" style=\"background:${group.dotColor}\"></span>\n ${groupLabel}\n </span>\n <span class=${classMap({ 'group-arrow': true, expanded: isExpanded })}>▾</span>\n </button>\n ${isExpanded\n ? html`\n <ul class=\"theme-list\">\n ${group.themes.map((t) => this.renderThemeItem(t))}\n </ul>\n `\n : nothing}\n </li>\n `;\n }\n\n private renderThemeItem(theme: AitheBuiltinTheme) {\n const isActive = theme === this.value;\n const color = THEME_COLORS[theme] || 'var(--aithe-primary-6)';\n\n return html`\n <li>\n <button\n class=${classMap({ 'theme-item': true, active: isActive })}\n type=\"button\"\n @click=${() => this.handleThemeSelect(theme)}\n >\n <span class=\"theme-label\">\n <span class=\"color-dot\" style=\"background:${color}\"></span>\n ${theme.charAt(0).toUpperCase() + theme.slice(1)}\n </span>\n ${isActive\n ? html`\n <span class=\"check\">✓</span>\n `\n : nothing}\n </button>\n </li>\n `;\n }\n\n render() {\n const displayLabel = this.value.charAt(0).toUpperCase() + this.value.slice(1);\n const displayColor = THEME_COLORS[this.value] || 'var(--aithe-primary-6)';\n\n return html`\n <button class=\"trigger\" type=\"button\" @click=${this.toggleOpen}>\n <span class=\"dot\" style=\"background:${displayColor}\"></span>\n ${displayLabel}\n <span class=${classMap({ arrow: true, open: this.open })}>▾</span>\n </button>\n ${this.open\n ? html`\n <div class=\"overlay\" role=\"menu\">\n <ul class=\"group-list\">\n ${THEME_GROUPS.map((group, index) => this.renderGroup(group, index))}\n </ul>\n </div>\n `\n : nothing}\n `;\n }\n}\n","import { css, html, unsafeCSS } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { aitheBaseStyles, aitheScrollbarStyles } from '../../core/styles';\nimport { setAitheTheme } from '../../global';\nimport { aitheThemeText } from '../../styles/theme';\nimport type { AitheBuiltinTheme } from '../../types';\nimport { t } from '../../core/i18n';\n\n/**\n * Live theme preview panel with an embedded theme picker and sample components.\n * 实时主题预览面板,内嵌主题选择器和示例组件。\n *\n * Renders a mini application layout (sidebar + content area) themed with the\n * selected preview theme, allowing users to evaluate themes before applying.\n * 渲染一个迷你应用布局(侧边栏 + 内容区),使用所选预览主题,\n * 允许用户在应用前评估主题效果。\n *\n * @fires aithe-theme-apply - Emitted when the \"Apply Theme\" button is clicked. 点击\"应用主题\"按钮时发出,detail 包含 `{ theme: string }`。\n *\n * @example\n * ```html\n * <aithe-theme-preview value=\"dark\"></aithe-theme-preview>\n * ```\n */\n@customElement('aithe-theme-preview')\nexport class AitheThemePreview extends AitheElement {\n /** Currently applied theme name. 当前应用的主题名称。 */\n @property({ type: String }) value: AitheBuiltinTheme | string = 'light';\n\n @state() private previewTheme: string = this.value;\n\n static readonly styles = [\n unsafeCSS(aitheThemeText),\n aitheBaseStyles,\n aitheScrollbarStyles,\n css`\n :host {\n display: block;\n border: 1px solid var(--aithe-color-border);\n border-radius: var(--aithe-radius-lg);\n overflow: hidden;\n background: var(--aithe-color-surface);\n }\n\n .toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--aithe-space-3);\n padding: var(--aithe-space-3) var(--aithe-space-4);\n border-bottom: 1px solid var(--aithe-color-border);\n background: var(--aithe-color-surface-elevated);\n }\n\n .toolbar-left {\n display: flex;\n align-items: center;\n gap: var(--aithe-space-3);\n }\n\n .toolbar-label {\n font-size: var(--aithe-font-size-sm);\n font-weight: var(--aithe-font-weight-semibold);\n color: var(--aithe-color-text);\n }\n\n .confirm-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-height: 32px;\n padding: 0 var(--aithe-space-4);\n border: none;\n border-radius: var(--aithe-radius-md);\n background: var(--aithe-primary-6);\n color: #fff;\n font-size: var(--aithe-font-size-sm);\n font-family: inherit;\n cursor: pointer;\n transition:\n background 0.15s,\n opacity 0.15s;\n }\n\n .confirm-btn:hover {\n background: var(--aithe-primary-7);\n }\n\n .confirm-btn:active {\n background: var(--aithe-primary-8);\n }\n\n .preview-area {\n display: flex;\n min-height: 420px;\n background: var(--aithe-color-bg);\n color: var(--aithe-color-text);\n }\n\n .sidebar {\n width: 220px;\n flex-shrink: 0;\n border-right: 1px solid var(--aithe-color-border);\n padding: var(--aithe-space-2) 0;\n overflow-y: auto;\n background: var(--aithe-color-surface);\n }\n\n .sidebar-item {\n display: flex;\n align-items: center;\n gap: var(--aithe-space-2);\n width: 100%;\n min-height: 40px;\n padding: 0 var(--aithe-space-4);\n border: none;\n border-radius: 0;\n background: transparent;\n color: var(--aithe-color-text);\n font-size: var(--aithe-font-size-sm);\n font-family: inherit;\n text-align: left;\n cursor: pointer;\n transition:\n background 0.15s,\n color 0.15s;\n }\n\n .sidebar-item:hover {\n background: var(--aithe-color-surface-muted);\n }\n\n .sidebar-item.active {\n background: var(--aithe-color-surface-muted);\n color: var(--aithe-primary-7);\n font-weight: var(--aithe-font-weight-semibold);\n }\n\n .sidebar-icon {\n font-size: 16px;\n width: 20px;\n text-align: center;\n flex-shrink: 0;\n }\n\n .content {\n flex: 1;\n padding: var(--aithe-space-5);\n overflow-y: auto;\n }\n\n .section-title {\n font-size: var(--aithe-font-size-lg);\n font-weight: var(--aithe-font-weight-semibold);\n color: var(--aithe-color-text);\n margin: 0 0 var(--aithe-space-4) 0;\n }\n\n .component-section {\n margin-bottom: var(--aithe-space-6);\n }\n\n .component-row {\n display: flex;\n gap: var(--aithe-space-3);\n flex-wrap: wrap;\n align-items: center;\n margin-bottom: var(--aithe-space-3);\n }\n\n .input-row {\n display: grid;\n gap: var(--aithe-space-3);\n max-width: 480px;\n margin-bottom: var(--aithe-space-3);\n }\n\n .table-wrapper {\n margin-bottom: var(--aithe-space-3);\n }\n `,\n ];\n\n private readonly handleThemeChange = (event: CustomEvent<{ theme: string }>): void => {\n this.previewTheme = event.detail.theme;\n };\n\n private readonly handleConfirm = (): void => {\n this.value = this.previewTheme;\n setAitheTheme(this.previewTheme);\n this.emit('aithe-theme-apply', { theme: this.previewTheme });\n };\n\n private sidebarItems = [\n { icon: '🏠', labelKey: 'theme.preview.dashboard' },\n { icon: '📦', labelKey: 'theme.preview.components' },\n { icon: '🎨', labelKey: 'theme.preview.themes' },\n { icon: '⚙️', labelKey: 'theme.preview.settings' },\n ];\n\n render() {\n return html`\n <div class=\"toolbar\">\n <div class=\"toolbar-left\">\n <span class=\"toolbar-label\">${t('theme.preview.title')}</span>\n <aithe-theme-picker\n .value=${this.previewTheme}\n @aithe-theme-change=${this.handleThemeChange}\n ></aithe-theme-picker>\n </div>\n <button class=\"confirm-btn\" type=\"button\" @click=${this.handleConfirm}>\n ${t('theme.preview.applyTheme')}\n </button>\n </div>\n <div class=\"preview-area\" data-aithe-theme=${this.previewTheme}>\n <nav class=\"sidebar\">\n ${this.sidebarItems.map(\n (item, i) => html`\n <button class=${`sidebar-item${i === 0 ? ' active' : ''}`} type=\"button\">\n <span class=\"sidebar-icon\">${item.icon}</span>\n ${t(item.labelKey)}\n </button>\n `,\n )}\n </nav>\n <main class=\"content\">\n <div class=\"component-section\">\n <h3 class=\"section-title\">${t('theme.preview.buttons')}</h3>\n <div class=\"component-row\">\n <aithe-button type=\"primary\">${t('theme.preview.primary')}</aithe-button>\n <aithe-button type=\"default\">${t('theme.preview.default')}</aithe-button>\n <aithe-button type=\"dashed\">${t('theme.preview.dashed')}</aithe-button>\n <aithe-button type=\"text\">${t('theme.preview.text')}</aithe-button>\n <aithe-button type=\"link\">${t('theme.preview.link')}</aithe-button>\n <aithe-button type=\"primary\" danger>${t('theme.preview.danger')}</aithe-button>\n </div>\n </div>\n <div class=\"component-section\">\n <h3 class=\"section-title\">${t('theme.preview.input')}</h3>\n <div class=\"input-row\">\n <aithe-input placeholder=${t('theme.preview.enterText')} clearable></aithe-input>\n <aithe-input\n placeholder=${t('theme.preview.search')}\n status=\"success\"\n value=${t('theme.preview.brand')}\n ></aithe-input>\n </div>\n </div>\n <div class=\"component-section\">\n <h3 class=\"section-title\">${t('theme.preview.tags')}</h3>\n <div class=\"component-row\">\n <aithe-tag type=\"primary\">${t('theme.preview.primary')}</aithe-tag>\n <aithe-tag type=\"success\">${t('theme.preview.success')}</aithe-tag>\n <aithe-tag type=\"warning\">${t('theme.preview.warning')}</aithe-tag>\n <aithe-tag type=\"danger\">${t('theme.preview.danger')}</aithe-tag>\n </div>\n </div>\n <div class=\"component-section\">\n <h3 class=\"section-title\">${t('theme.preview.table')}</h3>\n <div class=\"table-wrapper\">\n <aithe-table\n striped\n .columns=${[\n { id: 'name', title: t('theme.preview.name'), sortable: true },\n { id: 'role', title: t('theme.preview.role') },\n { id: 'status', title: t('theme.preview.status'), intent: 'success' },\n ]}\n .data=${[\n {\n id: 1,\n name: 'Alice',\n role: t('theme.preview.admin'),\n status: t('theme.preview.active'),\n },\n {\n id: 2,\n name: 'Bob',\n role: t('theme.preview.editor'),\n status: t('theme.preview.active'),\n },\n {\n id: 3,\n name: 'Carol',\n role: t('theme.preview.viewer'),\n status: t('theme.preview.inactive'),\n },\n ]}\n ></aithe-table>\n </div>\n </div>\n </main>\n </div>\n `;\n }\n}\n","/**\n * aithe-locale-switch 组件\n * Locale switcher dropdown for toggling between en-US and zh-CN.\n *\n * 基于 floating overlay 模式实现,支持 placement 属性控制弹出方向。\n * Built on the floating overlay pattern, supports placement prop for dropdown direction.\n */\nimport { css, html } from 'lit';\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { type AithePlacement, computeFloatingPosition } from '../../core/floating';\nimport { aitheBaseStyles } from '../../core/styles';\nimport {\n type AitheLocale,\n getAitheLocale,\n onAitheLocaleChange,\n setAitheLocale,\n t,\n} from '../../core/i18n';\n\n/** locale 选项数据 / Locale option data */\ninterface LocaleOption {\n locale: AitheLocale;\n}\n\n/** 预定义 locale 选项列表 / Predefined locale options */\nconst LOCALE_OPTIONS: LocaleOption[] = [{ locale: 'en-US' }, { locale: 'zh-CN' }];\n\n@customElement('aithe-locale-switch')\nexport class AitheLocaleSwitch extends AitheElement {\n @property({ type: String }) placement: AithePlacement = 'bottom-end';\n\n @state() private open = false;\n @state() private currentLocale: AitheLocale = getAitheLocale();\n\n @query('.trigger') private readonly triggerEl?: HTMLElement;\n @query('.overlay') private readonly overlayEl?: HTMLElement;\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: inline-flex;\n position: relative;\n }\n\n .trigger {\n display: inline-flex;\n align-items: center;\n gap: var(--aithe-space-2);\n min-height: 34px;\n padding: 0 var(--aithe-space-3);\n border: 1px solid var(--aithe-color-border);\n border-radius: var(--aithe-radius-full);\n background: var(--aithe-color-surface);\n color: var(--aithe-color-text);\n cursor: pointer;\n font-size: var(--aithe-font-size-sm);\n font-family: inherit;\n transition:\n border-color 0.15s,\n background 0.15s;\n }\n\n .trigger:hover {\n border-color: var(--aithe-primary-6);\n }\n\n .icon {\n font-size: 14px;\n color: var(--aithe-color-text-muted);\n }\n\n .arrow {\n font-size: 10px;\n color: var(--aithe-color-text-muted);\n transition: transform var(--aithe-duration-fast) var(--aithe-ease-standard);\n }\n\n .arrow.open {\n transform: rotate(180deg);\n }\n\n .overlay {\n position: fixed;\n z-index: var(--aithe-z-dropdown);\n width: max-content;\n min-width: 140px;\n padding: var(--aithe-space-2);\n border: 1px solid var(--aithe-color-border);\n border-radius: var(--aithe-radius-lg);\n background: var(--aithe-color-surface-elevated);\n box-shadow: var(--aithe-shadow-3);\n }\n\n .option-list {\n margin: 0;\n padding: 0;\n list-style: none;\n display: grid;\n gap: var(--aithe-space-1);\n }\n\n .option {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--aithe-space-4);\n width: 100%;\n min-height: 36px;\n padding: 0 var(--aithe-space-3);\n border: none;\n border-radius: var(--aithe-radius-md);\n background: transparent;\n color: var(--aithe-color-text);\n text-align: left;\n cursor: pointer;\n font-size: var(--aithe-font-size-sm);\n font-family: inherit;\n }\n\n .option:hover,\n .option:focus-visible {\n background: var(--aithe-color-surface-muted);\n outline: none;\n }\n\n .option.active {\n background: var(--aithe-color-surface-muted);\n color: var(--aithe-primary-7);\n font-weight: var(--aithe-font-weight-semibold);\n }\n\n .check {\n width: 16px;\n color: var(--aithe-primary-7);\n font-size: 14px;\n }\n `,\n ];\n\n private readonly handleViewportChange = () => this.updatePosition();\n\n private unsubscribe?: () => void;\n\n connectedCallback(): void {\n super.connectedCallback();\n document.addEventListener('mousedown', this.handleOutsideClick);\n this.unsubscribe = onAitheLocaleChange(() => {\n this.currentLocale = getAitheLocale();\n });\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n document.removeEventListener('mousedown', this.handleOutsideClick);\n this.unbindViewport();\n this.unsubscribe?.();\n }\n\n protected updated(): void {\n if (this.open) {\n queueMicrotask(() => this.updatePosition());\n }\n }\n\n private bindViewport(): void {\n window.addEventListener('resize', this.handleViewportChange);\n window.addEventListener('scroll', this.handleViewportChange, true);\n }\n\n private unbindViewport(): void {\n window.removeEventListener('resize', this.handleViewportChange);\n window.removeEventListener('scroll', this.handleViewportChange, true);\n }\n\n private updatePosition(): void {\n const overlay = this.overlayEl;\n const trigger = this.triggerEl;\n if (!overlay || !trigger || !this.open) return;\n\n const anchorRect = trigger.getBoundingClientRect();\n const overlayRect = overlay.getBoundingClientRect();\n const pos = computeFloatingPosition(anchorRect, overlayRect, this.placement, { offset: 8 });\n\n overlay.style.left = `${pos.left}px`;\n overlay.style.top = `${pos.top}px`;\n }\n\n private readonly handleOutsideClick = (event: MouseEvent): void => {\n if (!this.open) return;\n if (!event.composedPath().includes(this)) {\n this.open = false;\n }\n };\n\n private readonly toggleOpen = (): void => {\n this.open = !this.open;\n if (this.open) {\n this.bindViewport();\n } else {\n this.unbindViewport();\n }\n };\n\n private readonly handleSelect = (locale: AitheLocale): void => {\n setAitheLocale(locale);\n this.open = false;\n this.unbindViewport();\n };\n\n private getLocaleLabel(locale: AitheLocale): string {\n return locale === 'en-US' ? t('localeSwitch.english') : t('localeSwitch.chinese');\n }\n\n render() {\n const displayLabel = this.getLocaleLabel(this.currentLocale);\n\n return html`\n <button class=\"trigger\" type=\"button\" @click=${this.toggleOpen}>\n <span class=\"icon\">🌐</span>\n ${displayLabel}\n <span class=${classMap({ arrow: true, open: this.open })}>▾</span>\n </button>\n ${this.open\n ? html`\n <div class=\"overlay\" role=\"menu\">\n <ul class=\"option-list\">\n ${LOCALE_OPTIONS.map(\n (option) => html`\n <li>\n <button\n class=${classMap({\n option: true,\n active: option.locale === this.currentLocale,\n })}\n type=\"button\"\n role=\"menuitem\"\n @click=${() => this.handleSelect(option.locale)}\n >\n <span>${this.getLocaleLabel(option.locale)}</span>\n ${option.locale === this.currentLocale\n ? html`\n <span class=\"check\">✓</span>\n `\n : ''}\n </button>\n </li>\n `,\n )}\n </ul>\n </div>\n `\n : ''}\n `;\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property, query } from 'lit/decorators.js';\n\nimport { AitheElement } from '../../core/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\n\n/**\n * Checkbox input with label slot and indeterminate state.\n * 复选框输入组件,支持标签插槽和半选状态。\n *\n * @slot - Default slot for checkbox label text. 复选框标签文本。\n * @fires aithe-change - Emitted when checked state changes (standalone). 选中状态变更时触发(独立使用)。\n * @fires aithe-checkbox-toggle - Emitted inside checkbox-group for group coordination. 在复选框组内触发以协调状态。\n * @example\n * ```html\n * <aithe-checkbox value=\"opt1\" checked>Option 1</aithe-checkbox>\n * ```\n */\n@customElement('aithe-checkbox')\nexport class AitheCheckbox extends AitheElement {\n /** Whether the checkbox is checked. 是否选中。 */\n @property({ type: Boolean, reflect: true }) checked = false;\n /** Whether the checkbox is in indeterminate (partial) state. 是否处于半选(不确定)状态。 */\n @property({ type: Boolean }) indeterminate = false;\n /** Whether the checkbox is disabled. 是否禁用。 */\n @property({ type: Boolean, reflect: true }) disabled = false;\n /** Value submitted when checked (used in groups). 选中时提交的值(在组中使用)。 */\n @property({ type: String }) value = '';\n /** Name attribute for form submission. 表单提交的 name 属性。 */\n @property({ type: String }) name = '';\n /** Disabled state propagated from parent checkbox-group. 从父级复选框组传递的禁用状态。 */\n @property({ attribute: false }) groupDisabled = false;\n\n @query('input') private input?: HTMLInputElement;\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: inline-flex;\n }\n\n label {\n display: inline-flex;\n align-items: center;\n gap: var(--aithe-space-3);\n cursor: pointer;\n }\n\n label.disabled {\n opacity: 0.56;\n cursor: not-allowed;\n }\n\n input {\n width: 16px;\n height: 16px;\n accent-color: var(--aithe-primary-6);\n }\n `,\n ];\n\n /** Syncs the native input indeterminate property. 同步原生 input 的 indeterminate 属性。 */\n updated(): void {\n if (this.input) {\n this.input.indeterminate = this.indeterminate;\n }\n }\n\n /** Handles native change event and emits appropriate custom event. 处理原生变更事件并触发自定义事件。 */\n private readonly handleChange = (event: Event): void => {\n const checked = (event.currentTarget as HTMLInputElement).checked;\n\n if (this.closest('aithe-checkbox-group')) {\n this.emit('aithe-checkbox-toggle', { checked, value: this.value });\n return;\n }\n\n this.checked = checked;\n this.indeterminate = false;\n this.emit('aithe-change', { checked: this.checked, value: this.value });\n };\n\n render() {\n const disabled = this.disabled || this.groupDisabled;\n\n return html`\n <label class=${disabled ? 'disabled' : ''}>\n <input\n .indeterminate=${this.indeterminate}\n ?checked=${this.checked}\n ?disabled=${disabled}\n name=${this.name}\n type=\"checkbox\"\n @change=${this.handleChange}\n />\n <slot></slot>\n </label>\n `;\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property, queryAssignedElements } from 'lit/decorators.js';\n\nimport { AitheElement } from '../../core/aithe-element';\nimport type { AitheCheckbox } from './checkbox';\nimport { aitheBaseStyles } from '../../core/styles';\n\n/**\n * Checkbox group container that manages collective checked values.\n * 复选框组容器,管理所有子复选框的选中值集合。\n *\n * @slot - Default slot for aithe-checkbox children. 子复选框内容。\n * @fires aithe-change - Emitted when the group value changes, with `value: string[]`. 组值变更时触发。\n * @example\n * ```html\n * <aithe-checkbox-group value='[\"a\",\"b\"]' name=\"options\">\n * <aithe-checkbox value=\"a\">Option A</aithe-checkbox>\n * <aithe-checkbox value=\"b\">Option B</aithe-checkbox>\n * </aithe-checkbox-group>\n * ```\n */\n@customElement('aithe-checkbox-group')\nexport class AitheCheckboxGroup extends AitheElement {\n /** JSON string of the current checked values. 当前选中值的 JSON 字符串。 */\n @property({ type: String, attribute: 'value' }) valueJson = '';\n /** Array of currently checked values. 当前选中值数组。 */\n @property({ attribute: false }) value: string[] = [];\n /** Whether all child checkboxes are disabled. 是否禁用所有子复选框。 */\n @property({ type: Boolean }) disabled = false;\n /** Name attribute propagated to child checkboxes. 传递给子复选框的 name 属性。 */\n @property({ type: String }) name = '';\n\n @queryAssignedElements() private nodes!: Element[];\n\n /** Parses valueJson into the value array on property change. 属性变更时将 valueJson 解析为 value 数组。 */\n protected willUpdate(changed: Map<string, unknown>): void {\n if (changed.has('valueJson') && this.valueJson) {\n try {\n this.value = JSON.parse(this.valueJson);\n } catch {\n this.value = [];\n }\n }\n }\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: inline-flex;\n flex-wrap: wrap;\n gap: var(--aithe-space-4);\n }\n `,\n ];\n\n connectedCallback(): void {\n super.connectedCallback();\n this.addEventListener('aithe-checkbox-toggle', this.handleToggle as EventListener);\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener('aithe-checkbox-toggle', this.handleToggle as EventListener);\n }\n\n updated(changed: Map<string, unknown>): void {\n if (changed.has('value') || changed.has('disabled') || changed.has('name')) {\n this.syncChildren();\n }\n }\n\n /** Syncs checked/disabled/name state to child checkboxes. 将选中/禁用/name 状态同步到子复选框。 */\n private readonly syncChildren = (): void => {\n const checkboxes = this.nodes.filter(\n (node): node is AitheCheckbox =>\n node instanceof HTMLElement && node.tagName.toLowerCase() === 'aithe-checkbox',\n );\n\n checkboxes.forEach((checkbox) => {\n checkbox.checked = this.value.includes(checkbox.value);\n checkbox.groupDisabled = this.disabled;\n checkbox.name = this.name || checkbox.name;\n });\n };\n\n /** Handles child checkbox toggle and updates group value. 处理子复选框切换并更新组值。 */\n private readonly handleToggle = (\n event: CustomEvent<{ checked: boolean; value: string }>,\n ): void => {\n event.stopPropagation();\n const next = new Set(this.value);\n\n if (event.detail.checked) {\n next.add(event.detail.value);\n } else {\n next.delete(event.detail.value);\n }\n\n this.value = Array.from(next);\n this.syncChildren();\n this.emit('aithe-change', { value: this.value });\n };\n\n render() {\n return html`\n <slot @slotchange=${this.syncChildren}></slot>\n `;\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport { AitheElement } from '../../core/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\n\n/**\n * Radio button input with label slot.\n * 单选按钮输入组件,支持标签插槽。\n *\n * @slot - Default slot for radio label text. 单选按钮标签文本。\n * @fires aithe-change - Emitted when checked state changes (standalone). 选中状态变更时触发(独立使用)。\n * @fires aithe-radio-toggle - Emitted inside radio-group for group coordination. 在单选组内触发以协调状态。\n * @example\n * ```html\n * <aithe-radio value=\"a\" name=\"choice\">Option A</aithe-radio>\n * ```\n */\n@customElement('aithe-radio')\nexport class AitheRadio extends AitheElement {\n /** Whether the radio is checked. 是否选中。 */\n @property({ type: Boolean, reflect: true }) checked = false;\n /** Whether the radio is disabled. 是否禁用。 */\n @property({ type: Boolean, reflect: true }) disabled = false;\n /** Value submitted when selected (used in groups). 选中时提交的值(在组中使用)。 */\n @property({ type: String }) value = '';\n /** Name attribute for form submission. 表单提交的 name 属性。 */\n @property({ type: String }) name = '';\n /** Disabled state propagated from parent radio-group. 从父级单选组传递的禁用状态。 */\n @property({ attribute: false }) groupDisabled = false;\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: inline-flex;\n }\n\n label {\n display: inline-flex;\n align-items: center;\n gap: var(--aithe-space-3);\n cursor: pointer;\n }\n\n label.disabled {\n opacity: 0.56;\n cursor: not-allowed;\n }\n\n input {\n width: 16px;\n height: 16px;\n accent-color: var(--aithe-primary-6);\n }\n `,\n ];\n\n /** Handles native change event and emits appropriate custom event. 处理原生变更事件并触发自定义事件。 */\n private readonly handleChange = (event: Event): void => {\n const checked = (event.currentTarget as HTMLInputElement).checked;\n\n if (this.closest('aithe-radio-group')) {\n this.emit('aithe-radio-toggle', { checked, value: this.value });\n return;\n }\n\n this.checked = checked;\n this.emit('aithe-change', { checked: this.checked, value: this.value });\n };\n\n render() {\n const disabled = this.disabled || this.groupDisabled;\n\n return html`\n <label class=${disabled ? 'disabled' : ''}>\n <input\n ?checked=${this.checked}\n ?disabled=${disabled}\n name=${this.name}\n type=\"radio\"\n value=${this.value}\n @change=${this.handleChange}\n />\n <slot></slot>\n </label>\n `;\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property, queryAssignedElements } from 'lit/decorators.js';\n\nimport { AitheElement } from '../../core/aithe-element';\nimport type { AitheRadio } from './radio';\nimport { aitheBaseStyles } from '../../core/styles';\n\n/**\n * Radio group container that manages the currently selected value.\n * 单选组容器,管理当前选中的值。\n *\n * @slot - Default slot for aithe-radio children. 子单选按钮内容。\n * @fires aithe-change - Emitted when the group value changes, with `value: string`. 组值变更时触发。\n * @example\n * ```html\n * <aithe-radio-group value=\"a\" name=\"choice\">\n * <aithe-radio value=\"a\">Option A</aithe-radio>\n * <aithe-radio value=\"b\">Option B</aithe-radio>\n * </aithe-radio-group>\n * ```\n */\n@customElement('aithe-radio-group')\nexport class AitheRadioGroup extends AitheElement {\n /** Currently selected radio value. 当前选中的单选值。 */\n @property({ type: String }) value = '';\n /** Whether all child radios are disabled. 是否禁用所有子单选按钮。 */\n @property({ type: Boolean }) disabled = false;\n /** Name attribute propagated to child radios. 传递给子单选按钮的 name 属性。 */\n @property({ type: String }) name = '';\n\n @queryAssignedElements() private nodes!: Element[];\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: inline-flex;\n flex-wrap: wrap;\n gap: var(--aithe-space-4);\n }\n `,\n ];\n\n connectedCallback(): void {\n super.connectedCallback();\n this.addEventListener('aithe-radio-toggle', this.handleToggle as EventListener);\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener('aithe-radio-toggle', this.handleToggle as EventListener);\n }\n\n updated(changed: Map<string, unknown>): void {\n if (changed.has('value') || changed.has('disabled') || changed.has('name')) {\n this.syncChildren();\n }\n }\n\n /** Syncs checked/disabled/name state to child radios. 将选中/禁用/name 状态同步到子单选按钮。 */\n private readonly syncChildren = (): void => {\n const radios = this.nodes.filter(\n (node): node is AitheRadio =>\n node instanceof HTMLElement && node.tagName.toLowerCase() === 'aithe-radio',\n );\n\n radios.forEach((radio) => {\n radio.checked = radio.value === this.value;\n radio.groupDisabled = this.disabled;\n radio.name = this.name || radio.name;\n });\n };\n\n /** Handles child radio toggle and updates group value. 处理子单选按钮切换并更新组值。 */\n private readonly handleToggle = (\n event: CustomEvent<{ checked: boolean; value: string }>,\n ): void => {\n event.stopPropagation();\n if (!event.detail.checked) {\n return;\n }\n\n this.value = event.detail.value;\n this.syncChildren();\n this.emit('aithe-change', { value: this.value });\n };\n\n render() {\n return html`\n <slot @slotchange=${this.syncChildren}></slot>\n `;\n }\n}\n","import type { PropertyValues } from 'lit';\nimport { property } from 'lit/decorators.js';\n\nimport { AitheElement } from './aithe-element';\nimport { type AithePlacement, computeFloatingPosition } from './floating';\n\n/**\n * Abstract base class for components that position a floating panel\n * relative to an anchor element (e.g. tooltips, dropdowns, popovers).\n * 抽象基类,用于相对于锚点元素定位浮动面板的组件(如工具提示、下拉菜单、弹出框)。\n */\nexport abstract class AitheAnchoredOverlayElement extends AitheElement {\n /** Whether the overlay panel is visible. 叠加面板是否可见。 */\n @property({ type: Boolean, reflect: true }) open = false;\n /** Preferred placement of the overlay relative to the anchor. 叠加层相对于锚点的首选放置位置。 */\n @property({ type: String }) placement: AithePlacement = 'bottom-start';\n /** Pixel gap between anchor and overlay. 锚点与叠加层之间的像素间距。 */\n @property({ type: Number }) offset = 8;\n\n /** Recompute position on viewport resize / scroll. 在视口调整/滚动时重新计算位置。 */\n private readonly handleViewportChange = () => this.updateFloatingPosition();\n\n /** The floating panel element that gets positioned. 需要定位的浮动面板元素。 */\n protected abstract get panelElement(): HTMLElement | null;\n\n /**\n * Resolve the anchor element from the default slot.\n * 从默认插槽解析锚点元素。\n */\n protected get anchorElement(): HTMLElement {\n const defaultSlot = this.shadowRoot?.querySelector(\n 'slot:not([name])',\n ) as HTMLSlotElement | null;\n\n const assigned = defaultSlot?.assignedElements({ flatten: true }) ?? [];\n return (assigned[0] as HTMLElement | undefined) ?? this;\n }\n\n /** Unbind viewport listeners on disconnect. 断开连接时解绑视口监听器。 */\n disconnectedCallback(): void {\n super.disconnectedCallback();\n this.unbindFloating();\n }\n\n /**\n * Bind/unbind floating listeners when `open` changes, and recompute\n * position when placement or offset changes while open.\n * 当 `open` 变化时绑定/解绑浮动监听器,并在打开状态下放置或偏移变化时重新计算位置。\n */\n protected updated(changed: PropertyValues<this>): void {\n super.updated(changed);\n\n if (changed.has('open')) {\n if (this.open) {\n this.bindFloating();\n } else {\n this.unbindFloating();\n }\n }\n\n if (this.open && (changed.has('open') || changed.has('placement') || changed.has('offset'))) {\n queueMicrotask(() => this.updateFloatingPosition());\n }\n }\n\n /**\n * Recompute the floating panel position based on current anchor and overlay rects.\n * 根据当前锚点和叠加层矩形重新计算浮动面板位置。\n */\n protected updateFloatingPosition(): void {\n const panel = this.panelElement;\n if (!panel || !this.open) {\n return;\n }\n\n const anchor = this.anchorElement;\n const anchorRect = anchor.getBoundingClientRect();\n const overlayRect = panel.getBoundingClientRect();\n const position = computeFloatingPosition(anchorRect, overlayRect, this.placement, {\n offset: this.offset,\n });\n\n panel.style.left = `${position.left}px`;\n panel.style.top = `${position.top}px`;\n }\n\n /** Bind viewport resize/scroll listeners. 绑定视口调整/滚动监听器。 */\n private bindFloating(): void {\n window.addEventListener('resize', this.handleViewportChange);\n window.addEventListener('scroll', this.handleViewportChange, true);\n }\n\n /** Unbind viewport resize/scroll listeners. 解绑视口调整/滚动监听器。 */\n private unbindFloating(): void {\n window.removeEventListener('resize', this.handleViewportChange);\n window.removeEventListener('scroll', this.handleViewportChange, true);\n }\n}\n","import type { PropertyValues } from 'lit';\nimport { css, html, nothing } from 'lit';\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\n\nimport { AitheAnchoredOverlayElement } from '../../core/anchored-overlay';\nimport type { AitheSelectOption } from '../../core/types';\nimport { aitheBaseStyles, aithePanelStyles, aitheScrollbarStyles } from '../../core/styles';\nimport { t } from '../../core/i18n';\n\n/**\n * Dropdown select component with search, clear, and keyboard navigation.\n * 下拉选择组件,支持搜索、清除和键盘导航。\n *\n * @slot - Default slot (unused; content driven by options). 默认插槽(未使用,内容由 options 控制)。\n * @fires aithe-change - Emitted when a value is selected, with `{ option, value }`. 选中值变更时触发。\n * @fires aithe-clear - Emitted when the value is cleared. 值被清除时触发。\n * @fires aithe-open-change - Emitted when the dropdown opens or closes. 下拉框开关状态变更时触发。\n * @example\n * ```html\n * <aithe-select\n * options='[{\"id\":\"a\",\"label\":\"Option A\"},{\"id\":\"b\",\"label\":\"Option B\"}]'\n * searchable\n * clearable\n * ></aithe-select>\n * ```\n */\n@customElement('aithe-select')\nexport class AitheSelect extends AitheAnchoredOverlayElement {\n /** JSON string of select options. 选项的 JSON 字符串。 */\n @property({ type: String, attribute: 'options' }) optionsJson = '';\n /** Array of select option objects. 选项对象数组。 */\n @property({ attribute: false }) options: AitheSelectOption[] = [];\n /** Currently selected value. 当前选中的值。 */\n @property({ type: String }) value = '';\n /** Display title for the select (shown as tooltip). 下拉选择的显示标题(作为工具提示)。 */\n @property({ type: String }) title = '';\n /** Icon name to display before the selected value. 在选中值前显示的图标名称。 */\n @property({ type: String }) icon = '';\n /** Placeholder text shown when no value is selected. 无选中值时的占位文本。 */\n @property({ type: String }) placeholder = '';\n /** Whether the select supports search/filter. 是否支持搜索过滤。 */\n @property({ type: Boolean }) searchable = false;\n /** Whether the selected value can be cleared. 是否允许清除选中值。 */\n @property({ type: Boolean }) clearable = false;\n /** Whether the select is disabled. 是否禁用。 */\n @property({ type: Boolean, reflect: true }) disabled = false;\n /** Dropdown panel placement. 下拉面板位置。 */\n @property({ type: String }) placement: 'bottom-start' | 'top-start' = 'bottom-start';\n\n @query('.trigger') private triggerElement?: HTMLElement;\n @query('.panel') private panel?: HTMLElement;\n @query('.search-input') private searchInput?: HTMLInputElement;\n\n @state() private query = '';\n @state() private activeIndex = -1;\n\n /** Parses optionsJson into the options array on property change. 属性变更时将 optionsJson 解析为 options 数组。 */\n protected willUpdate(changed: PropertyValues<this>): void {\n if (changed.has('optionsJson') && this.optionsJson) {\n try {\n this.options = JSON.parse(this.optionsJson);\n } catch {\n this.options = [];\n }\n }\n }\n\n static readonly styles = [\n aitheBaseStyles,\n aithePanelStyles('.panel'),\n aitheScrollbarStyles,\n css`\n :host {\n display: inline-flex;\n width: 100%;\n }\n\n .trigger {\n display: inline-flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--aithe-space-3);\n min-width: 0;\n width: 100%;\n min-height: var(--aithe-control-height-md);\n padding: 0 var(--aithe-space-4);\n border: 1px solid var(--aithe-color-border);\n border-radius: var(--aithe-radius-md);\n background: var(--aithe-color-surface-elevated);\n cursor: pointer;\n transition:\n border-color var(--aithe-duration-fast) var(--aithe-ease-standard),\n box-shadow var(--aithe-duration-fast) var(--aithe-ease-standard);\n }\n\n .trigger.open {\n border-color: var(--aithe-primary-5);\n box-shadow: 0 0 0 4px var(--aithe-color-focus-ring);\n }\n\n .trigger.disabled {\n opacity: 0.56;\n cursor: not-allowed;\n background: var(--aithe-color-surface-muted);\n }\n\n .value-icon {\n flex-shrink: 0;\n color: var(--aithe-color-text-muted);\n }\n\n .value {\n display: flex;\n align-items: center;\n gap: var(--aithe-space-2);\n min-width: 0;\n flex: 1;\n overflow: hidden;\n }\n\n .value > span {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .placeholder {\n color: var(--aithe-color-text-subtle);\n }\n\n .search-input {\n width: 100%;\n border: none;\n outline: none;\n background: transparent;\n color: inherit;\n }\n\n .actions {\n display: inline-flex;\n align-items: center;\n flex-shrink: 0;\n gap: var(--aithe-space-2);\n color: var(--aithe-color-text-subtle);\n }\n\n .action {\n border: none;\n background: transparent;\n color: inherit;\n cursor: pointer;\n }\n\n .panel {\n position: fixed;\n z-index: var(--aithe-z-dropdown);\n max-height: min(320px, 60vh);\n overflow: auto;\n padding: var(--aithe-space-2);\n }\n\n .option {\n display: flex;\n align-items: center;\n gap: var(--aithe-space-3);\n width: 100%;\n padding: var(--aithe-space-3);\n border: none;\n border-radius: var(--aithe-radius-md);\n background: transparent;\n color: var(--aithe-color-text);\n text-align: left;\n cursor: pointer;\n }\n\n .option:hover:not(:disabled),\n .option.active {\n background: var(--aithe-color-surface-muted);\n }\n\n .option:disabled {\n opacity: 0.48;\n cursor: not-allowed;\n }\n\n .option.primary {\n color: var(--aithe-primary-7);\n }\n .option.success {\n color: var(--aithe-success-7);\n }\n .option.warning {\n color: var(--aithe-warning-7);\n }\n .option.danger {\n color: var(--aithe-danger-7);\n }\n\n .option-icon {\n flex-shrink: 0;\n color: var(--aithe-color-text-muted);\n margin-top: 2px;\n }\n\n .desc {\n color: var(--aithe-color-text-subtle);\n font-size: var(--aithe-font-size-xs);\n }\n\n .empty {\n padding: var(--aithe-space-4);\n color: var(--aithe-color-text-muted);\n text-align: center;\n }\n `,\n ];\n\n protected get panelElement(): HTMLElement | null {\n return this.panel ?? null;\n }\n\n protected get anchorElement(): HTMLElement {\n return this.triggerElement ?? this;\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n document.addEventListener('mousedown', this.handleOutsidePointer);\n document.addEventListener('keydown', this.handleDocumentKeydown);\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n document.removeEventListener('mousedown', this.handleOutsidePointer);\n document.removeEventListener('keydown', this.handleDocumentKeydown);\n }\n\n protected updated(changed: PropertyValues<this>): void {\n super.updated(changed);\n\n if (changed.has('open')) {\n this.emit('aithe-open-change', { open: this.open });\n\n if (this.open) {\n this.activeIndex = this.filteredOptions.findIndex((option) => option.id === this.value);\n queueMicrotask(() => {\n this.updateFloatingPosition();\n this.panel?.style.setProperty(\n 'min-width',\n `${this.triggerElement?.getBoundingClientRect().width ?? 220}px`,\n );\n if (this.searchable) {\n this.searchInput?.focus();\n }\n });\n } else {\n this.query = '';\n }\n }\n }\n\n /** Returns the option object matching the current value. 返回与当前值匹配的选项对象。 */\n private get selectedOption(): AitheSelectOption | undefined {\n return this.options.find((option) => option.id === this.value);\n }\n\n /** Filters options by search query keyword. 根据搜索关键词过滤选项。 */\n private get filteredOptions(): AitheSelectOption[] {\n const keyword = this.query.trim().toLowerCase();\n if (!keyword) {\n return this.options;\n }\n\n return this.options.filter(\n (option) =>\n option.label.toLowerCase().includes(keyword) ||\n option.description?.toLowerCase().includes(keyword),\n );\n }\n\n /** Closes dropdown on outside pointer events. 点击外部时关闭下拉框。 */\n private readonly handleOutsidePointer = (event: MouseEvent): void => {\n if (this.open && !event.composedPath().includes(this)) {\n this.open = false;\n }\n };\n\n /** Closes dropdown on Escape key. 按 Escape 键关闭下拉框。 */\n private readonly handleDocumentKeydown = (event: KeyboardEvent): void => {\n if (event.key === 'Escape' && this.open) {\n this.open = false;\n }\n };\n\n /** Toggles the dropdown open state. 切换下拉框开关状态。 */\n private readonly toggleOpen = (): void => {\n if (this.disabled) {\n return;\n }\n\n this.open = !this.open;\n };\n\n /** Selects an option, closes dropdown, and emits change event. 选中选项、关闭下拉框并触发变更事件。 */\n private selectOption(option: AitheSelectOption): void {\n if (option.disabled) {\n return;\n }\n\n this.value = option.id;\n this.open = false;\n this.query = '';\n this.emit('aithe-change', { option, value: this.value });\n }\n\n /** Clears the current value and emits clear + change events. 清除当前值并触发清除和变更事件。 */\n private readonly clearValue = (event: MouseEvent): void => {\n event.stopPropagation();\n if (this.disabled) {\n return;\n }\n\n this.value = '';\n this.query = '';\n this.emit('aithe-clear');\n this.emit('aithe-change', { option: undefined, value: this.value });\n };\n\n /** Handles keyboard navigation for the trigger element. 处理触发元素的键盘导航。 */\n private readonly handleTriggerKeydown = (event: KeyboardEvent): void => {\n if (this.disabled) {\n return;\n }\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n if (!this.open) {\n this.open = true;\n return;\n }\n\n this.activeIndex = Math.min(this.activeIndex + 1, this.filteredOptions.length - 1);\n }\n\n if (event.key === 'ArrowUp' && this.open) {\n event.preventDefault();\n this.activeIndex = Math.max(this.activeIndex - 1, 0);\n }\n\n if ((event.key === 'Enter' || event.key === ' ') && !this.open) {\n event.preventDefault();\n this.open = true;\n return;\n }\n\n if (event.key === 'Enter' && this.open) {\n event.preventDefault();\n const option = this.filteredOptions[this.activeIndex];\n if (option) {\n this.selectOption(option);\n }\n }\n };\n\n render() {\n const selected = this.selectedOption;\n const selectedLabel = selected\n ? html`\n <span>${selected.label}</span>\n `\n : html`\n <span class=\"placeholder\">${this.placeholder || t('form.select.placeholder')}</span>\n `;\n const valueContent =\n this.searchable && this.open\n ? html`\n <input\n class=\"search-input\"\n .value=${this.query}\n aria-label=${t('form.select.searchAriaLabel')}\n placeholder=${t('form.select.searchPlaceholder')}\n type=\"text\"\n @click=${(event: MouseEvent) => event.stopPropagation()}\n @input=${(event: Event) => {\n this.query = (event.currentTarget as HTMLInputElement).value;\n this.activeIndex = 0;\n }}\n />\n `\n : selectedLabel;\n\n return html`\n <div\n class=${classMap({\n trigger: true,\n open: this.open,\n disabled: this.disabled,\n })}\n aria-expanded=${String(this.open)}\n role=\"combobox\"\n title=${this.title}\n tabindex=${this.disabled ? -1 : 0}\n @click=${this.toggleOpen}\n @keydown=${this.handleTriggerKeydown}\n >\n <div class=\"value\">\n ${this.icon\n ? html`\n <aithe-icon class=\"value-icon\" name=${this.icon} size=\"16\"></aithe-icon>\n `\n : nothing}\n ${valueContent}\n </div>\n <span class=\"actions\">\n ${this.clearable && this.value\n ? html`\n <button\n class=\"action\"\n type=\"button\"\n aria-label=${t('form.select.clearAriaLabel')}\n @click=${this.clearValue}\n >\n ×\n </button>\n `\n : null}\n <span aria-hidden=\"true\">${this.open ? '▴' : '▾'}</span>\n </span>\n </div>\n ${this.open\n ? html`\n <div class=\"panel\" role=\"listbox\">${this.renderOptionList()}</div>\n `\n : null}\n `;\n }\n\n private renderOptionList() {\n if (!this.filteredOptions.length) {\n return [\n html`\n <div class=\"empty\">${t('form.select.emptyText')}</div>\n `,\n ];\n }\n return this.filteredOptions.map((option, index) => {\n const intentClass = option.intent && option.intent !== 'default' ? option.intent : '';\n const optionIcon = option.icon\n ? html`\n <aithe-icon class=\"option-icon\" name=${option.icon} size=\"20\"></aithe-icon>\n `\n : nothing;\n return html`\n <button\n class=${classMap({\n option: true,\n active: index === this.activeIndex,\n [intentClass]: Boolean(intentClass),\n })}\n ?disabled=${option.disabled}\n type=\"button\"\n @click=${() => this.selectOption(option)}\n @mouseenter=${() => (this.activeIndex = index)}\n >\n ${optionIcon}\n <span style=\"display:grid;gap:2px;flex:1;min-width:0;\">\n <span style=\"overflow:hidden;text-overflow:ellipsis;white-space:nowrap;\">\n ${option.label}\n </span>\n ${option.description\n ? html`\n <span class=\"desc\">${option.description}</span>\n `\n : null}\n </span>\n </button>\n `;\n });\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\n\nimport { AitheElement } from '../../core/aithe-element';\nimport type { AitheIntent } from '../../core/types';\nimport { aitheBaseStyles } from '../../core/styles';\n\n/**\n * Toggle switch with size and color variants.\n * 开关切换组件,支持尺寸和颜色变体。\n *\n * @slot - Default slot (unused; switch is self-contained). 默认插槽(未使用,开关为自包含组件)。\n * @fires aithe-change - Emitted when checked state changes, with `{ checked }`. 选中状态变更时触发。\n * @example\n * ```html\n * <aithe-switch checked size=\"md\" type=\"primary\"></aithe-switch>\n * ```\n */\n@customElement('aithe-switch')\nexport class AitheSwitch extends AitheElement {\n /** Whether the switch is checked (on). 是否选中(开启)。 */\n @property({ type: Boolean, reflect: true }) checked = false;\n /** Whether the switch is disabled. 是否禁用。 */\n @property({ type: Boolean, reflect: true }) disabled = false;\n /** Switch size preset. 开关尺寸预设。 */\n @property({ type: String }) size: 'sm' | 'md' | 'lg' = 'md';\n /** Color intent when checked. 选中时的颜色意图。 */\n @property({ type: String }) type: AitheIntent = 'primary';\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: inline-flex;\n }\n\n button {\n position: relative;\n display: inline-flex;\n align-items: center;\n border: none;\n border-radius: var(--aithe-radius-full);\n background: var(--aithe-neutral-4);\n cursor: pointer;\n transition: background var(--aithe-duration-fast) var(--aithe-ease-standard);\n }\n\n button.disabled {\n opacity: 0.56;\n cursor: not-allowed;\n }\n\n .sm {\n width: 36px;\n height: 20px;\n }\n\n .md {\n width: 44px;\n height: 24px;\n }\n\n .lg {\n width: 54px;\n height: 30px;\n }\n\n .thumb {\n position: absolute;\n left: 3px;\n width: calc(50% - 3px);\n height: calc(100% - 6px);\n border-radius: var(--aithe-radius-full);\n background: white;\n box-shadow: var(--aithe-shadow-1);\n transition: transform var(--aithe-duration-fast) var(--aithe-ease-standard);\n }\n\n .checked .thumb {\n transform: translateX(100%);\n }\n\n .checked.primary {\n background: var(--aithe-primary-6);\n }\n\n .checked.success {\n background: var(--aithe-success-6);\n }\n\n .checked.warning {\n background: var(--aithe-warning-5);\n }\n\n .checked.danger {\n background: var(--aithe-danger-6);\n }\n\n .checked.default {\n background: var(--aithe-neutral-7);\n }\n `,\n ];\n\n /** Toggles the checked state and emits change event. 切换选中状态并触发变更事件。 */\n private readonly toggleSwitch = (): void => {\n if (this.disabled) {\n return;\n }\n\n this.checked = !this.checked;\n this.emit('aithe-change', { checked: this.checked });\n };\n\n render() {\n return html`\n <button\n class=${classMap({\n [this.size]: true,\n [this.type]: true,\n checked: this.checked,\n disabled: this.disabled,\n })}\n aria-checked=${String(this.checked)}\n role=\"switch\"\n type=\"button\"\n @click=${this.toggleSwitch}\n >\n <span class=\"thumb\"></span>\n </button>\n `;\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\n\n/**\n * Color picker built on native color input with optional alpha channel.\n * 基于原生颜色输入的颜色选择器,支持可选的透明度通道。\n *\n * @slot - Default slot (unused; picker is self-contained). 默认插槽(未使用,选择器为自包含组件)。\n * @fires aithe-change - Emitted when the color or alpha value changes, with `{ value, alpha, format }`. 颜色或透明度变更时触发。\n *\n * @example\n * ```html\n * <aithe-color-picker value=\"#4d8dff\" format=\"hex\"></aithe-color-picker>\n * <aithe-color-picker alpha alpha-value=\"0.8\"></aithe-color-picker>\n * ```\n */\n@customElement('aithe-color-picker')\nexport class AitheColorPicker extends AitheElement {\n /** Current color value. 当前颜色值。 */\n @property({ type: String }) value = '#4d8dff';\n /** Output color format. 输出颜色格式。 */\n @property({ type: String }) format: 'hex' | 'rgb' = 'hex';\n /** Whether to show the alpha (opacity) slider. 是否显示透明度滑块。 */\n @property({ type: Boolean }) alpha = false;\n /** Alpha (opacity) value from 0 to 1. 透明度值,范围 0 到 1。 */\n @property({ type: Number, attribute: 'alpha-value' }) alphaValue = 1;\n /** Whether the color picker is disabled. 是否禁用颜色选择器。 */\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: inline-flex;\n }\n\n .picker {\n display: inline-flex;\n align-items: center;\n gap: var(--aithe-space-3);\n min-height: var(--aithe-control-height-md);\n padding: 0 var(--aithe-space-3);\n border: 1px solid var(--aithe-color-border);\n border-radius: var(--aithe-radius-md);\n background: var(--aithe-color-surface-elevated);\n }\n\n .swatch {\n width: 20px;\n height: 20px;\n border-radius: 50%;\n border: 1px solid var(--aithe-color-border);\n box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.4);\n }\n\n input[type='color'] {\n width: 40px;\n height: 28px;\n padding: 0;\n border: none;\n background: transparent;\n }\n\n input[type='range'] {\n width: 80px;\n }\n\n .value {\n color: var(--aithe-color-text-muted);\n font-family: var(--aithe-font-family-mono);\n font-size: var(--aithe-font-size-sm);\n }\n `,\n ];\n\n private emitChange(): void {\n this.emit('aithe-change', {\n value: this.value,\n alpha: this.alphaValue,\n format: this.format,\n });\n }\n\n private readonly handleColor = (event: Event): void => {\n this.value = (event.currentTarget as HTMLInputElement).value;\n this.emitChange();\n };\n\n private readonly handleAlpha = (event: Event): void => {\n this.alphaValue = Number((event.currentTarget as HTMLInputElement).value);\n this.emitChange();\n };\n\n render() {\n const alphaHex = Math.round(this.alphaValue * 255)\n .toString(16)\n .padStart(2, '0');\n const displayValue = this.alpha ? `${this.value}${alphaHex}` : this.value;\n\n return html`\n <div class=\"picker\">\n <span class=\"swatch\" style=${`background:${this.value};opacity:${this.alphaValue};`}></span>\n <input\n type=\"color\"\n .value=${this.value}\n ?disabled=${this.disabled}\n @input=${this.handleColor}\n />\n ${this.alpha\n ? html`\n <input\n type=\"range\"\n min=\"0\"\n max=\"1\"\n step=\"0.01\"\n .value=${String(this.alphaValue)}\n ?disabled=${this.disabled}\n @input=${this.handleAlpha}\n />\n `\n : null}\n <span class=\"value\">${displayValue}</span>\n </div>\n `;\n }\n}\n","import { css, html, nothing } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport type { AitheIntent } from '../../core/types';\nimport { aitheBaseStyles } from '../../core/styles';\nimport { t } from '../../core/i18n';\n\ninterface ComboboxOption {\n label: string;\n id: string;\n icon?: string;\n intent?: AitheIntent;\n}\n\n/**\n * Filterable input + option list combobox.\n * 可过滤的输入框 + 选项列表组合框。\n *\n * @slot - Default slot (unused; combobox is self-contained). 默认插槽(未使用,组合框为自包含组件)。\n * @fires aithe-change - Emitted when an option is selected, with `{ value, option }`. 选中选项时触发。\n * @fires aithe-input - Emitted on every keystroke, with `{ value }`. 每次按键时触发。\n *\n * @example\n * ```html\n * <aithe-combobox\n * options='[{\"label\":\"Apple\",\"id\":\"apple\"},{\"label\":\"Banana\",\"id\":\"banana\"}]'\n * filterable\n * ></aithe-combobox>\n * ```\n */\n@customElement('aithe-combobox')\nexport class AitheCombobox extends AitheElement {\n /** Current input value. 当前输入值。 */\n @property({ type: String }) value = '';\n /** Display title for the combobox (shown as tooltip). 组合框的显示标题(作为工具提示)。 */\n @property({ type: String }) title = '';\n /** Icon name to display before the input. 在输入框前显示的图标名称。 */\n @property({ type: String }) icon = '';\n /** JSON string of combobox options. 组合框选项的 JSON 字符串。 */\n @property({ type: String }) options = '[]';\n /** Whether the input supports filtering options. 是否支持过滤选项。 */\n @property({ type: Boolean }) filterable = true;\n /** Whether the combobox is disabled. 是否禁用组合框。 */\n @property({ type: Boolean, reflect: true }) disabled = false;\n /** Placeholder text for the input. 输入框的占位文本。 */\n @property({ type: String }) placeholder = '';\n\n @state() private open = false;\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n position: relative;\n display: inline-flex;\n width: min(100%, 320px);\n }\n\n .control {\n display: inline-flex;\n align-items: center;\n gap: var(--aithe-space-2);\n width: 100%;\n min-height: var(--aithe-control-height-md);\n padding: 0 var(--aithe-space-4);\n border: 1px solid var(--aithe-color-border);\n border-radius: var(--aithe-radius-md);\n background: var(--aithe-color-surface-elevated);\n }\n\n .control:focus-within {\n border-color: var(--aithe-primary-5);\n box-shadow: 0 0 0 4px var(--aithe-color-focus-ring);\n }\n\n .value-icon {\n flex-shrink: 0;\n color: var(--aithe-color-text-muted);\n }\n\n input {\n width: 100%;\n border: none;\n outline: none;\n background: transparent;\n color: var(--aithe-color-text);\n }\n\n .panel {\n position: absolute;\n top: calc(100% + var(--aithe-space-2));\n left: 0;\n right: 0;\n z-index: var(--aithe-z-dropdown);\n display: grid;\n gap: var(--aithe-space-1);\n max-height: 260px;\n padding: var(--aithe-space-2);\n overflow: auto;\n border: 1px solid var(--aithe-color-border);\n border-radius: var(--aithe-radius-lg);\n background: var(--aithe-color-surface-elevated);\n box-shadow: var(--aithe-shadow-3);\n }\n\n .item {\n min-height: 36px;\n padding: 0 var(--aithe-space-3);\n border: none;\n border-radius: var(--aithe-radius-md);\n background: transparent;\n color: var(--aithe-color-text);\n text-align: left;\n cursor: pointer;\n }\n\n .item:hover {\n background: var(--aithe-color-surface-muted);\n }\n\n .item.primary {\n color: var(--aithe-primary-7);\n }\n .item.success {\n color: var(--aithe-success-7);\n }\n .item.warning {\n color: var(--aithe-warning-7);\n }\n .item.danger {\n color: var(--aithe-danger-7);\n }\n\n .option-icon {\n flex-shrink: 0;\n color: var(--aithe-color-text-muted);\n }\n\n .empty {\n padding: var(--aithe-space-3);\n color: var(--aithe-color-text-subtle);\n }\n `,\n ];\n\n connectedCallback(): void {\n super.connectedCallback();\n document.addEventListener('mousedown', this.handleDocumentPointer);\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n document.removeEventListener('mousedown', this.handleDocumentPointer);\n }\n\n private get parsedOptions(): ComboboxOption[] {\n try {\n const parsed = JSON.parse(this.options) as Array<string | ComboboxOption>;\n return parsed.map((item) => (typeof item === 'string' ? { label: item, id: item } : item));\n } catch {\n return [];\n }\n }\n\n private get filteredOptions(): ComboboxOption[] {\n const options = this.parsedOptions;\n if (!this.filterable || !this.value) {\n return options;\n }\n\n const keyword = this.value.toLowerCase();\n return options.filter((item) => item.label.toLowerCase().includes(keyword));\n }\n\n private readonly handleDocumentPointer = (event: MouseEvent): void => {\n if (!event.composedPath().includes(this)) {\n this.open = false;\n }\n };\n\n private readonly handleInput = (event: Event): void => {\n this.value = (event.currentTarget as HTMLInputElement).value;\n this.open = true;\n this.emit('aithe-input', { value: this.value });\n };\n\n private selectOption(option: ComboboxOption): void {\n this.value = option.id;\n this.open = false;\n this.emit('aithe-change', { value: this.value, option });\n }\n\n render() {\n const options = this.filteredOptions;\n\n return html`\n <label class=\"control\" title=${this.title}>\n ${this.icon\n ? html`\n <aithe-icon class=\"value-icon\" name=${this.icon} size=\"16\"></aithe-icon>\n `\n : nothing}\n <input\n .value=${this.value}\n placeholder=${this.placeholder || t('form.combobox.placeholder')}\n ?disabled=${this.disabled}\n @focus=${() => (this.open = true)}\n @input=${this.handleInput}\n />\n </label>\n ${this.open\n ? html`\n <div class=\"panel\">${this.renderOptionList(options)}</div>\n `\n : null}\n `;\n }\n\n private renderOptionList(options: ComboboxOption[]) {\n if (!options.length) {\n return [\n html`\n <div class=\"empty\">${t('form.combobox.emptyText')}</div>\n `,\n ];\n }\n return options.map((option) => {\n const intentClass = option.intent && option.intent !== 'default' ? option.intent : '';\n const optionIcon = option.icon\n ? html`\n <aithe-icon class=\"option-icon\" name=${option.icon} size=\"16\"></aithe-icon>\n `\n : nothing;\n return html`\n <button class=\"item ${intentClass}\" type=\"button\" @click=${() => this.selectOption(option)}>\n <span style=\"display:inline-flex;align-items:center;gap:var(--aithe-space-2);\">\n ${optionIcon}${option.label}\n </span>\n </button>\n `;\n });\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\n\n/**\n * Date input wrapper with optional range mode.\n * 日期输入包装器,支持可选的范围模式。\n *\n * @slot - Default slot (unused; picker is self-contained). 默认插槽(未使用,选择器为自包含组件)。\n * @fires aithe-change - Emitted when a date value changes, with `{ value, format }`. 日期值变更时触发。\n *\n * @example\n * ```html\n * <aithe-date-picker value=\"2025-01-01\" format=\"YYYY-MM-DD\"></aithe-date-picker>\n * <aithe-date-picker range value=\"2025-01-01\" end-value=\"2025-01-31\"></aithe-date-picker>\n * ```\n */\n@customElement('aithe-date-picker')\nexport class AitheDatePicker extends AitheElement {\n /** Start date value. 起始日期值。 */\n @property({ type: String }) value = '';\n /** Display format pattern. 显示格式模式。 */\n @property({ type: String }) format = 'YYYY-MM-DD';\n /** Whether to enable date range selection. 是否启用日期范围选择。 */\n @property({ type: Boolean }) range = false;\n /** Whether the date picker is disabled. 是否禁用日期选择器。 */\n @property({ type: Boolean, reflect: true }) disabled = false;\n /** End date value for range mode. 范围模式的结束日期值。 */\n @property({ type: String, attribute: 'end-value' }) endValue = '';\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: inline-flex;\n }\n\n .wrap {\n display: inline-flex;\n align-items: center;\n gap: var(--aithe-space-2);\n min-height: var(--aithe-control-height-md);\n padding: 0 var(--aithe-space-3);\n border: 1px solid var(--aithe-color-border);\n border-radius: var(--aithe-radius-md);\n background: var(--aithe-color-surface-elevated);\n }\n\n input {\n min-width: 0;\n border: none;\n outline: none;\n background: transparent;\n color: var(--aithe-color-text);\n }\n\n .sep {\n color: var(--aithe-color-text-subtle);\n }\n `,\n ];\n\n private emitChange(): void {\n this.emit('aithe-change', {\n value: this.range ? [this.value, this.endValue] : this.value,\n format: this.format,\n });\n }\n\n render() {\n return html`\n <div class=\"wrap\">\n <input\n type=\"date\"\n .value=${this.value}\n ?disabled=${this.disabled}\n @change=${(event: Event) => {\n this.value = (event.currentTarget as HTMLInputElement).value;\n this.emitChange();\n }}\n />\n ${this.range\n ? html`\n <span class=\"sep\">~</span>\n <input\n type=\"date\"\n .value=${this.endValue}\n ?disabled=${this.disabled}\n @change=${(event: Event) => {\n this.endValue = (event.currentTarget as HTMLInputElement).value;\n this.emitChange();\n }}\n />\n `\n : null}\n </div>\n `;\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\n\n/**\n * Time picker wrapper around native input.\n * 基于原生输入的时间选择器。\n *\n * @slot - Default slot (unused; picker is self-contained). 默认插槽(未使用,选择器为自包含组件)。\n * @fires aithe-change - Emitted when the time value changes, with `{ value, format, step }`. 时间值变更时触发。\n *\n * @example\n * ```html\n * <aithe-time-picker value=\"09:30\" format=\"HH:mm\" step=\"300\"></aithe-time-picker>\n * ```\n */\n@customElement('aithe-time-picker')\nexport class AitheTimePicker extends AitheElement {\n /** Current time value. 当前时间值。 */\n @property({ type: String }) value = '';\n /** Display format pattern. 显示格式模式。 */\n @property({ type: String }) format = 'HH:mm';\n /** Step interval in seconds for the time input. 时间输入的步进间隔(秒)。 */\n @property({ type: Number }) step = 300;\n /** Whether the time picker is disabled. 是否禁用时间选择器。 */\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: inline-flex;\n }\n\n .wrap {\n display: inline-flex;\n align-items: center;\n min-height: var(--aithe-control-height-md);\n padding: 0 var(--aithe-space-3);\n border: 1px solid var(--aithe-color-border);\n border-radius: var(--aithe-radius-md);\n background: var(--aithe-color-surface-elevated);\n }\n\n input {\n border: none;\n outline: none;\n background: transparent;\n color: var(--aithe-color-text);\n }\n `,\n ];\n\n render() {\n return html`\n <div class=\"wrap\">\n <input\n type=\"time\"\n .value=${this.value}\n .step=${String(this.step)}\n ?disabled=${this.disabled}\n @change=${(event: Event) => {\n this.value = (event.currentTarget as HTMLInputElement).value;\n this.emit('aithe-change', { value: this.value, format: this.format, step: this.step });\n }}\n />\n </div>\n `;\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\n\n/**\n * Numeric slider with single and range modes.\n * 数值滑块,支持单值和范围模式。\n *\n * @slot - Default slot (unused; slider is self-contained). 默认插槽(未使用,滑块为自包含组件)。\n * @fires aithe-change - Emitted when the slider value changes, with `{ value }`. 滑块值变更时触发。\n *\n * @example\n * ```html\n * <aithe-slider value=\"50\" min=\"0\" max=\"100\" step=\"1\"></aithe-slider>\n * <aithe-slider range value=\"20,80\"></aithe-slider>\n * ```\n */\n@customElement('aithe-slider')\nexport class AitheSlider extends AitheElement {\n /** Minimum value of the slider. 滑块的最小值。 */\n @property({ type: Number }) min = 0;\n /** Maximum value of the slider. 滑块的最大值。 */\n @property({ type: Number }) max = 100;\n /** Step increment for the slider. 滑块的步进增量。 */\n @property({ type: Number }) step = 1;\n /** Whether to enable range (dual-thumb) mode. 是否启用范围(双滑块)模式。 */\n @property({ type: Boolean }) range = false;\n /** Current value (comma-separated for range mode). 当前值(范围模式用逗号分隔)。 */\n @property({ type: String }) value = '50';\n /** Whether the slider is disabled. 是否禁用滑块。 */\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: block;\n width: min(100%, 320px);\n }\n\n .wrap {\n display: grid;\n gap: var(--aithe-space-3);\n }\n\n .track {\n display: grid;\n gap: var(--aithe-space-2);\n }\n\n .value {\n color: var(--aithe-color-text-muted);\n font-family: var(--aithe-font-family-mono);\n font-size: var(--aithe-font-size-sm);\n }\n `,\n ];\n\n private get values(): [number, number] {\n const parts = this.value.split(',').map((item) => Number(item.trim()));\n return [parts[0] ?? this.min, parts[1] ?? parts[0] ?? this.min];\n }\n\n private updateValue(index: 0 | 1, next: number): void {\n if (!this.range) {\n this.value = String(next);\n this.emit('aithe-change', { value: next });\n return;\n }\n\n const [start, end] = this.values;\n const pair: [number, number] =\n index === 0 ? [Math.min(next, end), end] : [start, Math.max(start, next)];\n this.value = `${pair[0]},${pair[1]}`;\n this.emit('aithe-change', { value: pair });\n }\n\n render() {\n const [start, end] = this.values;\n\n return html`\n <div class=\"wrap\">\n <div class=\"track\">\n <input\n type=\"range\"\n .value=${String(start)}\n .min=${String(this.min)}\n .max=${String(this.max)}\n .step=${String(this.step)}\n ?disabled=${this.disabled}\n @input=${(event: Event) =>\n this.updateValue(0, Number((event.currentTarget as HTMLInputElement).value))}\n />\n ${this.range\n ? html`\n <input\n type=\"range\"\n .value=${String(end)}\n .min=${String(this.min)}\n .max=${String(this.max)}\n .step=${String(this.step)}\n ?disabled=${this.disabled}\n @input=${(event: Event) =>\n this.updateValue(1, Number((event.currentTarget as HTMLInputElement).value))}\n />\n `\n : null}\n </div>\n <span class=\"value\">${this.range ? `${start} - ${end}` : start}</span>\n </div>\n `;\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { styleMap } from 'lit/directives/style-map.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\nimport { t } from '../../core/i18n';\n\n/**\n * Star rating component with optional half steps.\n * 星级评分组件,支持可选的半星步进。\n *\n * @slot - Default slot (unused; rate is self-contained). 默认插槽(未使用,评分组件为自包含组件)。\n * @fires aithe-change - Emitted when the rating value changes, with `{ value }`. 评分值变更时触发。\n *\n * @example\n * ```html\n * <aithe-rate value=\"3\" max=\"5\" allow-half color=\"var(--aithe-warning-5)\"></aithe-rate>\n * ```\n */\n@customElement('aithe-rate')\nexport class AitheRate extends AitheElement {\n /** Maximum number of stars. 最大星数。 */\n @property({ type: Number }) max = 5;\n /** Whether to allow half-star ratings. 是否允许半星评分。 */\n @property({ type: Boolean, attribute: 'allow-half' }) allowHalf = false;\n /** Custom color for filled stars. 已填充星星的自定义颜色。 */\n @property({ type: String }) color = 'var(--aithe-warning-5)';\n /** Current rating value. 当前评分值。 */\n @property({ type: Number }) value = 0;\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: inline-flex;\n }\n\n .stars {\n display: inline-flex;\n gap: var(--aithe-space-2);\n }\n\n button {\n position: relative;\n width: 28px;\n height: 28px;\n padding: 0;\n border: none;\n background: transparent;\n color: var(--aithe-color-border-strong);\n cursor: pointer;\n font-size: 24px;\n line-height: 1;\n }\n\n .star,\n .fill {\n position: absolute;\n inset: 0;\n }\n\n .fill {\n overflow: hidden;\n color: var(--aithe-rate-color, var(--aithe-warning-5));\n }\n `,\n ];\n\n private setValue(event: MouseEvent, index: number): void {\n const width = (event.currentTarget as HTMLElement).getBoundingClientRect().width;\n const offset = event.offsetX;\n const next = this.allowHalf && offset < width / 2 ? index + 0.5 : index + 1;\n this.value = next;\n this.emit('aithe-change', { value: this.value });\n }\n\n render() {\n return html`\n <div class=\"stars\" style=${styleMap({ '--aithe-rate-color': this.color })}>\n ${Array.from({ length: this.max }, (_, index) => {\n const fillPercent = Math.max(0, Math.min(1, this.value - index)) * 100;\n return html`\n <button\n type=\"button\"\n aria-label=${t('form.rate.ariaLabel', index + 1)}\n @click=${(event: MouseEvent) => this.setValue(event, index)}\n >\n <span class=\"star\">★</span>\n <span class=\"fill\" style=${`width:${fillPercent}%;`}>★</span>\n </button>\n `;\n })}\n </div>\n `;\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\nimport type { AitheFormItem } from './form-item';\n\n/**\n * Form container with lightweight validation and submit events.\n * 表单容器,支持轻量级校验和提交事件。\n *\n * @slot - Default slot for form items and controls. 表单项和控件内容。\n * @fires aithe-validate - Emitted after validation, with `{ valid }`. 校验完成后触发。\n * @fires aithe-submit - Emitted on valid form submission, with `{ values }`. 有效表单提交时触发。\n * @example\n * ```html\n * <aithe-form model='{\"name\":\"\"}' rules='{}'>\n * <aithe-form-item label=\"Name\" prop=\"name\" required>\n * <aithe-input name=\"name\"></aithe-input>\n * </aithe-form-item>\n * </aithe-form>\n * ```\n */\n@customElement('aithe-form')\nexport class AitheForm extends AitheElement {\n /** JSON string of the form model data. 表单模型数据的 JSON 字符串。 */\n @property({ type: String }) model = '{}';\n /** JSON string of validation rules. 校验规则的 JSON 字符串。 */\n @property({ type: String }) rules = '{}';\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: block;\n }\n\n form {\n display: grid;\n gap: var(--aithe-space-5);\n }\n `,\n ];\n\n /** Validates all child form-items and emits validate event. 校验所有子表单项并触发 validate 事件。 */\n validate(): boolean {\n const items = Array.from(this.querySelectorAll('aithe-form-item')) as AitheFormItem[];\n const valid = items.every((item) => item.validate());\n this.emit('aithe-validate', { valid });\n return valid;\n }\n\n /** Collects name/value pairs from all form controls. 从所有表单控件收集 name/value 对。 */\n private collectValues(): Record<string, unknown> {\n const values: Record<string, unknown> = {};\n const controls = Array.from(\n this.querySelectorAll<HTMLElement>(\n 'aithe-input, aithe-select, aithe-textarea, aithe-switch, input, select, textarea',\n ),\n );\n\n controls.forEach((control, index) => {\n const typed = control as HTMLElement & {\n name?: string;\n value?: unknown;\n checked?: boolean;\n };\n const key = typed.name || control.getAttribute('name') || `field-${index + 1}`;\n values[key] = typeof typed.checked === 'boolean' ? typed.checked : typed.value;\n });\n\n return values;\n }\n\n /** Handles form submit: validates then emits submit event on success. 处理表单提交:校验成功后触发 submit 事件。 */\n private readonly handleSubmit = (event: Event): void => {\n event.preventDefault();\n const valid = this.validate();\n\n if (!valid) {\n return;\n }\n\n this.emit('aithe-submit', { values: this.collectValues() });\n };\n\n render() {\n return html`\n <form novalidate @submit=${this.handleSubmit}>\n <slot></slot>\n </form>\n `;\n }\n}\n","import { css, html, nothing } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\nimport { t } from '../../core/i18n';\n\n/**\n * Labeled form field row with light validation state.\n * 带标签的表单字段行,支持轻量级校验状态。\n *\n * @slot - Default slot for the form control element. 表单控件元素内容。\n * @example\n * ```html\n * <aithe-form-item label=\"Email\" prop=\"email\" required error=\"Email is required\">\n * <aithe-input name=\"email\"></aithe-input>\n * </aithe-form-item>\n * ```\n */\n@customElement('aithe-form-item')\nexport class AitheFormItem extends AitheElement {\n /** Field label text. 字段标签文本。 */\n @property({ type: String }) label = '';\n /** Display title for the form item (shown as tooltip). 表单项的显示标题(作为工具提示)。 */\n @property({ type: String }) title = '';\n /** Icon name to display before the label. 在标签前显示的图标名称。 */\n @property({ type: String }) icon = '';\n /** Field property name for validation mapping. 用于校验映射的字段属性名。 */\n @property({ type: String }) prop = '';\n /** Whether the field is required. 是否为必填字段。 */\n @property({ type: Boolean }) required = false;\n /** Static error message to display. 显示的静态错误消息。 */\n @property({ type: String }) error = '';\n\n /** Internal error message from validation. 校验产生的内部错误消息。 */\n @state() private internalError = '';\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: grid;\n gap: var(--aithe-space-2);\n }\n\n .label {\n display: inline-flex;\n align-items: center;\n gap: var(--aithe-space-2);\n font-weight: var(--aithe-font-weight-medium);\n }\n\n .label-icon {\n flex-shrink: 0;\n color: var(--aithe-color-text-muted);\n }\n\n .required {\n color: var(--aithe-danger-6);\n }\n\n .message {\n color: var(--aithe-danger-6);\n font-size: var(--aithe-font-size-sm);\n }\n `,\n ];\n\n /** Validates the child control and sets internal error state. 校验子控件并设置内部错误状态。 */\n validate(): boolean {\n const control = this.querySelector<HTMLElement>(\n 'aithe-input, aithe-select, aithe-textarea, input, select, textarea',\n );\n const typedControl = control as (HTMLElement & { value?: string }) | null;\n const value = typedControl?.value ?? '';\n\n if (this.required && !String(value).trim()) {\n this.internalError =\n this.error ||\n t('form.formItem.required', this.label || this.prop || t('form.formItem.requiredField'));\n return false;\n }\n\n this.internalError = '';\n return true;\n }\n\n render() {\n const message = this.error || this.internalError;\n const labelIcon = this.icon\n ? html`\n <aithe-icon class=\"label-icon\" name=${this.icon} size=\"16\"></aithe-icon>\n `\n : nothing;\n const requiredMark = this.required\n ? html`\n <span class=\"required\">*</span>\n `\n : null;\n const labelBlock = this.label\n ? html`\n <label class=\"label\" title=${this.title}>\n ${labelIcon}\n <span>${this.label}</span>\n ${requiredMark}\n </label>\n `\n : null;\n\n return html`\n ${labelBlock}\n <slot></slot>\n ${message\n ? html`\n <span class=\"message\">${message}</span>\n `\n : null}\n `;\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\nimport { t } from '../../core/i18n';\n\n/**\n * Local file picker with upload-like progress events.\n * 本地文件选择器,支持类上传进度事件。\n *\n * @slot - Default slot for the upload trigger button label. 上传触发按钮标签内容。\n * @fires aithe-change - Emitted when files are selected, with `{ files }`. 文件选择时触发。\n * @fires aithe-progress - Emitted with upload progress, with `{ percent, files }`. 上传进度时触发。\n * @fires aithe-success - Emitted when upload completes, with `{ files, url }`. 上传完成时触发。\n *\n * @example\n * ```html\n * <aithe-upload url=\"/api/upload\" accept=\".png,.jpg\" multiple limit=\"3\">\n * Choose files\n * </aithe-upload>\n * ```\n */\n@customElement('aithe-upload')\nexport class AitheUpload extends AitheElement {\n /** Upload target URL. 上传目标 URL。 */\n @property({ type: String }) url = '';\n /** Whether multiple files can be selected. 是否允许选择多个文件。 */\n @property({ type: Boolean }) multiple = false;\n /** Accepted file types (MIME or extension). 接受的文件类型(MIME 或扩展名)。 */\n @property({ type: String }) accept = '';\n /** Maximum number of files allowed (0 = unlimited). 允许的最大文件数(0 = 不限)。 */\n @property({ type: Number }) limit = 0;\n /** Whether the upload is disabled. 是否禁用上传。 */\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n @state() private files: File[] = [];\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: grid;\n gap: var(--aithe-space-3);\n }\n\n .trigger {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-height: var(--aithe-control-height-md);\n padding: 0 var(--aithe-space-4);\n border: 1px dashed var(--aithe-color-border-strong);\n border-radius: var(--aithe-radius-md);\n background: var(--aithe-color-surface-elevated);\n color: var(--aithe-color-text);\n cursor: pointer;\n }\n\n .list {\n display: grid;\n gap: var(--aithe-space-2);\n }\n\n .file {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--aithe-space-3);\n padding: var(--aithe-space-2) var(--aithe-space-3);\n border-radius: var(--aithe-radius-md);\n background: var(--aithe-color-surface);\n color: var(--aithe-color-text-muted);\n }\n `,\n ];\n\n private readonly handleFiles = (event: Event): void => {\n const fileList = (event.currentTarget as HTMLInputElement).files;\n const next = fileList ? Array.from(fileList) : [];\n this.files = this.limit > 0 ? next.slice(0, this.limit) : next;\n this.emit('aithe-change', { files: this.files });\n this.emit('aithe-progress', { percent: 100, files: this.files });\n this.emit('aithe-success', { files: this.files, url: this.url });\n };\n\n render() {\n return html`\n <label class=\"trigger\">\n <input\n hidden\n type=\"file\"\n accept=${this.accept}\n ?multiple=${this.multiple}\n ?disabled=${this.disabled}\n @change=${this.handleFiles}\n />\n <slot>${t('form.upload.chooseFiles')}</slot>\n </label>\n ${this.files.length\n ? html`\n <div class=\"list\">\n ${this.files.map(\n (file) => html`\n <div class=\"file\">\n <span>${file.name}</span>\n <span>${Math.ceil(file.size / 1024)} ${t('form.upload.kb')}</span>\n </div>\n `,\n )}\n </div>\n `\n : null}\n `;\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\nimport { t } from '../../core/i18n';\n\ninterface TransferItem {\n label: string;\n id: string;\n disabled?: boolean;\n}\n\n/**\n * Dual-list transfer component for moving items between source and target panels.\n * 双列表穿梭框组件,用于在源面板和目标面板之间移动项目。\n *\n * @slot - Default slot (unused; transfer is self-contained). 默认插槽(未使用,穿梭框为自包含组件)。\n * @fires aithe-change - Emitted when items are transferred, with `{ value: string[] }`. 项目转移时触发。\n *\n * @example\n * ```html\n * <aithe-transfer\n * data='[{\"label\":\"Item A\",\"id\":\"a\"},{\"label\":\"Item B\",\"id\":\"b\"}]'\n * value='[\"b\"]'\n * titles='[\"Source\",\"Target\"]'\n * searchable\n * ></aithe-transfer>\n * ```\n */\n@customElement('aithe-transfer')\nexport class AitheTransfer extends AitheElement {\n /** JSON string of transfer item data. 穿梭框项目数据的 JSON 字符串。 */\n @property({ type: String }) data = '[]';\n /** JSON string of currently transferred values. 当前已转移值的 JSON 字符串。 */\n @property({ type: String }) value = '[]';\n /** JSON string of panel titles `[sourceTitle, targetTitle]`. 面板标题的 JSON 字符串 `[源标题, 目标标题]`。 */\n @property({ type: String }) titles = '';\n /** Whether panels support search/filter. 是否支持面板搜索过滤。 */\n @property({ type: Boolean }) searchable = false;\n\n @state() private leftSelected = new Set<string>();\n @state() private rightSelected = new Set<string>();\n @state() private leftQuery = '';\n @state() private rightQuery = '';\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);\n gap: var(--aithe-space-4);\n align-items: start;\n }\n\n .panel {\n display: grid;\n gap: var(--aithe-space-3);\n padding: var(--aithe-space-4);\n border: 1px solid var(--aithe-color-border);\n border-radius: var(--aithe-radius-lg);\n background: var(--aithe-color-surface-elevated);\n }\n\n .title {\n font-weight: var(--aithe-font-weight-semibold);\n }\n\n .search {\n min-height: 34px;\n padding: 0 var(--aithe-space-3);\n border: 1px solid var(--aithe-color-border);\n border-radius: var(--aithe-radius-md);\n background: var(--aithe-color-surface);\n }\n\n .list {\n display: grid;\n gap: var(--aithe-space-2);\n max-height: 240px;\n overflow: auto;\n }\n\n .row {\n display: flex;\n align-items: center;\n gap: var(--aithe-space-3);\n padding: var(--aithe-space-2) var(--aithe-space-3);\n border-radius: var(--aithe-radius-md);\n background: var(--aithe-color-surface);\n }\n\n .actions {\n display: grid;\n gap: var(--aithe-space-2);\n align-self: center;\n }\n\n button {\n min-width: 42px;\n min-height: 36px;\n border: 1px solid var(--aithe-color-border);\n border-radius: var(--aithe-radius-md);\n background: var(--aithe-color-surface-elevated);\n color: var(--aithe-color-text);\n cursor: pointer;\n }\n `,\n ];\n\n private get parsedData(): TransferItem[] {\n try {\n return JSON.parse(this.data) as TransferItem[];\n } catch {\n return [];\n }\n }\n\n private get parsedValue(): string[] {\n try {\n return JSON.parse(this.value) as string[];\n } catch {\n return this.value\n .split(',')\n .map((item) => item.trim())\n .filter(Boolean);\n }\n }\n\n private get parsedTitles(): [string, string] {\n try {\n const parsed = JSON.parse(this.titles) as [string, string];\n return [\n parsed[0] || t('form.transfer.sourceTitle'),\n parsed[1] || t('form.transfer.targetTitle'),\n ];\n } catch {\n return [t('form.transfer.sourceTitle'), t('form.transfer.targetTitle')];\n }\n }\n\n private get lists(): { left: TransferItem[]; right: TransferItem[] } {\n const selected = new Set(this.parsedValue);\n const left = this.parsedData.filter((item) => !selected.has(item.id));\n const right = this.parsedData.filter((item) => selected.has(item.id));\n return { left, right };\n }\n\n private filtered(items: TransferItem[], query: string): TransferItem[] {\n if (!this.searchable || !query) {\n return items;\n }\n\n const keyword = query.toLowerCase();\n return items.filter((item) => item.label.toLowerCase().includes(keyword));\n }\n\n private move(direction: 'right' | 'left'): void {\n const current = new Set(this.parsedValue);\n const source = direction === 'right' ? this.leftSelected : this.rightSelected;\n\n source.forEach((value) => {\n if (direction === 'right') {\n current.add(value);\n } else {\n current.delete(value);\n }\n });\n\n this.value = JSON.stringify(Array.from(current));\n this.leftSelected = new Set<string>();\n this.rightSelected = new Set<string>();\n this.emit('aithe-change', { value: JSON.parse(this.value) as string[] });\n }\n\n private toggle(setter: 'leftSelected' | 'rightSelected', value: string, checked: boolean): void {\n const current = new Set(this[setter]);\n if (checked) {\n current.add(value);\n } else {\n current.delete(value);\n }\n this[setter] = current;\n }\n\n render() {\n const { left, right } = this.lists;\n const [leftTitle, rightTitle] = this.parsedTitles;\n const leftItems = this.filtered(left, this.leftQuery);\n const rightItems = this.filtered(right, this.rightQuery);\n\n return html`\n <div class=\"panel\">\n <div class=\"title\">${leftTitle}</div>\n ${this.searchable\n ? html`\n <input\n class=\"search\"\n .value=${this.leftQuery}\n @input=${(event: Event) => {\n this.leftQuery = (event.currentTarget as HTMLInputElement).value;\n }}\n />\n `\n : null}\n <div class=\"list\">\n ${leftItems.map(\n (item) => html`\n <label class=\"row\">\n <input\n type=\"checkbox\"\n ?disabled=${item.disabled}\n ?checked=${this.leftSelected.has(item.id)}\n @change=${(event: Event) =>\n this.toggle(\n 'leftSelected',\n item.id,\n (event.currentTarget as HTMLInputElement).checked,\n )}\n />\n <span>${item.label}</span>\n </label>\n `,\n )}\n </div>\n </div>\n <div class=\"actions\">\n <button type=\"button\" @click=${() => this.move('right')}>→</button>\n <button type=\"button\" @click=${() => this.move('left')}>←</button>\n </div>\n <div class=\"panel\">\n <div class=\"title\">${rightTitle}</div>\n ${this.searchable\n ? html`\n <input\n class=\"search\"\n .value=${this.rightQuery}\n @input=${(event: Event) => {\n this.rightQuery = (event.currentTarget as HTMLInputElement).value;\n }}\n />\n `\n : null}\n <div class=\"list\">\n ${rightItems.map(\n (item) => html`\n <label class=\"row\">\n <input\n type=\"checkbox\"\n ?disabled=${item.disabled}\n ?checked=${this.rightSelected.has(item.id)}\n @change=${(event: Event) =>\n this.toggle(\n 'rightSelected',\n item.id,\n (event.currentTarget as HTMLInputElement).checked,\n )}\n />\n <span>${item.label}</span>\n </label>\n `,\n )}\n </div>\n </div>\n `;\n }\n}\n","import { css, html, nothing } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { aitheBaseStyles, aithePanelStyles } from '../../core/styles';\nimport { t } from '../../core/i18n';\n\n/**\n * Lightweight confirm dialog with cancel/confirm actions.\n * 轻量级确认对话框,支持取消/确认操作。\n *\n * @slot - Default slot for dialog body content. 对话框正文内容。\n * @fires aithe-confirm - Emitted when the confirm button is clicked. 确认按钮点击时触发。\n * @fires aithe-cancel - Emitted when the cancel button or close button is clicked. 取消或关闭按钮点击时触发。\n * @example\n * ```html\n * <aithe-dialog title=\"Delete item?\" visible confirm-text=\"Delete\" cancel-text=\"Cancel\">\n * This action cannot be undone.\n * </aithe-dialog>\n * ```\n */\n@customElement('aithe-dialog')\nexport class AitheDialog extends AitheElement {\n /** Dialog title text. 对话框标题文本。 */\n @property({ type: String }) title = 'Confirm';\n /** Icon name to display before the title. 在标题前显示的图标名称。 */\n @property({ type: String }) icon = '';\n /** Whether the dialog is visible. 是否显示对话框。 */\n @property({ type: Boolean, reflect: true }) visible = false;\n /** Whether the dialog can be closed via close button or Escape. 是否可通过关闭按钮或 Escape 关闭。 */\n @property({ type: Boolean }) closeable = true;\n /** Whether a backdrop mask is shown. 是否显示背景遮罩。 */\n @property({ type: Boolean }) mask = true;\n /** Confirm button label text. 确认按钮文本。 */\n @property({ type: String, attribute: 'confirm-text' }) confirmText = '';\n /** Cancel button label text. 取消按钮文本。 */\n @property({ type: String, attribute: 'cancel-text' }) cancelText = '';\n\n static readonly styles = [\n aitheBaseStyles,\n aithePanelStyles('.panel'),\n css`\n :host {\n display: contents;\n }\n\n .overlay {\n position: fixed;\n inset: 0;\n z-index: var(--aithe-z-modal);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--aithe-space-lg);\n background: var(--aithe-color-overlay);\n opacity: 0;\n pointer-events: none;\n transition: opacity var(--aithe-duration-base) var(--aithe-ease-standard);\n }\n\n .overlay.visible {\n opacity: 1;\n pointer-events: auto;\n }\n\n .panel {\n width: min(100%, 420px);\n display: grid;\n gap: var(--aithe-space-4);\n padding: var(--aithe-space-lg);\n }\n\n .head,\n .foot {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--aithe-space-3);\n }\n\n .title {\n margin: 0;\n display: inline-flex;\n align-items: center;\n gap: var(--aithe-space-2);\n font-size: var(--aithe-font-size-lg);\n font-weight: var(--aithe-font-weight-semibold);\n }\n\n .title-icon {\n flex-shrink: 0;\n color: var(--aithe-color-text-muted);\n }\n\n .content {\n color: var(--aithe-color-text-muted);\n }\n\n .actions {\n display: inline-flex;\n gap: var(--aithe-space-2);\n }\n\n button {\n min-height: 38px;\n padding: 0 var(--aithe-space-4);\n border: 1px solid var(--aithe-color-border);\n border-radius: var(--aithe-radius-md);\n background: var(--aithe-color-surface);\n color: var(--aithe-color-text);\n cursor: pointer;\n }\n\n .primary {\n border-color: transparent;\n background: linear-gradient(180deg, var(--aithe-primary-6), var(--aithe-primary-7));\n color: white;\n }\n `,\n ];\n\n connectedCallback(): void {\n super.connectedCallback();\n document.addEventListener('keydown', this.handleKeydown);\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n document.removeEventListener('keydown', this.handleKeydown);\n }\n\n /** Closes dialog on Escape key press. 按 Escape 键关闭对话框。 */\n private readonly handleKeydown = (event: KeyboardEvent): void => {\n if (event.key === 'Escape' && this.visible) {\n this.cancel();\n }\n };\n\n /** Hides dialog and emits cancel event. 隐藏对话框并触发取消事件。 */\n private readonly cancel = (): void => {\n this.visible = false;\n this.emit('aithe-cancel');\n };\n\n /** Hides dialog and emits confirm event. 隐藏对话框并触发确认事件。 */\n private readonly confirm = (): void => {\n this.visible = false;\n this.emit('aithe-confirm');\n };\n\n render() {\n const confirmLabel = this.confirmText || t('form.dialog.confirmText');\n const cancelLabel = this.cancelText || t('form.dialog.cancelText');\n\n return html`\n <div\n class=${classMap({ overlay: true, visible: this.visible })}\n @click=${(event: MouseEvent) => {\n if (this.mask && event.target === event.currentTarget) {\n this.cancel();\n }\n }}\n >\n <div\n class=\"panel\"\n role=\"dialog\"\n aria-modal=\"true\"\n @click=${(event: MouseEvent) => event.stopPropagation()}\n >\n <div class=\"head\">\n <h3 class=\"title\">\n ${this.icon\n ? html`\n <aithe-icon class=\"title-icon\" name=${this.icon} size=\"18\"></aithe-icon>\n `\n : nothing}${this.title}\n </h3>\n ${this.closeable\n ? html`\n <button\n type=\"button\"\n aria-label=${t('form.dialog.closeAriaLabel')}\n @click=${this.cancel}\n >\n ×\n </button>\n `\n : null}\n </div>\n <div class=\"content\">\n <slot></slot>\n </div>\n <div class=\"foot\">\n <span></span>\n <div class=\"actions\">\n <button type=\"button\" @click=${this.cancel}>${cancelLabel}</button>\n <button class=\"primary\" type=\"button\" @click=${this.confirm}>${confirmLabel}</button>\n </div>\n </div>\n </div>\n </div>\n `;\n }\n}\n","import type { PropertyValues } from 'lit';\nimport { css, html, nothing } from 'lit';\nimport { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { styleMap } from 'lit/directives/style-map.js';\n\nimport { AitheElement } from '../../core/aithe-element';\nimport { aitheBaseStyles, aithePanelStyles } from '../../core/styles';\nimport { uid } from '../../core/utils';\nimport { t } from '../../core/i18n';\n\n/**\n * Full-featured modal dialog with header, body, footer slots and focus trapping.\n * 全功能模态对话框,支持头部、正文、底部插槽和焦点捕获。\n *\n * @slot - Default slot for modal body content. 模态框正文内容。\n * @slot header - Custom header content (overrides title property). 自定义头部内容。\n * @slot footer - Footer action area. 底部操作区域。\n * @fires aithe-open-change - Emitted when open state changes, with `{ open }`. 开关状态变更时触发。\n * @example\n * ```html\n * <aithe-modal title=\"Edit Profile\" width=\"520px\">\n * <p>Modal body content here.</p>\n * <button slot=\"footer\">Save</button>\n * </aithe-modal>\n * ```\n */\n@customElement('aithe-modal')\nexport class AitheModal extends AitheElement {\n /** Whether the modal is open. 是否打开模态框。 */\n @property({ type: Boolean, reflect: true }) open = false;\n /** Modal title text. 模态框标题文本。 */\n @property({ type: String }) title = '';\n /** Icon name to display before the title. 在标题前显示的图标名称。 */\n @property({ type: String }) icon = '';\n /** Modal width (CSS value). 模态框宽度(CSS 值)。 */\n @property({ type: String }) width = '640px';\n /** Whether the modal takes up the full viewport. 是否全屏显示。 */\n @property({ type: Boolean, reflect: true }) fullscreen = false;\n /** Whether clicking the backdrop mask closes the modal. 点击遮罩是否关闭模态框。 */\n @property({ type: Boolean, attribute: 'close-on-mask' }) closeOnMask = true;\n /** Whether pressing Escape closes the modal. 按 Escape 是否关闭模态框。 */\n @property({ type: Boolean, attribute: 'close-on-esc' }) closeOnEsc = true;\n /** Whether the close button is shown in the header. 是否在头部显示关闭按钮。 */\n @property({ type: Boolean, attribute: 'show-close' }) showClose = true;\n\n @query('.panel') private panel?: HTMLElement;\n @queryAssignedElements({ slot: 'header' }) private headerNodes!: HTMLElement[];\n @queryAssignedElements({ slot: 'footer' }) private footerNodes!: HTMLElement[];\n\n @state() private hasHeaderSlot = false;\n @state() private hasFooterSlot = false;\n\n private readonly titleId = uid('aithe-modal-title');\n private lastFocused: HTMLElement | null = null;\n\n static readonly styles = [\n aitheBaseStyles,\n aithePanelStyles('.panel'),\n css`\n :host {\n display: contents;\n }\n\n .overlay {\n position: fixed;\n inset: 0;\n z-index: var(--aithe-z-modal);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--aithe-space-lg);\n background: var(--aithe-color-overlay);\n opacity: 0;\n pointer-events: none;\n transition: opacity var(--aithe-duration-base) var(--aithe-ease-standard);\n }\n\n .overlay.open {\n opacity: 1;\n pointer-events: auto;\n }\n\n .panel {\n width: min(100%, var(--aithe-modal-width, 640px));\n max-height: min(88vh, 960px);\n display: flex;\n flex-direction: column;\n transform: translateY(14px) scale(0.98);\n transition: transform var(--aithe-duration-base) var(--aithe-ease-standard);\n }\n\n .overlay.open .panel {\n transform: translateY(0) scale(1);\n }\n\n .panel.fullscreen {\n width: 100vw;\n max-width: 100vw;\n height: 100vh;\n max-height: 100vh;\n border-radius: 0;\n }\n\n .header,\n .footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--aithe-space-4);\n padding: var(--aithe-space-lg);\n }\n\n .header {\n border-bottom: 1px solid var(--aithe-color-border);\n }\n\n .footer {\n border-top: 1px solid var(--aithe-color-border);\n }\n\n .title {\n margin: 0;\n display: inline-flex;\n align-items: center;\n gap: var(--aithe-space-2);\n font-size: var(--aithe-font-size-lg);\n font-weight: var(--aithe-font-weight-semibold);\n }\n\n .title-icon {\n flex-shrink: 0;\n color: var(--aithe-color-text-muted);\n }\n\n .body {\n flex: 1;\n overflow: auto;\n padding: var(--aithe-space-lg);\n }\n\n .close {\n flex-shrink: 0;\n width: 36px;\n height: 36px;\n border: none;\n border-radius: 50%;\n background: transparent;\n color: var(--aithe-color-text-muted);\n cursor: pointer;\n }\n\n .close:hover {\n background: var(--aithe-color-surface-muted);\n }\n `,\n ];\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n document.removeEventListener('keydown', this.handleDocumentKeydown);\n }\n\n protected updated(changed: PropertyValues<this>): void {\n super.updated(changed);\n\n if (changed.has('open')) {\n this.emit('aithe-open-change', { open: this.open });\n\n if (this.open) {\n this.lastFocused = document.activeElement as HTMLElement | null;\n document.addEventListener('keydown', this.handleDocumentKeydown);\n queueMicrotask(() => this.focusFirst(this.panel ?? this.renderRoot));\n } else {\n document.removeEventListener('keydown', this.handleDocumentKeydown);\n this.lastFocused?.focus?.();\n }\n }\n }\n\n /** Syncs header/footer slot presence state. 同步头部/底部插槽状态。 */\n private readonly syncSlots = (): void => {\n this.hasHeaderSlot = this.headerNodes.length > 0;\n this.hasFooterSlot = this.footerNodes.length > 0;\n };\n\n /** Handles Escape key to close modal. 处理 Escape 键关闭模态框。 */\n private readonly handleDocumentKeydown = (event: KeyboardEvent): void => {\n if (event.key === 'Escape' && this.closeOnEsc && this.open) {\n this.hide();\n }\n };\n\n /** Handles backdrop click to close modal. 处理遮罩点击关闭模态框。 */\n private readonly handleBackdropClick = (event: MouseEvent): void => {\n if (!this.closeOnMask || event.target !== event.currentTarget) {\n return;\n }\n\n this.hide();\n };\n\n /** Opens the modal. 打开模态框。 */\n show = (): void => {\n this.open = true;\n };\n\n /** Closes the modal. 关闭模态框。 */\n hide = (): void => {\n this.open = false;\n };\n\n render() {\n const showHeader = this.title || this.hasHeaderSlot || this.showClose;\n const modalIcon = this.icon\n ? html`\n <aithe-icon class=\"title-icon\" name=${this.icon} size=\"18\"></aithe-icon>\n `\n : nothing;\n\n return html`\n <div class=${classMap({ overlay: true, open: this.open })} @click=${this.handleBackdropClick}>\n <div\n class=${classMap({ panel: true, fullscreen: this.fullscreen })}\n aria-labelledby=${this.titleId}\n aria-modal=\"true\"\n role=\"dialog\"\n style=${styleMap({ '--aithe-modal-width': this.width })}\n tabindex=\"-1\"\n @click=${(event: MouseEvent) => event.stopPropagation()}\n @keydown=${(event: KeyboardEvent) => this.trapFocus(event, this.panel ?? this.renderRoot)}\n >\n <header class=\"header\" ?hidden=${!showHeader}>\n <slot name=\"header\" @slotchange=${this.syncSlots}>\n ${this.title\n ? html`\n <h2 id=${this.titleId} class=\"title\">${modalIcon}${this.title}</h2>\n `\n : html`\n <span id=${this.titleId}></span>\n `}\n </slot>\n ${this.showClose\n ? html`\n <button\n class=\"close\"\n type=\"button\"\n aria-label=${t('feedback.modal.closeAriaLabel')}\n @click=${this.hide}\n >\n ×\n </button>\n `\n : null}\n </header>\n <div class=\"body\">\n <slot></slot>\n </div>\n <footer class=\"footer\" ?hidden=${!this.hasFooterSlot}>\n <slot name=\"footer\" @slotchange=${this.syncSlots}></slot>\n </footer>\n </div>\n </div>\n `;\n }\n}\n","import type { PropertyValues } from 'lit';\nimport { css, html, nothing } from 'lit';\nimport { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { styleMap } from 'lit/directives/style-map.js';\n\nimport { AitheElement } from '../../core/aithe-element';\nimport { aitheBaseStyles, aithePanelStyles } from '../../core/styles';\nimport { t } from '../../core/i18n';\n\n/**\n * Side drawer panel that slides in from any edge of the viewport.\n * 侧边抽屉面板,从视口任意边缘滑入。\n *\n * @slot - Default slot for drawer body content. 抽屉正文内容。\n * @slot header - Custom header content (overrides title property). 自定义头部内容。\n * @slot footer - Footer action area. 底部操作区域。\n * @fires aithe-open-change - Emitted when open state changes, with `{ open }`. 开关状态变更时触发。\n * @example\n * ```html\n * <aithe-drawer title=\"Details\" placement=\"right\" size=\"420px\">\n * <p>Drawer content here.</p>\n * </aithe-drawer>\n * ```\n */\n@customElement('aithe-drawer')\nexport class AitheDrawer extends AitheElement {\n /** Whether the drawer is open. 是否打开抽屉。 */\n @property({ type: Boolean, reflect: true }) open = false;\n /** Drawer title text. 抽屉标题文本。 */\n @property({ type: String }) title = '';\n /** Icon name to display before the title. 在标题前显示的图标名称。 */\n @property({ type: String }) icon = '';\n /** Edge from which the drawer slides in. 抽屉滑入的边缘方向。 */\n @property({ type: String }) placement: 'top' | 'right' | 'bottom' | 'left' = 'right';\n /** Drawer width (for left/right) or height (for top/bottom). 抽屉宽度(左右)或高度(上下)。 */\n @property({ type: String }) size = '420px';\n /** CSS selector for a mount target element (teleports the drawer). 挂载目标元素的 CSS 选择器。 */\n @property({ type: String }) mount = '';\n /** Whether clicking the backdrop mask closes the drawer. 点击遮罩是否关闭抽屉。 */\n @property({ type: Boolean, attribute: 'close-on-mask' }) closeOnMask = true;\n /** Whether pressing Escape closes the drawer. 按 Escape 是否关闭抽屉。 */\n @property({ type: Boolean, attribute: 'close-on-esc' }) closeOnEsc = true;\n\n @query('.panel') private panel?: HTMLElement;\n @queryAssignedElements({ slot: 'header' }) private headerNodes!: HTMLElement[];\n @queryAssignedElements({ slot: 'footer' }) private footerNodes!: HTMLElement[];\n\n @state() private hasHeaderSlot = false;\n @state() private hasFooterSlot = false;\n\n private lastFocused: HTMLElement | null = null;\n\n static readonly styles = [\n aitheBaseStyles,\n aithePanelStyles('.panel'),\n css`\n :host {\n display: contents;\n }\n\n .overlay {\n position: fixed;\n inset: 0;\n z-index: var(--aithe-z-drawer);\n display: flex;\n background: var(--aithe-color-overlay);\n opacity: 0;\n pointer-events: none;\n transition: opacity var(--aithe-duration-base) var(--aithe-ease-standard);\n }\n\n .overlay.open {\n opacity: 1;\n pointer-events: auto;\n }\n\n .top {\n align-items: flex-start;\n justify-content: center;\n }\n\n .right {\n align-items: stretch;\n justify-content: flex-end;\n }\n\n .bottom {\n align-items: flex-end;\n justify-content: center;\n }\n\n .left {\n align-items: stretch;\n justify-content: flex-start;\n }\n\n .panel {\n display: flex;\n flex-direction: column;\n max-width: 100vw;\n max-height: 100vh;\n transition: transform var(--aithe-duration-base) var(--aithe-ease-standard);\n }\n\n .panel.top {\n width: 100%;\n transform: translateY(-100%);\n }\n\n .panel.right {\n height: 100%;\n transform: translateX(100%);\n }\n\n .panel.bottom {\n width: 100%;\n transform: translateY(100%);\n }\n\n .panel.left {\n height: 100%;\n transform: translateX(-100%);\n }\n\n .overlay.open .panel {\n transform: translate(0, 0);\n }\n\n .header,\n .footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--aithe-space-4);\n padding: var(--aithe-space-lg);\n }\n\n .header {\n border-bottom: 1px solid var(--aithe-color-border);\n }\n\n .footer {\n border-top: 1px solid var(--aithe-color-border);\n }\n\n .title {\n margin: 0;\n display: inline-flex;\n align-items: center;\n gap: var(--aithe-space-2);\n font-size: var(--aithe-font-size-lg);\n font-weight: var(--aithe-font-weight-semibold);\n }\n\n .title-icon {\n flex-shrink: 0;\n color: var(--aithe-color-text-muted);\n }\n\n .body {\n flex: 1;\n overflow: auto;\n padding: var(--aithe-space-lg);\n }\n\n .close {\n width: 36px;\n height: 36px;\n border: none;\n border-radius: 50%;\n background: transparent;\n color: var(--aithe-color-text-muted);\n cursor: pointer;\n }\n `,\n ];\n\n connectedCallback(): void {\n super.connectedCallback();\n this.applyMountTarget();\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n document.removeEventListener('keydown', this.handleDocumentKeydown);\n }\n\n protected updated(changed: PropertyValues<this>): void {\n super.updated(changed);\n\n if (changed.has('mount')) {\n this.applyMountTarget();\n }\n\n if (changed.has('open')) {\n this.emit('aithe-open-change', { open: this.open });\n\n if (this.open) {\n this.lastFocused = document.activeElement as HTMLElement | null;\n document.addEventListener('keydown', this.handleDocumentKeydown);\n queueMicrotask(() => this.focusFirst(this.panel ?? this.renderRoot));\n } else {\n document.removeEventListener('keydown', this.handleDocumentKeydown);\n this.lastFocused?.focus?.();\n }\n }\n }\n\n /** Teleports the drawer into the mount target element. 将抽屉传送至挂载目标元素。 */\n private applyMountTarget(): void {\n if (!this.mount || typeof document === 'undefined') {\n return;\n }\n\n const target = document.querySelector(this.mount);\n if (target instanceof HTMLElement && this.parentElement !== target) {\n target.appendChild(this);\n }\n }\n\n /** Syncs header/footer slot presence state. 同步头部/底部插槽状态。 */\n private readonly syncSlots = (): void => {\n this.hasHeaderSlot = this.headerNodes.length > 0;\n this.hasFooterSlot = this.footerNodes.length > 0;\n };\n\n /** Handles Escape key to close drawer. 处理 Escape 键关闭抽屉。 */\n private readonly handleDocumentKeydown = (event: KeyboardEvent): void => {\n if (event.key === 'Escape' && this.closeOnEsc && this.open) {\n this.hide();\n }\n };\n\n /** Handles backdrop click to close drawer. 处理遮罩点击关闭抽屉。 */\n private readonly handleBackdropClick = (event: MouseEvent): void => {\n if (!this.closeOnMask || event.target !== event.currentTarget) {\n return;\n }\n\n this.hide();\n };\n\n /** Opens the drawer. 打开抽屉。 */\n show = (): void => {\n this.open = true;\n };\n\n /** Closes the drawer. 关闭抽屉。 */\n hide = (): void => {\n this.open = false;\n };\n\n render() {\n const isVertical = this.placement === 'left' || this.placement === 'right';\n const showHeader = true;\n const drawerIcon = this.icon\n ? html`\n <aithe-icon class=\"title-icon\" name=${this.icon} size=\"18\"></aithe-icon>\n `\n : nothing;\n\n return html`\n <div\n class=${classMap({\n overlay: true,\n open: this.open,\n [this.placement]: true,\n })}\n @click=${this.handleBackdropClick}\n >\n <aside\n class=${classMap({\n panel: true,\n [this.placement]: true,\n })}\n aria-modal=\"true\"\n role=\"dialog\"\n style=${styleMap(isVertical ? { width: this.size } : { height: this.size })}\n tabindex=\"-1\"\n @click=${(event: MouseEvent) => event.stopPropagation()}\n @keydown=${(event: KeyboardEvent) => this.trapFocus(event, this.panel ?? this.renderRoot)}\n >\n <header class=\"header\" ?hidden=${!showHeader}>\n <slot name=\"header\" @slotchange=${this.syncSlots}>\n ${this.title\n ? html`\n <h2 class=\"title\">${drawerIcon}${this.title}</h2>\n `\n : null}\n </slot>\n <button\n class=\"close\"\n type=\"button\"\n aria-label=${t('feedback.drawer.closeAriaLabel')}\n @click=${this.hide}\n >\n ×\n </button>\n </header>\n <div class=\"body\">\n <slot></slot>\n </div>\n <footer class=\"footer\" ?hidden=${!this.hasFooterSlot}>\n <slot name=\"footer\" @slotchange=${this.syncSlots}></slot>\n </footer>\n </aside>\n </div>\n `;\n }\n}\n","import type { PropertyValues } from 'lit';\nimport { css, html, nothing } from 'lit';\nimport { customElement, property, query } from 'lit/decorators.js';\n\nimport { AitheAnchoredOverlayElement } from '../../core/anchored-overlay';\nimport { aitheBaseStyles, aithePanelStyles } from '../../core/styles';\nimport { uid } from '../../core/utils';\n\n/**\n * Tooltip overlay that appears on hover/focus over an anchor element.\n * 工具提示浮层,在悬停/聚焦锚点元素时显示。\n *\n * @slot - Default slot for the anchor element. 锚点元素内容。\n * @slot content - Custom tooltip content (overrides `content` property). 自定义工具提示内容。\n * @fires aithe-open-change - Inherited from AnchoredOverlay; emitted on open state change. 开关状态变更时触发。\n * @example\n * ```html\n * <aithe-tooltip content=\"Help text here\" placement=\"top\">\n * <button>Hover me</button>\n * </aithe-tooltip>\n * ```\n */\n@customElement('aithe-tooltip')\nexport class AitheTooltip extends AitheAnchoredOverlayElement {\n /** Tooltip text content. 工具提示文本内容。 */\n @property({ type: String }) content = '';\n /** Display title for the tooltip anchor (shown as native tooltip). 工具提示锚点的显示标题(作为原生工具提示)。 */\n @property({ type: String }) title = '';\n /** Icon name to display before the tooltip content. 在工具提示内容前显示的图标名称。 */\n @property({ type: String }) icon = '';\n /** Tooltip placement relative to anchor. 工具提示相对于锚点的位置。 */\n @property({ type: String }) placement: 'top' | 'right' | 'bottom' | 'left' = 'top';\n\n @query('.tooltip') private tooltip?: HTMLElement;\n private readonly tooltipId = uid('aithe-tooltip');\n\n static readonly styles = [\n aitheBaseStyles,\n aithePanelStyles('.tooltip'),\n css`\n :host {\n display: inline-flex;\n }\n\n .tooltip-icon {\n flex-shrink: 0;\n color: var(--aithe-color-text-muted);\n }\n\n .tooltip {\n position: fixed;\n z-index: var(--aithe-z-tooltip);\n display: inline-flex;\n align-items: center;\n gap: var(--aithe-space-2);\n max-width: min(280px, calc(100vw - 24px));\n padding: var(--aithe-space-2) var(--aithe-space-3);\n border-radius: var(--aithe-radius-md);\n background: color-mix(in srgb, var(--aithe-color-surface-elevated) 84%, transparent);\n color: var(--aithe-color-text);\n font-size: var(--aithe-font-size-sm);\n line-height: var(--aithe-line-height-base);\n box-shadow: var(--aithe-shadow-2);\n pointer-events: none;\n }\n `,\n ];\n\n protected get panelElement(): HTMLElement | null {\n return this.tooltip ?? null;\n }\n\n protected updated(changed: PropertyValues<this>): void {\n super.updated(changed);\n\n if (changed.has('open')) {\n const anchor = this.anchorElement;\n if (this.open) {\n anchor.setAttribute('aria-describedby', this.tooltipId);\n } else if (anchor.getAttribute('aria-describedby') === this.tooltipId) {\n anchor.removeAttribute('aria-describedby');\n }\n }\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n this.addEventListener('mouseenter', this.showTooltip);\n this.addEventListener('mouseleave', this.hideTooltip);\n this.addEventListener('focusin', this.showTooltip);\n this.addEventListener('focusout', this.hideTooltip);\n this.addEventListener('keydown', this.handleKeydown);\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener('mouseenter', this.showTooltip);\n this.removeEventListener('mouseleave', this.hideTooltip);\n this.removeEventListener('focusin', this.showTooltip);\n this.removeEventListener('focusout', this.hideTooltip);\n this.removeEventListener('keydown', this.handleKeydown);\n }\n\n /** Shows the tooltip on hover/focus. 悬停/聚焦时显示工具提示。 */\n private readonly showTooltip = (): void => {\n this.open = true;\n };\n\n /** Hides the tooltip on unhover/unfocus. 取消悬停/聚焦时隐藏工具提示。 */\n private readonly hideTooltip = (): void => {\n this.open = false;\n };\n\n /** Hides tooltip on Escape key. 按 Escape 键隐藏工具提示。 */\n private readonly handleKeydown = (event: KeyboardEvent): void => {\n if (event.key === 'Escape') {\n this.open = false;\n }\n };\n\n render() {\n const tooltipIcon = this.icon\n ? html`\n <aithe-icon class=\"tooltip-icon\" name=${this.icon} size=\"14\"></aithe-icon>\n `\n : nothing;\n\n return html`\n <slot></slot>\n ${this.open\n ? html`\n <div id=${this.tooltipId} class=\"tooltip\" role=\"tooltip\">\n ${tooltipIcon}\n <slot name=\"content\">${this.content}</slot>\n </div>\n `\n : null}\n `;\n }\n}\n","import type { PropertyValues } from 'lit';\nimport { css, html } from 'lit';\nimport { customElement, property, query } from 'lit/decorators.js';\n\nimport { AitheAnchoredOverlayElement } from '../../core/anchored-overlay';\nimport { aitheBaseStyles, aithePanelStyles, aitheScrollbarStyles } from '../../core/styles';\n\n/**\n * Click-triggered popover panel anchored to a trigger element.\n * 点击触发的弹出面板,锚定于触发元素。\n *\n * @slot - Default slot for the trigger element. 触发元素内容。\n * @slot content - Custom popover content. 自定义弹出面板内容。\n * @fires aithe-open-change - Emitted when open state changes, with `{ open }`. 开关状态变更时触发。\n * @example\n * ```html\n * <aithe-popover placement=\"bottom\">\n * <button>Click me</button>\n * <slot name=\"content\"><p>Popover content here.</p></slot>\n * </aithe-popover>\n * ```\n */\n@customElement('aithe-popover')\nexport class AithePopover extends AitheAnchoredOverlayElement {\n /** Popover placement relative to trigger. 弹出面板相对于触发元素的位置。 */\n @property({ type: String }) placement: 'top' | 'right' | 'bottom' | 'left' = 'bottom';\n\n @query('.panel') private panel?: HTMLElement;\n\n static readonly styles = [\n aitheBaseStyles,\n aithePanelStyles('.panel'),\n aitheScrollbarStyles,\n css`\n :host {\n display: inline-flex;\n }\n\n .trigger {\n display: inline-flex;\n }\n\n .panel {\n position: fixed;\n z-index: var(--aithe-z-popover);\n min-width: 240px;\n max-width: min(360px, calc(100vw - 24px));\n max-height: min(70vh, 520px);\n overflow: auto;\n padding: var(--aithe-space-4);\n }\n `,\n ];\n\n protected get panelElement(): HTMLElement | null {\n return this.panel ?? null;\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n document.addEventListener('mousedown', this.handleOutsidePointer);\n document.addEventListener('keydown', this.handleDocumentKeydown);\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n document.removeEventListener('mousedown', this.handleOutsidePointer);\n document.removeEventListener('keydown', this.handleDocumentKeydown);\n }\n\n protected updated(changed: PropertyValues<this>): void {\n super.updated(changed);\n if (changed.has('open')) {\n this.emit('aithe-open-change', { open: this.open });\n }\n }\n\n /** Closes popover on outside pointer events. 点击外部时关闭弹出面板。 */\n private readonly handleOutsidePointer = (event: MouseEvent): void => {\n if (!this.open) {\n return;\n }\n\n const path = event.composedPath();\n if (!path.includes(this)) {\n this.open = false;\n }\n };\n\n /** Closes popover on Escape key. 按 Escape 键关闭弹出面板。 */\n private readonly handleDocumentKeydown = (event: KeyboardEvent): void => {\n if (event.key === 'Escape' && this.open) {\n this.open = false;\n }\n };\n\n /** Toggles popover open state. 切换弹出面板开关状态。 */\n private readonly togglePanel = (): void => {\n this.open = !this.open;\n };\n\n render() {\n return html`\n <span class=\"trigger\" @click=${this.togglePanel}>\n <slot></slot>\n </span>\n ${this.open\n ? html`\n <div\n class=\"panel\"\n role=\"dialog\"\n tabindex=\"-1\"\n @click=${(event: MouseEvent) => event.stopPropagation()}\n >\n <slot name=\"content\"></slot>\n </div>\n `\n : null}\n `;\n }\n}\n","import type { PropertyValues, TemplateResult } from 'lit';\nimport { css, html, nothing } from 'lit';\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\n\nimport { AitheAnchoredOverlayElement } from '../../core/anchored-overlay';\nimport type { AitheDropdownItem } from '../../core/types';\nimport { aitheBaseStyles, aithePanelStyles, aitheScrollbarStyles } from '../../core/styles';\n\n/**\n * Dropdown menu with nested submenus, keyboard navigation, and hover/click triggers.\n * 下拉菜单,支持嵌套子菜单、键盘导航和悬停/点击触发。\n *\n * @slot - Default slot for the trigger element. 触发元素内容。\n * @fires aithe-select - Emitted when a menu item is selected, with `{ item, path, id }`. 菜单项选中时触发。\n * @fires aithe-open-change - Emitted when open state changes, with `{ open }`. 开关状态变更时触发。\n * @example\n * ```html\n * <aithe-dropdown trigger=\"click\" items='[{\"id\":\"a\",\"label\":\"Action\"},{\"id\":\"b\",\"label\":\"Another\"}]'>\n * <button>Menu</button>\n * </aithe-dropdown>\n * ```\n */\n@customElement('aithe-dropdown')\nexport class AitheDropdown extends AitheAnchoredOverlayElement {\n /** Trigger mode: click or hover. 触发方式:点击或悬停。 */\n @property({ type: String }) trigger: 'click' | 'hover' = 'click';\n /** Display title for the dropdown trigger (shown as tooltip). 下拉菜单触发器的显示标题(作为工具提示)。 */\n @property({ type: String }) title = '';\n /** Icon name to display before the trigger slot content. 在触发器插槽内容前显示的图标名称。 */\n @property({ type: String }) icon = '';\n /** JSON string of dropdown menu items. 下拉菜单项的 JSON 字符串。 */\n @property({ type: String, attribute: 'items' }) itemsJson = '';\n /** Array of dropdown menu item objects. 下拉菜单项对象数组。 */\n @property({ attribute: false }) items: readonly AitheDropdownItem[] = [];\n /** Dropdown panel placement. 下拉面板位置。 */\n @property({ type: String }) placement: 'bottom-start' | 'bottom-end' | 'top-start' | 'top-end' =\n 'bottom-start';\n\n @query('.panel') private panel?: HTMLElement;\n\n @state() private openMap: Record<number, string> = {};\n @state() private submenuDirection: Record<string, 'left' | 'right'> = {};\n\n protected willUpdate(changed: PropertyValues<this>): void {\n if (changed.has('itemsJson') && this.itemsJson) {\n try {\n this.items = JSON.parse(this.itemsJson);\n } catch {\n this.items = [];\n }\n }\n }\n\n static readonly styles = [\n aitheBaseStyles,\n aithePanelStyles('.panel'),\n aitheScrollbarStyles,\n css`\n :host {\n display: inline-flex;\n }\n\n .trigger-icon {\n flex-shrink: 0;\n color: var(--aithe-color-text-muted);\n }\n\n .trigger {\n display: inline-flex;\n align-items: center;\n gap: var(--aithe-space-2);\n }\n\n .panel {\n position: fixed;\n z-index: var(--aithe-z-dropdown);\n min-width: 220px;\n max-width: min(320px, calc(100vw - 24px));\n padding: var(--aithe-space-2);\n }\n\n .menu,\n .submenu {\n margin: 0;\n padding: 0;\n list-style: none;\n }\n\n .menu {\n display: grid;\n gap: var(--aithe-space-1);\n }\n\n .submenu-anchor {\n position: relative;\n }\n\n .submenu {\n position: absolute;\n top: calc(var(--aithe-space-1) * -1);\n min-width: 220px;\n max-width: 260px;\n max-height: min(70vh, 360px);\n padding: var(--aithe-space-2);\n overflow: auto;\n border: 1px solid var(--aithe-color-border);\n border-radius: var(--aithe-radius-lg);\n background: var(--aithe-color-surface-elevated);\n box-shadow: var(--aithe-shadow-3);\n }\n\n .submenu.right {\n left: calc(100% - 8px);\n }\n\n .submenu.left {\n right: calc(100% - 8px);\n }\n\n .item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--aithe-space-4);\n width: 100%;\n min-height: 38px;\n padding: 0 var(--aithe-space-3);\n border: none;\n border-radius: var(--aithe-radius-md);\n background: transparent;\n color: var(--aithe-color-text);\n text-align: left;\n cursor: pointer;\n }\n\n .item:hover:not(:disabled),\n .item:focus-visible {\n background: var(--aithe-color-surface-muted);\n outline: none;\n }\n\n .item:disabled {\n opacity: 0.48;\n cursor: not-allowed;\n }\n\n .item.danger {\n color: var(--aithe-danger-7);\n }\n\n .item.primary {\n color: var(--aithe-primary-7);\n }\n\n .item.success {\n color: var(--aithe-success-7);\n }\n\n .item.warning {\n color: var(--aithe-warning-7);\n }\n\n .item-icon {\n flex-shrink: 0;\n color: var(--aithe-color-text-muted);\n margin-right: var(--aithe-space-2);\n }\n\n .shortcut {\n color: var(--aithe-color-text-subtle);\n font-size: var(--aithe-font-size-xs);\n }\n\n .arrow {\n color: var(--aithe-color-text-subtle);\n }\n\n .divider {\n height: 1px;\n margin: var(--aithe-space-1) 0;\n background: var(--aithe-color-border);\n }\n `,\n ];\n\n protected get panelElement(): HTMLElement | null {\n return this.panel ?? null;\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n document.addEventListener('mousedown', this.handleOutsidePointer);\n document.addEventListener('keydown', this.handleDocumentKeydown);\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n document.removeEventListener('mousedown', this.handleOutsidePointer);\n document.removeEventListener('keydown', this.handleDocumentKeydown);\n }\n\n protected updated(changed: PropertyValues<this>): void {\n super.updated(changed);\n\n if (changed.has('open')) {\n this.emit('aithe-open-change', { open: this.open });\n\n if (this.open) {\n queueMicrotask(() => this.focusFirstMenuItem());\n } else {\n this.openMap = {};\n }\n }\n }\n\n /** Closes dropdown on outside pointer events. 点击外部时关闭下拉菜单。 */\n private readonly handleOutsidePointer = (event: MouseEvent): void => {\n if (!this.open) {\n return;\n }\n\n if (!event.composedPath().includes(this)) {\n this.open = false;\n }\n };\n\n /** Closes dropdown on Escape key. 按 Escape 键关闭下拉菜单。 */\n private readonly handleDocumentKeydown = (event: KeyboardEvent): void => {\n if (event.key === 'Escape' && this.open) {\n this.open = false;\n }\n };\n\n /** Focuses the first non-disabled menu item. 聚焦第一个非禁用菜单项。 */\n private focusFirstMenuItem(): void {\n const first = this.renderRoot.querySelector<HTMLButtonElement>('.item:not(:disabled)');\n first?.focus();\n }\n\n /** Toggles dropdown open state (click trigger only). 切换下拉菜单开关状态(仅点击触发)。 */\n private readonly toggleOpen = (): void => {\n if (this.trigger === 'click') {\n this.open = !this.open;\n }\n };\n\n /** Opens dropdown on hover (hover trigger only). 悬停时打开下拉菜单(仅悬停触发)。 */\n private readonly openOnHover = (): void => {\n if (this.trigger === 'hover') {\n this.open = true;\n }\n };\n\n /** Closes dropdown on hover end (hover trigger only). 悬停结束时关闭下拉菜单(仅悬停触发)。 */\n private readonly closeOnHoverEnd = (): void => {\n if (this.trigger === 'hover') {\n this.open = false;\n this.openMap = {};\n }\n };\n\n /** Opens a submenu at the given path and determines direction. 在指定路径打开子菜单并确定方向。 */\n private setSubmenu(path: string, event?: MouseEvent): void {\n const level = path.split('-').length - 1;\n this.openMap = Object.fromEntries(\n Object.entries(this.openMap)\n .filter(([depth]) => Number(depth) < level)\n .concat([[String(level), path]]),\n );\n\n if (event?.currentTarget instanceof HTMLElement) {\n const rect = event.currentTarget.getBoundingClientRect();\n const direction = window.innerWidth - rect.right < 260 ? 'left' : 'right';\n this.submenuDirection = {\n ...this.submenuDirection,\n [path]: direction,\n };\n }\n }\n\n /** Closes all submenus deeper than the given level. 关闭比给定层级更深的子菜单。 */\n private closeDeeperSubmenus(level: number): void {\n this.openMap = Object.fromEntries(\n Object.entries(this.openMap).filter(([depth]) => Number(depth) < level),\n );\n }\n\n /** Handles leaf item selection and emits select event. 处理叶子项选中并触发 select 事件。 */\n private handleItemSelect(item: AitheDropdownItem, path: string): void {\n if (item.disabled) {\n return;\n }\n\n if (item.children?.length) {\n return;\n }\n\n this.emit('aithe-select', { item, path, id: item.id });\n this.open = false;\n this.openMap = {};\n }\n\n /** Returns visible sibling menu items for keyboard navigation. 返回可见的同级菜单项用于键盘导航。 */\n private getVisibleSiblingItems(current: HTMLElement): HTMLButtonElement[] {\n const parentMenu = current.closest('[data-menu-level]');\n if (!parentMenu) {\n return [];\n }\n\n return Array.from(\n parentMenu.querySelectorAll<HTMLButtonElement>(':scope > li > .item:not(:disabled)'),\n );\n }\n\n /** Moves focus by delta offset within sibling items. 在同级项中按偏移量移动焦点。 */\n private moveFocus(current: HTMLButtonElement, delta: number): void {\n const items = this.getVisibleSiblingItems(current);\n if (!items.length) {\n return;\n }\n\n const currentIndex = items.indexOf(current);\n const nextIndex = (currentIndex + delta + items.length) % items.length;\n items[nextIndex]?.focus();\n }\n\n /** Focuses the first item in a submenu. 聚焦子菜单中的第一个项。 */\n private focusSubmenu(path: string): void {\n queueMicrotask(() => {\n const target = this.renderRoot.querySelector<HTMLButtonElement>(\n `button[data-parent-path=\"${path}\"]`,\n );\n target?.focus();\n });\n }\n\n /** Handles keyboard navigation within the menu. 处理菜单内的键盘导航。 */\n private readonly handleMenuKeydown = (event: KeyboardEvent): void => {\n const current = event.target as HTMLButtonElement;\n const itemPath = current.dataset.path ?? '';\n const parentPath = current.dataset.parentPath ?? '';\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.moveFocus(current, 1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.moveFocus(current, -1);\n break;\n case 'ArrowRight':\n if (current.dataset.hasChildren === 'true') {\n event.preventDefault();\n this.setSubmenu(itemPath);\n this.focusSubmenu(itemPath);\n }\n break;\n case 'ArrowLeft':\n if (parentPath) {\n event.preventDefault();\n const parentButton = this.renderRoot.querySelector<HTMLButtonElement>(\n `button[data-path=\"${parentPath}\"]`,\n );\n const level = itemPath.split('-').length - 1;\n this.closeDeeperSubmenus(level);\n parentButton?.focus();\n }\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n current.click();\n break;\n default:\n break;\n }\n };\n\n /** Renders a single menu item or divider. 渲染单个菜单项或分割线。 */\n private renderItem(\n item: AitheDropdownItem,\n path: string,\n level = 0,\n parentPath = '',\n ): TemplateResult {\n if (item.divider) {\n return html`\n <li class=\"divider\" role=\"separator\"></li>\n `;\n }\n\n const submenuPath = this.openMap[level] === path;\n const hasChildren = Boolean(item.children?.length);\n const direction = this.submenuDirection[path] ?? 'right';\n\n const intentClass = item.intent && item.intent !== 'default' ? item.intent : '';\n\n return html`\n <li class=\"submenu-anchor\" @mouseleave=${() => this.closeDeeperSubmenus(level + 1)}>\n <button\n class=${classMap({\n item: true,\n [intentClass]: Boolean(intentClass),\n })}\n aria-expanded=${hasChildren ? String(submenuPath) : 'false'}\n aria-haspopup=${hasChildren ? 'menu' : 'false'}\n ?disabled=${item.disabled}\n data-has-children=${String(hasChildren)}\n data-parent-path=${parentPath}\n data-path=${path}\n type=\"button\"\n @click=${() => this.handleItemSelect(item, path)}\n @keydown=${this.handleMenuKeydown}\n @mouseenter=${(event: MouseEvent) => {\n if (hasChildren) {\n this.setSubmenu(path, event);\n } else {\n this.closeDeeperSubmenus(level + 1);\n }\n }}\n >\n <span style=\"display:inline-flex;align-items:center;gap:var(--aithe-space-2);\">\n ${item.icon\n ? html`\n <aithe-icon class=\"item-icon\" name=${item.icon} size=\"16\"></aithe-icon>\n `\n : nothing}${item.label}\n </span>\n <span>\n ${item.shortcut\n ? html`\n <span class=\"shortcut\">${item.shortcut}</span>\n `\n : null}\n ${hasChildren\n ? html`\n <span class=\"arrow\">›</span>\n `\n : null}\n </span>\n </button>\n ${hasChildren && submenuPath\n ? html`\n <ul\n class=${classMap({ submenu: true, [direction]: true })}\n data-menu-level=${level + 1}\n role=\"menu\"\n >\n ${item.children?.map((child, index) =>\n this.renderItem(child, `${path}-${index}`, level + 1, path),\n )}\n </ul>\n `\n : null}\n </li>\n `;\n }\n\n render() {\n return html`\n <span\n class=\"trigger\"\n title=${this.title}\n @click=${this.toggleOpen}\n @mouseenter=${this.openOnHover}\n @mouseleave=${this.closeOnHoverEnd}\n >\n ${this.icon\n ? html`\n <aithe-icon class=\"trigger-icon\" name=${this.icon} size=\"16\"></aithe-icon>\n `\n : nothing}\n <slot></slot>\n </span>\n ${this.open\n ? html`\n <div\n class=\"panel\"\n role=\"menu\"\n @mouseenter=${this.openOnHover}\n @mouseleave=${this.closeOnHoverEnd}\n >\n <ul class=\"menu\" data-menu-level=\"0\">\n ${this.items.map((item, index) => this.renderItem(item, `${index}`))}\n </ul>\n </div>\n `\n : null}\n `;\n }\n}\n","import { css, html, nothing } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\n\n/**\n * Auto-dismiss toast message displayed at the top of the viewport.\n * 自动消失的轻提示消息,显示在视口顶部。\n *\n * @slot - Default slot (unused; content driven by `content` property). 默认插槽(未使用,内容由 content 属性控制)。\n * @fires aithe-close - Emitted when the toast auto-dismisses after duration. 自动消失后触发。\n * @example\n * ```html\n * <aithe-toast content=\"Saved successfully\" type=\"success\" duration=\"2400\"></aithe-toast>\n * ```\n */\n@customElement('aithe-toast')\nexport class AitheToast extends AitheElement {\n /** Toast message text. 提示消息文本。 */\n @property({ type: String }) content = '';\n /** Display title for the toast (shown as tooltip). 提示消息的显示标题(作为工具提示)。 */\n @property({ type: String }) title = '';\n /** Icon name to display before the content. 在内容前显示的图标名称。 */\n @property({ type: String }) icon = '';\n /** Toast color variant. 提示颜色类型。 */\n @property({ type: String }) type: 'default' | 'success' | 'warning' | 'danger' = 'default';\n /** Auto-dismiss duration in milliseconds. 自动消失时长(毫秒)。 */\n @property({ type: Number }) duration = 2400;\n /** Whether the toast is currently visible. 是否当前可见。 */\n @property({ type: Boolean, reflect: true }) visible = true;\n\n private timer = 0;\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n position: fixed;\n top: 24px;\n left: 50%;\n z-index: var(--aithe-z-popover);\n transform: translateX(-50%);\n }\n\n .toast {\n display: inline-flex;\n align-items: center;\n gap: var(--aithe-space-2);\n min-width: 220px;\n padding: var(--aithe-space-3) var(--aithe-space-4);\n border: 1px solid var(--aithe-color-border);\n border-radius: var(--aithe-radius-full);\n background: var(--aithe-color-surface-elevated);\n box-shadow: var(--aithe-shadow-3);\n color: var(--aithe-color-text);\n }\n\n .toast-icon {\n flex-shrink: 0;\n color: var(--aithe-color-text-muted);\n }\n\n .success {\n border-color: rgba(53, 166, 111, 0.28);\n }\n\n .warning {\n border-color: rgba(209, 143, 41, 0.28);\n }\n\n .danger {\n border-color: rgba(223, 82, 107, 0.28);\n }\n `,\n ];\n\n connectedCallback(): void {\n super.connectedCallback();\n this.startTimer();\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n window.clearTimeout(this.timer);\n }\n\n protected updated(changed: Map<string, unknown>): void {\n if (changed.has('content') || changed.has('duration') || changed.has('visible')) {\n this.startTimer();\n }\n }\n\n /** Starts the auto-dismiss timer. 启动自动消失计时器。 */\n private startTimer(): void {\n window.clearTimeout(this.timer);\n if (!this.visible || !this.duration) {\n return;\n }\n\n this.timer = window.setTimeout(() => {\n this.visible = false;\n this.emit('aithe-close');\n }, this.duration);\n }\n\n render() {\n if (!this.visible || !this.content) return html``;\n\n const toastIcon = this.icon\n ? html`\n <aithe-icon class=\"toast-icon\" name=${this.icon} size=\"16\"></aithe-icon>\n `\n : nothing;\n\n return html`\n <div class=${classMap({ toast: true, [this.type]: true })} title=${this.title}>\n ${toastIcon}${this.content}\n </div>\n `;\n }\n}\n","import { css, html, nothing } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\n\n/**\n * Inline banner / alert strip with optional close button.\n * 内联横幅/警告条,支持可选关闭按钮。\n *\n * @slot - Default slot for alert body content. 警告正文内容。\n * @fires aithe-close - Emitted when the alert is closed. 关闭时触发。\n * @example\n * ```html\n * <aithe-alert type=\"warning\" title=\"Warning\" closable>\n * Please review before proceeding.\n * </aithe-alert>\n * ```\n */\n@customElement('aithe-alert')\nexport class AitheAlert extends AitheElement {\n /** Alert color variant. 警告颜色类型。 */\n @property({ type: String }) type: 'default' | 'success' | 'warning' | 'danger' = 'default';\n /** Alert title text. 警告标题文本。 */\n @property({ type: String }) title = '';\n /** Icon name to display before the title. 在标题前显示的图标名称。 */\n @property({ type: String }) icon = '';\n /** Whether the alert shows a close button. 是否显示关闭按钮。 */\n @property({ type: Boolean }) closable = false;\n /** Whether the alert renders as a full-width banner. 是否以全宽横幅样式渲染。 */\n @property({ type: Boolean }) banner = false;\n /** Whether the alert is visible (open). 是否可见(打开)。 */\n @property({ type: Boolean, reflect: true }) open = true;\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: block;\n }\n\n .alert {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: var(--aithe-space-4);\n padding: var(--aithe-space-4);\n border: 1px solid var(--aithe-color-border);\n border-radius: var(--aithe-radius-lg);\n background: var(--aithe-color-surface-elevated);\n }\n\n .alert.banner {\n border-radius: var(--aithe-radius-md);\n }\n\n .title {\n margin: 0 0 var(--aithe-space-1);\n display: inline-flex;\n align-items: center;\n gap: var(--aithe-space-2);\n font-weight: var(--aithe-font-weight-semibold);\n }\n\n .title-icon {\n flex-shrink: 0;\n color: var(--aithe-color-text-muted);\n }\n\n .success {\n border-color: rgba(53, 166, 111, 0.24);\n }\n\n .warning {\n border-color: rgba(209, 143, 41, 0.24);\n }\n\n .danger {\n border-color: rgba(223, 82, 107, 0.24);\n }\n\n button {\n border: none;\n background: transparent;\n color: var(--aithe-color-text-subtle);\n cursor: pointer;\n }\n `,\n ];\n\n private readonly close = (): void => {\n this.open = false;\n this.emit('aithe-close');\n };\n\n render() {\n if (!this.open) return html``;\n\n const titleIcon = this.icon\n ? html`\n <aithe-icon class=\"title-icon\" name=${this.icon} size=\"16\"></aithe-icon>\n `\n : nothing;\n const titleBlock = this.title\n ? html`\n <div class=\"title\">${titleIcon}${this.title}</div>\n `\n : null;\n const closeBtn = this.closable\n ? html`\n <button type=\"button\" @click=${this.close}>×</button>\n `\n : null;\n\n return html`\n <div class=${classMap({ alert: true, banner: this.banner, [this.type]: true })}>\n <div>\n ${titleBlock}\n <slot></slot>\n </div>\n ${closeBtn}\n </div>\n `;\n }\n}\n","import { css, html, nothing } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\n\n/**\n * Top-right notification card with auto-dismiss timer and close button.\n * 右上角通知卡片,支持自动消失计时器和关闭按钮。\n *\n * @slot - Default slot (unused; content driven by `content` property). 默认插槽(未使用,内容由 content 属性控制)。\n * @fires aithe-close - Emitted when the notification auto-dismisses or is manually closed. 通知自动消失或手动关闭时触发。\n * @example\n * ```html\n * <aithe-notification title=\"Update\" content=\"New version available\" type=\"success\" duration=\"3200\"></aithe-notification>\n * ```\n */\n@customElement('aithe-notification')\nexport class AitheNotification extends AitheElement {\n /** Notification title text. 通知标题文本。 */\n @property({ type: String }) title = '';\n /** Icon name to display before the title. 在标题前显示的图标名称。 */\n @property({ type: String }) icon = '';\n /** Notification body text. 通知正文文本。 */\n @property({ type: String }) content = '';\n /** Notification color variant. 通知颜色类型。 */\n @property({ type: String }) type: 'default' | 'success' | 'warning' | 'danger' = 'default';\n /** Auto-dismiss duration in milliseconds. 自动消失时长(毫秒)。 */\n @property({ type: Number }) duration = 3200;\n /** Whether the notification is visible. 是否显示通知。 */\n @property({ type: Boolean, reflect: true }) open = true;\n\n private timer = 0;\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n position: fixed;\n top: 24px;\n right: 24px;\n z-index: var(--aithe-z-popover);\n }\n\n .card {\n width: min(360px, calc(100vw - 48px));\n padding: var(--aithe-space-4);\n border: 1px solid var(--aithe-color-border);\n border-radius: var(--aithe-radius-xl);\n background: var(--aithe-color-surface-elevated);\n box-shadow: var(--aithe-shadow-4);\n }\n\n .head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--aithe-space-3);\n margin-bottom: var(--aithe-space-2);\n }\n\n .title {\n display: inline-flex;\n align-items: center;\n gap: var(--aithe-space-2);\n font-weight: var(--aithe-font-weight-semibold);\n }\n\n .title-icon {\n flex-shrink: 0;\n color: var(--aithe-color-text-muted);\n }\n\n .content {\n color: var(--aithe-color-text-muted);\n }\n\n .success {\n border-color: rgba(53, 166, 111, 0.28);\n }\n\n .warning {\n border-color: rgba(209, 143, 41, 0.28);\n }\n\n .danger {\n border-color: rgba(223, 82, 107, 0.28);\n }\n\n button {\n border: none;\n background: transparent;\n color: var(--aithe-color-text-subtle);\n cursor: pointer;\n }\n `,\n ];\n\n connectedCallback(): void {\n super.connectedCallback();\n this.startTimer();\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n window.clearTimeout(this.timer);\n }\n\n protected updated(changed: Map<string, unknown>): void {\n if (changed.has('duration') || changed.has('open') || changed.has('content')) {\n this.startTimer();\n }\n }\n\n private startTimer(): void {\n window.clearTimeout(this.timer);\n if (!this.open || !this.duration) {\n return;\n }\n\n this.timer = window.setTimeout(() => {\n this.open = false;\n this.emit('aithe-close');\n }, this.duration);\n }\n\n private readonly close = (): void => {\n this.open = false;\n this.emit('aithe-close');\n };\n\n render() {\n if (!this.open) return html``;\n\n const notifIcon = this.icon\n ? html`\n <aithe-icon class=\"title-icon\" name=${this.icon} size=\"16\"></aithe-icon>\n `\n : nothing;\n\n return html`\n <div class=${classMap({ card: true, [this.type]: true })}>\n <div class=\"head\">\n <span class=\"title\">${notifIcon}${this.title}</span>\n <button type=\"button\" @click=${this.close}>×</button>\n </div>\n <div class=\"content\">${this.content}</div>\n </div>\n `;\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\n\n/**\n * Inline or fullscreen loading overlay with spinner and optional tip text.\n * 内联或全屏加载遮罩层,带旋转器和可选提示文本。\n *\n * @slot - Default slot for content to be covered by the loading overlay. 被加载遮罩层覆盖的内容。\n * @example\n * ```html\n * <aithe-loading spinning tip=\"Loading...\" size=\"md\">\n * <div>Content behind the overlay</div>\n * </aithe-loading>\n * <aithe-loading fullscreen tip=\"Please wait...\"></aithe-loading>\n * ```\n */\n@customElement('aithe-loading')\nexport class AitheLoading extends AitheElement {\n /** Whether the loading spinner is active. 是否显示加载旋转器。 */\n @property({ type: Boolean }) spinning = true;\n /** Spinner size scale. 旋转器尺寸规格。 */\n @property({ type: String }) size: 'sm' | 'md' | 'lg' = 'md';\n /** Tip text displayed below the spinner. 旋转器下方显示的提示文本。 */\n @property({ type: String }) tip = '';\n /** Whether the loading overlay covers the entire viewport. 加载遮罩是否覆盖整个视口。 */\n @property({ type: Boolean }) fullscreen = false;\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n position: relative;\n display: block;\n }\n\n .overlay {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--aithe-space-3);\n background: rgba(255, 255, 255, 0.48);\n backdrop-filter: blur(6px);\n }\n\n .overlay.fullscreen {\n position: fixed;\n z-index: var(--aithe-z-modal);\n background: var(--aithe-color-overlay);\n }\n\n .spinner {\n border: 3px solid rgba(77, 141, 255, 0.18);\n border-top-color: var(--aithe-primary-6);\n border-radius: 50%;\n animation: aithe-spin 0.85s linear infinite;\n }\n\n .spinner.sm {\n width: 20px;\n height: 20px;\n }\n\n .spinner.md {\n width: 28px;\n height: 28px;\n }\n\n .spinner.lg {\n width: 40px;\n height: 40px;\n }\n\n .tip {\n color: var(--aithe-color-text-muted);\n }\n\n @keyframes aithe-spin {\n to {\n transform: rotate(360deg);\n }\n }\n `,\n ];\n\n render() {\n const tipContent = this.tip\n ? html`\n <span class=\"tip\">${this.tip}</span>\n `\n : null;\n\n return html`\n <slot></slot>\n ${this.spinning\n ? html`\n <div class=${classMap({ overlay: true, fullscreen: this.fullscreen })}>\n <span class=${classMap({ spinner: true, [this.size]: true })}></span>\n ${tipContent}\n </div>\n `\n : null}\n `;\n }\n}\n","import { LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport type { AitheIntent } from '../../core/types';\n\ntype CellRenderer = (value: unknown, record: Record<string, unknown>, rowIndex: number) => unknown;\n\n/**\n * Column definition element for `aithe-table` (DOM-defined mode).\n * `aithe-table` 的列定义元素(DOM 定义模式)。\n *\n * Place `<aithe-table-column>` elements as children of `<aithe-table>` to define columns declaratively.\n * 将 `<aithe-table-column>` 元素作为 `<aithe-table>` 的子元素放置,以声明式定义列。\n *\n * @example\n * ```html\n * <aithe-table .data=${records}>\n * <aithe-table-column id=\"name\" title=\"Name\" sortable></aithe-table-column>\n * <aithe-table-column id=\"action\" title=\"Action\" .cellRenderer=${(v, r, i) => html`<button>Edit</button>`}></aithe-table-column>\n * </aithe-table>\n * ```\n */\n@customElement('aithe-table-column')\nexport class AitheTableColumn extends LitElement {\n /** Unique column identifier. 唯一列标识。 */\n @property({ type: String }) id = '';\n /** Header title. 表头标题。 */\n @property({ type: String }) title = '';\n /** Property path on the data record. 数据记录上的属性路径。 */\n @property({ type: String }) dataIndex = '';\n /** Fixed column width. 固定列宽。 */\n @property({ type: String }) width = '';\n /** Text alignment. 文本对齐方式。 */\n @property({ type: String }) align: 'left' | 'center' | 'right' = 'left';\n /** Enable client-side sorting. 启用客户端排序。 */\n @property({ type: Boolean }) sortable = false;\n /** Icon name rendered in the header via aithe-icon. 通过 aithe-icon 在表头渲染的图标名称。 */\n @property({ type: String }) icon = '';\n /** Visual intent / semantic color for the column. 列的视觉意图/语义色。 */\n @property({ type: String, attribute: 'intent' }) intent: AitheIntent = 'default';\n /** Custom cell renderer (only available in DOM-defined mode). 自定义单元格渲染器(仅在 DOM 定义模式下可用)。 */\n @property({ attribute: false }) cellRenderer?: CellRenderer;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.hidden = true;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'aithe-table-column': AitheTableColumn;\n }\n}\n","import { css, html, nothing } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { styleMap } from 'lit/directives/style-map.js';\n\nimport { AitheElement } from '../../core/aithe-element';\nimport type { AitheIntent, AitheTableColumnMeta } from '../../core/types';\nimport { aitheBaseStyles, aitheScrollbarStyles } from '../../core/styles';\nimport { getValueByPath } from '../../core/utils';\nimport { t } from '../../core/i18n';\nimport './table-column';\n\ntype TableRecord = Record<string, unknown>;\n\n/**\n * Data table with sorting, row selection, and striped/bordered styling.\n * 数据表格,支持排序、行选择以及斑马纹/边框样式。\n *\n * Supports two column definition modes:\n * 支持两种列定义模式:\n * - **Data-driven**: Set `columns` / `columns-json` attribute (no render function).\n * **数据驱动**:设置 `columns` / `columns-json` 属性(无渲染函数)。\n * - **DOM-defined**: Place `<aithe-table-column>` children (supports `cellRenderer` for custom rendering).\n * **DOM 定义**:放置 `<aithe-table-column>` 子元素(支持 `cellRenderer` 自定义渲染)。\n *\n * @slot empty - Content shown when the table has no data. 无数据时显示的内容。\n * @slot - Default slot for `<aithe-table-column>` children. 用于 `<aithe-table-column>` 子元素的默认插槽。\n *\n * @fires aithe-sort-change - Emitted when a sortable column header is clicked with `{ sortKey, sortOrder }`. 可排序列头被点击时发出 `{ sortKey, sortOrder }`。\n * @fires aithe-selection-change - Emitted when row selection changes with `{ selectedKeys }`. 行选择变更时发出 `{ selectedKeys }`。\n * @fires aithe-row-click - Emitted when a row is clicked with `{ record, rowIndex }`. 行被点击时发出 `{ record, rowIndex }`。\n *\n * @example Data-driven mode / 数据驱动模式\n * ```html\n * <aithe-table\n * columns-json='[{\"id\":\"name\",\"title\":\"Name\",\"sortable\":true}]'\n * data-json='[{\"name\":\"Alice\"},{\"name\":\"Bob\"}]'\n * striped\n * selectable\n * ></aithe-table>\n * ```\n *\n * @example DOM-defined mode / DOM 定义模式\n * ```html\n * <aithe-table .data=${records} striped>\n * <aithe-table-column id=\"name\" title=\"Name\" sortable></aithe-table-column>\n * <aithe-table-column id=\"action\" title=\"Action\"\n * .cellRenderer=${(v, r, i) => html`<button @click=${() => edit(i)}>Edit</button>`}\n * ></aithe-table-column>\n * </aithe-table>\n * ```\n */\n@customElement('aithe-table')\nexport class AitheTable extends AitheElement {\n /** JSON string of column definitions (parsed into `columns`). 列定义的 JSON 字符串(解析为 `columns`)。 */\n @property({ type: String, attribute: 'columns' }) columnsJson = '';\n /** Array of column definitions (prefer this over `columnsJson` in JS). 列定义数组(在 JS 中优先使用此属性而非 `columnsJson`)。 */\n @property({ attribute: false }) columns: AitheTableColumnMeta<TableRecord>[] = [];\n /** JSON string of row data (parsed into `data`). 行数据的 JSON 字符串(解析为 `data`)。 */\n @property({ type: String, attribute: 'data' }) dataJson = '';\n /** Array of row data (prefer this over `dataJson` in JS). 行数据数组(在 JS 中优先使用此属性而非 `dataJson`)。 */\n @property({ attribute: false }) data: TableRecord[] = [];\n /** Unique key field for each row. 每行的唯一键字段。 */\n @property({ type: String, attribute: 'row-key' }) rowKey = 'id';\n /** Whether rows use alternating background colors. 行是否使用交替背景色。 */\n @property({ type: Boolean }) striped = false;\n /** Whether cells have vertical border lines. 单元格是否有垂直边框线。 */\n @property({ type: Boolean }) bordered = true;\n /** Whether rows highlight on hover. 行是否在悬停时高亮。 */\n @property({ type: Boolean, attribute: 'hoverable' }) hoverable = true;\n /** Whether rows can be selected via checkboxes. 行是否可通过复选框选择。 */\n @property({ type: Boolean }) selectable = false;\n /** Current sort column key. 当前排序的列键。 */\n @property({ type: String, attribute: 'sort-key' }) sortKey = '';\n /** Current sort direction. 当前排序方向。 */\n @property({ type: String, attribute: 'sort-order' }) sortOrder: 'asc' | 'desc' | '' = '';\n\n @state() private selectedKeys: string[] = [];\n @state() private slotColumns: AitheTableColumnMeta<TableRecord>[] = [];\n\n private get resolvedColumns(): AitheTableColumnMeta<TableRecord>[] {\n if (this.slotColumns.length > 0) {\n return this.slotColumns;\n }\n return this.columns;\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.slotObserver = new MutationObserver(() => this.syncSlotColumns());\n this.slotObserver.observe(this, { childList: true, subtree: true, attributes: true });\n this.syncSlotColumns();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.slotObserver?.disconnect();\n }\n\n private slotObserver?: MutationObserver;\n\n private syncSlotColumns(): void {\n const colEls = this.querySelectorAll('aithe-table-column');\n if (colEls.length === 0) {\n if (this.slotColumns.length > 0) {\n this.slotColumns = [];\n }\n return;\n }\n\n const cols: AitheTableColumnMeta<TableRecord>[] = [];\n colEls.forEach((el) => {\n const col = el as HTMLElement & {\n id: string;\n title: string;\n dataIndex: string;\n width: string;\n align: 'left' | 'center' | 'right';\n sortable: boolean;\n icon: string;\n intent: string;\n cellRenderer?: (value: unknown, record: TableRecord, rowIndex: number) => unknown;\n };\n\n const def: AitheTableColumnMeta<TableRecord> = {\n id: col.id,\n title: col.title,\n dataIndex: col.dataIndex || col.id,\n width: col.width || undefined,\n align: col.align,\n sortable: col.sortable,\n icon: col.icon || undefined,\n intent: (col.intent as AitheIntent) || undefined,\n };\n\n if (typeof col.cellRenderer === 'function') {\n def.render = col.cellRenderer;\n }\n\n cols.push(def);\n });\n\n this.slotColumns = cols;\n }\n\n protected willUpdate(changed: Map<string, unknown>): void {\n if (changed.has('columnsJson') && this.columnsJson) {\n try {\n this.columns = JSON.parse(this.columnsJson);\n } catch {\n this.columns = [];\n }\n }\n\n if (changed.has('dataJson') && this.dataJson) {\n try {\n this.data = JSON.parse(this.dataJson);\n } catch {\n this.data = [];\n }\n }\n }\n\n static readonly styles = [\n aitheBaseStyles,\n aitheScrollbarStyles,\n css`\n :host {\n display: block;\n }\n\n .table-wrap {\n overflow: auto;\n border-radius: var(--aithe-radius-xl);\n background: var(--aithe-color-surface-elevated);\n box-shadow: var(--aithe-shadow-1);\n }\n\n table {\n width: 100%;\n border-collapse: collapse;\n }\n\n th,\n td {\n padding: var(--aithe-space-4);\n text-align: left;\n border-bottom: 1px solid var(--aithe-color-border);\n vertical-align: middle;\n }\n\n .bordered th,\n .bordered td {\n border-inline-end: 1px solid var(--aithe-color-border);\n }\n\n .bordered th:last-child,\n .bordered td:last-child {\n border-inline-end: none;\n }\n\n thead th {\n position: sticky;\n top: 0;\n background: color-mix(in srgb, var(--aithe-color-surface-elevated) 92%, transparent);\n color: var(--aithe-color-text-muted);\n font-size: var(--aithe-font-size-sm);\n font-weight: var(--aithe-font-weight-semibold);\n z-index: 1;\n }\n\n tbody tr.hoverable:hover {\n background: var(--aithe-color-surface-muted);\n }\n\n tbody tr.striped:nth-child(even) {\n background: color-mix(in srgb, var(--aithe-color-surface-muted) 72%, transparent);\n }\n\n .sorter {\n display: inline-flex;\n align-items: center;\n gap: var(--aithe-space-2);\n border: none;\n padding: 0;\n background: transparent;\n color: inherit;\n cursor: pointer;\n }\n\n .sort-icon {\n color: var(--aithe-color-text-subtle);\n }\n\n .empty {\n padding: var(--aithe-space-8);\n text-align: center;\n color: var(--aithe-color-text-muted);\n }\n\n .checkbox {\n width: 16px;\n height: 16px;\n }\n\n .header-icon {\n flex-shrink: 0;\n color: var(--aithe-color-text-muted);\n }\n\n .cell.primary {\n color: var(--aithe-primary-7);\n }\n .cell.success {\n color: var(--aithe-success-7);\n }\n .cell.warning {\n color: var(--aithe-warning-7);\n }\n .cell.danger {\n color: var(--aithe-danger-7);\n }\n `,\n ];\n\n private get rowData(): TableRecord[] {\n if (!this.sortKey || !this.sortOrder) {\n return this.data;\n }\n\n const columns = [...this.data];\n columns.sort((left, right) => {\n const leftValue = getValueByPath(left, this.sortKey);\n const rightValue = getValueByPath(right, this.sortKey);\n\n if (typeof leftValue === 'number' && typeof rightValue === 'number') {\n return this.sortOrder === 'asc' ? leftValue - rightValue : rightValue - leftValue;\n }\n\n const normalizedLeft = String(leftValue ?? '');\n const normalizedRight = String(rightValue ?? '');\n return this.sortOrder === 'asc'\n ? normalizedLeft.localeCompare(normalizedRight)\n : normalizedRight.localeCompare(normalizedLeft);\n });\n\n return columns;\n }\n\n private get allChecked(): boolean {\n return this.rowData.length > 0 && this.selectedKeys.length === this.rowData.length;\n }\n\n private get partiallyChecked(): boolean {\n return this.selectedKeys.length > 0 && !this.allChecked;\n }\n\n private getRecordKey(record: TableRecord, index: number): string {\n const value = getValueByPath(record, this.rowKey);\n return value != null ? String(value) : String(index);\n }\n\n private toggleSort(column: AitheTableColumnMeta<TableRecord>): void {\n if (!column.sortable) {\n return;\n }\n\n if (this.sortKey !== column.id) {\n this.sortKey = column.id;\n this.sortOrder = 'asc';\n } else if (this.sortOrder === 'asc') {\n this.sortOrder = 'desc';\n } else if (this.sortOrder === 'desc') {\n this.sortOrder = '';\n this.sortKey = '';\n } else {\n this.sortOrder = 'asc';\n }\n\n this.emit('aithe-sort-change', {\n sortKey: this.sortKey,\n sortOrder: this.sortOrder,\n });\n }\n\n private toggleRowSelection(record: TableRecord, index: number, checked: boolean): void {\n const key = this.getRecordKey(record, index);\n const next = new Set(this.selectedKeys);\n\n if (checked) {\n next.add(key);\n } else {\n next.delete(key);\n }\n\n this.selectedKeys = Array.from(next);\n this.emit('aithe-selection-change', { selectedKeys: this.selectedKeys });\n }\n\n private toggleAllRows(checked: boolean): void {\n this.selectedKeys = checked\n ? this.rowData.map((row, index) => this.getRecordKey(row, index))\n : [];\n this.emit('aithe-selection-change', { selectedKeys: this.selectedKeys });\n }\n\n private renderCell(\n column: AitheTableColumnMeta<TableRecord>,\n record: TableRecord,\n rowIndex: number,\n ) {\n const value = getValueByPath(record, column.dataIndex ? String(column.dataIndex) : column.id);\n return column.render ? column.render(value, record, rowIndex) : (value ?? nothing);\n }\n\n private getSortIcon(column: AitheTableColumnMeta<TableRecord>): string {\n if (this.sortKey !== column.id) return '↕';\n if (this.sortOrder === 'asc') return '↑';\n if (this.sortOrder === 'desc') return '↓';\n return '↕';\n }\n\n private renderColumnHeader(column: AitheTableColumnMeta<TableRecord>) {\n const colIcon = column.icon\n ? html`\n <aithe-icon class=\"header-icon\" name=${column.icon} size=\"16\"></aithe-icon>\n `\n : nothing;\n\n if (column.sortable) {\n return html`\n <button class=\"sorter\" type=\"button\" @click=${() => this.toggleSort(column)}>\n ${colIcon}\n <span>${column.title}</span>\n <span class=\"sort-icon\">${this.getSortIcon(column)}</span>\n </button>\n `;\n }\n return html`\n ${colIcon}${column.title}\n `;\n }\n\n render() {\n const rows = this.rowData;\n\n const selectAllTh = this.selectable\n ? html`\n <th style=${styleMap({ width: '52px' })}>\n <input\n class=\"checkbox\"\n aria-label=${t('data.table.selectAllAriaLabel')}\n .indeterminate=${this.partiallyChecked}\n ?checked=${this.allChecked}\n type=\"checkbox\"\n @change=${(event: Event) =>\n this.toggleAllRows((event.currentTarget as HTMLInputElement).checked)}\n />\n </th>\n `\n : null;\n\n return html`\n <div class=${classMap({ 'table-wrap': true, bordered: this.bordered })}>\n <slot @slotchange=${() => this.syncSlotColumns()}></slot>\n ${rows.length\n ? html`\n <table>\n <thead>\n <tr>\n ${selectAllTh}\n ${this.resolvedColumns.map(\n (column) => html`\n <th\n style=${styleMap({\n textAlign: column.align ?? 'left',\n width: column.width,\n })}\n >\n ${this.renderColumnHeader(column)}\n </th>\n `,\n )}\n </tr>\n </thead>\n <tbody>\n ${rows.map((record, rowIndex) => {\n const key = this.getRecordKey(record, rowIndex);\n const checked = this.selectedKeys.includes(key);\n\n return html`\n <tr\n class=${classMap({\n hoverable: this.hoverable,\n striped: this.striped,\n })}\n @click=${() => this.emit('aithe-row-click', { record, rowIndex })}\n >\n ${this.selectable\n ? html`\n <td>\n <input\n class=\"checkbox\"\n aria-label=${t('data.table.selectRowAriaLabel')}\n ?checked=${checked}\n type=\"checkbox\"\n @click=${(event: MouseEvent) => event.stopPropagation()}\n @change=${(event: Event) =>\n this.toggleRowSelection(\n record,\n rowIndex,\n (event.currentTarget as HTMLInputElement).checked,\n )}\n />\n </td>\n `\n : null}\n ${this.resolvedColumns.map((column) => {\n const intentClass =\n column.intent && column.intent !== 'default'\n ? `cell ${column.intent}`\n : '';\n return html`\n <td\n class=${intentClass || nothing}\n style=${styleMap({ textAlign: column.align ?? 'left' })}\n >\n ${this.renderCell(column, record, rowIndex)}\n </td>\n `;\n })}\n </tr>\n `;\n })}\n </tbody>\n </table>\n `\n : html`\n <div class=\"empty\">\n <slot name=\"empty\">${t('data.table.emptyText')}</slot>\n </div>\n `}\n </div>\n `;\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\n\n/**\n * Single node inside `aithe-timeline` with timestamp and color variant.\n * 时间线节点,用于 aithe-timeline 内部,包含时间戳和颜色类型。\n *\n * @slot - Default slot for timeline item content. 时间线节点内容。\n * @example\n * ```html\n * <aithe-timeline-item timestamp=\"2024-03-15\" type=\"success\" dot=\"✓\">\n * Task completed successfully\n * </aithe-timeline-item>\n * ```\n */\n@customElement('aithe-timeline-item')\nexport class AitheTimelineItem extends AitheElement {\n /** Timestamp label text. 时间戳标签文本。 */\n @property({ type: String }) timestamp = '';\n /** Color variant for the dot indicator. 圆点指示器的颜色类型。 */\n @property({ type: String }) type: 'default' | 'primary' | 'success' | 'warning' | 'danger' =\n 'default';\n /** Custom dot content (overrides default circle). 自定义圆点内容(覆盖默认圆圈)。 */\n @property({ type: String }) dot = '';\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n position: relative;\n display: grid;\n grid-template-columns: 20px minmax(0, 1fr);\n gap: var(--aithe-space-4);\n }\n\n :host(:not(:last-child))::after {\n content: '';\n position: absolute;\n top: 18px;\n left: 9px;\n bottom: -18px;\n width: 2px;\n background: var(--aithe-color-border);\n }\n\n .dot {\n position: relative;\n z-index: 1;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n border-radius: 50%;\n background: var(--aithe-color-surface-elevated);\n border: 2px solid var(--aithe-color-border-strong);\n color: var(--aithe-color-text-muted);\n font-size: 10px;\n box-shadow: 0 0 0 4px var(--aithe-color-bg);\n }\n\n .dot.primary {\n border-color: var(--aithe-primary-6);\n color: var(--aithe-primary-6);\n }\n\n .dot.success {\n border-color: var(--aithe-success-6);\n color: var(--aithe-success-6);\n }\n\n .dot.warning {\n border-color: var(--aithe-warning-6);\n color: var(--aithe-warning-6);\n }\n\n .dot.danger {\n border-color: var(--aithe-danger-6);\n color: var(--aithe-danger-6);\n }\n\n .content {\n display: grid;\n gap: var(--aithe-space-2);\n padding-bottom: var(--aithe-space-6);\n }\n\n .timestamp {\n color: var(--aithe-color-text-subtle);\n font-size: var(--aithe-font-size-sm);\n }\n `,\n ];\n\n render() {\n return html`\n <span class=\"dot ${this.type}\">${this.dot || ''}</span>\n <div class=\"content\">\n <slot></slot>\n ${this.timestamp\n ? html`\n <span class=\"timestamp\">${this.timestamp}</span>\n `\n : null}\n </div>\n `;\n }\n}\n","import { css, html, nothing } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport type { AitheTimelineItemMeta } from '../../core/types';\nimport { aitheBaseStyles } from '../../core/styles';\nimport './timeline-item';\n\n/**\n * Timeline container for displaying process and audit records.\n * 时间线容器,用于展示流程和审计记录。\n *\n * Supports two item definition modes:\n * 支持两种节点定义模式:\n * - **Data-driven**: Set `items` / `items-json` attribute.\n * **数据驱动**:设置 `items` / `items-json` 属性。\n * - **DOM-defined**: Place `<aithe-timeline-item>` children in the default slot.\n * **DOM 定义**:在默认插槽中放置 `<aithe-timeline-item>` 子元素。\n *\n * @slot - Default slot for `aithe-timeline-item` elements (DOM-defined mode). aithe-timeline-item 时间线节点元素(DOM 定义模式)。\n *\n * @example Data-driven mode / 数据驱动模式\n * ```html\n * <aithe-timeline\n * items='[{\"content\":\"Step 1\",\"timestamp\":\"09:00\",\"type\":\"primary\"},{\"content\":\"Step 2\",\"timestamp\":\"11:30\",\"type\":\"success\"}]'\n * ></aithe-timeline>\n * ```\n *\n * @example DOM-defined mode / DOM 定义模式\n * ```html\n * <aithe-timeline reverse>\n * <aithe-timeline-item timestamp=\"2024-01-01\" type=\"primary\">Step 1</aithe-timeline-item>\n * <aithe-timeline-item timestamp=\"2024-01-02\" type=\"success\">Step 2</aithe-timeline-item>\n * </aithe-timeline>\n * ```\n */\n@customElement('aithe-timeline')\nexport class AitheTimeline extends AitheElement {\n /** JSON string of timeline items (parsed into `items`). 时间线节点的 JSON 字符串(解析为 `items`)。 */\n @property({ type: String, attribute: 'items' }) itemsJson = '';\n /** Array of timeline items (prefer this over `itemsJson` in JS). 时间线节点数组(在 JS 中优先使用此属性而非 `itemsJson`)。 */\n @property({ attribute: false }) items: AitheTimelineItemMeta[] = [];\n /** Whether to reverse the order of timeline items. 是否反转时间线节点顺序。 */\n @property({ type: Boolean }) reverse = false;\n\n @state() private hasSlotItems = false;\n\n protected willUpdate(changed: Map<string, unknown>): void {\n if (changed.has('itemsJson') && this.itemsJson) {\n try {\n this.items = JSON.parse(this.itemsJson);\n } catch {\n this.items = [];\n }\n }\n }\n\n private get resolvedItems(): AitheTimelineItemMeta[] {\n const list = this.items ?? [];\n return this.reverse ? [...list].reverse() : list;\n }\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n gap: 0;\n }\n\n .timeline-item {\n position: relative;\n display: grid;\n grid-template-columns: 20px minmax(0, 1fr);\n gap: var(--aithe-space-4);\n }\n\n .timeline-item:not(:last-child)::after {\n content: '';\n position: absolute;\n top: 18px;\n left: 9px;\n bottom: -18px;\n width: 2px;\n background: var(--aithe-color-border);\n }\n\n .dot {\n position: relative;\n z-index: 1;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n border-radius: 50%;\n background: var(--aithe-color-surface-elevated);\n border: 2px solid var(--aithe-color-border-strong);\n color: var(--aithe-color-text-muted);\n font-size: 10px;\n box-shadow: 0 0 0 4px var(--aithe-color-bg);\n }\n\n .dot.primary {\n border-color: var(--aithe-primary-6);\n color: var(--aithe-primary-6);\n }\n\n .dot.success {\n border-color: var(--aithe-success-6);\n color: var(--aithe-success-6);\n }\n\n .dot.warning {\n border-color: var(--aithe-warning-6);\n color: var(--aithe-warning-6);\n }\n\n .dot.danger {\n border-color: var(--aithe-danger-6);\n color: var(--aithe-danger-6);\n }\n\n .content {\n display: grid;\n gap: var(--aithe-space-2);\n padding-bottom: var(--aithe-space-6);\n }\n\n .timestamp {\n color: var(--aithe-color-text-subtle);\n font-size: var(--aithe-font-size-sm);\n }\n `,\n ];\n\n private readonly onSlotChange = (): void => {\n const slotItems = this.querySelectorAll('aithe-timeline-item');\n this.hasSlotItems = slotItems.length > 0;\n this.syncOrder();\n };\n\n private readonly syncOrder = (): void => {\n const items = Array.from(this.querySelectorAll<HTMLElement>('aithe-timeline-item'));\n items.forEach((item, index) => {\n item.style.order = this.reverse ? String(items.length - index) : String(index + 1);\n });\n };\n\n protected updated(changed: Map<string, unknown>): void {\n if (changed.has('reverse')) {\n this.syncOrder();\n }\n }\n\n private renderItem(item: AitheTimelineItemMeta) {\n const typeClass = item.type && item.type !== 'default' ? item.type : '';\n return html`\n <div class=\"timeline-item\">\n <span class=\"dot ${typeClass}\">${item.dot || ''}</span>\n <div class=\"content\">\n ${item.content}\n ${item.timestamp\n ? html`\n <span class=\"timestamp\">${item.timestamp}</span>\n `\n : nothing}\n </div>\n </div>\n `;\n }\n\n render() {\n if (this.hasSlotItems) {\n return html`\n <slot @slotchange=${this.onSlotChange}></slot>\n `;\n }\n\n if (this.items.length > 0) {\n return html`\n ${this.resolvedItems.map((item) => this.renderItem(item))}\n `;\n }\n\n return html`\n <slot @slotchange=${this.onSlotChange}></slot>\n `;\n }\n}\n","import { css, html, nothing } from 'lit';\nimport { customElement, property, queryAssignedElements, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\n\nimport { AitheElement } from '../../core/aithe-element';\nimport type { AitheTabPane } from './tab-pane';\nimport { aitheBaseStyles } from '../../core/styles';\nimport { t } from '../../core/i18n';\n\n/**\n * Tab navigation container that manages tab-pane children.\n * 标签页导航容器,管理 tab-pane 子组件。\n *\n * @slot - Default slot for `aithe-tab-pane` children. 默认插槽,用于 `aithe-tab-pane` 子组件。\n *\n * @fires aithe-change - Emitted when the active tab changes with `{ activeKey }`. 活动标签页变更时发出 `{ activeKey }`。\n * @fires aithe-tab-remove - Emitted when a closable tab is removed with `{ key }`. 可关闭标签页被移除时发出 `{ key }`。\n * @fires aithe-tab-add - Emitted when the add button is clicked. 添加按钮被点击时发出。\n *\n * @example\n * ```html\n * <aithe-tabs type=\"card\" active-key=\"a\">\n * <aithe-tab-pane tab-id=\"a\" label=\"Tab A\">Content A</aithe-tab-pane>\n * <aithe-tab-pane tab-id=\"b\" label=\"Tab B\">Content B</aithe-tab-pane>\n * </aithe-tabs>\n * ```\n */\n@customElement('aithe-tabs')\nexport class AitheTabs extends AitheElement {\n /** Visual style of the tab navigation. 标签页导航的视觉样式。 */\n @property({ type: String }) type: 'line' | 'card' | 'button' = 'line';\n /** Key of the currently active tab pane. 当前活动标签页的键。 */\n @property({ type: String, attribute: 'active-key' }) activeKey = '';\n /** Whether to show an add button in the tab bar. 是否在标签栏中显示添加按钮。 */\n @property({ type: Boolean }) addable = false;\n\n @queryAssignedElements() private slotNodes!: Element[];\n @state() private panes: AitheTabPane[] = [];\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: block;\n }\n\n .tabs {\n display: grid;\n gap: var(--aithe-space-lg);\n }\n\n .nav {\n display: flex;\n align-items: center;\n gap: var(--aithe-space-2);\n flex-wrap: wrap;\n border-bottom: 1px solid var(--aithe-color-border);\n padding-bottom: var(--aithe-space-3);\n }\n\n .nav.card,\n .nav.button {\n border-bottom: none;\n padding-bottom: 0;\n }\n\n .tab {\n display: inline-flex;\n align-items: center;\n min-height: 38px;\n padding: 0 var(--aithe-space-4);\n border: 1px solid transparent;\n border-radius: var(--aithe-radius-md);\n background: transparent;\n color: var(--aithe-color-text-muted);\n cursor: pointer;\n transition:\n background var(--aithe-duration-fast) var(--aithe-ease-standard),\n color var(--aithe-duration-fast) var(--aithe-ease-standard),\n border-color var(--aithe-duration-fast) var(--aithe-ease-standard);\n }\n\n .tab-icon {\n flex-shrink: 0;\n color: var(--aithe-color-text-muted);\n }\n\n .nav-item {\n display: inline-flex;\n align-items: center;\n gap: var(--aithe-space-1);\n }\n\n .tab.active.line {\n color: var(--aithe-primary-7);\n border-bottom-color: var(--aithe-primary-6);\n }\n\n .tab.active.card {\n border-color: var(--aithe-color-border);\n background: var(--aithe-color-surface-elevated);\n box-shadow: var(--aithe-shadow-1);\n color: var(--aithe-color-text);\n }\n\n .tab.active.button {\n background: linear-gradient(180deg, var(--aithe-primary-6), var(--aithe-primary-7));\n color: white;\n }\n\n .tab.disabled {\n opacity: 0.48;\n cursor: not-allowed;\n }\n\n .remove,\n .add {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border: none;\n border-radius: 50%;\n background: transparent;\n color: inherit;\n cursor: pointer;\n }\n\n .panel {\n min-width: 0;\n }\n `,\n ];\n\n private readonly syncPanes = (): void => {\n this.panes = this.slotNodes.filter(\n (node): node is AitheTabPane =>\n node instanceof HTMLElement && node.tagName.toLowerCase() === 'aithe-tab-pane',\n ) as AitheTabPane[];\n\n if (!this.activeKey) {\n const firstEnabled = this.panes.find((pane) => !pane.disabled);\n this.activeKey = firstEnabled?.tabId ?? firstEnabled?.label ?? '';\n }\n\n this.panes.forEach((pane, index) => {\n const key = pane.tabId || pane.label || `${index}`;\n pane.tabId = key;\n pane.active = key === this.activeKey;\n });\n };\n\n private activate(key: string): void {\n const pane = this.panes.find((item) => item.tabId === key);\n if (!pane || pane.disabled) {\n return;\n }\n\n this.activeKey = key;\n this.syncPanes();\n this.emit('aithe-change', { activeKey: key });\n }\n\n private removePane(event: MouseEvent, pane: AitheTabPane): void {\n event.stopPropagation();\n const currentIndex = this.panes.indexOf(pane);\n pane.remove();\n this.syncPanes();\n\n if (pane.tabId === this.activeKey) {\n const fallback = this.panes[currentIndex] ?? this.panes[currentIndex - 1];\n this.activeKey = fallback?.tabId ?? '';\n this.syncPanes();\n }\n\n this.emit('aithe-tab-remove', { key: pane.tabId });\n }\n\n private readonly handleKeydown = (event: KeyboardEvent): void => {\n const enabled = this.panes.filter((pane) => !pane.disabled);\n const currentIndex = enabled.findIndex((pane) => pane.tabId === this.activeKey);\n\n if (event.key === 'ArrowRight') {\n event.preventDefault();\n const next = enabled[(currentIndex + 1) % enabled.length];\n if (next) {\n this.activate(next.tabId);\n }\n }\n\n if (event.key === 'ArrowLeft') {\n event.preventDefault();\n const next = enabled[(currentIndex - 1 + enabled.length) % enabled.length];\n if (next) {\n this.activate(next.tabId);\n }\n }\n };\n\n render() {\n return html`\n <div class=\"tabs\">\n <div\n class=${classMap({ nav: true, [this.type]: true })}\n role=\"tablist\"\n @keydown=${this.handleKeydown}\n >\n ${this.panes.map(\n (pane) => html`\n <span class=\"nav-item\">\n <button\n class=${classMap({\n tab: true,\n [this.type]: true,\n active: pane.tabId === this.activeKey,\n disabled: pane.disabled,\n })}\n aria-selected=${String(pane.tabId === this.activeKey)}\n role=\"tab\"\n type=\"button\"\n @click=${() => this.activate(pane.tabId)}\n >\n <span style=\"display:inline-flex;align-items:center;gap:var(--aithe-space-2);\">\n ${pane.icon\n ? html`\n <aithe-icon class=\"tab-icon\" name=${pane.icon} size=\"14\"></aithe-icon>\n `\n : nothing}${pane.label}\n </span>\n </button>\n ${pane.closable\n ? html`\n <button\n class=\"remove\"\n type=\"button\"\n aria-label=${t('data.tabs.removeTabAriaLabel')}\n @click=${(event: MouseEvent) => this.removePane(event, pane)}\n >\n ×\n </button>\n `\n : null}\n </span>\n `,\n )}\n ${this.addable\n ? html`\n <button\n class=\"add\"\n type=\"button\"\n aria-label=${t('data.tabs.addTabAriaLabel')}\n @click=${() => this.emit('aithe-tab-add')}\n >\n +\n </button>\n `\n : null}\n </div>\n <div class=\"panel\">\n <slot @slotchange=${this.syncPanes}></slot>\n </div>\n </div>\n `;\n }\n}\n\n@customElement('aithe-tab-group')\nexport class AitheTabGroup extends AitheTabs {}\n","import { css, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport { AitheElement } from '../../core/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\n\n/**\n * Single tab pane used inside `aithe-tabs`.\n * 单个标签面板,用于 `aithe-tabs` 内部。\n *\n * @slot - Default slot for tab pane content. 默认插槽,用于标签面板内容。\n *\n * @example\n * ```html\n * <aithe-tab-pane tab-id=\"settings\" label=\"Settings\" closable>\n * Settings content here\n * </aithe-tab-pane>\n * ```\n */\n@customElement('aithe-tab-pane')\nexport class AitheTabPane extends AitheElement {\n /** Unique identifier for this pane within the tabs. 标签页内标识此面板的唯一标识。 */\n @property({ type: String, attribute: 'tab-id' }) tabId = '';\n /** Display label shown on the tab button. 标签按钮上显示的文本。 */\n @property({ type: String }) label = '';\n /** Icon name to display before the tab label. 在标签文本前显示的图标名称。 */\n @property({ type: String }) icon = '';\n /** Display title for the tab pane (shown as tooltip). 标签面板的显示标题(作为工具提示)。 */\n @property({ type: String }) title = '';\n /** Whether this tab pane is disabled (cannot be activated). 此标签面板是否禁用(无法激活)。 */\n @property({ type: Boolean, reflect: true }) disabled = false;\n /** Whether this tab pane shows a close button. 此标签面板是否显示关闭按钮。 */\n @property({ type: Boolean, reflect: true }) closable = false;\n /** Whether this tab pane is currently active (managed by parent `aithe-tabs`). 此标签面板是否当前活动(由父级 `aithe-tabs` 管理)。 */\n @property({ type: Boolean, reflect: true }) active = false;\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: none;\n }\n\n :host([active]) {\n display: block;\n }\n `,\n ];\n\n render() {\n return html`\n <slot></slot>\n `;\n }\n}\n","import { css, html, nothing } from 'lit';\nimport type { TemplateResult } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport type { AitheTreeNodeMeta } from '../../core/types';\nimport { aitheBaseStyles } from '../../core/styles';\n\nexport type TreeNodeRenderer = (node: AitheTreeNodeMeta) => TemplateResult;\n\n/**\n * Recursive tree view with expand/collapse and optional checkbox support.\n * 递归树形视图,支持展开/折叠和可选的复选框功能。\n *\n * @fires aithe-check - Emitted when a checkbox is toggled with `{ checked }`. 复选框切换时发出 `{ checked }`。\n * @fires aithe-node-click - Emitted when a node label is clicked with `{ node }`. 节点标签被点击时发出 `{ node }`。\n *\n * @example\n * ```html\n * <aithe-tree\n * data='[{\"label\":\"Root\",\"id\":\"root\",\"children\":[{\"label\":\"Child\",\"id\":\"child\"}]}]'\n * checkable\n * expand-all\n * ></aithe-tree>\n * ```\n */\n@customElement('aithe-tree')\nexport class AitheTree extends AitheElement {\n /** JSON string of tree node data. 树节点数据的 JSON 字符串。 */\n @property({ type: String }) data = '[]';\n /** Display title for the tree (shown as tooltip). 树形视图的显示标题(作为工具提示)。 */\n @property({ type: String }) title = '';\n /** Icon name to display before the tree title. 在树标题前显示的图标名称。 */\n @property({ type: String }) icon = '';\n /** Whether nodes show checkboxes for selection. 节点是否显示复选框以供选择。 */\n @property({ type: Boolean }) checkable = false;\n /** Whether all nodes are expanded by default. 是否默认展开所有节点。 */\n @property({ type: Boolean, attribute: 'expand-all' }) expandAll = false;\n /** Custom renderer function for tree nodes. 树节点的自定义渲染函数。 */\n @property({ attribute: false }) renderer?: TreeNodeRenderer;\n\n @state() private expanded = new Set<string>();\n @state() private checked = new Set<string>();\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: block;\n }\n\n .tree-header {\n display: inline-flex;\n align-items: center;\n gap: var(--aithe-space-2);\n margin-bottom: var(--aithe-space-2);\n font-weight: var(--aithe-font-weight-semibold);\n }\n\n .tree-icon {\n flex-shrink: 0;\n color: var(--aithe-color-text-muted);\n }\n\n .tree,\n .branch {\n display: grid;\n gap: var(--aithe-space-2);\n }\n\n .branch {\n margin-left: var(--aithe-space-5);\n padding-left: var(--aithe-space-3);\n border-left: 1px solid var(--aithe-color-border);\n }\n\n .row {\n display: flex;\n align-items: center;\n gap: var(--aithe-space-2);\n }\n\n .toggle,\n .label {\n border: none;\n background: transparent;\n color: var(--aithe-color-text);\n cursor: pointer;\n }\n\n .label {\n min-height: 32px;\n padding: 0 var(--aithe-space-2);\n border-radius: var(--aithe-radius-md);\n }\n\n .label:hover {\n background: var(--aithe-color-surface-muted);\n }\n\n .label.primary {\n color: var(--aithe-primary-7);\n }\n .label.success {\n color: var(--aithe-success-7);\n }\n .label.warning {\n color: var(--aithe-warning-7);\n }\n .label.danger {\n color: var(--aithe-danger-7);\n }\n\n .node-icon {\n flex-shrink: 0;\n color: var(--aithe-color-text-muted);\n }\n `,\n ];\n\n protected updated(changed: Map<string, unknown>): void {\n if (changed.has('expandAll') && this.expandAll) {\n this.expanded = new Set(this.collectValues(this.parsedData));\n }\n }\n\n private get parsedData(): AitheTreeNodeMeta[] {\n try {\n return JSON.parse(this.data) as AitheTreeNodeMeta[];\n } catch {\n return [];\n }\n }\n\n private collectValues(nodes: AitheTreeNodeMeta[]): string[] {\n return nodes.flatMap((node) => [\n node.id,\n ...(node.children ? this.collectValues(node.children) : []),\n ]);\n }\n\n private toggleExpand(value: string): void {\n const next = new Set(this.expanded);\n if (next.has(value)) {\n next.delete(value);\n } else {\n next.add(value);\n }\n this.expanded = next;\n }\n\n private toggleCheck(value: string, checked: boolean): void {\n const next = new Set(this.checked);\n if (checked) {\n next.add(value);\n } else {\n next.delete(value);\n }\n this.checked = next;\n this.emit('aithe-check', { checked: Array.from(this.checked) });\n }\n\n private renderNodes(nodes: AitheTreeNodeMeta[]): TemplateResult[] {\n return nodes.map((node) => {\n const hasChildren = Boolean(node.children?.length);\n const expanded = this.expanded.has(node.id);\n const toggleSymbol = expanded ? '⌄' : '›';\n const intentClass = node.intent && node.intent !== 'default' ? node.intent : '';\n const nodeIcon = node.icon\n ? html`\n <aithe-icon class=\"node-icon\" name=${node.icon} size=\"16\"></aithe-icon>\n `\n : nothing;\n\n const nodeContent = this.renderer\n ? this.renderer(node)\n : html`\n <span style=\"display:inline-flex;align-items:center;gap:var(--aithe-space-2);\">\n ${nodeIcon}${node.label}\n </span>\n `;\n\n const toggleBtn = hasChildren\n ? html`\n <button class=\"toggle\" type=\"button\" @click=${() => this.toggleExpand(node.id)}>\n ${toggleSymbol}\n </button>\n `\n : html`\n <span style=\"width:18px;\">${nothing}</span>\n `;\n const checkbox = this.checkable\n ? html`\n <input\n type=\"checkbox\"\n ?checked=${this.checked.has(node.id)}\n ?disabled=${node.disabled}\n @change=${(event: Event) =>\n this.toggleCheck(node.id, (event.currentTarget as HTMLInputElement).checked)}\n />\n `\n : null;\n\n return html`\n <div class=\"tree\">\n <div class=\"row\">\n ${toggleBtn} ${checkbox}\n <button\n class=\"label ${intentClass}\"\n type=\"button\"\n ?disabled=${node.disabled}\n @click=${() => this.emit('aithe-node-click', { node })}\n >\n ${nodeContent}\n </button>\n </div>\n ${hasChildren && expanded\n ? html`\n <div class=\"branch\">${this.renderNodes(node.children ?? [])}</div>\n `\n : null}\n </div>\n `;\n });\n }\n\n render() {\n const headerIcon = this.icon\n ? html`\n <aithe-icon class=\"tree-icon\" name=${this.icon} size=\"16\"></aithe-icon>\n `\n : nothing;\n const header =\n this.icon || this.title\n ? html`\n <div class=\"tree-header\">${headerIcon}${this.title}</div>\n `\n : nothing;\n\n return html`\n <div class=\"tree\">${header}${this.renderNodes(this.parsedData)}</div>\n `;\n }\n}\n","import { css, html, nothing } from 'lit';\nimport type { TemplateResult } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport type { AitheTreeNodeMeta } from '../../core/types';\nimport { aitheBaseStyles } from '../../core/styles';\n\n/**\n * Data-driven tree menu with menu-style active highlighting and expand/collapse.\n * 数据驱动的树形菜单,支持菜单样式高亮和展开/折叠。\n *\n * @fires aithe-select - Emitted when a menu item is selected with `{ value }`. 菜单项选中时发出 `{ value }`。\n *\n * @example\n * ```html\n * <aithe-tree-menu\n * items='[{\"label\":\"Dashboard\",\"id\":\"dashboard\",\"icon\":\"home\"},{\"label\":\"Settings\",\"id\":\"settings\",\"icon\":\"settings\",\"children\":[{\"label\":\"Profile\",\"id\":\"profile\"},{\"label\":\"Security\",\"id\":\"security\"}]}]'\n * active=\"dashboard\"\n * ></aithe-tree-menu>\n * ```\n */\n@customElement('aithe-tree-menu')\nexport class AitheTreeMenu extends AitheElement {\n /** JSON string of tree menu items (parsed into `items`). 树菜单项的 JSON 字符串(解析为 `items`)。 */\n @property({ type: String, attribute: 'items' }) itemsJson = '';\n /** Array of tree menu items (prefer this over `itemsJson` in JS). 树菜单项数组(在 JS 中优先使用此属性而非 `itemsJson`)。 */\n @property({ attribute: false }) items: AitheTreeNodeMeta[] = [];\n /** Active (selected) menu item value. 当前选中的菜单项值。 */\n @property({ type: String }) active = '';\n /** Whether all nodes are expanded by default. 是否默认展开所有节点。 */\n @property({ type: Boolean, attribute: 'expand-all' }) expandAll = false;\n /** Layout direction: vertical (stacked) or horizontal (inline). 布局方向:垂直(堆叠)或水平(行内)。 */\n @property({ type: String }) direction: 'vertical' | 'horizontal' = 'vertical';\n\n @state() private expanded = new Set<string>();\n\n private readonly handleDocumentPointer = (event: MouseEvent): void => {\n if (this.direction !== 'horizontal') return;\n if (!event.composedPath().includes(this)) {\n this.expanded = new Set();\n }\n };\n\n override connectedCallback(): void {\n super.connectedCallback();\n document.addEventListener('mousedown', this.handleDocumentPointer);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n document.removeEventListener('mousedown', this.handleDocumentPointer);\n }\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: block;\n }\n\n .menu {\n display: grid;\n gap: var(--aithe-space-2);\n }\n\n .menu.horizontal {\n grid-auto-flow: column;\n align-items: center;\n }\n\n .item {\n display: flex;\n align-items: center;\n gap: var(--aithe-space-3);\n width: 100%;\n min-height: 42px;\n padding: 0 var(--aithe-space-4);\n border: none;\n border-radius: var(--aithe-radius-md);\n background: transparent;\n color: var(--aithe-color-text-muted);\n text-align: left;\n cursor: pointer;\n }\n\n .item-icon {\n flex-shrink: 0;\n color: var(--aithe-color-text-muted);\n }\n\n .item.active {\n background: linear-gradient(180deg, var(--aithe-primary-6), var(--aithe-primary-7));\n color: white;\n box-shadow: var(--aithe-shadow-2);\n }\n\n .item.active .item-icon {\n color: white;\n }\n\n .item:hover:not(:disabled):not(.active) {\n background: var(--aithe-color-surface-muted);\n color: var(--aithe-color-text);\n }\n\n .item:disabled {\n opacity: 0.48;\n cursor: not-allowed;\n }\n\n .item.primary {\n color: var(--aithe-primary-7);\n }\n .item.success {\n color: var(--aithe-success-7);\n }\n .item.warning {\n color: var(--aithe-warning-7);\n }\n .item.danger {\n color: var(--aithe-danger-7);\n }\n\n .item.active.primary,\n .item.active.success,\n .item.active.warning,\n .item.active.danger {\n color: white;\n }\n\n .group-toggle {\n display: flex;\n align-items: center;\n gap: var(--aithe-space-3);\n width: 100%;\n min-height: 42px;\n padding: 0 var(--aithe-space-4);\n border: none;\n border-radius: var(--aithe-radius-md);\n background: transparent;\n color: var(--aithe-color-text-muted);\n text-align: left;\n cursor: pointer;\n }\n\n .group-toggle-label {\n display: flex;\n align-items: center;\n gap: var(--aithe-space-2);\n flex: 1;\n min-width: 0;\n }\n\n .group-toggle-icon {\n flex-shrink: 0;\n color: var(--aithe-color-text-muted);\n }\n\n .group-toggle.active {\n color: var(--aithe-color-text);\n background: var(--aithe-color-surface-muted);\n }\n\n .group-toggle:hover:not(:disabled) {\n background: var(--aithe-color-surface-muted);\n }\n\n .group-toggle:disabled {\n opacity: 0.48;\n cursor: not-allowed;\n }\n\n .group-toggle.primary {\n color: var(--aithe-primary-7);\n }\n .group-toggle.success {\n color: var(--aithe-success-7);\n }\n .group-toggle.warning {\n color: var(--aithe-warning-7);\n }\n .group-toggle.danger {\n color: var(--aithe-danger-7);\n }\n\n .arrow {\n transition: transform var(--aithe-duration-fast) var(--aithe-ease-standard);\n }\n\n .arrow.open {\n transform: rotate(180deg);\n }\n\n .children {\n display: grid;\n gap: var(--aithe-space-2);\n padding-left: var(--aithe-space-4);\n }\n\n .horizontal .children {\n position: absolute;\n top: calc(100% + var(--aithe-space-2));\n left: 0;\n z-index: var(--aithe-z-dropdown);\n padding: var(--aithe-space-2);\n min-width: 180px;\n border: 1px solid var(--aithe-color-border);\n border-radius: var(--aithe-radius-lg);\n background: var(--aithe-color-surface-elevated);\n box-shadow: var(--aithe-shadow-3);\n }\n\n .horizontal .group-wrapper {\n position: relative;\n }\n `,\n ];\n\n protected willUpdate(changed: Map<string, unknown>): void {\n if (changed.has('itemsJson') && this.itemsJson) {\n try {\n this.items = JSON.parse(this.itemsJson);\n } catch {\n this.items = [];\n }\n }\n }\n\n protected updated(changed: Map<string, unknown>): void {\n if (changed.has('expandAll') && this.expandAll) {\n this.expanded = new Set(this.collectKeys(this.items));\n }\n }\n\n private collectKeys(items: AitheTreeNodeMeta[]): string[] {\n return items.flatMap((item) =>\n item.children?.length ? [item.id, ...this.collectKeys(item.children)] : [],\n );\n }\n\n private isGroupActive(item: AitheTreeNodeMeta): boolean {\n if (item.id === this.active) return true;\n return item.children?.some((child) => this.isGroupActive(child)) ?? false;\n }\n\n private toggleExpand(key: string): void {\n const next = new Set(this.expanded);\n if (next.has(key)) {\n next.delete(key);\n } else {\n next.add(key);\n }\n this.expanded = next;\n }\n\n private selectItem(key: string): void {\n this.active = key;\n this.emit('aithe-select', { value: key });\n }\n\n private renderItems(items: AitheTreeNodeMeta[], isHorizontal = false): TemplateResult[] {\n return items.map((item) => {\n const hasChildren = Boolean(item.children?.length);\n const isActive = item.id === this.active;\n const isExpanded = this.expanded.has(item.id);\n const intentClass = item.intent && item.intent !== 'default' ? item.intent : '';\n\n if (hasChildren) {\n return html`\n <div class=${isHorizontal ? 'group-wrapper' : nothing}>\n <button\n class=${classMap({\n 'group-toggle': true,\n active: this.isGroupActive(item),\n [intentClass]: !!intentClass,\n })}\n type=\"button\"\n ?disabled=${item.disabled}\n aria-expanded=${String(isExpanded)}\n @click=${() => this.toggleExpand(item.id)}\n >\n <span class=\"group-toggle-label\">\n ${item.icon\n ? html`\n <aithe-icon\n class=\"group-toggle-icon\"\n name=${item.icon}\n size=\"16\"\n ></aithe-icon>\n `\n : nothing}\n <span>${item.label}</span>\n </span>\n <span class=${classMap({ arrow: true, open: isExpanded })}>⌄</span>\n </button>\n <div class=\"children\" ?hidden=${!isExpanded}>\n ${this.renderItems(item.children!, false)}\n </div>\n </div>\n `;\n }\n\n return html`\n <button\n class=${classMap({ item: true, active: isActive, [intentClass]: !!intentClass })}\n type=\"button\"\n role=\"menuitem\"\n ?disabled=${item.disabled}\n @click=${() => this.selectItem(item.id)}\n >\n ${item.icon\n ? html`\n <aithe-icon class=\"item-icon\" name=${item.icon} size=\"16\"></aithe-icon>\n `\n : nothing}\n <span>${item.label}</span>\n </button>\n `;\n });\n }\n\n render() {\n const isHorizontal = this.direction === 'horizontal';\n return html`\n <div class=${classMap({ menu: true, horizontal: isHorizontal })}>\n ${this.renderItems(this.items, isHorizontal)}\n </div>\n `;\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\n\n/**\n * Pagination controller for navigating through paged data.\n * 分页控制器,用于浏览分页数据。\n *\n * @fires aithe-page-change - Emitted when the current page changes with `{ currentPage, pageSize }`. 当前页变更时发出 `{ currentPage, pageSize }`。\n *\n * @example\n * ```html\n * <aithe-pagination total=\"100\" page-size=\"10\" current-page=\"1\"></aithe-pagination>\n * ```\n */\n@customElement('aithe-pagination')\nexport class AithePagination extends AitheElement {\n /** Total number of data items. 数据项总数。 */\n @property({ type: Number }) total = 0;\n /** Number of items per page. 每页的数据项数。 */\n @property({ type: Number, attribute: 'page-size' }) pageSize = 10;\n /** Currently active page number. 当前活动页码。 */\n @property({ type: Number, attribute: 'current-page' }) currentPage = 1;\n /** Size scale of the pagination buttons. 分页按钮的尺寸规格。 */\n @property({ type: String }) size: 'sm' | 'md' | 'lg' = 'md';\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: inline-flex;\n }\n\n .pager {\n display: inline-flex;\n align-items: center;\n gap: var(--aithe-space-2);\n flex-wrap: wrap;\n }\n\n button {\n min-width: 36px;\n min-height: 36px;\n padding: 0 var(--aithe-space-3);\n border: 1px solid var(--aithe-color-border);\n border-radius: var(--aithe-radius-md);\n background: var(--aithe-color-surface-elevated);\n color: var(--aithe-color-text);\n cursor: pointer;\n }\n\n button.active {\n border-color: transparent;\n background: linear-gradient(180deg, var(--aithe-primary-6), var(--aithe-primary-7));\n color: white;\n }\n `,\n ];\n\n private get pageCount(): number {\n return Math.max(1, Math.ceil(this.total / Math.max(1, this.pageSize)));\n }\n\n private change(page: number): void {\n this.currentPage = Math.min(Math.max(1, page), this.pageCount);\n this.emit('aithe-page-change', { currentPage: this.currentPage, pageSize: this.pageSize });\n }\n\n render() {\n return html`\n <div class=\"pager\">\n <button\n type=\"button\"\n ?disabled=${this.currentPage <= 1}\n @click=${() => this.change(this.currentPage - 1)}\n >\n ‹\n </button>\n ${Array.from({ length: this.pageCount }, (_, index) => index + 1).map(\n (page) => html`\n <button\n class=${classMap({ active: page === this.currentPage })}\n type=\"button\"\n @click=${() => this.change(page)}\n >\n ${page}\n </button>\n `,\n )}\n <button\n type=\"button\"\n ?disabled=${this.currentPage >= this.pageCount}\n @click=${() => this.change(this.currentPage + 1)}\n >\n ›\n </button>\n </div>\n `;\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\nimport { t } from '../../core/i18n';\n\n/**\n * Slot-based carousel for cycling through child elements with autoplay, arrows, and indicators.\n * 基于插槽的轮播组件,支持自动播放、箭头导航和指示器。\n *\n * @slot - Default slot for carousel slide content. 轮播幻灯片内容的默认插槽。\n *\n * @fires aithe-change - Emitted when the active slide changes with `{ current }`. 当前幻灯片切换时发出 `{ current }`。\n *\n * @example\n * ```html\n * <aithe-carousel autoplay interval=\"4000\" arrows indicators>\n * <div>Slide 1</div>\n * <div>Slide 2</div>\n * <div>Slide 3</div>\n * </aithe-carousel>\n * ```\n */\n@customElement('aithe-carousel')\nexport class AitheCarousel extends AitheElement {\n /** Whether the carousel auto-advances slides. 轮播是否自动切换幻灯片。 */\n @property({ type: Boolean }) autoplay = false;\n /** Auto-advance interval in milliseconds. 自动切换间隔(毫秒)。 */\n @property({ type: Number }) interval = 3200;\n /** Whether to show dot indicators. 是否显示指示器圆点。 */\n @property({ type: Boolean }) indicators = true;\n /** Whether to show prev/next arrow buttons. 是否显示前进/后退箭头按钮。 */\n @property({ type: Boolean }) arrows = true;\n\n @state() private current = 0;\n private timer = 0;\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n position: relative;\n display: block;\n overflow: hidden;\n border-radius: var(--aithe-radius-xl);\n }\n\n .viewport {\n position: relative;\n min-height: 240px;\n border-radius: inherit;\n background: var(--aithe-color-surface-elevated);\n }\n\n .controls {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 var(--aithe-space-4);\n pointer-events: none;\n }\n\n .controls button,\n .indicators button {\n pointer-events: auto;\n border: none;\n background: rgba(11, 17, 29, 0.56);\n color: white;\n cursor: pointer;\n }\n\n .controls button {\n width: 40px;\n height: 40px;\n border-radius: 50%;\n }\n\n .indicators {\n position: absolute;\n left: 50%;\n bottom: var(--aithe-space-4);\n display: inline-flex;\n gap: var(--aithe-space-2);\n transform: translateX(-50%);\n }\n\n .indicators button {\n width: 10px;\n height: 10px;\n padding: 0;\n border-radius: 50%;\n opacity: 0.4;\n }\n\n .indicators button[aria-current='true'] {\n opacity: 1;\n }\n `,\n ];\n\n connectedCallback(): void {\n super.connectedCallback();\n this.syncSlides();\n this.startTimer();\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n window.clearInterval(this.timer);\n }\n\n protected updated(changed: Map<string, unknown>): void {\n if (changed.has('autoplay') || changed.has('interval')) {\n this.startTimer();\n }\n\n if (changed.has('current')) {\n this.syncSlides();\n this.emit('aithe-change', { current: this.current });\n }\n }\n\n private get slides(): HTMLElement[] {\n return Array.from(this.children).filter(\n (item): item is HTMLElement => item instanceof HTMLElement,\n );\n }\n\n private startTimer(): void {\n window.clearInterval(this.timer);\n if (!this.autoplay || this.slides.length <= 1) {\n return;\n }\n\n this.timer = window.setInterval(() => this.next(), this.interval);\n }\n\n private readonly syncSlides = (): void => {\n const slides = this.slides;\n if (!slides.length) {\n return;\n }\n\n this.current = Math.min(this.current, slides.length - 1);\n slides.forEach((slide, index) => {\n slide.style.display = index === this.current ? '' : 'none';\n slide.style.width = '100%';\n slide.style.height = '100%';\n });\n };\n\n private next(): void {\n const total = this.slides.length;\n if (!total) {\n return;\n }\n\n this.current = (this.current + 1) % total;\n }\n\n private prev(): void {\n const total = this.slides.length;\n if (!total) {\n return;\n }\n\n this.current = (this.current - 1 + total) % total;\n }\n\n render() {\n const total = this.slides.length;\n\n return html`\n <div class=\"viewport\">\n <slot @slotchange=${this.syncSlides}></slot>\n ${this.arrows && total > 1\n ? html`\n <div class=\"controls\">\n <button\n type=\"button\"\n aria-label=${t('display.carousel.prevSlideAriaLabel')}\n @click=${this.prev}\n >\n ‹\n </button>\n <button\n type=\"button\"\n aria-label=${t('display.carousel.nextSlideAriaLabel')}\n @click=${this.next}\n >\n ›\n </button>\n </div>\n `\n : null}\n ${this.indicators && total > 1\n ? html`\n <div class=\"indicators\">\n ${Array.from(\n { length: total },\n (_, index) => html`\n <button\n type=\"button\"\n aria-current=${String(index === this.current)}\n @click=${() => {\n this.current = index;\n }}\n ></button>\n `,\n )}\n </div>\n `\n : null}\n </div>\n `;\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\nimport { t } from '../../core/i18n';\n\n/**\n * Before/after image comparison slider with adjustable split ratio.\n * 前后对比图片滑块组件,支持可调节的分割比例。\n *\n * @slot before - Content for the \"before\" pane (falls back to `beforeSrc` image). \"之前\"面板内容(回退到 `beforeSrc` 图片)。\n * @slot after - Content for the \"after\" pane (falls back to `afterSrc` image). \"之后\"面板内容(回退到 `afterSrc` 图片)。\n *\n * @example\n * ```html\n * <aithe-comparison before=\"old.jpg\" after=\"new.jpg\" ratio=\"60\"></aithe-comparison>\n * ```\n */\n@customElement('aithe-comparison')\nexport class AitheComparison extends AitheElement {\n /** URL of the \"before\" image. \"之前\"图片的 URL。 */\n @property({ type: String, attribute: 'before' }) beforeSrc = '';\n /** URL of the \"after\" image. \"之后\"图片的 URL。 */\n @property({ type: String, attribute: 'after' }) afterSrc = '';\n /** Split ratio percentage (0–100). 分割比例百分比(0–100)。 */\n @property({ type: Number }) ratio = 50;\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n position: relative;\n display: block;\n overflow: hidden;\n border-radius: var(--aithe-radius-xl);\n }\n\n .wrap {\n position: relative;\n min-height: 280px;\n background: var(--aithe-color-surface-elevated);\n }\n\n .pane,\n .pane img {\n width: 100%;\n height: 100%;\n }\n\n .pane {\n position: absolute;\n inset: 0;\n overflow: hidden;\n }\n\n .pane img {\n object-fit: cover;\n display: block;\n }\n\n .before {\n clip-path: inset(0 calc(100% - var(--aithe-ratio, 50%)) 0 0);\n }\n\n .after {\n clip-path: inset(0 0 0 var(--aithe-ratio, 50%));\n }\n\n .slider {\n position: absolute;\n inset-inline: 0;\n bottom: var(--aithe-space-4);\n width: calc(100% - var(--aithe-space-8));\n margin: 0 auto;\n }\n `,\n ];\n\n render() {\n this.style.setProperty('--aithe-ratio', `${this.ratio}%`);\n\n return html`\n <div class=\"wrap\">\n <div class=\"pane before\">\n <slot name=\"before\">\n ${this.beforeSrc\n ? html`\n <img src=${this.beforeSrc} alt=${t('display.comparison.beforeAlt')} />\n `\n : null}\n </slot>\n </div>\n <div class=\"pane after\">\n <slot name=\"after\">\n ${this.afterSrc\n ? html`\n <img src=${this.afterSrc} alt=${t('display.comparison.afterAlt')} />\n `\n : null}\n </slot>\n </div>\n <input\n class=\"slider\"\n type=\"range\"\n min=\"0\"\n max=\"100\"\n .value=${String(this.ratio)}\n @input=${(event: Event) => {\n this.ratio = Number((event.currentTarget as HTMLInputElement).value);\n }}\n />\n </div>\n `;\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\n\n/**\n * Animated image display with pan/zoom motion effect.\n * 带平移/缩放动效的动画图片展示组件。\n *\n * @slot - Default slot for fallback content when `src` is empty. `src` 为空时的回退内容插槽。\n *\n * @example\n * ```html\n * <aithe-animated-image src=\"hero.jpg\" loop speed=\"2\" play></aithe-animated-image>\n * ```\n */\n@customElement('aithe-animated-image')\nexport class AitheAnimatedImage extends AitheElement {\n /** Image source URL. 图片源 URL。 */\n @property({ type: String }) src = '';\n /** Whether the animation loops infinitely. 动画是否无限循环。 */\n @property({ type: Boolean }) loop = true;\n /** Animation speed multiplier (higher = faster). 动画速度倍数(越高越快)。 */\n @property({ type: Number }) speed = 1;\n /** Whether the animation is currently playing. 动画是否正在播放。 */\n @property({ type: Boolean }) play = true;\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: block;\n overflow: hidden;\n border-radius: var(--aithe-radius-xl);\n background: var(--aithe-color-surface-elevated);\n }\n\n img {\n width: 100%;\n height: auto;\n display: block;\n transform-origin: center;\n animation-name: aithe-pan-zoom;\n animation-timing-function: ease-in-out;\n animation-direction: alternate;\n animation-fill-mode: both;\n }\n\n @keyframes aithe-pan-zoom {\n from {\n transform: scale(1) translate3d(0, 0, 0);\n }\n to {\n transform: scale(1.08) translate3d(1.5%, -1.5%, 0);\n }\n }\n `,\n ];\n\n render() {\n if (!this.src) {\n return html`\n <slot></slot>\n `;\n }\n const duration = `${6 / Math.max(0.25, this.speed)}s`;\n const iterationCount = this.loop ? 'infinite' : '1';\n const playState = this.play ? 'running' : 'paused';\n return html`\n <img\n src=${this.src}\n alt=\"\"\n style=${`animation-duration:${duration};animation-iteration-count:${iterationCount};animation-play-state:${playState};`}\n />\n `;\n }\n}\n","import{nothing as t,noChange as i}from\"../lit-html.js\";import{directive as r,Directive as s,PartType as n}from\"../directive.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */class e extends s{constructor(i){if(super(i),this.it=t,i.type!==n.CHILD)throw Error(this.constructor.directiveName+\"() can only be used in child bindings\")}render(r){if(r===t||null==r)return this._t=void 0,this.it=r;if(r===i)return r;if(\"string\"!=typeof r)throw Error(this.constructor.directiveName+\"() called with a non-string value\");if(r===this.it)return this._t;this.it=r;const s=[r];return s.raw=s,this._t={_$litType$:this.constructor.resultType,strings:s,values:[]}}}e.directiveName=\"unsafeHTML\",e.resultType=1;const o=r(e);export{e as UnsafeHTMLDirective,o as unsafeHTML};\n//# sourceMappingURL=unsafe-html.js.map\n","import { css, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\n\nfunction escapeHtml(value: string): string {\n return value\n .replaceAll('&', '&amp;')\n .replaceAll('<', '&lt;')\n .replaceAll('>', '&gt;')\n .replaceAll('\"', '&quot;');\n}\n\nfunction renderInline(value: string): string {\n return escapeHtml(value)\n .replace(/`([^`]+)`/g, '<code>$1</code>')\n .replace(/\\*\\*([^*]+)\\*\\*/g, '<strong>$1</strong>')\n .replace(/\\*([^*]+)\\*/g, '<em>$1</em>')\n .replace(\n /\\[([^\\]]{1,200})\\]\\(([^)]{1,500})\\)/g,\n '<a href=\"$2\" target=\"_blank\" rel=\"noreferrer\">$1</a>',\n );\n}\n\nfunction markdownToHtml(source: string): string {\n const lines = source.replace(/\\r\\n/g, '\\n').split('\\n');\n const output: string[] = [];\n let inCode = false;\n let listItems: string[] = [];\n\n const flushList = (): void => {\n if (!listItems.length) {\n return;\n }\n\n output.push(`<ul>${listItems.join('')}</ul>`);\n listItems = [];\n };\n\n lines.forEach((line) => {\n if (line.startsWith('```')) {\n flushList();\n if (!inCode) {\n output.push('<pre><code>');\n inCode = true;\n } else {\n output.push('</code></pre>');\n inCode = false;\n }\n return;\n }\n\n if (inCode) {\n output.push(`${escapeHtml(line)}\\n`);\n return;\n }\n\n if (!line.trim()) {\n flushList();\n return;\n }\n\n if (line.startsWith('- ') || line.startsWith('* ')) {\n listItems.push(`<li>${renderInline(line.slice(2))}</li>`);\n return;\n }\n\n flushList();\n\n if (line.startsWith('### ')) {\n output.push(`<h3>${renderInline(line.slice(4))}</h3>`);\n return;\n }\n\n if (line.startsWith('## ')) {\n output.push(`<h2>${renderInline(line.slice(3))}</h2>`);\n return;\n }\n\n if (line.startsWith('# ')) {\n output.push(`<h1>${renderInline(line.slice(2))}</h1>`);\n return;\n }\n\n if (line.startsWith('> ')) {\n output.push(`<blockquote>${renderInline(line.slice(2))}</blockquote>`);\n return;\n }\n\n if (line === '---') {\n output.push('<hr />');\n return;\n }\n\n output.push(`<p>${renderInline(line)}</p>`);\n });\n\n flushList();\n return output.join('');\n}\n\n/**\n * Lightweight inline markdown renderer that converts markdown text to styled HTML.\n * 轻量级内联 Markdown 渲染器,将 Markdown 文本转换为带样式的 HTML。\n *\n * @example\n * ```html\n * <aithe-markdown content=\"# Hello\\n**Bold** text and `code`.\" theme=\"article\"></aithe-markdown>\n * ```\n */\n@customElement('aithe-markdown')\nexport class AitheMarkdown extends AitheElement {\n /** Raw markdown source string. Markdown 源文本字符串。 */\n @property({ type: String }) content = '';\n /** Visual theme preset. 视觉主题预设。 */\n @property({ type: String }) theme: 'default' | 'article' = 'default';\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: block;\n }\n\n .markdown {\n color: var(--aithe-color-text);\n }\n\n .markdown :where(h1, h2, h3) {\n margin: 0 0 var(--aithe-space-3);\n }\n\n .markdown :where(p, ul, blockquote, pre) {\n margin: 0 0 var(--aithe-space-4);\n }\n\n .markdown pre {\n padding: var(--aithe-space-4);\n overflow: auto;\n border-radius: var(--aithe-radius-lg);\n background: #0f172a;\n color: #e2e8f0;\n }\n\n .markdown code {\n font-family: var(--aithe-font-family-mono);\n }\n\n .markdown blockquote {\n padding-left: var(--aithe-space-4);\n border-left: 3px solid var(--aithe-primary-5);\n color: var(--aithe-color-text-muted);\n }\n\n .markdown a {\n color: var(--aithe-primary-6);\n }\n `,\n ];\n\n render() {\n return html`\n <article class=\"markdown\">${unsafeHTML(markdownToHtml(this.content))}</article>\n `;\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\n\n/**\n * Linear progress bar with status colors and optional percentage label.\n * 线性进度条,支持状态颜色和可选百分比标签。\n *\n * @example\n * ```html\n * <aithe-progress-bar percent=\"75\" status=\"success\" show-info></aithe-progress-bar>\n * ```\n */\n@customElement('aithe-progress-bar')\nexport class AitheProgressBar extends AitheElement {\n /** Current progress percentage (0–100). 当前进度百分比(0–100)。 */\n @property({ type: Number }) percent = 0;\n /** Status color variant. 状态颜色类型。 */\n @property({ type: String }) status: 'default' | 'success' | 'warning' | 'danger' = 'default';\n /** Whether to display the percentage text. 是否显示百分比文本。 */\n @property({ type: Boolean, attribute: 'show-info' }) showInfo = true;\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: grid;\n gap: var(--aithe-space-2);\n }\n\n .track {\n height: 10px;\n overflow: hidden;\n border-radius: var(--aithe-radius-full);\n background: var(--aithe-neutral-2);\n }\n\n .bar {\n height: 100%;\n border-radius: inherit;\n background: linear-gradient(90deg, var(--aithe-primary-5), var(--aithe-primary-7));\n }\n\n .bar.success {\n background: linear-gradient(90deg, var(--aithe-success-5), var(--aithe-success-7));\n }\n\n .bar.warning {\n background: linear-gradient(90deg, var(--aithe-warning-5), var(--aithe-warning-7));\n }\n\n .bar.danger {\n background: linear-gradient(90deg, var(--aithe-danger-5), var(--aithe-danger-7));\n }\n\n .info {\n color: var(--aithe-color-text-muted);\n font-size: var(--aithe-font-size-sm);\n }\n `,\n ];\n\n render() {\n return html`\n <div class=\"track\">\n <div\n class=\"bar ${this.status}\"\n style=${`width:${Math.max(0, Math.min(100, this.percent))}%;`}\n ></div>\n </div>\n ${this.showInfo\n ? html`\n <span class=\"info\">${this.percent}%</span>\n `\n : null}\n `;\n }\n}\n","import { css, svg } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\n\n/**\n * Circular progress ring indicator with status colors and percentage label.\n * 圆形进度环指示器,支持状态颜色和百分比标签。\n *\n * @example\n * ```html\n * <aithe-progress-ring percent=\"60\" size=\"160\" stroke-width=\"12\" status=\"warning\"></aithe-progress-ring>\n * ```\n */\n@customElement('aithe-progress-ring')\nexport class AitheProgressRing extends AitheElement {\n /** Current progress percentage (0–100). 当前进度百分比(0–100)。 */\n @property({ type: Number }) percent = 0;\n /** Diameter of the ring in pixels. 环的直径(像素)。 */\n @property({ type: String }) size = '120';\n /** Stroke width of the ring in pixels. 环的描边宽度(像素)。 */\n @property({ type: Number, attribute: 'stroke-width' }) strokeWidth = 10;\n /** Status color variant. 状态颜色类型。 */\n @property({ type: String }) status: 'default' | 'success' | 'warning' | 'danger' = 'default';\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: inline-flex;\n }\n\n svg {\n overflow: visible;\n }\n\n .track {\n stroke: var(--aithe-neutral-2);\n }\n\n .bar {\n stroke: var(--aithe-primary-6);\n transition: stroke-dashoffset var(--aithe-duration-base) var(--aithe-ease-standard);\n }\n\n .bar.success {\n stroke: var(--aithe-success-6);\n }\n\n .bar.warning {\n stroke: var(--aithe-warning-6);\n }\n\n .bar.danger {\n stroke: var(--aithe-danger-6);\n }\n\n .label {\n font-size: var(--aithe-font-size-sm);\n fill: var(--aithe-color-text-muted);\n }\n `,\n ];\n\n render() {\n const size = Number(this.size) || 120;\n const radius = Math.max(0, (size - this.strokeWidth) / 2);\n const circumference = 2 * Math.PI * radius;\n const offset = circumference - (Math.max(0, Math.min(100, this.percent)) / 100) * circumference;\n const center = size / 2;\n\n return svg`\n <svg width=${size} height=${size} viewBox=${`0 0 ${size} ${size}`}>\n <circle class=\"track\" cx=${center} cy=${center} r=${radius} fill=\"none\" stroke-width=${this.strokeWidth}></circle>\n <circle\n class=${`bar ${this.status}`}\n cx=${center}\n cy=${center}\n r=${radius}\n fill=\"none\"\n stroke-width=${this.strokeWidth}\n stroke-linecap=\"round\"\n stroke-dasharray=${circumference}\n stroke-dashoffset=${offset}\n transform=${`rotate(-90 ${center} ${center})`}\n ></circle>\n <text class=\"label\" x=\"50%\" y=\"50%\" text-anchor=\"middle\" dominant-baseline=\"middle\">${this.percent}%</text>\n </svg>\n `;\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\n\n/**\n * Generic loading spinner with ring and dots variants.\n * 通用加载旋转器,支持环形和圆点两种变体。\n *\n * @example\n * ```html\n * <aithe-spinner size=\"lg\" variant=\"dots\" color=\"var(--aithe-danger-6)\"></aithe-spinner>\n * ```\n */\n@customElement('aithe-spinner')\nexport class AitheSpinner extends AitheElement {\n /** Size scale of the spinner. 旋转器的尺寸规格。 */\n @property({ type: String }) size: 'sm' | 'md' | 'lg' = 'md';\n /** Custom color for the spinner (CSS value). 旋转器的自定义颜色(CSS 值)。 */\n @property({ type: String }) color = 'var(--aithe-primary-6)';\n /** Visual variant of the spinner. 旋转器的视觉变体。 */\n @property({ type: String }) variant: 'ring' | 'dots' = 'ring';\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: inline-flex;\n }\n\n .ring {\n border: 3px solid rgba(77, 141, 255, 0.18);\n border-right-color: transparent;\n border-radius: 50%;\n animation: aithe-spin 0.85s linear infinite;\n }\n\n .ring.sm {\n width: 18px;\n height: 18px;\n }\n\n .ring.md {\n width: 26px;\n height: 26px;\n }\n\n .ring.lg {\n width: 38px;\n height: 38px;\n }\n\n .dots {\n display: inline-flex;\n gap: 4px;\n }\n\n .dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: var(--aithe-spinner-color, var(--aithe-primary-6));\n animation: aithe-bounce 0.9s infinite ease-in-out both;\n }\n\n .dot:nth-child(2) {\n animation-delay: 0.12s;\n }\n\n .dot:nth-child(3) {\n animation-delay: 0.24s;\n }\n\n @keyframes aithe-spin {\n to {\n transform: rotate(360deg);\n }\n }\n\n @keyframes aithe-bounce {\n 0%,\n 80%,\n 100% {\n transform: scale(0.5);\n opacity: 0.5;\n }\n 40% {\n transform: scale(1);\n opacity: 1;\n }\n }\n `,\n ];\n\n render() {\n return this.variant === 'dots'\n ? html`\n <span class=\"dots\" style=${`--aithe-spinner-color:${this.color};`}>\n <span class=\"dot\"></span>\n <span class=\"dot\"></span>\n <span class=\"dot\"></span>\n </span>\n `\n : html`\n <span\n class=${`ring ${this.size}`}\n style=${`border-top-color:${this.color};border-left-color:${this.color};border-bottom-color:${this.color};`}\n ></span>\n `;\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\n\n/**\n * Skeleton placeholder for content loading states with line, circle, and rect shapes.\n * 骨架屏占位组件,用于内容加载状态,支持线条、圆形和矩形形状。\n *\n * @slot - Default slot shown when `active` is false. `active` 为 false 时显示的默认插槽。\n *\n * @example\n * ```html\n * <aithe-skeleton rows=\"4\" shape=\"line\" animated active></aithe-skeleton>\n * <aithe-skeleton shape=\"circle\" :active=\"loading\">\n * <aithe-avatar src=\"user.jpg\"></aithe-avatar>\n * </aithe-skeleton>\n * ```\n */\n@customElement('aithe-skeleton')\nexport class AitheSkeleton extends AitheElement {\n /** Number of placeholder rows. 占位行数。 */\n @property({ type: Number }) rows = 3;\n /** Whether rows have a shimmer animation. 行是否具有闪烁动画。 */\n @property({ type: Boolean }) animated = true;\n /** Shape of each placeholder row. 每行占位的形状。 */\n @property({ type: String }) shape: 'line' | 'circle' | 'rect' = 'line';\n /** Whether the skeleton is active (true = show placeholder, false = show slot content). 骨架屏是否激活(true = 显示占位,false = 显示插槽内容)。 */\n @property({ type: Boolean }) active = true;\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: grid;\n gap: var(--aithe-space-3);\n }\n\n .row {\n height: 14px;\n border-radius: var(--aithe-radius-full);\n background: linear-gradient(\n 90deg,\n var(--aithe-neutral-2) 0%,\n var(--aithe-neutral-1) 50%,\n var(--aithe-neutral-2) 100%\n );\n background-size: 200% 100%;\n }\n\n .row.circle {\n width: 48px;\n height: 48px;\n border-radius: 50%;\n }\n\n .row.rect {\n height: 120px;\n border-radius: var(--aithe-radius-lg);\n }\n\n .row.animated {\n animation: aithe-skeleton 1.2s linear infinite;\n }\n\n @keyframes aithe-skeleton {\n to {\n background-position: -200% 0;\n }\n }\n `,\n ];\n\n render() {\n if (!this.active) {\n return html`\n <slot></slot>\n `;\n }\n\n return html`\n ${Array.from(\n { length: this.rows },\n () => html`\n <div class=${classMap({ row: true, [this.shape]: true, animated: this.animated })}></div>\n `,\n )}\n `;\n }\n}\n","import { css, html, nothing } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\n\n/**\n * Highlighted callout block with colored left border and optional title.\n * 高亮提示块,带彩色左边框和可选标题。\n *\n * @slot - Default slot for callout body content. 提示块正文内容的默认插槽。\n *\n * @example\n * ```html\n * <aithe-callout type=\"warning\" title=\"Caution\">Check before proceeding.</aithe-callout>\n * ```\n */\n@customElement('aithe-callout')\nexport class AitheCallout extends AitheElement {\n /** Color variant of the callout. 提示块的颜色类型。 */\n @property({ type: String }) type: 'default' | 'success' | 'warning' | 'danger' = 'default';\n /** Optional title displayed above the body. 正文上方显示的可选标题。 */\n @property({ type: String }) title = '';\n /** Icon name to display before the title. 在标题前显示的图标名称。 */\n @property({ type: String }) icon = '';\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: block;\n }\n\n .callout {\n display: grid;\n gap: var(--aithe-space-2);\n padding: var(--aithe-space-5);\n border: 1px solid var(--aithe-color-border);\n border-left-width: 4px;\n border-radius: var(--aithe-radius-xl);\n background: var(--aithe-color-surface-elevated);\n }\n\n .callout.success {\n border-left-color: var(--aithe-success-6);\n }\n\n .callout.warning {\n border-left-color: var(--aithe-warning-6);\n }\n\n .callout.danger {\n border-left-color: var(--aithe-danger-6);\n }\n\n .callout.default {\n border-left-color: var(--aithe-primary-6);\n }\n\n .title {\n display: inline-flex;\n align-items: center;\n gap: var(--aithe-space-2);\n font-weight: var(--aithe-font-weight-semibold);\n }\n\n .title-icon {\n flex-shrink: 0;\n color: var(--aithe-color-text-muted);\n }\n `,\n ];\n\n render() {\n const titleIcon = this.icon\n ? html`\n <aithe-icon class=\"title-icon\" name=${this.icon} size=\"16\"></aithe-icon>\n `\n : nothing;\n\n return html`\n <div class=${`callout ${this.type}`}>\n ${this.title\n ? html`\n <div class=\"title\">${titleIcon}${this.title}</div>\n `\n : null}\n <slot></slot>\n </div>\n `;\n }\n}\n","import { css, html, nothing } from 'lit';\nimport { customElement, property, query } from 'lit/decorators.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\nimport { t } from '../../core/i18n';\n\n/**\n * Themed details disclosure with expand/collapse toggle.\n * 带展开/收起切换的主题化详情折叠组件。\n *\n * @slot - Default slot for the disclosure body content. 折叠正文内容的默认插槽。\n *\n * @fires aithe-toggle - Emitted when the disclosure is toggled with `{ open }`. 折叠切换时发出 `{ open }`。\n *\n * @example\n * ```html\n * <aithe-details open summary=\"More info\">Hidden content here.</aithe-details>\n * ```\n */\n@customElement('aithe-details')\nexport class AitheDetails extends AitheElement {\n /** Whether the disclosure is initially open. 折叠是否初始展开。 */\n @property({ type: Boolean, reflect: true }) open = false;\n /** Summary text shown as the toggle label. 作为切换标签显示的摘要文本。 */\n @property({ type: String }) summary = '';\n /** Icon name to display before the summary text. 在摘要文本前显示的图标名称。 */\n @property({ type: String }) icon = '';\n /** Display title for the details (shown as tooltip). 详情折叠的显示标题(作为工具提示)。 */\n @property({ type: String }) title = '';\n\n @query('details') private detailsElement?: HTMLDetailsElement;\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: block;\n }\n\n details {\n padding: var(--aithe-space-4);\n border: 1px solid var(--aithe-color-border);\n border-radius: var(--aithe-radius-lg);\n background: var(--aithe-color-surface-elevated);\n }\n\n .summary-icon {\n flex-shrink: 0;\n color: var(--aithe-color-text-muted);\n }\n\n summary {\n display: inline-flex;\n align-items: center;\n gap: var(--aithe-space-2);\n cursor: pointer;\n font-weight: var(--aithe-font-weight-semibold);\n }\n\n .body {\n margin-top: var(--aithe-space-4);\n color: var(--aithe-color-text-muted);\n }\n `,\n ];\n\n protected updated(changed: Map<string, unknown>): void {\n if (changed.has('open') && this.detailsElement) {\n this.detailsElement.open = this.open;\n }\n }\n\n render() {\n return html`\n <details\n ?open=${this.open}\n title=${this.title}\n @toggle=${() => {\n this.open = Boolean(this.detailsElement?.open);\n this.emit('aithe-toggle', { open: this.open });\n }}\n >\n <summary>\n ${this.icon\n ? html`\n <aithe-icon class=\"summary-icon\" name=${this.icon} size=\"16\"></aithe-icon>\n `\n : nothing}${this.summary || t('container.details.defaultSummary')}\n </summary>\n <div class=\"body\">\n <slot></slot>\n </div>\n </details>\n `;\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { aitheBaseStyles, aitheScrollbarStyles } from '../../core/styles';\n\n/**\n * Themed scroll container with optional shadow edges and scrollbar control.\n * 主题化滚动容器,支持可选阴影边缘和滚动条控制。\n *\n * @slot - Default slot for scrollable content. 可滚动内容的默认插槽。\n *\n * @fires aithe-scroll - Emitted on scroll with `{ top, left }`. 滚动时发出 `{ top, left }`。\n *\n * @example\n * ```html\n * <aithe-scroller height=\"300px\" shadow scrollbar>\n * <p>Long content here...</p>\n * </aithe-scroller>\n * ```\n */\n@customElement('aithe-scroller')\nexport class AitheScroller extends AitheElement {\n /** Fixed height of the scroll area (CSS value). 滚动区域的固定高度(CSS 值)。 */\n @property({ type: String }) height = '';\n /** Maximum height of the scroll area (CSS value). 滚动区域的最大高度(CSS 值)。 */\n @property({ type: String, attribute: 'max-height' }) maxHeight = '';\n /** Whether to show gradient shadows at scroll edges. 是否在滚动边缘显示渐变阴影。 */\n @property({ type: Boolean }) shadow = false;\n /** Whether to show the native scrollbar. 是否显示原生滚动条。 */\n @property({ type: Boolean }) scrollbar = true;\n\n @state() private shadowTop = false;\n @state() private shadowBottom = false;\n\n static readonly styles = [\n aitheBaseStyles,\n aitheScrollbarStyles,\n css`\n :host {\n display: block;\n }\n\n .wrap {\n position: relative;\n overflow: auto;\n border: 1px solid var(--aithe-color-border);\n border-radius: var(--aithe-radius-lg);\n background: var(--aithe-color-surface-elevated);\n }\n\n .wrap.no-scrollbar {\n scrollbar-width: none;\n }\n\n .wrap.no-scrollbar::-webkit-scrollbar {\n display: none;\n }\n\n .wrap::before,\n .wrap::after {\n content: '';\n position: sticky;\n left: 0;\n right: 0;\n display: block;\n height: 16px;\n pointer-events: none;\n }\n\n .wrap.shadow-top::before {\n top: 0;\n background: linear-gradient(180deg, rgba(11, 17, 29, 0.14), transparent);\n }\n\n .wrap.shadow-bottom::after {\n bottom: 0;\n background: linear-gradient(0deg, rgba(11, 17, 29, 0.14), transparent);\n }\n\n .inner {\n padding: var(--aithe-space-4);\n }\n `,\n ];\n\n private readonly handleScroll = (event: Event): void => {\n const element = event.currentTarget as HTMLElement;\n this.shadowTop = element.scrollTop > 0;\n this.shadowBottom = element.scrollTop + element.clientHeight < element.scrollHeight;\n this.emit('aithe-scroll', {\n top: element.scrollTop,\n left: element.scrollLeft,\n });\n };\n\n render() {\n const style = [\n this.height ? `height:${this.height};` : '',\n this.maxHeight ? `max-height:${this.maxHeight};` : '',\n ].join('');\n\n return html`\n <div\n class=${classMap({\n wrap: true,\n 'no-scrollbar': !this.scrollbar,\n 'shadow-top': this.shadow && this.shadowTop,\n 'shadow-bottom': this.shadow && this.shadowBottom,\n })}\n style=${style}\n @scroll=${this.handleScroll}\n >\n <div class=\"inner\">\n <slot></slot>\n </div>\n </div>\n `;\n }\n}\n","import { css, html } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\n\nimport { AitheElement } from '../../base/aithe-element';\nimport { aitheBaseStyles } from '../../core/styles';\n\n/**\n * Resizable two-panel layout with a draggable divider.\n * 可调整大小的双面板布局,带可拖动分隔条。\n *\n * @slot start - Content for the first (start) pane. 第一个(起始)面板的内容。\n * @slot end - Content for the second (end) pane. 第二个(末尾)面板的内容。\n *\n * @fires aithe-resize - Emitted when the divider is dragged with `{ value }`. 分隔条被拖动时发出 `{ value }`。\n *\n * @example\n * ```html\n * <aithe-split-panel direction=\"horizontal\" value=\"40\" min-size=\"20\" max-size=\"80\">\n * <div slot=\"start\">Left pane</div>\n * <div slot=\"end\">Right pane</div>\n * </aithe-split-panel>\n * ```\n */\n@customElement('aithe-split-panel')\nexport class AitheSplitPanel extends AitheElement {\n /** Layout direction of the split. 分割布局的方向。 */\n @property({ type: String }) direction: 'horizontal' | 'vertical' = 'horizontal';\n /** Minimum size of the start pane as a percentage. 起始面板的最小百分比尺寸。 */\n @property({ type: Number, attribute: 'min-size' }) minSize = 20;\n /** Maximum size of the start pane as a percentage. 起始面板的最大百分比尺寸。 */\n @property({ type: Number, attribute: 'max-size' }) maxSize = 80;\n /** Current split position as a percentage (0–100). 当前分割位置百分比(0–100)。 */\n @property({ type: Number }) value = 50;\n\n @state() private dragging = false;\n\n static readonly styles = [\n aitheBaseStyles,\n css`\n :host {\n display: block;\n }\n\n .split {\n display: grid;\n width: 100%;\n min-height: 280px;\n border: 1px solid var(--aithe-color-border);\n border-radius: var(--aithe-radius-xl);\n overflow: hidden;\n background: var(--aithe-color-surface-elevated);\n }\n\n .split.horizontal {\n grid-template-columns: minmax(0, var(--aithe-split-start, 50%)) 12px minmax(0, 1fr);\n }\n\n .split.vertical {\n grid-template-rows: minmax(0, var(--aithe-split-start, 50%)) 12px minmax(0, 1fr);\n }\n\n .pane {\n min-width: 0;\n min-height: 0;\n padding: var(--aithe-space-4);\n }\n\n .handle {\n background: var(--aithe-color-surface-muted);\n cursor: col-resize;\n }\n\n .vertical .handle {\n cursor: row-resize;\n }\n\n .handle.dragging {\n background: var(--aithe-primary-5);\n }\n `,\n ];\n\n connectedCallback(): void {\n super.connectedCallback();\n document.addEventListener('pointermove', this.handlePointerMove);\n document.addEventListener('pointerup', this.handlePointerUp);\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n document.removeEventListener('pointermove', this.handlePointerMove);\n document.removeEventListener('pointerup', this.handlePointerUp);\n }\n\n protected updated(): void {\n this.style.setProperty('--aithe-split-start', `${this.value}%`);\n }\n\n private readonly handlePointerDown = (): void => {\n this.dragging = true;\n };\n\n private readonly handlePointerMove = (event: PointerEvent): void => {\n if (!this.dragging) {\n return;\n }\n\n const rect = this.getBoundingClientRect();\n const raw =\n this.direction === 'horizontal'\n ? ((event.clientX - rect.left) / rect.width) * 100\n : ((event.clientY - rect.top) / rect.height) * 100;\n\n this.value = Math.max(this.minSize, Math.min(this.maxSize, raw));\n this.emit('aithe-resize', { value: this.value });\n };\n\n private readonly handlePointerUp = (): void => {\n this.dragging = false;\n };\n\n render() {\n return html`\n <div class=${classMap({ split: true, [this.direction]: true })}>\n <div class=\"pane\"><slot name=\"start\"></slot></div>\n <div\n class=${classMap({ handle: true, dragging: this.dragging })}\n role=\"separator\"\n aria-orientation=${this.direction === 'horizontal' ? 'vertical' : 'horizontal'}\n @pointerdown=${this.handlePointerDown}\n ></div>\n <div class=\"pane\"><slot name=\"end\"></slot></div>\n </div>\n `;\n }\n}\n","import { initializeAitheUI } from './global';\n\ninitializeAitheUI();\n\nexport * from './global';\nexport * from './base/aithe-element';\nexport * from './styles/theme';\nexport * from './types';\nexport * from './utils';\n\nexport * from './core/i18n';\n\nexport * from './components/basic/icon';\nexport * from './components/basic/button';\nexport * from './components/basic/button-group';\nexport * from './components/basic/input';\nexport * from './components/basic/textarea';\nexport * from './components/basic/card';\nexport * from './components/basic/badge';\nexport * from './components/basic/tag';\nexport * from './components/basic/avatar';\nexport * from './components/basic/divider';\nexport * from './components/basic/empty';\nexport * from './components/basic/chip';\n\nexport * from './components/layout/container';\nexport * from './components/layout/row';\nexport * from './components/layout/col';\nexport * from './components/layout/flex';\nexport * from './components/layout/space';\nexport * from './components/layout/page-container';\nexport * from './components/layout/collapse';\nexport * from './components/layout/collapse-item';\nexport * from './components/layout/affix';\nexport * from './components/layout/page';\n\nexport * from './components/navigation/menu';\nexport * from './components/navigation/menu-item';\nexport * from './components/navigation/sub-menu';\nexport * from './components/navigation/breadcrumb';\nexport * from './components/navigation/breadcrumb-item';\nexport * from './components/navigation/steps';\nexport * from './components/navigation/back-top';\nexport * from './components/theme/theme-picker';\nexport * from './components/theme/theme-preview';\nexport * from './components/theme/locale-switch';\n\nexport * from './components/form/checkbox';\nexport * from './components/form/checkbox-group';\nexport * from './components/form/radio';\nexport * from './components/form/radio-group';\nexport * from './components/form/select';\nexport * from './components/form/switch';\nexport * from './components/form/color-picker';\nexport * from './components/form/combobox';\nexport * from './components/form/date-picker';\nexport * from './components/form/time-picker';\nexport * from './components/form/slider';\nexport * from './components/form/rate';\nexport * from './components/form/form';\nexport * from './components/form/form-item';\nexport * from './components/form/upload';\nexport * from './components/form/transfer';\n\nexport * from './components/feedback/dialog';\nexport * from './components/feedback/modal';\nexport * from './components/feedback/drawer';\nexport * from './components/feedback/tooltip';\nexport * from './components/feedback/popover';\nexport * from './components/navigation/dropdown';\nexport * from './components/feedback/toast';\nexport * from './components/feedback/alert';\nexport * from './components/feedback/notification';\nexport * from './components/feedback/loading';\n\nexport * from './components/data/table';\nexport * from './components/data/table-column';\nexport * from './components/data/timeline';\nexport * from './components/data/timeline-item';\nexport * from './components/data/tabs';\nexport * from './components/data/tab-pane';\nexport * from './components/data/tree';\nexport * from './components/data/tree-menu';\nexport * from './components/data/pagination';\n\nexport * from './components/display/carousel';\nexport * from './components/display/comparison';\nexport * from './components/display/animated-image';\nexport * from './components/display/markdown';\n\nexport * from './components/progress/progress-bar';\nexport * from './components/progress/progress-ring';\nexport * from './components/progress/spinner';\nexport * from './components/progress/skeleton';\n\nexport * from './components/container/callout';\nexport * from './components/container/details';\nexport * from './components/container/scroller';\nexport * from './components/container/split-panel';\n"],"x_google_ignoreList":[0,1,2,3,37,38,39,40,41,42,47,48,50,52,122],"mappings":"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"}