@zerodep-dev/vue-tsx-pro-ui 0.3.0 → 0.3.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 (616) hide show
  1. package/dist/base/Blockquote.d.ts +1 -1
  2. package/dist/base/Blockquote.js +1 -1
  3. package/dist/base/Blockquote.js.map +1 -1
  4. package/dist/base/ButtonGroup.d.ts +1 -1
  5. package/dist/base/ButtonGroup.js +1 -1
  6. package/dist/base/ButtonGroup.js.map +1 -1
  7. package/dist/base/Code.d.ts +1 -1
  8. package/dist/base/Code.js +1 -1
  9. package/dist/base/Code.js.map +1 -1
  10. package/dist/base/CodeBlock.d.ts +1 -1
  11. package/dist/base/CodeBlock.js +1 -1
  12. package/dist/base/CodeBlock.js.map +1 -1
  13. package/dist/base/CopyButton.d.ts +1 -1
  14. package/dist/base/CopyButton.js +1 -1
  15. package/dist/base/CopyButton.js.map +1 -1
  16. package/dist/base/Heading.d.ts +1 -1
  17. package/dist/base/Heading.js +1 -1
  18. package/dist/base/Heading.js.map +1 -1
  19. package/dist/base/Icon.d.ts +1 -1
  20. package/dist/base/Icon.js +1 -1
  21. package/dist/base/Icon.js.map +1 -1
  22. package/dist/base/Indicator.d.ts +1 -1
  23. package/dist/base/Indicator.js +1 -1
  24. package/dist/base/Indicator.js.map +1 -1
  25. package/dist/base/Kbd.d.ts +1 -1
  26. package/dist/base/Kbd.js +1 -1
  27. package/dist/base/Kbd.js.map +1 -1
  28. package/dist/base/Link.d.ts +1 -1
  29. package/dist/base/Link.js +1 -1
  30. package/dist/base/Link.js.map +1 -1
  31. package/dist/base/List.d.ts +1 -1
  32. package/dist/base/List.js +1 -1
  33. package/dist/base/List.js.map +1 -1
  34. package/dist/base/Mark.d.ts +1 -1
  35. package/dist/base/Mark.js +1 -1
  36. package/dist/base/Mark.js.map +1 -1
  37. package/dist/base/Spinner.d.ts +1 -1
  38. package/dist/base/Spinner.js +1 -1
  39. package/dist/base/Spinner.js.map +1 -1
  40. package/dist/base/StatusDot.d.ts +1 -1
  41. package/dist/base/StatusDot.js +1 -1
  42. package/dist/base/StatusDot.js.map +1 -1
  43. package/dist/base/Tag.d.ts +1 -1
  44. package/dist/base/Tag.js +1 -1
  45. package/dist/base/Tag.js.map +1 -1
  46. package/dist/base/Text.d.ts +1 -1
  47. package/dist/base/Text.js +1 -1
  48. package/dist/base/Text.js.map +1 -1
  49. package/dist/base/VisuallyHidden.d.ts +1 -1
  50. package/dist/base/VisuallyHidden.js +1 -1
  51. package/dist/base/VisuallyHidden.js.map +1 -1
  52. package/dist/base/badge-styles.d.ts +1 -1
  53. package/dist/base/badge-styles.js +1 -1
  54. package/dist/base/badge-styles.js.map +1 -1
  55. package/dist/base/button-core.d.ts +1 -1
  56. package/dist/base/button-core.js +1 -1
  57. package/dist/base/button-core.js.map +1 -1
  58. package/dist/charts/ChordChart.d.ts +1 -1
  59. package/dist/charts/ChordChart.js +1 -1
  60. package/dist/charts/ChordChart.js.map +1 -1
  61. package/dist/charts/DonutChart.d.ts +1 -1
  62. package/dist/charts/DonutChart.js +1 -1
  63. package/dist/charts/DonutChart.js.map +1 -1
  64. package/dist/charts/FunnelChart.d.ts +1 -1
  65. package/dist/charts/FunnelChart.js +1 -1
  66. package/dist/charts/FunnelChart.js.map +1 -1
  67. package/dist/charts/GraphChart.d.ts +1 -1
  68. package/dist/charts/GraphChart.js +1 -1
  69. package/dist/charts/GraphChart.js.map +1 -1
  70. package/dist/charts/MapChart.d.ts +1 -1
  71. package/dist/charts/MapChart.js +1 -1
  72. package/dist/charts/MapChart.js.map +1 -1
  73. package/dist/charts/RadarChart.d.ts +1 -1
  74. package/dist/charts/RadarChart.js +1 -1
  75. package/dist/charts/RadarChart.js.map +1 -1
  76. package/dist/charts/SankeyChart.d.ts +1 -1
  77. package/dist/charts/SankeyChart.js +1 -1
  78. package/dist/charts/SankeyChart.js.map +1 -1
  79. package/dist/charts/TreemapChart.d.ts +1 -1
  80. package/dist/charts/TreemapChart.js +1 -1
  81. package/dist/charts/TreemapChart.js.map +1 -1
  82. package/dist/charts/XYChart.d.ts +1 -1
  83. package/dist/charts/XYChart.js +1 -1
  84. package/dist/charts/XYChart.js.map +1 -1
  85. package/dist/charts/frame.d.ts +1 -1
  86. package/dist/charts/frame.js +1 -1
  87. package/dist/charts/frame.js.map +1 -1
  88. package/dist/code-editor/CodeEditor.js +1 -1
  89. package/dist/code-editor/CodeEditor.js.map +1 -1
  90. package/dist/config/Provider.d.ts +1 -1
  91. package/dist/config/Provider.js +1 -1
  92. package/dist/config/Provider.js.map +1 -1
  93. package/dist/config/createUi.d.ts +1 -1
  94. package/dist/config/createUi.js +1 -1
  95. package/dist/config/createUi.js.map +1 -1
  96. package/dist/config/theme/coffee.d.ts +1 -1
  97. package/dist/config/theme/coffee.js +1 -1
  98. package/dist/config/theme/coffee.js.map +1 -1
  99. package/dist/config/theme/cyberpunk.d.ts +1 -1
  100. package/dist/config/theme/cyberpunk.js +1 -1
  101. package/dist/config/theme/cyberpunk.js.map +1 -1
  102. package/dist/config/theme/dark.d.ts +1 -1
  103. package/dist/config/theme/dark.js +1 -1
  104. package/dist/config/theme/dark.js.map +1 -1
  105. package/dist/config/theme/festive.d.ts +1 -1
  106. package/dist/config/theme/festive.js +1 -1
  107. package/dist/config/theme/festive.js.map +1 -1
  108. package/dist/config/theme/forest.d.ts +1 -1
  109. package/dist/config/theme/forest.js +1 -1
  110. package/dist/config/theme/forest.js.map +1 -1
  111. package/dist/config/theme/high-contrast.d.ts +1 -1
  112. package/dist/config/theme/high-contrast.js +1 -1
  113. package/dist/config/theme/high-contrast.js.map +1 -1
  114. package/dist/config/theme/lemon.d.ts +1 -1
  115. package/dist/config/theme/lemon.js +1 -1
  116. package/dist/config/theme/lemon.js.map +1 -1
  117. package/dist/config/theme/light.d.ts +1 -1
  118. package/dist/config/theme/light.js +1 -1
  119. package/dist/config/theme/light.js.map +1 -1
  120. package/dist/config/theme/midnight.d.ts +1 -1
  121. package/dist/config/theme/midnight.js +1 -1
  122. package/dist/config/theme/midnight.js.map +1 -1
  123. package/dist/config/theme/ocean.d.ts +1 -1
  124. package/dist/config/theme/ocean.js +1 -1
  125. package/dist/config/theme/ocean.js.map +1 -1
  126. package/dist/config/theme/paper.d.ts +1 -1
  127. package/dist/config/theme/paper.js +1 -1
  128. package/dist/config/theme/paper.js.map +1 -1
  129. package/dist/config/theme/sakura.d.ts +1 -1
  130. package/dist/config/theme/sakura.js +1 -1
  131. package/dist/config/theme/sakura.js.map +1 -1
  132. package/dist/config/theme/theme.js +1 -1
  133. package/dist/config/theme/theme.js.map +1 -1
  134. package/dist/config/theme/tokens.d.ts +1 -1
  135. package/dist/config/theme/tokens.js +1 -1
  136. package/dist/config/theme/tokens.js.map +1 -1
  137. package/dist/date/CalendarBoard.d.ts +1 -1
  138. package/dist/date/CalendarBoard.js +1 -1
  139. package/dist/date/CalendarBoard.js.map +1 -1
  140. package/dist/date/CalendarView.d.ts +1 -1
  141. package/dist/date/CalendarView.js +1 -1
  142. package/dist/date/CalendarView.js.map +1 -1
  143. package/dist/date/Countdown.d.ts +1 -1
  144. package/dist/date/Countdown.js +1 -1
  145. package/dist/date/Countdown.js.map +1 -1
  146. package/dist/date/DatePicker.d.ts +1 -1
  147. package/dist/date/DatePicker.js +1 -1
  148. package/dist/date/DatePicker.js.map +1 -1
  149. package/dist/date/DateRangePicker.d.ts +1 -1
  150. package/dist/date/DateRangePicker.js +1 -1
  151. package/dist/date/DateRangePicker.js.map +1 -1
  152. package/dist/date/DateSegmentGroup.d.ts +1 -1
  153. package/dist/date/DateSegmentGroup.js +1 -1
  154. package/dist/date/DateSegmentGroup.js.map +1 -1
  155. package/dist/date/QuarterCalendar.js +1 -1
  156. package/dist/date/QuarterCalendar.js.map +1 -1
  157. package/dist/date/SegmentedField.d.ts +1 -1
  158. package/dist/date/SegmentedField.js +1 -1
  159. package/dist/date/SegmentedField.js.map +1 -1
  160. package/dist/date/TimePicker.d.ts +1 -1
  161. package/dist/date/TimePicker.js +1 -1
  162. package/dist/date/TimePicker.js.map +1 -1
  163. package/dist/date/picker-popover.d.ts +1 -1
  164. package/dist/date/picker-popover.js +1 -1
  165. package/dist/date/picker-popover.js.map +1 -1
  166. package/dist/diagram/Diagram.d.ts +1 -1
  167. package/dist/diagram/Diagram.js +1 -1
  168. package/dist/diagram/Diagram.js.map +1 -1
  169. package/dist/diagram/DiagramControls.d.ts +1 -1
  170. package/dist/diagram/DiagramControls.js +1 -1
  171. package/dist/diagram/DiagramControls.js.map +1 -1
  172. package/dist/diagram/DiagramLanes.d.ts +1 -1
  173. package/dist/diagram/DiagramLanes.js +1 -1
  174. package/dist/diagram/DiagramLanes.js.map +1 -1
  175. package/dist/diagram/DiagramMinimap.d.ts +1 -1
  176. package/dist/diagram/DiagramMinimap.js +1 -1
  177. package/dist/diagram/DiagramMinimap.js.map +1 -1
  178. package/dist/diagram/DiagramNode.d.ts +1 -1
  179. package/dist/diagram/DiagramNode.js +1 -1
  180. package/dist/diagram/DiagramNode.js.map +1 -1
  181. package/dist/display/Accordion.d.ts +1 -1
  182. package/dist/display/Accordion.js +1 -1
  183. package/dist/display/Accordion.js.map +1 -1
  184. package/dist/display/AnimatedNumber.d.ts +1 -1
  185. package/dist/display/AnimatedNumber.js +1 -1
  186. package/dist/display/AnimatedNumber.js.map +1 -1
  187. package/dist/display/Avatar.d.ts +1 -1
  188. package/dist/display/Avatar.js +1 -1
  189. package/dist/display/Avatar.js.map +1 -1
  190. package/dist/display/AvatarGroup.d.ts +1 -1
  191. package/dist/display/AvatarGroup.js +1 -1
  192. package/dist/display/AvatarGroup.js.map +1 -1
  193. package/dist/display/Card.d.ts +1 -1
  194. package/dist/display/Card.js +1 -1
  195. package/dist/display/Card.js.map +1 -1
  196. package/dist/display/Checklist.d.ts +1 -1
  197. package/dist/display/Checklist.js +1 -1
  198. package/dist/display/Checklist.js.map +1 -1
  199. package/dist/display/Collapse.d.ts +1 -1
  200. package/dist/display/Collapse.js +1 -1
  201. package/dist/display/Collapse.js.map +1 -1
  202. package/dist/display/Descriptions.d.ts +1 -1
  203. package/dist/display/Descriptions.js +1 -1
  204. package/dist/display/Descriptions.js.map +1 -1
  205. package/dist/display/Ellipsis.d.ts +1 -1
  206. package/dist/display/Ellipsis.js +1 -1
  207. package/dist/display/Ellipsis.js.map +1 -1
  208. package/dist/display/FieldCompare.d.ts +1 -1
  209. package/dist/display/FieldCompare.js +1 -1
  210. package/dist/display/FieldCompare.js.map +1 -1
  211. package/dist/display/Gauge.d.ts +1 -1
  212. package/dist/display/Gauge.js +1 -1
  213. package/dist/display/Gauge.js.map +1 -1
  214. package/dist/display/Image.d.ts +1 -1
  215. package/dist/display/Image.js +1 -1
  216. package/dist/display/Image.js.map +1 -1
  217. package/dist/display/ItemList.d.ts +1 -1
  218. package/dist/display/ItemList.js +1 -1
  219. package/dist/display/ItemList.js.map +1 -1
  220. package/dist/display/Marquee.d.ts +1 -1
  221. package/dist/display/Marquee.js +1 -1
  222. package/dist/display/Marquee.js.map +1 -1
  223. package/dist/display/ProportionBar.d.ts +1 -1
  224. package/dist/display/ProportionBar.js +1 -1
  225. package/dist/display/ProportionBar.js.map +1 -1
  226. package/dist/display/Sortable.d.ts +1 -1
  227. package/dist/display/Sortable.js +1 -1
  228. package/dist/display/Sortable.js.map +1 -1
  229. package/dist/display/Sparkline.d.ts +1 -1
  230. package/dist/display/Sparkline.js +1 -1
  231. package/dist/display/Sparkline.js.map +1 -1
  232. package/dist/display/Stat.d.ts +1 -1
  233. package/dist/display/Stat.js +1 -1
  234. package/dist/display/Stat.js.map +1 -1
  235. package/dist/display/Timeline.d.ts +1 -1
  236. package/dist/display/Timeline.js +1 -1
  237. package/dist/display/Timeline.js.map +1 -1
  238. package/dist/display/Tree.d.ts +1 -1
  239. package/dist/display/Tree.js +1 -1
  240. package/dist/display/Tree.js.map +1 -1
  241. package/dist/display/VirtualList.d.ts +1 -1
  242. package/dist/display/VirtualList.js +1 -1
  243. package/dist/display/VirtualList.js.map +1 -1
  244. package/dist/display/Watermark.d.ts +1 -1
  245. package/dist/display/Watermark.js +1 -1
  246. package/dist/display/Watermark.js.map +1 -1
  247. package/dist/docs-kit/CodeGroup.d.ts +1 -1
  248. package/dist/docs-kit/CodeGroup.js +1 -1
  249. package/dist/docs-kit/CodeGroup.js.map +1 -1
  250. package/dist/docs-kit/CodePreview.d.ts +1 -1
  251. package/dist/docs-kit/CodePreview.js +1 -1
  252. package/dist/docs-kit/CodePreview.js.map +1 -1
  253. package/dist/docs-kit/ColorSwatch.d.ts +1 -1
  254. package/dist/docs-kit/ColorSwatch.js +1 -1
  255. package/dist/docs-kit/ColorSwatch.js.map +1 -1
  256. package/dist/docs-kit/PropsTable.d.ts +1 -1
  257. package/dist/docs-kit/PropsTable.js +1 -1
  258. package/dist/docs-kit/PropsTable.js.map +1 -1
  259. package/dist/feedback/Alert.d.ts +1 -1
  260. package/dist/feedback/Alert.js +1 -1
  261. package/dist/feedback/Alert.js.map +1 -1
  262. package/dist/feedback/Banner.d.ts +1 -1
  263. package/dist/feedback/Banner.js +1 -1
  264. package/dist/feedback/Banner.js.map +1 -1
  265. package/dist/feedback/Empty.d.ts +1 -1
  266. package/dist/feedback/Empty.js +1 -1
  267. package/dist/feedback/Empty.js.map +1 -1
  268. package/dist/feedback/LoadingBar.d.ts +1 -1
  269. package/dist/feedback/LoadingBar.js +1 -1
  270. package/dist/feedback/LoadingBar.js.map +1 -1
  271. package/dist/feedback/LoadingOverlay.d.ts +1 -1
  272. package/dist/feedback/LoadingOverlay.js +1 -1
  273. package/dist/feedback/LoadingOverlay.js.map +1 -1
  274. package/dist/feedback/Progress.d.ts +1 -1
  275. package/dist/feedback/Progress.js +1 -1
  276. package/dist/feedback/Progress.js.map +1 -1
  277. package/dist/feedback/Result.d.ts +1 -1
  278. package/dist/feedback/Result.js +1 -1
  279. package/dist/feedback/Result.js.map +1 -1
  280. package/dist/feedback/Skeleton.d.ts +1 -1
  281. package/dist/feedback/Skeleton.js +1 -1
  282. package/dist/feedback/Skeleton.js.map +1 -1
  283. package/dist/feedback/SkeletonText.d.ts +1 -1
  284. package/dist/feedback/SkeletonText.js +1 -1
  285. package/dist/feedback/SkeletonText.js.map +1 -1
  286. package/dist/feedback/Toast.d.ts +1 -1
  287. package/dist/feedback/Toast.js +1 -1
  288. package/dist/feedback/Toast.js.map +1 -1
  289. package/dist/form/Field.d.ts +1 -1
  290. package/dist/form/Field.js +1 -1
  291. package/dist/form/Field.js.map +1 -1
  292. package/dist/form/FormErrorSummary.d.ts +1 -1
  293. package/dist/form/FormErrorSummary.js +1 -1
  294. package/dist/form/FormErrorSummary.js.map +1 -1
  295. package/dist/form/FormSection.d.ts +1 -1
  296. package/dist/form/FormSection.js +1 -1
  297. package/dist/form/FormSection.js.map +1 -1
  298. package/dist/form/schemas.d.ts +1 -1
  299. package/dist/form/schemas.js +1 -1
  300. package/dist/form/schemas.js.map +1 -1
  301. package/dist/input/Cascader.d.ts +1 -1
  302. package/dist/input/Cascader.js +1 -1
  303. package/dist/input/Cascader.js.map +1 -1
  304. package/dist/input/CharacterCount.d.ts +1 -1
  305. package/dist/input/CharacterCount.js +1 -1
  306. package/dist/input/CharacterCount.js.map +1 -1
  307. package/dist/input/Checkbox.d.ts +1 -1
  308. package/dist/input/Checkbox.js +1 -1
  309. package/dist/input/Checkbox.js.map +1 -1
  310. package/dist/input/ColorField.d.ts +1 -1
  311. package/dist/input/ColorField.js +1 -1
  312. package/dist/input/ColorField.js.map +1 -1
  313. package/dist/input/Combobox.d.ts +1 -1
  314. package/dist/input/Combobox.js +1 -1
  315. package/dist/input/Combobox.js.map +1 -1
  316. package/dist/input/ConditionBuilder.d.ts +1 -1
  317. package/dist/input/ConditionBuilder.js +1 -1
  318. package/dist/input/ConditionBuilder.js.map +1 -1
  319. package/dist/input/ControlGroup.d.ts +1 -1
  320. package/dist/input/ControlGroup.js +1 -1
  321. package/dist/input/ControlGroup.js.map +1 -1
  322. package/dist/input/FileDrop.d.ts +1 -1
  323. package/dist/input/FileDrop.js +1 -1
  324. package/dist/input/FileDrop.js.map +1 -1
  325. package/dist/input/ListPopover.d.ts +1 -1
  326. package/dist/input/ListPopover.js +1 -1
  327. package/dist/input/ListPopover.js.map +1 -1
  328. package/dist/input/Listbox.d.ts +1 -1
  329. package/dist/input/Listbox.js +1 -1
  330. package/dist/input/Listbox.js.map +1 -1
  331. package/dist/input/Mentions.d.ts +1 -1
  332. package/dist/input/Mentions.js +1 -1
  333. package/dist/input/Mentions.js.map +1 -1
  334. package/dist/input/NumberRangeField.d.ts +1 -1
  335. package/dist/input/NumberRangeField.js +1 -1
  336. package/dist/input/NumberRangeField.js.map +1 -1
  337. package/dist/input/OtpField.d.ts +1 -1
  338. package/dist/input/OtpField.js +1 -1
  339. package/dist/input/OtpField.js.map +1 -1
  340. package/dist/input/PeoplePicker.js +1 -1
  341. package/dist/input/PeoplePicker.js.map +1 -1
  342. package/dist/input/PeoplePickerPanel.d.ts +1 -1
  343. package/dist/input/PeoplePickerPanel.js +1 -1
  344. package/dist/input/PeoplePickerPanel.js.map +1 -1
  345. package/dist/input/Radio.d.ts +1 -1
  346. package/dist/input/Radio.js +1 -1
  347. package/dist/input/Radio.js.map +1 -1
  348. package/dist/input/Rating.d.ts +1 -1
  349. package/dist/input/Rating.js +1 -1
  350. package/dist/input/Rating.js.map +1 -1
  351. package/dist/input/Select.d.ts +1 -1
  352. package/dist/input/Select.js +1 -1
  353. package/dist/input/Select.js.map +1 -1
  354. package/dist/input/SelectedTags.d.ts +1 -1
  355. package/dist/input/SelectedTags.js +1 -1
  356. package/dist/input/SelectedTags.js.map +1 -1
  357. package/dist/input/Slider.d.ts +1 -1
  358. package/dist/input/Slider.js +1 -1
  359. package/dist/input/Slider.js.map +1 -1
  360. package/dist/input/Switch.d.ts +1 -1
  361. package/dist/input/Switch.js +1 -1
  362. package/dist/input/Switch.js.map +1 -1
  363. package/dist/input/TagsInput.d.ts +1 -1
  364. package/dist/input/TagsInput.js +1 -1
  365. package/dist/input/TagsInput.js.map +1 -1
  366. package/dist/input/Textarea.d.ts +1 -1
  367. package/dist/input/Textarea.js +1 -1
  368. package/dist/input/Textarea.js.map +1 -1
  369. package/dist/input/ToggleGroup.d.ts +1 -1
  370. package/dist/input/ToggleGroup.js +1 -1
  371. package/dist/input/ToggleGroup.js.map +1 -1
  372. package/dist/input/Transfer.d.ts +1 -1
  373. package/dist/input/Transfer.js +1 -1
  374. package/dist/input/Transfer.js.map +1 -1
  375. package/dist/input/TreeSelect.d.ts +1 -1
  376. package/dist/input/TreeSelect.js +1 -1
  377. package/dist/input/TreeSelect.js.map +1 -1
  378. package/dist/input/Upload.d.ts +1 -1
  379. package/dist/input/Upload.js +1 -1
  380. package/dist/input/Upload.js.map +1 -1
  381. package/dist/input/choice-styles.d.ts +1 -1
  382. package/dist/input/choice-styles.js +1 -1
  383. package/dist/input/choice-styles.js.map +1 -1
  384. package/dist/input/control.d.ts +1 -1
  385. package/dist/input/control.js +1 -1
  386. package/dist/input/control.js.map +1 -1
  387. package/dist/layout/Affix.d.ts +1 -1
  388. package/dist/layout/Affix.js +1 -1
  389. package/dist/layout/Affix.js.map +1 -1
  390. package/dist/layout/AsideLayout.d.ts +1 -1
  391. package/dist/layout/AsideLayout.js +1 -1
  392. package/dist/layout/AsideLayout.js.map +1 -1
  393. package/dist/layout/BackTop.d.ts +1 -1
  394. package/dist/layout/BackTop.js +1 -1
  395. package/dist/layout/BackTop.js.map +1 -1
  396. package/dist/layout/Container.d.ts +1 -1
  397. package/dist/layout/Container.js +1 -1
  398. package/dist/layout/Container.js.map +1 -1
  399. package/dist/layout/Flex.d.ts +1 -1
  400. package/dist/layout/Flex.js +1 -1
  401. package/dist/layout/Flex.js.map +1 -1
  402. package/dist/layout/Grid.d.ts +1 -1
  403. package/dist/layout/Grid.js +1 -1
  404. package/dist/layout/Grid.js.map +1 -1
  405. package/dist/layout/PageScrollbar.d.ts +1 -1
  406. package/dist/layout/PageScrollbar.js +1 -1
  407. package/dist/layout/PageScrollbar.js.map +1 -1
  408. package/dist/layout/Prose.d.ts +1 -1
  409. package/dist/layout/Prose.js +1 -1
  410. package/dist/layout/Prose.js.map +1 -1
  411. package/dist/layout/ResizeHandle.d.ts +1 -1
  412. package/dist/layout/ResizeHandle.js +1 -1
  413. package/dist/layout/ResizeHandle.js.map +1 -1
  414. package/dist/layout/ScrollArea.d.ts +1 -1
  415. package/dist/layout/ScrollArea.js +1 -1
  416. package/dist/layout/ScrollArea.js.map +1 -1
  417. package/dist/layout/Separator.d.ts +1 -1
  418. package/dist/layout/Separator.js +1 -1
  419. package/dist/layout/Separator.js.map +1 -1
  420. package/dist/layout/Splitter.d.ts +1 -1
  421. package/dist/layout/Splitter.js +1 -1
  422. package/dist/layout/Splitter.js.map +1 -1
  423. package/dist/layout/ViewportFill.d.ts +1 -1
  424. package/dist/layout/ViewportFill.js +1 -1
  425. package/dist/layout/ViewportFill.js.map +1 -1
  426. package/dist/navigation/Breadcrumbs.d.ts +1 -1
  427. package/dist/navigation/Breadcrumbs.js +1 -1
  428. package/dist/navigation/Breadcrumbs.js.map +1 -1
  429. package/dist/navigation/NavBar.d.ts +1 -1
  430. package/dist/navigation/NavBar.js +1 -1
  431. package/dist/navigation/NavBar.js.map +1 -1
  432. package/dist/navigation/NavList.d.ts +1 -1
  433. package/dist/navigation/NavList.js +1 -1
  434. package/dist/navigation/NavList.js.map +1 -1
  435. package/dist/navigation/PageJump.d.ts +1 -1
  436. package/dist/navigation/PageJump.js +1 -1
  437. package/dist/navigation/PageJump.js.map +1 -1
  438. package/dist/navigation/PageSizeSelect.d.ts +1 -1
  439. package/dist/navigation/PageSizeSelect.js +1 -1
  440. package/dist/navigation/PageSizeSelect.js.map +1 -1
  441. package/dist/navigation/Pager.d.ts +1 -1
  442. package/dist/navigation/Pager.js +1 -1
  443. package/dist/navigation/Pager.js.map +1 -1
  444. package/dist/navigation/Pagination.d.ts +1 -1
  445. package/dist/navigation/Pagination.js +1 -1
  446. package/dist/navigation/Pagination.js.map +1 -1
  447. package/dist/navigation/PaginationBar.d.ts +1 -1
  448. package/dist/navigation/PaginationBar.js +1 -1
  449. package/dist/navigation/PaginationBar.js.map +1 -1
  450. package/dist/navigation/SkipLink.d.ts +1 -1
  451. package/dist/navigation/SkipLink.js +1 -1
  452. package/dist/navigation/SkipLink.js.map +1 -1
  453. package/dist/navigation/Steps.d.ts +1 -1
  454. package/dist/navigation/Steps.js +1 -1
  455. package/dist/navigation/Steps.js.map +1 -1
  456. package/dist/navigation/TableOfContents.d.ts +1 -1
  457. package/dist/navigation/TableOfContents.js +1 -1
  458. package/dist/navigation/TableOfContents.js.map +1 -1
  459. package/dist/navigation/Tabs.d.ts +1 -1
  460. package/dist/navigation/Tabs.js +1 -1
  461. package/dist/navigation/Tabs.js.map +1 -1
  462. package/dist/navigation/Toolbar.d.ts +1 -1
  463. package/dist/navigation/Toolbar.js +1 -1
  464. package/dist/navigation/Toolbar.js.map +1 -1
  465. package/dist/overlay/CommandPalette.d.ts +1 -1
  466. package/dist/overlay/CommandPalette.js +1 -1
  467. package/dist/overlay/CommandPalette.js.map +1 -1
  468. package/dist/overlay/Dialog.d.ts +1 -1
  469. package/dist/overlay/Dialog.js +1 -1
  470. package/dist/overlay/Dialog.js.map +1 -1
  471. package/dist/overlay/Drawer.d.ts +1 -1
  472. package/dist/overlay/Drawer.js +1 -1
  473. package/dist/overlay/Drawer.js.map +1 -1
  474. package/dist/overlay/HoverCard.d.ts +1 -1
  475. package/dist/overlay/HoverCard.js +1 -1
  476. package/dist/overlay/HoverCard.js.map +1 -1
  477. package/dist/overlay/Lightbox.d.ts +1 -1
  478. package/dist/overlay/Lightbox.js +1 -1
  479. package/dist/overlay/Lightbox.js.map +1 -1
  480. package/dist/overlay/Menu.d.ts +1 -1
  481. package/dist/overlay/Menu.js +1 -1
  482. package/dist/overlay/Menu.js.map +1 -1
  483. package/dist/overlay/Popconfirm.d.ts +1 -1
  484. package/dist/overlay/Popconfirm.js +1 -1
  485. package/dist/overlay/Popconfirm.js.map +1 -1
  486. package/dist/overlay/Popover.d.ts +1 -1
  487. package/dist/overlay/Popover.js +1 -1
  488. package/dist/overlay/Popover.js.map +1 -1
  489. package/dist/overlay/Tooltip.d.ts +1 -1
  490. package/dist/overlay/Tooltip.js +1 -1
  491. package/dist/overlay/Tooltip.js.map +1 -1
  492. package/dist/overlay/Tour.d.ts +1 -1
  493. package/dist/overlay/Tour.js +1 -1
  494. package/dist/overlay/Tour.js.map +1 -1
  495. package/dist/patterns/ActionBar.d.ts +1 -1
  496. package/dist/patterns/ActionBar.js +1 -1
  497. package/dist/patterns/ActionBar.js.map +1 -1
  498. package/dist/patterns/AppShell.d.ts +1 -1
  499. package/dist/patterns/AppShell.js +1 -1
  500. package/dist/patterns/AppShell.js.map +1 -1
  501. package/dist/patterns/AuthLayout.d.ts +2 -2
  502. package/dist/patterns/AuthLayout.js +2 -2
  503. package/dist/patterns/AuthLayout.js.map +1 -1
  504. package/dist/patterns/CommentThread.d.ts +1 -1
  505. package/dist/patterns/CommentThread.js +1 -1
  506. package/dist/patterns/CommentThread.js.map +1 -1
  507. package/dist/patterns/DataImport.d.ts +1 -1
  508. package/dist/patterns/DataImport.js +1 -1
  509. package/dist/patterns/DataImport.js.map +1 -1
  510. package/dist/patterns/FilterBar.d.ts +1 -1
  511. package/dist/patterns/FilterBar.js +1 -1
  512. package/dist/patterns/FilterBar.js.map +1 -1
  513. package/dist/patterns/KanbanBoard.d.ts +1 -1
  514. package/dist/patterns/KanbanBoard.js +1 -1
  515. package/dist/patterns/KanbanBoard.js.map +1 -1
  516. package/dist/patterns/NotificationCenter.d.ts +1 -1
  517. package/dist/patterns/NotificationCenter.js +1 -1
  518. package/dist/patterns/NotificationCenter.js.map +1 -1
  519. package/dist/patterns/QueryTable.d.ts +1 -1
  520. package/dist/patterns/QueryTable.js +1 -1
  521. package/dist/patterns/QueryTable.js.map +1 -1
  522. package/dist/patterns/SlideCaptcha.d.ts +1 -1
  523. package/dist/patterns/SlideCaptcha.js +1 -1
  524. package/dist/patterns/SlideCaptcha.js.map +1 -1
  525. package/dist/patterns/StepsForm.d.ts +1 -1
  526. package/dist/patterns/StepsForm.js +1 -1
  527. package/dist/patterns/StepsForm.js.map +1 -1
  528. package/dist/table/ColumnHeaderActions.d.ts +1 -1
  529. package/dist/table/ColumnHeaderActions.js +1 -1
  530. package/dist/table/ColumnHeaderActions.js.map +1 -1
  531. package/dist/table/ColumnSettings.d.ts +1 -1
  532. package/dist/table/ColumnSettings.js +1 -1
  533. package/dist/table/ColumnSettings.js.map +1 -1
  534. package/dist/table/ColumnTable.d.ts +1 -1
  535. package/dist/table/ColumnTable.js +1 -1
  536. package/dist/table/ColumnTable.js.map +1 -1
  537. package/dist/table/DataTableView.d.ts +1 -1
  538. package/dist/table/DataTableView.js +1 -1
  539. package/dist/table/DataTableView.js.map +1 -1
  540. package/dist/table/PivotTable.d.ts +1 -1
  541. package/dist/table/PivotTable.js +1 -1
  542. package/dist/table/PivotTable.js.map +1 -1
  543. package/dist/table/SelectionBar.d.ts +1 -1
  544. package/dist/table/SelectionBar.js +1 -1
  545. package/dist/table/SelectionBar.js.map +1 -1
  546. package/dist/table/Table.d.ts +1 -1
  547. package/dist/table/Table.js +1 -1
  548. package/dist/table/Table.js.map +1 -1
  549. package/dist/table/TreeDataTable.d.ts +1 -1
  550. package/dist/table/TreeDataTable.js +1 -1
  551. package/dist/table/TreeDataTable.js.map +1 -1
  552. package/dist/table/table-styles.d.ts +1 -1
  553. package/dist/table/table-styles.js +1 -1
  554. package/dist/table/table-styles.js.map +1 -1
  555. package/dist/theme-customize/ThemeCustomizer.d.ts +1 -1
  556. package/dist/theme-customize/ThemeCustomizer.js +1 -1
  557. package/dist/theme-customize/ThemeCustomizer.js.map +1 -1
  558. package/dist/theme-customize/ThemeThumbnail.d.ts +1 -1
  559. package/dist/theme-customize/ThemeThumbnail.js +1 -1
  560. package/dist/theme-customize/ThemeThumbnail.js.map +1 -1
  561. package/dist/theme-customize/design-tokens.js +1 -1
  562. package/dist/theme-customize/design-tokens.js.map +1 -1
  563. package/dist/three/core/EffectSurface.d.ts +1 -1
  564. package/dist/three/core/EffectSurface.js +1 -1
  565. package/dist/three/core/EffectSurface.js.map +1 -1
  566. package/dist/three/core/ThreeCanvas.d.ts +1 -1
  567. package/dist/three/core/ThreeCanvas.js +1 -1
  568. package/dist/three/core/ThreeCanvas.js.map +1 -1
  569. package/dist/three/effects/Confetti.d.ts +1 -1
  570. package/dist/three/effects/Confetti.js +1 -1
  571. package/dist/three/effects/Confetti.js.map +1 -1
  572. package/dist/three/globe/Globe.d.ts +1 -1
  573. package/dist/three/globe/Globe.js +1 -1
  574. package/dist/three/globe/Globe.js.map +1 -1
  575. package/dist/three/model/ModelViewer.d.ts +1 -1
  576. package/dist/three/model/ModelViewer.js +1 -1
  577. package/dist/three/model/ModelViewer.js.map +1 -1
  578. package/dist/utils/dom/floating.d.ts +1 -1
  579. package/dist/utils/dom/floating.js +1 -1
  580. package/dist/utils/dom/floating.js.map +1 -1
  581. package/dist/utils/dom/ripple.d.ts +1 -1
  582. package/dist/utils/dom/ripple.js +1 -1
  583. package/dist/utils/dom/ripple.js.map +1 -1
  584. package/dist/utils/props.js +1 -1
  585. package/dist/utils/props.js.map +1 -1
  586. package/dist/utils/style/attached.d.ts +1 -1
  587. package/dist/utils/style/attached.js +1 -1
  588. package/dist/utils/style/attached.js.map +1 -1
  589. package/dist/utils/style/item-styles.d.ts +1 -1
  590. package/dist/utils/style/item-styles.js +1 -1
  591. package/dist/utils/style/item-styles.js.map +1 -1
  592. package/dist/utils/style/markers.d.ts +1 -1
  593. package/dist/utils/style/markers.js +1 -1
  594. package/dist/utils/style/markers.js.map +1 -1
  595. package/dist/utils/style/shimmer.d.ts +1 -1
  596. package/dist/utils/style/shimmer.js +1 -1
  597. package/dist/utils/style/shimmer.js.map +1 -1
  598. package/dist/utils/style/styles.d.ts +1 -1
  599. package/dist/utils/style/styles.js +1 -1
  600. package/dist/utils/style/styles.js.map +1 -1
  601. package/dist/utils/style/swatch-styles.d.ts +1 -1
  602. package/dist/utils/style/swatch-styles.js +1 -1
  603. package/dist/utils/style/swatch-styles.js.map +1 -1
  604. package/dist/utils/style/tone-styles.d.ts +1 -1
  605. package/dist/utils/style/tone-styles.js +1 -1
  606. package/dist/utils/style/tone-styles.js.map +1 -1
  607. package/dist/utils/style/transitions.d.ts +1 -1
  608. package/dist/utils/style/transitions.js +1 -1
  609. package/dist/utils/style/transitions.js.map +1 -1
  610. package/dist/utils/style/typography.d.ts +1 -1
  611. package/dist/utils/style/typography.js +1 -1
  612. package/dist/utils/style/typography.js.map +1 -1
  613. package/dist/utils/style/vars.d.ts +1 -1
  614. package/dist/utils/style/vars.js +1 -1
  615. package/dist/utils/style/vars.js.map +1 -1
  616. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"theme.js","names":[],"sources":["../../../src/config/theme/theme.ts"],"sourcesContent":["/**\n * 主题:一组 token 的取值。内置主题是 createTheme 生成的只改变量的类(第一次用到时插入规则,换主题只换这个类);\n * defineTheme 的局部修改在运行时写成 CSS 变量,作用在 Provider 的容器上。\n */\nimport * as css from '@zerodep-dev/vue-tsx-pro-tsx/styles';\nimport type { CssVar, Theme as GroupThemeOf } from '@zerodep-dev/vue-tsx-pro-tsx/styles';\nimport { t } from './tokens';\n\ntype Groups = typeof t;\n\n/** 某一组 tokens 的主题(createTheme 的结果) */\nexport type GroupTheme = { [Group in keyof Groups]: GroupThemeOf<Groups[Group]> }[keyof Groups];\n\n/** 按分组覆盖部分 token:`{ colors: { accent: '#e5484d' }, fontSizes: { md: '16px' } }` */\nexport type ThemeOverrides = {\n -readonly [Group in keyof Groups]?: { [Token in keyof Groups[Group] & string]?: string };\n};\n\n/** 浏览器配色方案(color-scheme) */\nexport interface ColorSchemes {\n /** 亮色:原生表单控件、滚动条用亮色样式 */\n light: unknown;\n /** 暗色:原生表单控件、滚动条用暗色样式 */\n dark: unknown;\n}\n\n/** 一套主题:defineTheme 的结果,交给 createUi 或 Provider */\nexport interface Theme {\n /** 主题名,写在容器的 data-theme 上,便于调试与宿主 CSS 定位 */\n readonly name: string;\n /** 浏览器配色方案,影响原生表单控件与滚动条 */\n readonly colorScheme: keyof ColorSchemes;\n /** 编译期生成的主题样式,每组一个(createTheme 的结果);内置主题都写全颜色、阴影、字体、圆角,嵌套时不继承外层主题 */\n readonly styles: readonly GroupTheme[];\n /** 运行时覆盖的取值 */\n readonly overrides: ThemeOverrides;\n}\n\n/** 一个主题,或明暗两套主题(跟随系统 prefers-color-scheme 切换) */\nexport type ThemeInput = Theme | { readonly light: Theme; readonly dark: Theme };\n\n/** 明暗两套主题时按系统设置选一套,单个主题原样返回 */\nexport function resolveTheme(input: ThemeInput, prefersDark: boolean): Theme {\n return 'light' in input ? (prefersDark ? input.dark : input.light) : input;\n}\n\n/**\n * 基于已有主题局部修改:`defineTheme(lightTheme, { colors: { accent: '#e5484d' } })`。\n * 修改按分组合并,未提到的 token 沿用基础主题。\n */\nexport function defineTheme(\n base: Theme,\n overrides: ThemeOverrides,\n meta: Partial<Pick<Theme, 'name' | 'colorScheme'>> = {},\n): Theme {\n // 分组的键各不相同,按普通对象逐组合并\n const merged: Record<string, Record<string, string | undefined>> = { ...base.overrides };\n for (const [group, values] of Object.entries(overrides)) {\n merged[group] = { ...merged[group], ...values };\n }\n return { ...base, ...meta, overrides: merged as ThemeOverrides };\n}\n\n/** 主题落到容器元素上的属性:编译期主题的 class、运行时覆盖的 CSS 变量与配色方案 */\nexport function themeAttrs(theme: Theme) {\n const compiled = css.attrs(...theme.styles);\n return {\n class: compiled.class,\n style: [compiled.style, themeVariables(theme)],\n 'data-theme': theme.name,\n };\n}\n\n/** 运行时覆盖的 token 写成 CSS 变量,并带上配色方案 */\nexport function themeVariables(theme: Theme): Record<string, string> {\n const variables: Record<string, string> = { 'color-scheme': theme.colorScheme };\n for (const [group, values] of Object.entries(theme.overrides)) {\n const tokens = t[group as keyof Groups] as unknown as Record<string, string>;\n for (const [token, value] of Object.entries(values ?? {})) {\n variables[variableName(tokens[token]!)] = value as string;\n }\n }\n return variables;\n}\n\n/** token 在元素上的当前取值;元素不在主题范围里(没加载组件库的样式、还没挂载)时为空字符串 */\nexport function tokenValue(element: Element, token: CssVar): string {\n return getComputedStyle(element)\n .getPropertyValue(variableName(String(token)))\n .trim();\n}\n\n/**\n * token 在元素上的当前取值,含主题覆盖与媒体查询:`readToken(el, colors.accent)` → `'#3e63dd'`;读不到时报错。\n * 给拿不到 CSS 变量的地方用:JS 动画的时长与缓动(utils/motion/animation 的 themeTransition、useAnimate)、canvas 图表与 3D 场景的颜色。\n */\nexport function readToken(element: Element, token: CssVar): string {\n const value = tokenValue(element, token);\n if (!value)\n throw new Error(\n `读不到主题 token ${String(token)}:元素要已挂载,且在 Provider 或页面的主题范围内`,\n );\n return value;\n}\n\n/** token 是 `var(--vtp-colors-accent)`,取出变量名 `--vtp-colors-accent` 才能在行内覆盖 */\nfunction variableName(token: string) {\n const match = /^var\\((--[\\w-]+)\\)$/.exec(token);\n if (!match) throw new Error(`无法识别的主题变量:${token}`);\n return match[1]!;\n}\n"],"mappings":";;;;;;;;AA0CA,SAAgB,aAAa,OAAmB,aAA6B;CAC3E,OAAO,WAAW,QAAS,cAAc,MAAM,OAAO,MAAM,QAAS;AACvE;;;;;AAMA,SAAgB,YACd,MACA,WACA,OAAqD,CAAC,GAC/C;CAEP,MAAM,SAA6D,EAAE,GAAG,KAAK,UAAU;CACvF,KAAK,MAAM,CAAC,OAAO,WAAW,OAAO,QAAQ,SAAS,GACpD,OAAO,SAAS;EAAE,GAAG,OAAO;EAAQ,GAAG;CAAO;CAEhD,OAAO;EAAE,GAAG;EAAM,GAAG;EAAM,WAAW;CAAyB;AACjE;;AAGA,SAAgB,WAAW,OAAc;CACvC,MAAM,WAAW,IAAI,MAAM,GAAG,MAAM,MAAM;CAC1C,OAAO;EACL,OAAO,SAAS;EAChB,OAAO,CAAC,SAAS,OAAO,eAAe,KAAK,CAAC;EAC7C,cAAc,MAAM;CACtB;AACF;;AAGA,SAAgB,eAAe,OAAsC;CACnE,MAAM,YAAoC,EAAE,gBAAgB,MAAM,YAAY;CAC9E,KAAK,MAAM,CAAC,OAAO,WAAW,OAAO,QAAQ,MAAM,SAAS,GAAG;EAC7D,MAAM,SAAS,EAAE;EACjB,KAAK,MAAM,CAAC,OAAO,UAAU,OAAO,QAAQ,UAAU,CAAC,CAAC,GACtD,UAAU,aAAa,OAAO,MAAO,KAAK;CAE9C;CACA,OAAO;AACT;;AAGA,SAAgB,WAAW,SAAkB,OAAuB;CAClE,OAAO,iBAAiB,OAAO,CAAC,CAC7B,iBAAiB,aAAa,OAAO,KAAK,CAAC,CAAC,CAAC,CAC7C,KAAK;AACV;;;;;AAMA,SAAgB,UAAU,SAAkB,OAAuB;CACjE,MAAM,QAAQ,WAAW,SAAS,KAAK;CACvC,IAAI,CAAC,OACH,MAAM,IAAI,MACR,eAAe,OAAO,KAAK,EAAE,8BAC/B;CACF,OAAO;AACT;;AAGA,SAAS,aAAa,OAAe;CACnC,MAAM,QAAQ,sBAAsB,KAAK,KAAK;CAC9C,IAAI,CAAC,OAAO,MAAM,IAAI,MAAM,aAAa,OAAO;CAChD,OAAO,MAAM;AACf"}
1
+ {"version":3,"file":"theme.js","names":[],"sources":["../../../src/config/theme/theme.ts"],"sourcesContent":["/**\n * 主题:一组 token 的取值。内置主题是 createTheme 生成的只改变量的类(第一次用到时插入规则,换主题只换这个类);\n * defineTheme 的局部修改在运行时写成 CSS 变量,作用在 Provider 的容器上。\n */\nimport { css } from '@zerodep-dev/vue-tsx-pro-tsx/styles';\nimport type { CssVar, Theme as GroupThemeOf } from '@zerodep-dev/vue-tsx-pro-tsx/styles';\nimport { t } from './tokens';\n\ntype Groups = typeof t;\n\n/** 某一组 tokens 的主题(createTheme 的结果) */\nexport type GroupTheme = { [Group in keyof Groups]: GroupThemeOf<Groups[Group]> }[keyof Groups];\n\n/** 按分组覆盖部分 token:`{ colors: { accent: '#e5484d' }, fontSizes: { md: '16px' } }` */\nexport type ThemeOverrides = {\n -readonly [Group in keyof Groups]?: { [Token in keyof Groups[Group] & string]?: string };\n};\n\n/** 浏览器配色方案(color-scheme) */\nexport interface ColorSchemes {\n /** 亮色:原生表单控件、滚动条用亮色样式 */\n light: unknown;\n /** 暗色:原生表单控件、滚动条用暗色样式 */\n dark: unknown;\n}\n\n/** 一套主题:defineTheme 的结果,交给 createUi 或 Provider */\nexport interface Theme {\n /** 主题名,写在容器的 data-theme 上,便于调试与宿主 CSS 定位 */\n readonly name: string;\n /** 浏览器配色方案,影响原生表单控件与滚动条 */\n readonly colorScheme: keyof ColorSchemes;\n /** 编译期生成的主题样式,每组一个(createTheme 的结果);内置主题都写全颜色、阴影、字体、圆角,嵌套时不继承外层主题 */\n readonly styles: readonly GroupTheme[];\n /** 运行时覆盖的取值 */\n readonly overrides: ThemeOverrides;\n}\n\n/** 一个主题,或明暗两套主题(跟随系统 prefers-color-scheme 切换) */\nexport type ThemeInput = Theme | { readonly light: Theme; readonly dark: Theme };\n\n/** 明暗两套主题时按系统设置选一套,单个主题原样返回 */\nexport function resolveTheme(input: ThemeInput, prefersDark: boolean): Theme {\n return 'light' in input ? (prefersDark ? input.dark : input.light) : input;\n}\n\n/**\n * 基于已有主题局部修改:`defineTheme(lightTheme, { colors: { accent: '#e5484d' } })`。\n * 修改按分组合并,未提到的 token 沿用基础主题。\n */\nexport function defineTheme(\n base: Theme,\n overrides: ThemeOverrides,\n meta: Partial<Pick<Theme, 'name' | 'colorScheme'>> = {},\n): Theme {\n // 分组的键各不相同,按普通对象逐组合并\n const merged: Record<string, Record<string, string | undefined>> = { ...base.overrides };\n for (const [group, values] of Object.entries(overrides)) {\n merged[group] = { ...merged[group], ...values };\n }\n return { ...base, ...meta, overrides: merged as ThemeOverrides };\n}\n\n/** 主题落到容器元素上的属性:编译期主题的 class、运行时覆盖的 CSS 变量与配色方案 */\nexport function themeAttrs(theme: Theme) {\n const compiled = css.attrs(...theme.styles);\n return {\n class: compiled.class,\n style: [compiled.style, themeVariables(theme)],\n 'data-theme': theme.name,\n };\n}\n\n/** 运行时覆盖的 token 写成 CSS 变量,并带上配色方案 */\nexport function themeVariables(theme: Theme): Record<string, string> {\n const variables: Record<string, string> = { 'color-scheme': theme.colorScheme };\n for (const [group, values] of Object.entries(theme.overrides)) {\n const tokens = t[group as keyof Groups] as unknown as Record<string, string>;\n for (const [token, value] of Object.entries(values ?? {})) {\n variables[variableName(tokens[token]!)] = value as string;\n }\n }\n return variables;\n}\n\n/** token 在元素上的当前取值;元素不在主题范围里(没加载组件库的样式、还没挂载)时为空字符串 */\nexport function tokenValue(element: Element, token: CssVar): string {\n return getComputedStyle(element)\n .getPropertyValue(variableName(String(token)))\n .trim();\n}\n\n/**\n * token 在元素上的当前取值,含主题覆盖与媒体查询:`readToken(el, colors.accent)` → `'#3e63dd'`;读不到时报错。\n * 给拿不到 CSS 变量的地方用:JS 动画的时长与缓动(utils/motion/animation 的 themeTransition、useAnimate)、canvas 图表与 3D 场景的颜色。\n */\nexport function readToken(element: Element, token: CssVar): string {\n const value = tokenValue(element, token);\n if (!value)\n throw new Error(\n `读不到主题 token ${String(token)}:元素要已挂载,且在 Provider 或页面的主题范围内`,\n );\n return value;\n}\n\n/** token 是 `var(--vtp-colors-accent)`,取出变量名 `--vtp-colors-accent` 才能在行内覆盖 */\nfunction variableName(token: string) {\n const match = /^var\\((--[\\w-]+)\\)$/.exec(token);\n if (!match) throw new Error(`无法识别的主题变量:${token}`);\n return match[1]!;\n}\n"],"mappings":";;;;;;;;AA0CA,SAAgB,aAAa,OAAmB,aAA6B;CAC3E,OAAO,WAAW,QAAS,cAAc,MAAM,OAAO,MAAM,QAAS;AACvE;;;;;AAMA,SAAgB,YACd,MACA,WACA,OAAqD,CAAC,GAC/C;CAEP,MAAM,SAA6D,EAAE,GAAG,KAAK,UAAU;CACvF,KAAK,MAAM,CAAC,OAAO,WAAW,OAAO,QAAQ,SAAS,GACpD,OAAO,SAAS;EAAE,GAAG,OAAO;EAAQ,GAAG;CAAO;CAEhD,OAAO;EAAE,GAAG;EAAM,GAAG;EAAM,WAAW;CAAyB;AACjE;;AAGA,SAAgB,WAAW,OAAc;CACvC,MAAM,WAAW,IAAI,MAAM,GAAG,MAAM,MAAM;CAC1C,OAAO;EACL,OAAO,SAAS;EAChB,OAAO,CAAC,SAAS,OAAO,eAAe,KAAK,CAAC;EAC7C,cAAc,MAAM;CACtB;AACF;;AAGA,SAAgB,eAAe,OAAsC;CACnE,MAAM,YAAoC,EAAE,gBAAgB,MAAM,YAAY;CAC9E,KAAK,MAAM,CAAC,OAAO,WAAW,OAAO,QAAQ,MAAM,SAAS,GAAG;EAC7D,MAAM,SAAS,EAAE;EACjB,KAAK,MAAM,CAAC,OAAO,UAAU,OAAO,QAAQ,UAAU,CAAC,CAAC,GACtD,UAAU,aAAa,OAAO,MAAO,KAAK;CAE9C;CACA,OAAO;AACT;;AAGA,SAAgB,WAAW,SAAkB,OAAuB;CAClE,OAAO,iBAAiB,OAAO,CAAC,CAC7B,iBAAiB,aAAa,OAAO,KAAK,CAAC,CAAC,CAAC,CAC7C,KAAK;AACV;;;;;AAMA,SAAgB,UAAU,SAAkB,OAAuB;CACjE,MAAM,QAAQ,WAAW,SAAS,KAAK;CACvC,IAAI,CAAC,OACH,MAAM,IAAI,MACR,eAAe,OAAO,KAAK,EAAE,8BAC/B;CACF,OAAO;AACT;;AAGA,SAAS,aAAa,OAAe;CACnC,MAAM,QAAQ,sBAAsB,KAAK,KAAK;CAC9C,IAAI,CAAC,OAAO,MAAM,IAAI,MAAM,aAAa,OAAO;CAChD,OAAO,MAAM;AACf"}
@@ -19,7 +19,7 @@
19
19
  * - 分档:一般 xs–xl 五档,需要时加 none(去掉)与 full(全圆);颜色、行高、字间距、不透明度按语义命名
20
20
  * - 不设 z-index:弹出层、对话框用原生 popover / dialog,渲染在顶层(top layer),不参与层叠顺序
21
21
  */
22
- import * as css from '@zerodep-dev/vue-tsx-pro-tsx/styles';
22
+ import { css } from '@zerodep-dev/vue-tsx-pro-tsx/styles';
23
23
  /** 颜色:slate 中性色、indigo 品牌色、red 危险、green 成功、amber 警告、blue 信息 */
24
24
  export declare const colors: css.VarGroup<{
25
25
  /** 页面背景。slate 1:亮色 `#fcfcfd`,暗色 `#111113` */
@@ -1,4 +1,4 @@
1
- import * as css from "@zerodep-dev/vue-tsx-pro-tsx/styles";
1
+ import { css } from "@zerodep-dev/vue-tsx-pro-tsx/styles";
2
2
  //#region src/config/theme/tokens.ts
3
3
  /**
4
4
  * 主题 tokens:组件里的颜色、字体、间距、圆角、阴影、动效都只从这里取,不写裸值。
@@ -1 +1 @@
1
- {"version":3,"file":"tokens.js","names":[],"sources":["../../../src/config/theme/tokens.ts"],"sourcesContent":["/**\n * 主题 tokens:组件里的颜色、字体、间距、圆角、阴影、动效都只从这里取,不写裸值。\n * 每组一个 defineVars,变量名是 `--vtp-组名-token`。这里的取值即亮色主题,暗色主题见 dark.ts。\n *\n * 用法:值整个就是一个 token 时写字符串 '_md'、'_space.md'(COMPONENTS.md §4),文件末尾的 defineTokens 登记各组,\n * 样式引擎展开样式时按组名查到变量;utils/props.ts 导入这个模块,组件渲染之前一定登记过。\n * 值里夹着 token(计算、多值、混色)时在模板字符串里用 `t`:\n *\n * transition: `opacity ${t.durations.md} ${t.easings.standard}`,\n * marginInlineStart: `calc(-1 * ${t.borderWidths.xs})`,\n *\n * 取舍参考:\n * - 颜色与阴影取自 Radix Colors / Radix Themes,按 Radix 12 级的用途约定映射成语义 token\n * (1–2 背景,3–5 交互填充,6–8 边框,9–10 实色,11–12 文字)\n * - 尺寸、间距、圆角用 em,随组件字号等比缩放(字号即尺寸档位,见 COMPONENTS.md §3);\n * 边框宽度用 px,容器宽度用 rem\n * - 分组参考 Stitches / Chakra / Panda 的 token 分类,组名即样式里短写的对照组(@zerodep-dev/vue-tsx-pro-tsx 的 token-map.ts)\n * - 动效时长与缓动参考 Material 3\n * - 分档:一般 xs–xl 五档,需要时加 none(去掉)与 full(全圆);颜色、行高、字间距、不透明度按语义命名\n * - 不设 z-index:弹出层、对话框用原生 popover / dialog,渲染在顶层(top layer),不参与层叠顺序\n */\nimport * as css from '@zerodep-dev/vue-tsx-pro-tsx/styles';\n\n/** 颜色:slate 中性色、indigo 品牌色、red 危险、green 成功、amber 警告、blue 信息 */\nexport const colors = css.defineVars('vtp-colors', {\n // ───────── 背景与表面 ─────────\n\n /** 页面背景。slate 1:亮色 `#fcfcfd`,暗色 `#111113` */\n background: '#fcfcfd',\n /** 卡片、输入框等表面。亮色 slate 1 `#fcfcfd`,暗色 slate 2 `#18191b` */\n surface: '#fcfcfd',\n /** 弱化的区域背景:表头、侧栏、代码块。slate 2:亮色 `#f9f9fb`,暗色 `#18191b` */\n surfaceMuted: '#f9f9fb',\n /**\n * 浮层(弹出框、菜单、对话框)表面,靠描边与阴影区分层级。亮色 slate 1 `#fcfcfd`,暗色 slate 2 `#18191b`\n * (不取第 3 级:那是 fill,浮层里的填充会看不见)\n */\n surfaceRaised: '#fcfcfd',\n\n // ───────── 中性填充:没有背景的元素在交互时铺的底色 ─────────\n\n /** 填充:标签、开关关闭态、弱按钮。slate 3:亮色 `#f0f0f3`,暗色 `#212225` */\n fill: '#f0f0f3',\n /** 填充悬停;也用于幽灵按钮、菜单项的悬停背景。slate 4:亮色 `#e8e8ec`,暗色 `#272a2d` */\n fillHover: '#e8e8ec',\n /** 填充按下、选中。slate 5:亮色 `#e0e1e6`,暗色 `#2e3135` */\n fillActive: '#e0e1e6',\n\n // ───────── 文字 ─────────\n\n /** 主要文字。slate 12:亮色 `#1c2024`,暗色 `#edeef0` */\n text: '#1c2024',\n /** 次要文字、说明、图标。slate 11:亮色 `#60646c`,暗色 `#b0b4ba` */\n textMuted: '#60646c',\n /** 输入框占位文字。slate 10:亮色 `#80838d`,暗色 `#777b84` */\n textPlaceholder: '#80838d',\n /** 不可用的文字。slate 8:亮色 `#b9bbc6`,暗色 `#5a6169` */\n textDisabled: '#b9bbc6',\n\n // ───────── 边框 ─────────\n\n /** 弱边框:分割线、表格线。slate 6:亮色 `#d9d9e0`,暗色 `#363a3f` */\n borderMuted: '#d9d9e0',\n /** 普通边框:输入框、卡片、浮层。slate 7:亮色 `#cdced6`,暗色 `#43484e` */\n border: '#cdced6',\n /** 强调边框:悬停。slate 8:亮色 `#b9bbc6`,暗色 `#5a6169` */\n borderStrong: '#b9bbc6',\n\n // ───────── 品牌色 ─────────\n\n /** 品牌色实色:主按钮、选中的复选框。indigo 9:两套主题都是 `#3e63dd` */\n accent: '#3e63dd',\n /** 品牌色实色悬停。亮色 indigo 10 `#3358d4`;暗色比实色更深一点 `#3758d4`(indigo 10 `#5472e4` 配白字只有 4.28:1) */\n accentHover: '#3358d4',\n /** 品牌色实色上的文字与图标。Radix 规定 indigo 9 上用白字:`#ffffff` */\n accentContrast: '#ffffff',\n /** 品牌色文字:链接、选中项的文字。indigo 11:亮色 `#3a5bc7`,暗色 `#9eb1ff` */\n accentText: '#3a5bc7',\n /** 品牌色浅底:选中行、弱主按钮。indigo 3:亮色 `#edf2fe`,暗色 `#182449` */\n accentSoft: '#edf2fe',\n /** 品牌色浅底悬停。indigo 4:亮色 `#e1e9ff`,暗色 `#1d2e62` */\n accentSoftHover: '#e1e9ff',\n /** 品牌色边框:选中的卡片、弱主按钮描边。indigo 7:亮色 `#abbdf9`,暗色 `#3a4f97` */\n accentBorder: '#abbdf9',\n\n // ───────── 危险:删除等破坏性操作、校验错误 ─────────\n\n /**\n * 危险实色:危险按钮的底色,上面放 dangerContrast(白色)文字,要满足 4.5:1。\n * red 9 配白字只有 3.91:1,所以亮色用 red 11 `#ce2c31`(5.21:1),暗色用 red 8 `#b54548`(5.37:1)\n */\n danger: '#ce2c31',\n /** 危险实色悬停:比实色更深一点,白字才满足 4.5:1(red 10 只有 4.37:1)。亮色 `#b8272c`,暗色 `#a33b3e` */\n dangerHover: '#b8272c',\n /** 危险实色上的文字与图标:`#ffffff` */\n dangerContrast: '#ffffff',\n /** 危险文字:错误提示。亮色比 red 11 深一点 `#b8272c`(red 11 在 dangerSoftHover 上只有 4.07:1),暗色 red 11 `#ff9592` */\n dangerText: '#b8272c',\n /** 危险浅底:错误提示条。red 3:亮色 `#feebec`,暗色 `#3b1219` */\n dangerSoft: '#feebec',\n /** 危险浅底悬停。red 4:亮色 `#ffdbdc`,暗色 `#500f1c` */\n dangerSoftHover: '#ffdbdc',\n /** 危险边框:校验失败的输入框。red 7:亮色 `#f4a9aa`,暗色 `#8c333a` */\n dangerBorder: '#f4a9aa',\n\n // ───────── 状态色:成功、警告、信息(提示条、徽标、图标、按钮) ─────────\n\n /**\n * 成功文字与图标。亮色 green 12 `#193b2d`,暗色 green 11 `#3dd68c`。\n * 亮色不用 11 级:green 11 在 successSoft(green 3)上只有 4.21:1,标记、提示条里的文字不到 4.5\n */\n successText: '#193b2d',\n /** 成功浅底。green 3:亮色 `#e6f6eb`,暗色 `#132d21` */\n successSoft: '#e6f6eb',\n /** 成功边框。green 7:亮色 `#8eceaa`,暗色 `#28684a` */\n successBorder: '#8eceaa',\n /**\n * 成功实色:成功按钮、实底徽标的底色,上面放 successContrast。亮色 `#008751`,暗色 green 9 `#30a46c`。\n * 黄、绿、蓝的 9 级很亮:配白字不到 4.5:1 时亮色加深到够,暗色改配深色字。图形(勾选框、进度条)的填充仍用 successText:实色不一定在表面上到 3:1\n */\n success: '#008751',\n /** 成功实色悬停:与 successContrast 的对比度只升不降(白字时加深,深色字时调亮)。亮色 `#007143`,暗色 `#52af7d` */\n successHover: '#007143',\n /** 成功实色上的文字与图标。亮色 `#ffffff`,暗色 `#111113` */\n successContrast: '#ffffff',\n /** 成功浅底悬停。green 4:亮色 `#d6f1df`,暗色 `#113b29` */\n successSoftHover: '#d6f1df',\n /**\n * 警告文字与图标。亮色 amber 12 `#4f3422`,暗色 amber 11 `#ffca16`。\n * 亮色不用 11 级:amber 11(`#ab6400`)在页面背景上对比度 4.49,不到 WCAG AA 的 4.5\n */\n warningText: '#4f3422',\n /** 警告浅底。amber 3:亮色 `#fff7c2`,暗色 `#302008` */\n warningSoft: '#fff7c2',\n /** 警告边框。amber 7:亮色 `#e9c162`,暗色 `#714f19` */\n warningBorder: '#e9c162',\n /**\n * 警告实色:警告按钮、实底徽标的底色,上面放 warningContrast。亮色 `#ffc53d`,暗色 amber 9 `#ffc53d`。\n * 黄、绿、蓝的 9 级很亮:配白字不到 4.5:1 时亮色加深到够,暗色改配深色字。图形(勾选框、进度条)的填充仍用 warningText:实色不一定在表面上到 3:1\n */\n warning: '#ffc53d',\n /** 警告实色悬停:与 warningContrast 的对比度只升不降(白字时加深,深色字时调亮)。亮色 `#ffcd5f`,暗色 `#ffcd5f` */\n warningHover: '#ffcd5f',\n /** 警告实色上的文字与图标。亮色 `#4f3422`,暗色 `#111113` */\n warningContrast: '#4f3422',\n /** 警告浅底悬停。amber 4:亮色 `#ffee9c`,暗色 `#3f2700` */\n warningSoftHover: '#ffee9c',\n /**\n * 信息文字与图标。亮色 blue 12 `#113264`,暗色 blue 11 `#70b8ff`。\n * 亮色不用 11 级:blue 11 在 infoSoft(blue 3)上只有 4.25:1\n */\n infoText: '#113264',\n /** 信息浅底。blue 3:亮色 `#e6f4fe`,暗色 `#0d2847` */\n infoSoft: '#e6f4fe',\n /** 信息边框。blue 7:亮色 `#8ec8f6`,暗色 `#205d9e` */\n infoBorder: '#8ec8f6',\n /**\n * 信息实色:信息按钮、实底徽标的底色,上面放 infoContrast。亮色 `#0073e0`,暗色 blue 9 `#0090ff`。\n * 黄、绿、蓝的 9 级很亮:配白字不到 4.5:1 时亮色加深到够,暗色改配深色字。图形(勾选框、进度条)的填充仍用 infoText:实色不一定在表面上到 3:1\n */\n info: '#0073e0',\n /** 信息实色悬停:与 infoContrast 的对比度只升不降(白字时加深,深色字时调亮)。亮色 `#0060bd`,暗色 `#3d9fff` */\n infoHover: '#0060bd',\n /** 信息实色上的文字与图标。亮色 `#ffffff`,暗色 `#111113` */\n infoContrast: '#ffffff',\n /** 信息浅底悬停。blue 4:亮色 `#d5efff`,暗色 `#003362` */\n infoSoftHover: '#d5efff',\n\n // ───────── 反色:深色提示框、Toast 这类与页面明暗相反的表面 ─────────\n\n /** 反色表面。slate 12:亮色 `#1c2024`,暗色 `#edeef0` */\n inverseSurface: '#1c2024',\n /** 反色表面上的文字。slate 1:亮色 `#fcfcfd`,暗色 `#111113` */\n inverseText: '#fcfcfd',\n\n // ───────── 其他 ─────────\n\n /**\n * 焦点环(:focus-visible)。indigo 9:两套主题都是 `#3e63dd`。\n * Radix 建议 7–8 级,但亮色下对比度不到 3:1(WCAG 2.2 焦点外观要求),所以用 9 级\n */\n focusRing: '#3e63dd',\n /** 模态遮罩。亮色 blackA 6 `rgba(0, 0, 0, 0.4)`,暗色 blackA 8 `rgba(0, 0, 0, 0.6)` */\n overlay: 'rgba(0, 0, 0, 0.4)',\n /** 选中文字的底色(::selection)。indigo 5:亮色 `#d2deff`,暗色 `#253974` */\n selection: '#d2deff',\n /** 高亮标记:搜索命中、`<mark>`。amber 4:亮色 `#ffee9c`,暗色 `#3f2700` */\n highlight: '#ffee9c',\n /** 半透明表面:吸顶的顶栏(配合背景模糊)。页面背景加 80% 不透明 */\n surfaceTranslucent: 'rgba(252, 252, 253, 0.8)',\n // ───────── 代码高亮:代码块(surfaceMuted)、行内代码与高亮行(fill)、diff 的增删行上都要满足 4.5:1 ─────────\n /** 关键字。indigo 11:亮色 `#3a5bc7`,暗色 `#9eb1ff` */\n codeKeyword: '#3a5bc7',\n /** 字符串。亮色比 green 11 深一点 `#1c7a51`(在代码块背景上 green 11 只有 4.49:1),暗色 green 11 `#3dd68c` */\n codeString: '#1c7a51',\n /** 数字、常量。亮色比 orange 11 深一点 `#bb4500`(orange 11 在代码块背景上只有 4.29:1),暗色 orange 11 `#ffa057` */\n codeNumber: '#bb4500',\n /** 函数名。violet 11:亮色 `#6550b9`,暗色 `#baa7ff` */\n codeFunction: '#6550b9',\n /** 类型、类名。亮色比 cyan 11 深一点 `#007590`(cyan 11 在行内代码的底色上只有 4.19:1),暗色 cyan 11 `#4ccce6` */\n codeType: '#007590',\n /** 注释、标点。slate 11:亮色 `#60646c`,暗色 `#b0b4ba` */\n codeComment: '#60646c',\n /** 标签名(HTML、JSX)。crimson 11:亮色 `#cb1d63`,暗色 `#ff92ad` */\n codeTag: '#cb1d63',\n /** 属性名。brown 11:亮色 `#815e46`,暗色 `#dbb594` */\n codeAttribute: '#815e46',\n /** diff 新增行的底色。green 3:亮色 `#e6f6eb`,暗色 `#132d21` */\n codeInserted: '#e6f6eb',\n /** diff 删除行的底色。red 3:亮色 `#feebec`,暗色 `#3b1219` */\n codeDeleted: '#feebec',\n // ───────── 图表系列:分类色板,按顺序分给各个系列;在页面与卡片背景上都要满足 3:1(WCAG 图形对比度) ─────────\n // 每个色阶取能到 3:1 的最浅一级:亮色多为 9–10 级,暗色 9 级\n /** 第 1 个系列:跟随品牌色。indigo 9:两套主题都是 `#3e63dd` */\n chart1: '#3e63dd',\n /** 第 2 个系列。teal:亮色 10 级 `#0d9b8a`,暗色 9 级 `#12a594` */\n chart2: '#0d9b8a',\n /** 第 3 个系列。orange:亮色 10 级 `#ef5f00`,暗色 9 级 `#f76b15` */\n chart3: '#ef5f00',\n /** 第 4 个系列。crimson 9:两套主题都是 `#e93d82` */\n chart4: '#e93d82',\n /** 第 5 个系列。violet 9:两套主题都是 `#6e56cf` */\n chart5: '#6e56cf',\n /** 第 6 个系列。cyan:亮色 10 级 `#0797b9`,暗色 9 级 `#00a2c7` */\n chart6: '#0797b9',\n /** 第 7 个系列。grass:亮色 10 级 `#3e9b4f`,暗色 9 级 `#46a758` */\n chart7: '#3e9b4f',\n /** 第 8 个系列。amber:亮色 11 级 `#ab6400`(9、10 级在浅色背景上不到 2:1),暗色 9 级 `#ffc53d` */\n chart8: '#ab6400',\n});\n\n/** 字体族 */\nexport const fonts = css.defineVars('vtp-fonts', {\n /**\n * 正文字体:西文用系统界面字体;中文在 Windows 上优先“微软雅黑 UI”(界面字号下字距更紧凑),\n * Linux 上是思源黑体(Noto / Source Han Sans)\n */\n sans: 'system-ui, -apple-system, \"Segoe UI\", \"PingFang SC\", \"Hiragino Sans GB\", \"Microsoft YaHei UI\", \"Microsoft YaHei\", \"Noto Sans SC\", \"Source Han Sans SC\", sans-serif',\n /**\n * 等宽字体:代码、需要数字对齐的地方。装了 Cascadia Code(Windows 11 自带)、JetBrains Mono 时优先用它们,\n * 字形比 Consolas 清楚\n */\n mono: 'ui-monospace, \"Cascadia Code\", \"JetBrains Mono\", \"SFMono-Regular\", Consolas, \"Liberation Mono\", monospace',\n /** 衬线字体:书卷感的标题、引文(纸张主题的标题用它) */\n serif: '\"Noto Serif SC\", \"Source Han Serif SC\", \"Songti SC\", STSong, \"SimSun\", Georgia, serif',\n /** 标题(H1–H6)的字体:默认同正文,主题可以换成衬线 */\n heading:\n 'system-ui, -apple-system, \"Segoe UI\", \"PingFang SC\", \"Hiragino Sans GB\", \"Microsoft YaHei UI\", \"Microsoft YaHei\", \"Noto Sans SC\", \"Source Han Sans SC\", sans-serif',\n});\n\n/** 字号:xs–xl 用于界面文字(也是组件 size 档位对应的字号),xxl、xxxl 用于标题 */\nexport const fontSizes = css.defineVars('vtp-font-sizes', {\n /** `12px`:辅助说明、标签 */\n xs: '12px',\n /** `13px`:紧凑控件 */\n sm: '13px',\n /** `14px`:正文与默认控件;Provider 用它设置区域的基准字号 */\n md: '14px',\n /** `16px`:宽松控件、小标题 */\n lg: '16px',\n /** `18px`:强调文字、卡片标题 */\n xl: '18px',\n /** `24px`:页面标题 */\n xxl: '24px',\n /** `30px`:大标题 */\n xxxl: '30px',\n});\n\n/** 字重 */\nexport const fontWeights = css.defineVars('vtp-font-weights', {\n /** `300` */\n light: '300',\n /** `400`:正文 */\n normal: '400',\n /** `500`:标签、表头 */\n medium: '500',\n /** `600`:按钮、标题 */\n semibold: '600',\n /** `700` */\n bold: '700',\n});\n\n/** 行高(不带单位,随字号缩放) */\nexport const lineHeights = css.defineVars('vtp-line-heights', {\n /** `1`:图标、单行徽标 */\n none: '1',\n /** `1.25`:按钮等单行控件、标题 */\n tight: '1.25',\n /** `1.375`:紧凑的多行文字 */\n snug: '1.375',\n /** `1.5`:正文 */\n normal: '1.5',\n /** `1.75`:长文阅读 */\n relaxed: '1.75',\n});\n\n/** 字间距(em,随字号缩放):中文正文保持 normal,大字号标题可以略收紧 */\nexport const letterSpacings = css.defineVars('vtp-letter-spacings', {\n /** `-0.02em`:大标题 */\n tighter: '-0.02em',\n /** `-0.01em`:小标题 */\n tight: '-0.01em',\n /** `0`:正文 */\n normal: '0',\n /** `0.02em`:小字号的标签 */\n wide: '0.02em',\n /** `0.05em`:全大写的英文标签 */\n wider: '0.05em',\n});\n\n/** 间距:em,随组件字号缩放;页面级布局间距由宿主决定 */\nexport const space = css.defineVars('vtp-space', {\n /** `0` */\n none: '0',\n /** `0.25em`:图标与文字之间、控件的上下内边距 */\n xs: '0.25em',\n /** `0.5em`:控件内部元素之间 */\n sm: '0.5em',\n /** `0.75em`:输入框水平内边距、浮层内边距 */\n md: '0.75em',\n /** `1em`:按钮水平内边距、表单项之间 */\n lg: '1em',\n /** `1.5em`:卡片、对话框内边距 */\n xl: '1.5em',\n});\n\n/**\n * 尺寸:宽、高、最小最大尺寸。控件规格用 em 随字号缩放;\n * 容器宽度(Container 与页面内容的最大宽度)是页面级的,用 rem,跟随浏览器的字号设置\n */\nexport const sizes = css.defineVars('vtp-sizes', {\n /** `2.25em`:单行控件(按钮、输入框、下拉框)的高度 */\n control: '2.25em',\n /** `24px`:可点击区域的最小尺寸(WCAG 2.2 目标尺寸 24×24),与 control 取较大值 */\n minTarget: '24px',\n /** `30rem`(480px):窄内容,如登录表单 */\n xs: '30rem',\n /** `40rem`(640px):表单页、设置页 */\n sm: '40rem',\n /** `48rem`(768px):文章、详情页 */\n md: '48rem',\n /** `64rem`(1024px):常规页面 */\n lg: '64rem',\n /** `80rem`(1280px):宽表格、仪表盘 */\n xl: '80rem',\n /** `100%`:占满容器 */\n full: '100%',\n});\n\n/**\n * 响应式断点:视口不窄于对应的容器宽度(与 sizes 的 sm / md / lg / xl 一致)。\n * 媒体查询里不能用 CSS 变量,所以是普通常量:\n *\n * gridTemplateColumns: { default: 'minmax(0, 1fr)', [breakpoints.lg]: 'minmax(0, 1fr) 20rem' }\n *\n * 同一个属性上写了几个断点时,除最后一档外都用 xxOnly(只在这一档):样式引擎不按宽度给媒体查询排序,\n * 重叠的区间谁生效取决于规则的先后,可能是窄的那档盖住宽的:\n *\n * gridTemplateColumns: { default: null, [breakpoints.lgOnly]: '16rem 1fr', [breakpoints.xl]: '16rem 1fr 14rem' }\n */\nexport const breakpoints = {\n /** 40rem(640px)以上:大屏手机横屏、小平板 */\n sm: '@media (min-width: 40rem)',\n /** 48rem(768px)以上:平板 */\n md: '@media (min-width: 48rem)',\n /** 64rem(1024px)以上:桌面,侧栏常驻 */\n lg: '@media (min-width: 64rem)',\n /** 80rem(1280px)以上:宽屏,右侧栏也显示 */\n xl: '@media (min-width: 80rem)',\n /** 40rem 到 48rem 之间:同一属性写了几个断点时用,避免区间重叠 */\n smOnly: '@media (min-width: 40rem) and (max-width: 47.99rem)',\n /** 48rem 到 64rem 之间 */\n mdOnly: '@media (min-width: 48rem) and (max-width: 63.99rem)',\n /** 64rem 到 80rem 之间 */\n lgOnly: '@media (min-width: 64rem) and (max-width: 79.99rem)',\n // 字面量类型:条件键的类型要求是 `@${string}`\n} as const;\n\n/** 圆角:em,随组件字号缩放;整体改成直角或更圆时覆盖这一组 */\nexport const radii = css.defineVars('vtp-radii', {\n /** `0` */\n none: '0',\n /** `0.15em`:控件内的小元素 */\n xs: '0.15em',\n /** `0.25em`:标签、复选框 */\n sm: '0.25em',\n /** `0.4em`:按钮、输入框 */\n md: '0.4em',\n /** `0.7em`:卡片、浮层 */\n lg: '0.7em',\n /** `1em`:对话框 */\n xl: '1em',\n /** 全圆:胶囊按钮、头像、开关 */\n full: '9999px',\n});\n\n/** 边框与描边宽度(px,不随字号缩放):边框、分隔线、焦点环的宽度与间隔 */\nexport const borderWidths = css.defineVars('vtp-border-widths', {\n /** `0` */\n none: '0',\n /** `1px`:边框、分隔线 */\n xs: '1px',\n /** `2px`:焦点环宽度与间隔、选中态的强调边框 */\n sm: '2px',\n /** `3px`:提示条侧边的色条 */\n md: '3px',\n /** `4px` */\n lg: '4px',\n /** `6px` */\n xl: '6px',\n});\n\n/** 阴影:取自 Radix Themes 的第 2–6 级,去掉了模拟边框的 1px 描边(组件自己画边框);暗色主题另有一套 */\nexport const shadows = css.defineVars('vtp-shadows', {\n /** 无阴影 */\n none: 'none',\n /** 贴近表面:卡片 */\n xs: '0 1px 1px 0 #00005506, 0 2px 1px -1px rgba(0, 0, 0, 0.05), 0 1px 3px 0 rgba(0, 0, 0, 0.05)',\n /** 轻微浮起:悬停的卡片 */\n sm: '0 2px 3px -2px #0000330f, 0 3px 12px -4px rgba(0, 0, 0, 0.1), 0 4px 16px -8px rgba(0, 0, 0, 0.1)',\n /** 浮起:下拉面板 */\n md: '0 8px 40px rgba(0, 0, 0, 0.05), 0 12px 32px -16px #0000330f',\n /** 浮层:弹出框、菜单、提示 */\n lg: '0 12px 60px rgba(0, 0, 0, 0.15), 0 12px 32px -16px #0009321f',\n /** 对话框 */\n xl: '0 12px 60px rgba(0, 0, 0, 0.15), 0 16px 64px #00005506, 0 16px 36px -20px #00062e32',\n});\n\n/** 用户开启“减少动态效果”时,所有时长都变成 0:组件直接用这些 token,不必各自写媒体查询 */\nconst reduce = '@media (prefers-reduced-motion: reduce)';\n\n/** 动效时长(参考 Material 3);开启“减少动态效果”时自动为 0 */\nexport const durations = css.defineVars('vtp-durations', {\n /** `0ms` */\n none: '0ms',\n /** `75ms`:按下反馈 */\n xs: { default: '75ms', [reduce]: '0ms' },\n /** `120ms`:悬停的颜色变化 */\n sm: { default: '120ms', [reduce]: '0ms' },\n /** `200ms`:展开、淡入、浮层出现 */\n md: { default: '200ms', [reduce]: '0ms' },\n /** `300ms`:对话框、抽屉 */\n lg: { default: '300ms', [reduce]: '0ms' },\n /** `500ms`:大面积的页面切换 */\n xl: { default: '500ms', [reduce]: '0ms' },\n});\n\n/** 缓动曲线(参考 Material 3) */\nexport const easings = css.defineVars('vtp-easings', {\n /** 标准:位置与尺寸变化 */\n standard: 'cubic-bezier(0.2, 0, 0, 1)',\n /** 进入:元素出现(先快后慢) */\n enter: 'cubic-bezier(0.05, 0.7, 0.1, 1)',\n /** 退出:元素消失(先慢后快) */\n exit: 'cubic-bezier(0.3, 0, 0.8, 0.15)',\n});\n\n/** 不透明度 */\nexport const opacities = css.defineVars('vtp-opacities', {\n /** `0.5`:不可用的元素 */\n disabled: '0.5',\n});\n\n/** SVG 线宽(图标 24 格画布上的单位,不带单位);Icon 默认 md,strokeWidth 可以逐个覆盖 */\nexport const strokeWidths = css.defineVars('vtp-stroke-widths', {\n /** `1`:细线图标 */\n xs: '1',\n /** `1.5` */\n sm: '1.5',\n /** `2`:Lucide 的默认线宽 */\n md: '2',\n /** `2.5` */\n lg: '2.5',\n /** `3`:粗线图标 */\n xl: '3',\n});\n\n/** 主题 tokens 的各组:组名 → 变量(`var(--vtp-space-md)`),用法见文件说明 */\nexport const t = css.defineTokens({\n /** 颜色:背景与表面、填充、文字、边框、品牌色与状态色、图表色 */\n colors,\n /** 字体族 */\n fonts,\n /** 字号:xs–xl 是界面文字(组件 size 档位),xxl、xxxl 是标题 */\n fontSizes,\n /** 字重 */\n fontWeights,\n /** 行高(不带单位,随字号缩放) */\n lineHeights,\n /** 字间距(em,随字号缩放) */\n letterSpacings,\n /** 间距(em,随组件字号缩放) */\n space,\n /** 尺寸:控件高度、最小点击区域、容器宽度 */\n sizes,\n /** 圆角(em,随组件字号缩放) */\n radii,\n /** 边框与描边宽度(px,不随字号缩放) */\n borderWidths,\n /** 阴影:浮起的层级 */\n shadows,\n /** 不透明度 */\n opacities,\n /** SVG 线宽(图标 24 格画布上的单位) */\n strokeWidths,\n /** 动效时长;开启“减少动态效果”时为 0 */\n durations,\n /** 缓动曲线 */\n easings,\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAwBA,IAAa,SAAS,IAAI,WAAW,cAAc;;CAIjD,YAAY;;CAEZ,SAAS;;CAET,cAAc;;;;;CAKd,eAAe;;CAKf,MAAM;;CAEN,WAAW;;CAEX,YAAY;;CAKZ,MAAM;;CAEN,WAAW;;CAEX,iBAAiB;;CAEjB,cAAc;;CAKd,aAAa;;CAEb,QAAQ;;CAER,cAAc;;CAKd,QAAQ;;CAER,aAAa;;CAEb,gBAAgB;;CAEhB,YAAY;;CAEZ,YAAY;;CAEZ,iBAAiB;;CAEjB,cAAc;;;;;CAQd,QAAQ;;CAER,aAAa;;CAEb,gBAAgB;;CAEhB,YAAY;;CAEZ,YAAY;;CAEZ,iBAAiB;;CAEjB,cAAc;;;;;CAQd,aAAa;;CAEb,aAAa;;CAEb,eAAe;;;;;CAKf,SAAS;;CAET,cAAc;;CAEd,iBAAiB;;CAEjB,kBAAkB;;;;;CAKlB,aAAa;;CAEb,aAAa;;CAEb,eAAe;;;;;CAKf,SAAS;;CAET,cAAc;;CAEd,iBAAiB;;CAEjB,kBAAkB;;;;;CAKlB,UAAU;;CAEV,UAAU;;CAEV,YAAY;;;;;CAKZ,MAAM;;CAEN,WAAW;;CAEX,cAAc;;CAEd,eAAe;;CAKf,gBAAgB;;CAEhB,aAAa;;;;;CAQb,WAAW;;CAEX,SAAS;;CAET,WAAW;;CAEX,WAAW;;CAEX,oBAAoB;;CAGpB,aAAa;;CAEb,YAAY;;CAEZ,YAAY;;CAEZ,cAAc;;CAEd,UAAU;;CAEV,aAAa;;CAEb,SAAS;;CAET,eAAe;;CAEf,cAAc;;CAEd,aAAa;;CAIb,QAAQ;;CAER,QAAQ;;CAER,QAAQ;;CAER,QAAQ;;CAER,QAAQ;;CAER,QAAQ;;CAER,QAAQ;;CAER,QAAQ;AACV,CAAC;;AAGD,IAAa,QAAQ,IAAI,WAAW,aAAa;;;;;CAK/C,MAAM;;;;;CAKN,MAAM;;CAEN,OAAO;;CAEP,SACE;AACJ,CAAC;;AAGD,IAAa,YAAY,IAAI,WAAW,kBAAkB;;CAExD,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;;CAEJ,KAAK;;CAEL,MAAM;AACR,CAAC;;AAGD,IAAa,cAAc,IAAI,WAAW,oBAAoB;;CAE5D,OAAO;;CAEP,QAAQ;;CAER,QAAQ;;CAER,UAAU;;CAEV,MAAM;AACR,CAAC;;AAGD,IAAa,cAAc,IAAI,WAAW,oBAAoB;;CAE5D,MAAM;;CAEN,OAAO;;CAEP,MAAM;;CAEN,QAAQ;;CAER,SAAS;AACX,CAAC;;AAGD,IAAa,iBAAiB,IAAI,WAAW,uBAAuB;;CAElE,SAAS;;CAET,OAAO;;CAEP,QAAQ;;CAER,MAAM;;CAEN,OAAO;AACT,CAAC;;AAGD,IAAa,QAAQ,IAAI,WAAW,aAAa;;CAE/C,MAAM;;CAEN,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;AACN,CAAC;;;;;AAMD,IAAa,QAAQ,IAAI,WAAW,aAAa;;CAE/C,SAAS;;CAET,WAAW;;CAEX,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;;CAEJ,MAAM;AACR,CAAC;;;;;;;;;;;;AAaD,IAAa,cAAc;;CAEzB,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;;CAEJ,QAAQ;;CAER,QAAQ;;CAER,QAAQ;AAEV;;AAGA,IAAa,QAAQ,IAAI,WAAW,aAAa;;CAE/C,MAAM;;CAEN,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;;CAEJ,MAAM;AACR,CAAC;;AAGD,IAAa,eAAe,IAAI,WAAW,qBAAqB;;CAE9D,MAAM;;CAEN,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;AACN,CAAC;;AAGD,IAAa,UAAU,IAAI,WAAW,eAAe;;CAEnD,MAAM;;CAEN,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;AACN,CAAC;;AAGD,IAAM,SAAS;;AAGf,IAAa,YAAY,IAAI,WAAW,iBAAiB;;CAEvD,MAAM;;CAEN,IAAI;EAAE,SAAS;GAAS,SAAS;CAAM;;CAEvC,IAAI;EAAE,SAAS;GAAU,SAAS;CAAM;;CAExC,IAAI;EAAE,SAAS;GAAU,SAAS;CAAM;;CAExC,IAAI;EAAE,SAAS;GAAU,SAAS;CAAM;;CAExC,IAAI;EAAE,SAAS;GAAU,SAAS;CAAM;AAC1C,CAAC;;AAGD,IAAa,UAAU,IAAI,WAAW,eAAe;;CAEnD,UAAU;;CAEV,OAAO;;CAEP,MAAM;AACR,CAAC;;AAGD,IAAa,YAAY,IAAI,WAAW,iBAAiB;;AAEvD,UAAU,MACZ,CAAC;;AAGD,IAAa,eAAe,IAAI,WAAW,qBAAqB;;CAE9D,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;AACN,CAAC;;AAGD,IAAa,IAAI,IAAI,aAAa;;CAEhC;;CAEA;;CAEA;;CAEA;;CAEA;;CAEA;;CAEA;;CAEA;;CAEA;;CAEA;;CAEA;;CAEA;;CAEA;;CAEA;;CAEA;AACF,CAAC"}
1
+ {"version":3,"file":"tokens.js","names":[],"sources":["../../../src/config/theme/tokens.ts"],"sourcesContent":["/**\n * 主题 tokens:组件里的颜色、字体、间距、圆角、阴影、动效都只从这里取,不写裸值。\n * 每组一个 defineVars,变量名是 `--vtp-组名-token`。这里的取值即亮色主题,暗色主题见 dark.ts。\n *\n * 用法:值整个就是一个 token 时写字符串 '_md'、'_space.md'(COMPONENTS.md §4),文件末尾的 defineTokens 登记各组,\n * 样式引擎展开样式时按组名查到变量;utils/props.ts 导入这个模块,组件渲染之前一定登记过。\n * 值里夹着 token(计算、多值、混色)时在模板字符串里用 `t`:\n *\n * transition: `opacity ${t.durations.md} ${t.easings.standard}`,\n * marginInlineStart: `calc(-1 * ${t.borderWidths.xs})`,\n *\n * 取舍参考:\n * - 颜色与阴影取自 Radix Colors / Radix Themes,按 Radix 12 级的用途约定映射成语义 token\n * (1–2 背景,3–5 交互填充,6–8 边框,9–10 实色,11–12 文字)\n * - 尺寸、间距、圆角用 em,随组件字号等比缩放(字号即尺寸档位,见 COMPONENTS.md §3);\n * 边框宽度用 px,容器宽度用 rem\n * - 分组参考 Stitches / Chakra / Panda 的 token 分类,组名即样式里短写的对照组(@zerodep-dev/vue-tsx-pro-tsx 的 token-map.ts)\n * - 动效时长与缓动参考 Material 3\n * - 分档:一般 xs–xl 五档,需要时加 none(去掉)与 full(全圆);颜色、行高、字间距、不透明度按语义命名\n * - 不设 z-index:弹出层、对话框用原生 popover / dialog,渲染在顶层(top layer),不参与层叠顺序\n */\nimport { css } from '@zerodep-dev/vue-tsx-pro-tsx/styles';\n\n/** 颜色:slate 中性色、indigo 品牌色、red 危险、green 成功、amber 警告、blue 信息 */\nexport const colors = css.defineVars('vtp-colors', {\n // ───────── 背景与表面 ─────────\n\n /** 页面背景。slate 1:亮色 `#fcfcfd`,暗色 `#111113` */\n background: '#fcfcfd',\n /** 卡片、输入框等表面。亮色 slate 1 `#fcfcfd`,暗色 slate 2 `#18191b` */\n surface: '#fcfcfd',\n /** 弱化的区域背景:表头、侧栏、代码块。slate 2:亮色 `#f9f9fb`,暗色 `#18191b` */\n surfaceMuted: '#f9f9fb',\n /**\n * 浮层(弹出框、菜单、对话框)表面,靠描边与阴影区分层级。亮色 slate 1 `#fcfcfd`,暗色 slate 2 `#18191b`\n * (不取第 3 级:那是 fill,浮层里的填充会看不见)\n */\n surfaceRaised: '#fcfcfd',\n\n // ───────── 中性填充:没有背景的元素在交互时铺的底色 ─────────\n\n /** 填充:标签、开关关闭态、弱按钮。slate 3:亮色 `#f0f0f3`,暗色 `#212225` */\n fill: '#f0f0f3',\n /** 填充悬停;也用于幽灵按钮、菜单项的悬停背景。slate 4:亮色 `#e8e8ec`,暗色 `#272a2d` */\n fillHover: '#e8e8ec',\n /** 填充按下、选中。slate 5:亮色 `#e0e1e6`,暗色 `#2e3135` */\n fillActive: '#e0e1e6',\n\n // ───────── 文字 ─────────\n\n /** 主要文字。slate 12:亮色 `#1c2024`,暗色 `#edeef0` */\n text: '#1c2024',\n /** 次要文字、说明、图标。slate 11:亮色 `#60646c`,暗色 `#b0b4ba` */\n textMuted: '#60646c',\n /** 输入框占位文字。slate 10:亮色 `#80838d`,暗色 `#777b84` */\n textPlaceholder: '#80838d',\n /** 不可用的文字。slate 8:亮色 `#b9bbc6`,暗色 `#5a6169` */\n textDisabled: '#b9bbc6',\n\n // ───────── 边框 ─────────\n\n /** 弱边框:分割线、表格线。slate 6:亮色 `#d9d9e0`,暗色 `#363a3f` */\n borderMuted: '#d9d9e0',\n /** 普通边框:输入框、卡片、浮层。slate 7:亮色 `#cdced6`,暗色 `#43484e` */\n border: '#cdced6',\n /** 强调边框:悬停。slate 8:亮色 `#b9bbc6`,暗色 `#5a6169` */\n borderStrong: '#b9bbc6',\n\n // ───────── 品牌色 ─────────\n\n /** 品牌色实色:主按钮、选中的复选框。indigo 9:两套主题都是 `#3e63dd` */\n accent: '#3e63dd',\n /** 品牌色实色悬停。亮色 indigo 10 `#3358d4`;暗色比实色更深一点 `#3758d4`(indigo 10 `#5472e4` 配白字只有 4.28:1) */\n accentHover: '#3358d4',\n /** 品牌色实色上的文字与图标。Radix 规定 indigo 9 上用白字:`#ffffff` */\n accentContrast: '#ffffff',\n /** 品牌色文字:链接、选中项的文字。indigo 11:亮色 `#3a5bc7`,暗色 `#9eb1ff` */\n accentText: '#3a5bc7',\n /** 品牌色浅底:选中行、弱主按钮。indigo 3:亮色 `#edf2fe`,暗色 `#182449` */\n accentSoft: '#edf2fe',\n /** 品牌色浅底悬停。indigo 4:亮色 `#e1e9ff`,暗色 `#1d2e62` */\n accentSoftHover: '#e1e9ff',\n /** 品牌色边框:选中的卡片、弱主按钮描边。indigo 7:亮色 `#abbdf9`,暗色 `#3a4f97` */\n accentBorder: '#abbdf9',\n\n // ───────── 危险:删除等破坏性操作、校验错误 ─────────\n\n /**\n * 危险实色:危险按钮的底色,上面放 dangerContrast(白色)文字,要满足 4.5:1。\n * red 9 配白字只有 3.91:1,所以亮色用 red 11 `#ce2c31`(5.21:1),暗色用 red 8 `#b54548`(5.37:1)\n */\n danger: '#ce2c31',\n /** 危险实色悬停:比实色更深一点,白字才满足 4.5:1(red 10 只有 4.37:1)。亮色 `#b8272c`,暗色 `#a33b3e` */\n dangerHover: '#b8272c',\n /** 危险实色上的文字与图标:`#ffffff` */\n dangerContrast: '#ffffff',\n /** 危险文字:错误提示。亮色比 red 11 深一点 `#b8272c`(red 11 在 dangerSoftHover 上只有 4.07:1),暗色 red 11 `#ff9592` */\n dangerText: '#b8272c',\n /** 危险浅底:错误提示条。red 3:亮色 `#feebec`,暗色 `#3b1219` */\n dangerSoft: '#feebec',\n /** 危险浅底悬停。red 4:亮色 `#ffdbdc`,暗色 `#500f1c` */\n dangerSoftHover: '#ffdbdc',\n /** 危险边框:校验失败的输入框。red 7:亮色 `#f4a9aa`,暗色 `#8c333a` */\n dangerBorder: '#f4a9aa',\n\n // ───────── 状态色:成功、警告、信息(提示条、徽标、图标、按钮) ─────────\n\n /**\n * 成功文字与图标。亮色 green 12 `#193b2d`,暗色 green 11 `#3dd68c`。\n * 亮色不用 11 级:green 11 在 successSoft(green 3)上只有 4.21:1,标记、提示条里的文字不到 4.5\n */\n successText: '#193b2d',\n /** 成功浅底。green 3:亮色 `#e6f6eb`,暗色 `#132d21` */\n successSoft: '#e6f6eb',\n /** 成功边框。green 7:亮色 `#8eceaa`,暗色 `#28684a` */\n successBorder: '#8eceaa',\n /**\n * 成功实色:成功按钮、实底徽标的底色,上面放 successContrast。亮色 `#008751`,暗色 green 9 `#30a46c`。\n * 黄、绿、蓝的 9 级很亮:配白字不到 4.5:1 时亮色加深到够,暗色改配深色字。图形(勾选框、进度条)的填充仍用 successText:实色不一定在表面上到 3:1\n */\n success: '#008751',\n /** 成功实色悬停:与 successContrast 的对比度只升不降(白字时加深,深色字时调亮)。亮色 `#007143`,暗色 `#52af7d` */\n successHover: '#007143',\n /** 成功实色上的文字与图标。亮色 `#ffffff`,暗色 `#111113` */\n successContrast: '#ffffff',\n /** 成功浅底悬停。green 4:亮色 `#d6f1df`,暗色 `#113b29` */\n successSoftHover: '#d6f1df',\n /**\n * 警告文字与图标。亮色 amber 12 `#4f3422`,暗色 amber 11 `#ffca16`。\n * 亮色不用 11 级:amber 11(`#ab6400`)在页面背景上对比度 4.49,不到 WCAG AA 的 4.5\n */\n warningText: '#4f3422',\n /** 警告浅底。amber 3:亮色 `#fff7c2`,暗色 `#302008` */\n warningSoft: '#fff7c2',\n /** 警告边框。amber 7:亮色 `#e9c162`,暗色 `#714f19` */\n warningBorder: '#e9c162',\n /**\n * 警告实色:警告按钮、实底徽标的底色,上面放 warningContrast。亮色 `#ffc53d`,暗色 amber 9 `#ffc53d`。\n * 黄、绿、蓝的 9 级很亮:配白字不到 4.5:1 时亮色加深到够,暗色改配深色字。图形(勾选框、进度条)的填充仍用 warningText:实色不一定在表面上到 3:1\n */\n warning: '#ffc53d',\n /** 警告实色悬停:与 warningContrast 的对比度只升不降(白字时加深,深色字时调亮)。亮色 `#ffcd5f`,暗色 `#ffcd5f` */\n warningHover: '#ffcd5f',\n /** 警告实色上的文字与图标。亮色 `#4f3422`,暗色 `#111113` */\n warningContrast: '#4f3422',\n /** 警告浅底悬停。amber 4:亮色 `#ffee9c`,暗色 `#3f2700` */\n warningSoftHover: '#ffee9c',\n /**\n * 信息文字与图标。亮色 blue 12 `#113264`,暗色 blue 11 `#70b8ff`。\n * 亮色不用 11 级:blue 11 在 infoSoft(blue 3)上只有 4.25:1\n */\n infoText: '#113264',\n /** 信息浅底。blue 3:亮色 `#e6f4fe`,暗色 `#0d2847` */\n infoSoft: '#e6f4fe',\n /** 信息边框。blue 7:亮色 `#8ec8f6`,暗色 `#205d9e` */\n infoBorder: '#8ec8f6',\n /**\n * 信息实色:信息按钮、实底徽标的底色,上面放 infoContrast。亮色 `#0073e0`,暗色 blue 9 `#0090ff`。\n * 黄、绿、蓝的 9 级很亮:配白字不到 4.5:1 时亮色加深到够,暗色改配深色字。图形(勾选框、进度条)的填充仍用 infoText:实色不一定在表面上到 3:1\n */\n info: '#0073e0',\n /** 信息实色悬停:与 infoContrast 的对比度只升不降(白字时加深,深色字时调亮)。亮色 `#0060bd`,暗色 `#3d9fff` */\n infoHover: '#0060bd',\n /** 信息实色上的文字与图标。亮色 `#ffffff`,暗色 `#111113` */\n infoContrast: '#ffffff',\n /** 信息浅底悬停。blue 4:亮色 `#d5efff`,暗色 `#003362` */\n infoSoftHover: '#d5efff',\n\n // ───────── 反色:深色提示框、Toast 这类与页面明暗相反的表面 ─────────\n\n /** 反色表面。slate 12:亮色 `#1c2024`,暗色 `#edeef0` */\n inverseSurface: '#1c2024',\n /** 反色表面上的文字。slate 1:亮色 `#fcfcfd`,暗色 `#111113` */\n inverseText: '#fcfcfd',\n\n // ───────── 其他 ─────────\n\n /**\n * 焦点环(:focus-visible)。indigo 9:两套主题都是 `#3e63dd`。\n * Radix 建议 7–8 级,但亮色下对比度不到 3:1(WCAG 2.2 焦点外观要求),所以用 9 级\n */\n focusRing: '#3e63dd',\n /** 模态遮罩。亮色 blackA 6 `rgba(0, 0, 0, 0.4)`,暗色 blackA 8 `rgba(0, 0, 0, 0.6)` */\n overlay: 'rgba(0, 0, 0, 0.4)',\n /** 选中文字的底色(::selection)。indigo 5:亮色 `#d2deff`,暗色 `#253974` */\n selection: '#d2deff',\n /** 高亮标记:搜索命中、`<mark>`。amber 4:亮色 `#ffee9c`,暗色 `#3f2700` */\n highlight: '#ffee9c',\n /** 半透明表面:吸顶的顶栏(配合背景模糊)。页面背景加 80% 不透明 */\n surfaceTranslucent: 'rgba(252, 252, 253, 0.8)',\n // ───────── 代码高亮:代码块(surfaceMuted)、行内代码与高亮行(fill)、diff 的增删行上都要满足 4.5:1 ─────────\n /** 关键字。indigo 11:亮色 `#3a5bc7`,暗色 `#9eb1ff` */\n codeKeyword: '#3a5bc7',\n /** 字符串。亮色比 green 11 深一点 `#1c7a51`(在代码块背景上 green 11 只有 4.49:1),暗色 green 11 `#3dd68c` */\n codeString: '#1c7a51',\n /** 数字、常量。亮色比 orange 11 深一点 `#bb4500`(orange 11 在代码块背景上只有 4.29:1),暗色 orange 11 `#ffa057` */\n codeNumber: '#bb4500',\n /** 函数名。violet 11:亮色 `#6550b9`,暗色 `#baa7ff` */\n codeFunction: '#6550b9',\n /** 类型、类名。亮色比 cyan 11 深一点 `#007590`(cyan 11 在行内代码的底色上只有 4.19:1),暗色 cyan 11 `#4ccce6` */\n codeType: '#007590',\n /** 注释、标点。slate 11:亮色 `#60646c`,暗色 `#b0b4ba` */\n codeComment: '#60646c',\n /** 标签名(HTML、JSX)。crimson 11:亮色 `#cb1d63`,暗色 `#ff92ad` */\n codeTag: '#cb1d63',\n /** 属性名。brown 11:亮色 `#815e46`,暗色 `#dbb594` */\n codeAttribute: '#815e46',\n /** diff 新增行的底色。green 3:亮色 `#e6f6eb`,暗色 `#132d21` */\n codeInserted: '#e6f6eb',\n /** diff 删除行的底色。red 3:亮色 `#feebec`,暗色 `#3b1219` */\n codeDeleted: '#feebec',\n // ───────── 图表系列:分类色板,按顺序分给各个系列;在页面与卡片背景上都要满足 3:1(WCAG 图形对比度) ─────────\n // 每个色阶取能到 3:1 的最浅一级:亮色多为 9–10 级,暗色 9 级\n /** 第 1 个系列:跟随品牌色。indigo 9:两套主题都是 `#3e63dd` */\n chart1: '#3e63dd',\n /** 第 2 个系列。teal:亮色 10 级 `#0d9b8a`,暗色 9 级 `#12a594` */\n chart2: '#0d9b8a',\n /** 第 3 个系列。orange:亮色 10 级 `#ef5f00`,暗色 9 级 `#f76b15` */\n chart3: '#ef5f00',\n /** 第 4 个系列。crimson 9:两套主题都是 `#e93d82` */\n chart4: '#e93d82',\n /** 第 5 个系列。violet 9:两套主题都是 `#6e56cf` */\n chart5: '#6e56cf',\n /** 第 6 个系列。cyan:亮色 10 级 `#0797b9`,暗色 9 级 `#00a2c7` */\n chart6: '#0797b9',\n /** 第 7 个系列。grass:亮色 10 级 `#3e9b4f`,暗色 9 级 `#46a758` */\n chart7: '#3e9b4f',\n /** 第 8 个系列。amber:亮色 11 级 `#ab6400`(9、10 级在浅色背景上不到 2:1),暗色 9 级 `#ffc53d` */\n chart8: '#ab6400',\n});\n\n/** 字体族 */\nexport const fonts = css.defineVars('vtp-fonts', {\n /**\n * 正文字体:西文用系统界面字体;中文在 Windows 上优先“微软雅黑 UI”(界面字号下字距更紧凑),\n * Linux 上是思源黑体(Noto / Source Han Sans)\n */\n sans: 'system-ui, -apple-system, \"Segoe UI\", \"PingFang SC\", \"Hiragino Sans GB\", \"Microsoft YaHei UI\", \"Microsoft YaHei\", \"Noto Sans SC\", \"Source Han Sans SC\", sans-serif',\n /**\n * 等宽字体:代码、需要数字对齐的地方。装了 Cascadia Code(Windows 11 自带)、JetBrains Mono 时优先用它们,\n * 字形比 Consolas 清楚\n */\n mono: 'ui-monospace, \"Cascadia Code\", \"JetBrains Mono\", \"SFMono-Regular\", Consolas, \"Liberation Mono\", monospace',\n /** 衬线字体:书卷感的标题、引文(纸张主题的标题用它) */\n serif: '\"Noto Serif SC\", \"Source Han Serif SC\", \"Songti SC\", STSong, \"SimSun\", Georgia, serif',\n /** 标题(H1–H6)的字体:默认同正文,主题可以换成衬线 */\n heading:\n 'system-ui, -apple-system, \"Segoe UI\", \"PingFang SC\", \"Hiragino Sans GB\", \"Microsoft YaHei UI\", \"Microsoft YaHei\", \"Noto Sans SC\", \"Source Han Sans SC\", sans-serif',\n});\n\n/** 字号:xs–xl 用于界面文字(也是组件 size 档位对应的字号),xxl、xxxl 用于标题 */\nexport const fontSizes = css.defineVars('vtp-font-sizes', {\n /** `12px`:辅助说明、标签 */\n xs: '12px',\n /** `13px`:紧凑控件 */\n sm: '13px',\n /** `14px`:正文与默认控件;Provider 用它设置区域的基准字号 */\n md: '14px',\n /** `16px`:宽松控件、小标题 */\n lg: '16px',\n /** `18px`:强调文字、卡片标题 */\n xl: '18px',\n /** `24px`:页面标题 */\n xxl: '24px',\n /** `30px`:大标题 */\n xxxl: '30px',\n});\n\n/** 字重 */\nexport const fontWeights = css.defineVars('vtp-font-weights', {\n /** `300` */\n light: '300',\n /** `400`:正文 */\n normal: '400',\n /** `500`:标签、表头 */\n medium: '500',\n /** `600`:按钮、标题 */\n semibold: '600',\n /** `700` */\n bold: '700',\n});\n\n/** 行高(不带单位,随字号缩放) */\nexport const lineHeights = css.defineVars('vtp-line-heights', {\n /** `1`:图标、单行徽标 */\n none: '1',\n /** `1.25`:按钮等单行控件、标题 */\n tight: '1.25',\n /** `1.375`:紧凑的多行文字 */\n snug: '1.375',\n /** `1.5`:正文 */\n normal: '1.5',\n /** `1.75`:长文阅读 */\n relaxed: '1.75',\n});\n\n/** 字间距(em,随字号缩放):中文正文保持 normal,大字号标题可以略收紧 */\nexport const letterSpacings = css.defineVars('vtp-letter-spacings', {\n /** `-0.02em`:大标题 */\n tighter: '-0.02em',\n /** `-0.01em`:小标题 */\n tight: '-0.01em',\n /** `0`:正文 */\n normal: '0',\n /** `0.02em`:小字号的标签 */\n wide: '0.02em',\n /** `0.05em`:全大写的英文标签 */\n wider: '0.05em',\n});\n\n/** 间距:em,随组件字号缩放;页面级布局间距由宿主决定 */\nexport const space = css.defineVars('vtp-space', {\n /** `0` */\n none: '0',\n /** `0.25em`:图标与文字之间、控件的上下内边距 */\n xs: '0.25em',\n /** `0.5em`:控件内部元素之间 */\n sm: '0.5em',\n /** `0.75em`:输入框水平内边距、浮层内边距 */\n md: '0.75em',\n /** `1em`:按钮水平内边距、表单项之间 */\n lg: '1em',\n /** `1.5em`:卡片、对话框内边距 */\n xl: '1.5em',\n});\n\n/**\n * 尺寸:宽、高、最小最大尺寸。控件规格用 em 随字号缩放;\n * 容器宽度(Container 与页面内容的最大宽度)是页面级的,用 rem,跟随浏览器的字号设置\n */\nexport const sizes = css.defineVars('vtp-sizes', {\n /** `2.25em`:单行控件(按钮、输入框、下拉框)的高度 */\n control: '2.25em',\n /** `24px`:可点击区域的最小尺寸(WCAG 2.2 目标尺寸 24×24),与 control 取较大值 */\n minTarget: '24px',\n /** `30rem`(480px):窄内容,如登录表单 */\n xs: '30rem',\n /** `40rem`(640px):表单页、设置页 */\n sm: '40rem',\n /** `48rem`(768px):文章、详情页 */\n md: '48rem',\n /** `64rem`(1024px):常规页面 */\n lg: '64rem',\n /** `80rem`(1280px):宽表格、仪表盘 */\n xl: '80rem',\n /** `100%`:占满容器 */\n full: '100%',\n});\n\n/**\n * 响应式断点:视口不窄于对应的容器宽度(与 sizes 的 sm / md / lg / xl 一致)。\n * 媒体查询里不能用 CSS 变量,所以是普通常量:\n *\n * gridTemplateColumns: { default: 'minmax(0, 1fr)', [breakpoints.lg]: 'minmax(0, 1fr) 20rem' }\n *\n * 同一个属性上写了几个断点时,除最后一档外都用 xxOnly(只在这一档):样式引擎不按宽度给媒体查询排序,\n * 重叠的区间谁生效取决于规则的先后,可能是窄的那档盖住宽的:\n *\n * gridTemplateColumns: { default: null, [breakpoints.lgOnly]: '16rem 1fr', [breakpoints.xl]: '16rem 1fr 14rem' }\n */\nexport const breakpoints = {\n /** 40rem(640px)以上:大屏手机横屏、小平板 */\n sm: '@media (min-width: 40rem)',\n /** 48rem(768px)以上:平板 */\n md: '@media (min-width: 48rem)',\n /** 64rem(1024px)以上:桌面,侧栏常驻 */\n lg: '@media (min-width: 64rem)',\n /** 80rem(1280px)以上:宽屏,右侧栏也显示 */\n xl: '@media (min-width: 80rem)',\n /** 40rem 到 48rem 之间:同一属性写了几个断点时用,避免区间重叠 */\n smOnly: '@media (min-width: 40rem) and (max-width: 47.99rem)',\n /** 48rem 到 64rem 之间 */\n mdOnly: '@media (min-width: 48rem) and (max-width: 63.99rem)',\n /** 64rem 到 80rem 之间 */\n lgOnly: '@media (min-width: 64rem) and (max-width: 79.99rem)',\n // 字面量类型:条件键的类型要求是 `@${string}`\n} as const;\n\n/** 圆角:em,随组件字号缩放;整体改成直角或更圆时覆盖这一组 */\nexport const radii = css.defineVars('vtp-radii', {\n /** `0` */\n none: '0',\n /** `0.15em`:控件内的小元素 */\n xs: '0.15em',\n /** `0.25em`:标签、复选框 */\n sm: '0.25em',\n /** `0.4em`:按钮、输入框 */\n md: '0.4em',\n /** `0.7em`:卡片、浮层 */\n lg: '0.7em',\n /** `1em`:对话框 */\n xl: '1em',\n /** 全圆:胶囊按钮、头像、开关 */\n full: '9999px',\n});\n\n/** 边框与描边宽度(px,不随字号缩放):边框、分隔线、焦点环的宽度与间隔 */\nexport const borderWidths = css.defineVars('vtp-border-widths', {\n /** `0` */\n none: '0',\n /** `1px`:边框、分隔线 */\n xs: '1px',\n /** `2px`:焦点环宽度与间隔、选中态的强调边框 */\n sm: '2px',\n /** `3px`:提示条侧边的色条 */\n md: '3px',\n /** `4px` */\n lg: '4px',\n /** `6px` */\n xl: '6px',\n});\n\n/** 阴影:取自 Radix Themes 的第 2–6 级,去掉了模拟边框的 1px 描边(组件自己画边框);暗色主题另有一套 */\nexport const shadows = css.defineVars('vtp-shadows', {\n /** 无阴影 */\n none: 'none',\n /** 贴近表面:卡片 */\n xs: '0 1px 1px 0 #00005506, 0 2px 1px -1px rgba(0, 0, 0, 0.05), 0 1px 3px 0 rgba(0, 0, 0, 0.05)',\n /** 轻微浮起:悬停的卡片 */\n sm: '0 2px 3px -2px #0000330f, 0 3px 12px -4px rgba(0, 0, 0, 0.1), 0 4px 16px -8px rgba(0, 0, 0, 0.1)',\n /** 浮起:下拉面板 */\n md: '0 8px 40px rgba(0, 0, 0, 0.05), 0 12px 32px -16px #0000330f',\n /** 浮层:弹出框、菜单、提示 */\n lg: '0 12px 60px rgba(0, 0, 0, 0.15), 0 12px 32px -16px #0009321f',\n /** 对话框 */\n xl: '0 12px 60px rgba(0, 0, 0, 0.15), 0 16px 64px #00005506, 0 16px 36px -20px #00062e32',\n});\n\n/** 用户开启“减少动态效果”时,所有时长都变成 0:组件直接用这些 token,不必各自写媒体查询 */\nconst reduce = '@media (prefers-reduced-motion: reduce)';\n\n/** 动效时长(参考 Material 3);开启“减少动态效果”时自动为 0 */\nexport const durations = css.defineVars('vtp-durations', {\n /** `0ms` */\n none: '0ms',\n /** `75ms`:按下反馈 */\n xs: { default: '75ms', [reduce]: '0ms' },\n /** `120ms`:悬停的颜色变化 */\n sm: { default: '120ms', [reduce]: '0ms' },\n /** `200ms`:展开、淡入、浮层出现 */\n md: { default: '200ms', [reduce]: '0ms' },\n /** `300ms`:对话框、抽屉 */\n lg: { default: '300ms', [reduce]: '0ms' },\n /** `500ms`:大面积的页面切换 */\n xl: { default: '500ms', [reduce]: '0ms' },\n});\n\n/** 缓动曲线(参考 Material 3) */\nexport const easings = css.defineVars('vtp-easings', {\n /** 标准:位置与尺寸变化 */\n standard: 'cubic-bezier(0.2, 0, 0, 1)',\n /** 进入:元素出现(先快后慢) */\n enter: 'cubic-bezier(0.05, 0.7, 0.1, 1)',\n /** 退出:元素消失(先慢后快) */\n exit: 'cubic-bezier(0.3, 0, 0.8, 0.15)',\n});\n\n/** 不透明度 */\nexport const opacities = css.defineVars('vtp-opacities', {\n /** `0.5`:不可用的元素 */\n disabled: '0.5',\n});\n\n/** SVG 线宽(图标 24 格画布上的单位,不带单位);Icon 默认 md,strokeWidth 可以逐个覆盖 */\nexport const strokeWidths = css.defineVars('vtp-stroke-widths', {\n /** `1`:细线图标 */\n xs: '1',\n /** `1.5` */\n sm: '1.5',\n /** `2`:Lucide 的默认线宽 */\n md: '2',\n /** `2.5` */\n lg: '2.5',\n /** `3`:粗线图标 */\n xl: '3',\n});\n\n/** 主题 tokens 的各组:组名 → 变量(`var(--vtp-space-md)`),用法见文件说明 */\nexport const t = css.defineTokens({\n /** 颜色:背景与表面、填充、文字、边框、品牌色与状态色、图表色 */\n colors,\n /** 字体族 */\n fonts,\n /** 字号:xs–xl 是界面文字(组件 size 档位),xxl、xxxl 是标题 */\n fontSizes,\n /** 字重 */\n fontWeights,\n /** 行高(不带单位,随字号缩放) */\n lineHeights,\n /** 字间距(em,随字号缩放) */\n letterSpacings,\n /** 间距(em,随组件字号缩放) */\n space,\n /** 尺寸:控件高度、最小点击区域、容器宽度 */\n sizes,\n /** 圆角(em,随组件字号缩放) */\n radii,\n /** 边框与描边宽度(px,不随字号缩放) */\n borderWidths,\n /** 阴影:浮起的层级 */\n shadows,\n /** 不透明度 */\n opacities,\n /** SVG 线宽(图标 24 格画布上的单位) */\n strokeWidths,\n /** 动效时长;开启“减少动态效果”时为 0 */\n durations,\n /** 缓动曲线 */\n easings,\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAwBA,IAAa,SAAS,IAAI,WAAW,cAAc;;CAIjD,YAAY;;CAEZ,SAAS;;CAET,cAAc;;;;;CAKd,eAAe;;CAKf,MAAM;;CAEN,WAAW;;CAEX,YAAY;;CAKZ,MAAM;;CAEN,WAAW;;CAEX,iBAAiB;;CAEjB,cAAc;;CAKd,aAAa;;CAEb,QAAQ;;CAER,cAAc;;CAKd,QAAQ;;CAER,aAAa;;CAEb,gBAAgB;;CAEhB,YAAY;;CAEZ,YAAY;;CAEZ,iBAAiB;;CAEjB,cAAc;;;;;CAQd,QAAQ;;CAER,aAAa;;CAEb,gBAAgB;;CAEhB,YAAY;;CAEZ,YAAY;;CAEZ,iBAAiB;;CAEjB,cAAc;;;;;CAQd,aAAa;;CAEb,aAAa;;CAEb,eAAe;;;;;CAKf,SAAS;;CAET,cAAc;;CAEd,iBAAiB;;CAEjB,kBAAkB;;;;;CAKlB,aAAa;;CAEb,aAAa;;CAEb,eAAe;;;;;CAKf,SAAS;;CAET,cAAc;;CAEd,iBAAiB;;CAEjB,kBAAkB;;;;;CAKlB,UAAU;;CAEV,UAAU;;CAEV,YAAY;;;;;CAKZ,MAAM;;CAEN,WAAW;;CAEX,cAAc;;CAEd,eAAe;;CAKf,gBAAgB;;CAEhB,aAAa;;;;;CAQb,WAAW;;CAEX,SAAS;;CAET,WAAW;;CAEX,WAAW;;CAEX,oBAAoB;;CAGpB,aAAa;;CAEb,YAAY;;CAEZ,YAAY;;CAEZ,cAAc;;CAEd,UAAU;;CAEV,aAAa;;CAEb,SAAS;;CAET,eAAe;;CAEf,cAAc;;CAEd,aAAa;;CAIb,QAAQ;;CAER,QAAQ;;CAER,QAAQ;;CAER,QAAQ;;CAER,QAAQ;;CAER,QAAQ;;CAER,QAAQ;;CAER,QAAQ;AACV,CAAC;;AAGD,IAAa,QAAQ,IAAI,WAAW,aAAa;;;;;CAK/C,MAAM;;;;;CAKN,MAAM;;CAEN,OAAO;;CAEP,SACE;AACJ,CAAC;;AAGD,IAAa,YAAY,IAAI,WAAW,kBAAkB;;CAExD,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;;CAEJ,KAAK;;CAEL,MAAM;AACR,CAAC;;AAGD,IAAa,cAAc,IAAI,WAAW,oBAAoB;;CAE5D,OAAO;;CAEP,QAAQ;;CAER,QAAQ;;CAER,UAAU;;CAEV,MAAM;AACR,CAAC;;AAGD,IAAa,cAAc,IAAI,WAAW,oBAAoB;;CAE5D,MAAM;;CAEN,OAAO;;CAEP,MAAM;;CAEN,QAAQ;;CAER,SAAS;AACX,CAAC;;AAGD,IAAa,iBAAiB,IAAI,WAAW,uBAAuB;;CAElE,SAAS;;CAET,OAAO;;CAEP,QAAQ;;CAER,MAAM;;CAEN,OAAO;AACT,CAAC;;AAGD,IAAa,QAAQ,IAAI,WAAW,aAAa;;CAE/C,MAAM;;CAEN,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;AACN,CAAC;;;;;AAMD,IAAa,QAAQ,IAAI,WAAW,aAAa;;CAE/C,SAAS;;CAET,WAAW;;CAEX,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;;CAEJ,MAAM;AACR,CAAC;;;;;;;;;;;;AAaD,IAAa,cAAc;;CAEzB,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;;CAEJ,QAAQ;;CAER,QAAQ;;CAER,QAAQ;AAEV;;AAGA,IAAa,QAAQ,IAAI,WAAW,aAAa;;CAE/C,MAAM;;CAEN,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;;CAEJ,MAAM;AACR,CAAC;;AAGD,IAAa,eAAe,IAAI,WAAW,qBAAqB;;CAE9D,MAAM;;CAEN,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;AACN,CAAC;;AAGD,IAAa,UAAU,IAAI,WAAW,eAAe;;CAEnD,MAAM;;CAEN,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;AACN,CAAC;;AAGD,IAAM,SAAS;;AAGf,IAAa,YAAY,IAAI,WAAW,iBAAiB;;CAEvD,MAAM;;CAEN,IAAI;EAAE,SAAS;GAAS,SAAS;CAAM;;CAEvC,IAAI;EAAE,SAAS;GAAU,SAAS;CAAM;;CAExC,IAAI;EAAE,SAAS;GAAU,SAAS;CAAM;;CAExC,IAAI;EAAE,SAAS;GAAU,SAAS;CAAM;;CAExC,IAAI;EAAE,SAAS;GAAU,SAAS;CAAM;AAC1C,CAAC;;AAGD,IAAa,UAAU,IAAI,WAAW,eAAe;;CAEnD,UAAU;;CAEV,OAAO;;CAEP,MAAM;AACR,CAAC;;AAGD,IAAa,YAAY,IAAI,WAAW,iBAAiB;;AAEvD,UAAU,MACZ,CAAC;;AAGD,IAAa,eAAe,IAAI,WAAW,qBAAqB;;CAE9D,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;AACN,CAAC;;AAGD,IAAa,IAAI,IAAI,aAAa;;CAEhC;;CAEA;;CAEA;;CAEA;;CAEA;;CAEA;;CAEA;;CAEA;;CAEA;;CAEA;;CAEA;;CAEA;;CAEA;;CAEA;;CAEA;AACF,CAAC"}
@@ -1,4 +1,4 @@
1
- import * as css from '@zerodep-dev/vue-tsx-pro-tsx/styles';
1
+ import { css } from '@zerodep-dev/vue-tsx-pro-tsx/styles';
2
2
  import { type VNodeChild } from 'vue';
3
3
  import { type ButtonProps } from '../base/Button';
4
4
  import { type PartProps } from '../utils/props';
@@ -15,7 +15,7 @@ import { handleCalendarKeydown, useCalendarState } from "./calendar-state.js";
15
15
  import { toDateLimits, useDateLocale } from "./date-locale.js";
16
16
  import { computed, createVNode, isVNode, nextTick, shallowRef, useId, watch } from "vue";
17
17
  import { _component, bindable, mergeJsxProps, readonlyProp, restProps } from "@zerodep-dev/vue-tsx-pro-tsx";
18
- import * as css from "@zerodep-dev/vue-tsx-pro-tsx/styles";
18
+ import { css } from "@zerodep-dev/vue-tsx-pro-tsx/styles";
19
19
  import { ChevronLeft, ChevronRight } from "@lucide/icons";
20
20
  import { isWeekend } from "@internationalized/date";
21
21
  //#region src/date/CalendarBoard.tsx
@@ -1 +1 @@
1
- {"version":3,"file":"CalendarBoard.js","names":["_isVNode","_vtp_bindable","_vtp_readonlyProp","_vtp_restProps","_vue_shallowRef","_vue_computed","_createVNode","_mergeProps"],"sources":["../../src/date/CalendarBoard.tsx"],"sourcesContent":["/**\n * 整页的月历(日历看板):一个月铺满一页,每天一个大格子,格子里放日程、排班、节假日这类按天的内容。\n * 参考 Ant Design Calendar 的 fullscreen、Google 日历的月视图。要在输入框里选日期用 DatePicker,小日历用 Calendar。\n *\n * <CalendarBoard\n * events={meetings}\n * getEventDate={(meeting) => meeting.date}\n * getEventLabel={(meeting) => meeting.title}\n * _value={day}\n * aria-label=\"会议日程\"\n * />\n *\n * - 数据按天放进格子:getEventDate 是哪一天(带时间的取日期),getEventEnd 给了时跨天的每一天都有它;\n * 每天最多显示 maxEvents 条,其余收成“还有 N 项”(点了选中那一天,由页面在旁边列出全部)。\n * renderEvent 自定义一条的显示(默认是带色调的一行文字),renderDay 往格子里加别的内容(排班、价格),\n * getDayNote 是日期旁边的小字(节假日、“休”“班”、农历)。\n * - 键盘与 Calendar 一致(同一个 useCalendarState):每天的日期数字是一个按钮,焦点在当前日期上,\n * ←→ 一天、↑↓ 一周、Page Up / Down 一个月、Home / End 到这周两端,Enter / 空格选中;读屏念完整日期与有几项日程。\n * 格子里的日程可以是链接、按钮,Tab 照常进去。\n * - 页头:标题(翻页时播报)、toolbar(筛选、视图切换)、“今天”、上个月 / 下个月;month 可以双向绑定(翻页写回)。\n *\n * 部件:Root(div,role=\"group\")、Header、Title、Today、Previous、Next、Grid(table)、Weekday、Cell(td)、\n * DayButton(日期数字)、Note、Events(ul)、Event、More。\n */\nimport { ChevronLeft, ChevronRight } from '@lucide/icons';\nimport { _component } from '@zerodep-dev/vue-tsx-pro-tsx';\nimport { isWeekend, type CalendarDate } from '@internationalized/date';\nimport * as css from '@zerodep-dev/vue-tsx-pro-tsx/styles';\nimport { nextTick, useId, watch, type VNodeChild } from 'vue';\nimport { Button, type ButtonProps } from '../base/Button';\nimport { buttonBaseStyles } from '../base/button-core';\nimport { IconButton } from '../base/IconButton';\nimport { VisuallyHidden } from '../base/VisuallyHidden';\nimport { useLang } from '../config/context';\nimport { useFormat } from '../config/lang/format';\nimport { t } from '../config/theme/tokens';\nimport { isSameDate, monthGrid, weekdayNames } from '../utils/data/date';\nimport { isRtl } from '../utils/dom/direction';\nimport { mergeAttrs, mergePartProps, type PartProps } from '../utils/props';\nimport { focusRingStyles } from '../utils/style/styles';\nimport { statusToneSx, type StatusTone } from '../utils/style/tone-styles';\nimport { interactionTransitions } from '../utils/style/transitions';\nimport { handleCalendarKeydown, useCalendarState } from './calendar-state';\nimport { toDateLimits, useDateLocale, type DateLimitProps } from './date-locale';\n\n/** 一天的状态:renderDay、getDayNote 之外的自定义内容用 */\nexport interface CalendarBoardDayState {\n /** 今天 */\n today: boolean;\n /** 补齐的上个月、下个月的日子 */\n outside: boolean;\n /** 选中的那一天 */\n selected: boolean;\n /** 周六、周日(按语言) */\n weekend: boolean;\n /** 不可选(范围外、不可选的日期) */\n disabled: boolean;\n}\n\n/** 未声明的属性落到根元素上;aria-label 是整个月历的名称 */\nexport interface CalendarBoardProps<T = unknown> extends PartProps<'div', 'role'>, DateLimitProps {\n /** 选中的那一天(ISO 日期):父级写 _value={day};没有时 null */\n _value?: string | null;\n /** 显示哪个月('YYYY-MM'):父级可写 _month={m},翻页时写回;不写时从选中的那天(或今天)开始 */\n _month?: string;\n /** 一周的第一天,0 是周日;不写时按语言 */\n firstDayOfWeek?: number;\n /** 按天放的数据:日程、排班、提醒 */\n events?: readonly T[];\n /** 数据在哪一天(ISO 日期;带时间的取日期部分) */\n getEventDate?: (event: T) => string;\n /** 跨天的数据在哪一天结束(含);不写时只在 getEventDate 那一天 */\n getEventEnd?: (event: T) => string;\n /** 数据的 key;不写时用它在 events 里的位置 */\n getEventKey?: (event: T) => string;\n /** 默认显示的文字 */\n getEventLabel?: (event: T) => string;\n /** 默认显示的色调,默认 accent */\n getEventTone?: (event: T) => StatusTone;\n /** 自定义一条数据的显示 */\n renderEvent?: (event: T, date: string) => VNodeChild;\n /** 每天最多显示几条,其余收成“还有 N 项”,默认 3 */\n maxEvents?: number;\n /** 日期旁边的小字(节假日、“休”“班”、农历) */\n getDayNote?: (date: string) => VNodeChild;\n /** 往格子里加别的内容(排班、价格),放在日程下面 */\n renderDay?: (date: string, state: CalendarBoardDayState) => VNodeChild;\n /** 页头右边的内容(筛选、视图切换) */\n toolbar?: VNodeChild;\n /** 只读:能翻页、移动焦点,不能选 */\n readonly?: boolean;\n /** “今天”按钮的部件属性 */\n propsToday?: Partial<ButtonProps>;\n /** 每格(td)的部件属性,可以按日期给 */\n propsCell?: PartProps<'td', 'role' | 'aria-selected'> | ((date: string) => PartProps<'td'>);\n}\n\n/** CalendarBoard 的样式 */\nexport const calendarBoardStyles = css.create({\n root: { display: 'flex', flexDirection: 'column', gap: '_sm', minWidth: 0 },\n header: { display: 'flex', alignItems: 'center', flexWrap: 'wrap', gap: '_sm' },\n title: { fontSize: '_lg', fontWeight: '_semibold', marginInlineEnd: 'auto' },\n grid: {\n width: '_full',\n tableLayout: 'fixed',\n borderCollapse: 'collapse',\n borderSpacing: 0,\n },\n weekday: {\n paddingBlock: '_xs',\n paddingInline: '_sm',\n color: '_textMuted',\n fontWeight: '_normal',\n fontSize: '_sm',\n textAlign: 'start',\n },\n cell: {\n height: '7em',\n padding: '_xs',\n verticalAlign: 'top',\n borderWidth: '_xs',\n borderStyle: 'solid',\n borderColor: '_borderMuted',\n cursor: 'pointer',\n transition: `background-color ${t.durations.sm} ${t.easings.standard}`,\n backgroundColor: { default: 'transparent', ':hover': '_fillHover' },\n },\n weekend: { backgroundColor: { default: '_surfaceMuted', ':hover': '_fillHover' } },\n outside: { color: '_textMuted' },\n selected: {\n backgroundColor: { default: '_accentSoft', ':hover': '_accentSoftHover' },\n boxShadow: `inset 0 0 0 ${t.borderWidths.sm} ${t.colors.accentBorder}`,\n },\n disabled: { cursor: 'not-allowed', opacity: '_disabled' },\n // 只读:格子不像能点\n readonly: { cursor: 'default' },\n dayHead: { display: 'flex', alignItems: 'center', gap: '_xs', minWidth: 0 },\n // 日期数字:可聚焦的按钮,焦点环画在它上面\n day: {\n display: 'inline-grid',\n placeItems: 'center',\n flexShrink: 0,\n minWidth: '1.75em',\n height: '1.75em',\n paddingInline: '_xs',\n borderRadius: '_full',\n fontVariantNumeric: 'tabular-nums',\n fontWeight: '_medium',\n },\n today: { backgroundColor: '_accent', color: '_accentContrast' },\n note: {\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n fontSize: '_xs',\n color: '_textMuted',\n },\n events: {\n display: 'flex',\n flexDirection: 'column',\n gap: '2px',\n marginBlock: '_xs',\n marginInline: 0,\n padding: 0,\n listStyle: 'none',\n },\n event: {\n display: 'block',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n paddingInline: '_xs',\n borderRadius: '_sm',\n fontSize: '_xs',\n lineHeight: '1.6',\n },\n more: {\n paddingInline: '_xs',\n borderRadius: '_sm',\n fontSize: '_xs',\n color: '_textMuted',\n backgroundColor: { default: 'transparent', ':hover': '_fillHover' },\n },\n});\n\n/** 整页的月历:每天一个大格子,放日程、排班、节假日 */\nexport const CalendarBoard = _component(\n <T,>({\n _value: value = _bindable<string | null>(null),\n _month: month = _bindable<string | undefined>(undefined),\n firstDayOfWeek,\n min,\n max,\n isDateUnavailable,\n events = [],\n getEventDate,\n getEventEnd,\n getEventKey,\n getEventLabel,\n getEventTone,\n renderEvent,\n maxEvents = 3,\n getDayNote,\n renderDay,\n toolbar,\n readonly = false,\n propsToday,\n propsCell,\n ...rest\n }: CalendarBoardProps<T>) => {\n const lang = useLang();\n const format = useFormat();\n const locale = useDateLocale(() => ({ firstDayOfWeek }));\n const titleId = useId();\n let root = _state.raw<HTMLElement | null>(null);\n const limits = _derived(toDateLimits(locale, { min, max, isDateUnavailable }));\n const selected = _derived.by(() => {\n const day = locale.fromValue(value);\n return day ? [day] : [];\n });\n const calendar = useCalendarState({\n mode: () => 'single',\n selected: () => selected,\n onChange: ([day]) => {\n value = locale.toIso(day!);\n },\n today: () => locale.today(),\n limits: () => limits,\n week: () => locale.week,\n readonly: () => readonly,\n defaultFocused: () => (month ? locale.fromValue(`${month}-01`) : null),\n });\n\n // 翻页写回 month;父级改了 month 时翻过去\n watch(\n () => calendar.page.toString().slice(0, 7),\n (page) => {\n if (month !== undefined && month !== page) month = page;\n },\n );\n watch(\n () => month,\n (next) => {\n const target = next ? locale.fromValue(`${next}-01`) : null;\n if (target && !isSameDate(target, calendar.page, 'month')) calendar.focus(target);\n },\n );\n\n /** 按天分好的数据:ISO 日期 → 那天的数据(跨天的每一天都有) */\n const byDay = _derived.by(() => {\n const map = new Map<string, T[]>();\n if (!getEventDate) return map;\n for (const event of events) {\n const first = locale.fromValue(getEventDate(event).slice(0, 10));\n if (!first) continue;\n const last = getEventEnd ? locale.fromValue(getEventEnd(event).slice(0, 10)) : null;\n // 跨天的最多铺 366 天,数据错了(结束早于开始、跨好几年)也不会卡住\n for (let day = first, count = 0; count < 366; day = day.add({ days: 1 }), count++) {\n const key = locale.toIso(day);\n map.set(key, [...(map.get(key) ?? []), event]);\n if (!last || day.compare(last) >= 0) break;\n }\n }\n return map;\n });\n\n function onKeydown(event: KeyboardEvent) {\n // 格子里的日程(链接、按钮)自己处理按键\n if (!(event.target as Element).matches('[data-day]')) return;\n if (!handleCalendarKeydown(calendar, event, !!root && isRtl(root))) return;\n event.preventDefault();\n void nextTick(() => root?.querySelector<HTMLElement>('[data-day][data-focused]')?.focus());\n }\n\n /** 点格子的空白处:选中那一天(点里面的链接、按钮时照常) */\n function onCellClick(event: MouseEvent, day: CalendarDate) {\n if ((event.target as Element).closest('a, button, input, [role=\"button\"]')) return;\n calendar.activate(day);\n }\n\n function renderCell(day: CalendarDate, page: CalendarDate) {\n const iso = locale.toIso(day);\n const state = calendar.cell(day, page);\n const dayState: CalendarBoardDayState = {\n today: state.today,\n outside: state.outside,\n selected: state.selected,\n weekend: isWeekend(day, locale.locale),\n disabled: state.disabled,\n };\n const list = byDay.get(iso) ?? [];\n const shown = list.slice(0, Math.max(0, maxEvents));\n const own = typeof propsCell === 'function' ? propsCell(iso) : propsCell;\n const label = format.date(day, { dateStyle: 'full' });\n return (\n <td\n key={iso}\n {...mergeAttrs<'td'>(\n {\n sx: [\n calendarBoardStyles.cell,\n dayState.weekend && calendarBoardStyles.weekend,\n state.outside && calendarBoardStyles.outside,\n state.selected && calendarBoardStyles.selected,\n state.disabled && calendarBoardStyles.disabled,\n readonly && calendarBoardStyles.readonly,\n ],\n },\n own,\n {\n role: 'gridcell',\n 'aria-selected': state.selected,\n onClick: (event: MouseEvent) => onCellClick(event, day),\n onPointerenter: () => calendar.hover(day),\n },\n )}\n data-date={iso}\n data-today={state.today || undefined}\n data-outside={state.outside || undefined}\n >\n <div {...css.attrs(calendarBoardStyles.dayHead)}>\n <button\n type=\"button\"\n tabindex={state.focused && !state.outside ? 0 : -1}\n aria-label={[\n state.today ? lang.calendarToday(label) : label,\n list.length > 0 ? lang.calendarBoardCount(list.length) : null,\n ]\n .filter(Boolean)\n .join(',')}\n aria-disabled={state.disabled || undefined}\n {...css.attrs(\n buttonBaseStyles.root,\n interactionTransitions.colors,\n calendarBoardStyles.day,\n focusRingStyles.tight,\n state.today && calendarBoardStyles.today,\n )}\n data-day=\"\"\n data-focused={(state.focused && !state.outside) || undefined}\n onClick={(event: MouseEvent) => {\n event.stopPropagation();\n if (!state.disabled) calendar.activate(day);\n }}\n onFocus={() => {\n if (!state.focused) calendar.focus(day);\n }}\n >\n {locale.dayNumber(day)}\n </button>\n {getDayNote && <span {...css.attrs(calendarBoardStyles.note)}>{getDayNote(iso)}</span>}\n </div>\n {shown.length > 0 && (\n <ul {...css.attrs(calendarBoardStyles.events)}>\n {shown.map((event, index) => (\n <li key={getEventKey?.(event) ?? index}>\n {renderEvent ? (\n renderEvent(event, iso)\n ) : (\n <span\n {...css.attrs(\n calendarBoardStyles.event,\n statusToneSx('soft', getEventTone?.(event) ?? 'accent'),\n )}\n >\n {getEventLabel?.(event) ?? ''}\n </span>\n )}\n </li>\n ))}\n {list.length > shown.length && (\n <li>\n <button\n type=\"button\"\n {...css.attrs(\n buttonBaseStyles.root,\n interactionTransitions.colors,\n calendarBoardStyles.more,\n focusRingStyles.tight,\n )}\n onClick={(event: MouseEvent) => {\n event.stopPropagation();\n calendar.activate(day);\n }}\n >\n {lang.calendarBoardMore(list.length - shown.length)}\n </button>\n </li>\n )}\n </ul>\n )}\n {renderDay?.(iso, dayState)}\n </td>\n );\n }\n\n return () => {\n const page = calendar.page;\n const title = format.date(page, { year: 'numeric', month: 'long' });\n const weeks = monthGrid(page, { ...locale.week, fixedWeeks: false });\n const names = weekdayNames(locale.locale, {\n firstDayOfWeek: locale.week.firstDayOfWeek,\n format: 'short',\n });\n return (\n <div\n {...mergeAttrs<'div'>({ sx: calendarBoardStyles.root }, rest, {\n ref: _toRef(root),\n role: 'group',\n })}\n >\n <div {...css.attrs(calendarBoardStyles.header)}>\n <span id={titleId} {...css.attrs(calendarBoardStyles.title)}>\n {title}\n </span>\n {toolbar}\n <Button\n {...mergePartProps<ButtonProps>(\n { size: 'sm', variant: 'soft', tone: 'neutral' },\n propsToday,\n {\n onClick: () => {\n calendar.focus(locale.today());\n void nextTick(() =>\n root?.querySelector<HTMLElement>('[data-day][data-focused]')?.focus(),\n );\n },\n },\n )}\n >\n {lang.dateRangePreset.today}\n </Button>\n <IconButton\n icon={ChevronLeft}\n aria-label={lang.calendarPreviousMonth}\n propsIcon={{ flipInRtl: true }}\n size=\"sm\"\n disabled={!calendar.canTurnPage(-1)}\n onClick={() => calendar.turnPage(-1)}\n />\n <IconButton\n icon={ChevronRight}\n aria-label={lang.calendarNextMonth}\n propsIcon={{ flipInRtl: true }}\n size=\"sm\"\n disabled={!calendar.canTurnPage(1)}\n onClick={() => calendar.turnPage(1)}\n />\n </div>\n <table\n {...css.attrs(calendarBoardStyles.grid)}\n role=\"grid\"\n aria-labelledby={titleId}\n onKeydown={onKeydown}\n onPointerleave={() => calendar.hover(null)}\n >\n <thead>\n <tr>\n {names.map((name) => (\n <th key={name} scope=\"col\" {...css.attrs(calendarBoardStyles.weekday)}>\n {name}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {weeks.map((week) => (\n <tr key={week[0]!.toString()}>{week.map((day) => renderCell(day, page))}</tr>\n ))}\n </tbody>\n </table>\n {/* 翻页时播报新的月份 */}\n <VisuallyHidden aria-live=\"polite\">{title}</VisuallyHidden>\n </div>\n );\n };\n },\n);\n"],"mappings":"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"}
1
+ {"version":3,"file":"CalendarBoard.js","names":["_isVNode","_vtp_bindable","_vtp_readonlyProp","_vtp_restProps","_vue_shallowRef","_vue_computed","_createVNode","_mergeProps"],"sources":["../../src/date/CalendarBoard.tsx"],"sourcesContent":["/**\n * 整页的月历(日历看板):一个月铺满一页,每天一个大格子,格子里放日程、排班、节假日这类按天的内容。\n * 参考 Ant Design Calendar 的 fullscreen、Google 日历的月视图。要在输入框里选日期用 DatePicker,小日历用 Calendar。\n *\n * <CalendarBoard\n * events={meetings}\n * getEventDate={(meeting) => meeting.date}\n * getEventLabel={(meeting) => meeting.title}\n * _value={day}\n * aria-label=\"会议日程\"\n * />\n *\n * - 数据按天放进格子:getEventDate 是哪一天(带时间的取日期),getEventEnd 给了时跨天的每一天都有它;\n * 每天最多显示 maxEvents 条,其余收成“还有 N 项”(点了选中那一天,由页面在旁边列出全部)。\n * renderEvent 自定义一条的显示(默认是带色调的一行文字),renderDay 往格子里加别的内容(排班、价格),\n * getDayNote 是日期旁边的小字(节假日、“休”“班”、农历)。\n * - 键盘与 Calendar 一致(同一个 useCalendarState):每天的日期数字是一个按钮,焦点在当前日期上,\n * ←→ 一天、↑↓ 一周、Page Up / Down 一个月、Home / End 到这周两端,Enter / 空格选中;读屏念完整日期与有几项日程。\n * 格子里的日程可以是链接、按钮,Tab 照常进去。\n * - 页头:标题(翻页时播报)、toolbar(筛选、视图切换)、“今天”、上个月 / 下个月;month 可以双向绑定(翻页写回)。\n *\n * 部件:Root(div,role=\"group\")、Header、Title、Today、Previous、Next、Grid(table)、Weekday、Cell(td)、\n * DayButton(日期数字)、Note、Events(ul)、Event、More。\n */\nimport { ChevronLeft, ChevronRight } from '@lucide/icons';\nimport { _component } from '@zerodep-dev/vue-tsx-pro-tsx';\nimport { isWeekend, type CalendarDate } from '@internationalized/date';\nimport { css } from '@zerodep-dev/vue-tsx-pro-tsx/styles';\nimport { nextTick, useId, watch, type VNodeChild } from 'vue';\nimport { Button, type ButtonProps } from '../base/Button';\nimport { buttonBaseStyles } from '../base/button-core';\nimport { IconButton } from '../base/IconButton';\nimport { VisuallyHidden } from '../base/VisuallyHidden';\nimport { useLang } from '../config/context';\nimport { useFormat } from '../config/lang/format';\nimport { t } from '../config/theme/tokens';\nimport { isSameDate, monthGrid, weekdayNames } from '../utils/data/date';\nimport { isRtl } from '../utils/dom/direction';\nimport { mergeAttrs, mergePartProps, type PartProps } from '../utils/props';\nimport { focusRingStyles } from '../utils/style/styles';\nimport { statusToneSx, type StatusTone } from '../utils/style/tone-styles';\nimport { interactionTransitions } from '../utils/style/transitions';\nimport { handleCalendarKeydown, useCalendarState } from './calendar-state';\nimport { toDateLimits, useDateLocale, type DateLimitProps } from './date-locale';\n\n/** 一天的状态:renderDay、getDayNote 之外的自定义内容用 */\nexport interface CalendarBoardDayState {\n /** 今天 */\n today: boolean;\n /** 补齐的上个月、下个月的日子 */\n outside: boolean;\n /** 选中的那一天 */\n selected: boolean;\n /** 周六、周日(按语言) */\n weekend: boolean;\n /** 不可选(范围外、不可选的日期) */\n disabled: boolean;\n}\n\n/** 未声明的属性落到根元素上;aria-label 是整个月历的名称 */\nexport interface CalendarBoardProps<T = unknown> extends PartProps<'div', 'role'>, DateLimitProps {\n /** 选中的那一天(ISO 日期):父级写 _value={day};没有时 null */\n _value?: string | null;\n /** 显示哪个月('YYYY-MM'):父级可写 _month={m},翻页时写回;不写时从选中的那天(或今天)开始 */\n _month?: string;\n /** 一周的第一天,0 是周日;不写时按语言 */\n firstDayOfWeek?: number;\n /** 按天放的数据:日程、排班、提醒 */\n events?: readonly T[];\n /** 数据在哪一天(ISO 日期;带时间的取日期部分) */\n getEventDate?: (event: T) => string;\n /** 跨天的数据在哪一天结束(含);不写时只在 getEventDate 那一天 */\n getEventEnd?: (event: T) => string;\n /** 数据的 key;不写时用它在 events 里的位置 */\n getEventKey?: (event: T) => string;\n /** 默认显示的文字 */\n getEventLabel?: (event: T) => string;\n /** 默认显示的色调,默认 accent */\n getEventTone?: (event: T) => StatusTone;\n /** 自定义一条数据的显示 */\n renderEvent?: (event: T, date: string) => VNodeChild;\n /** 每天最多显示几条,其余收成“还有 N 项”,默认 3 */\n maxEvents?: number;\n /** 日期旁边的小字(节假日、“休”“班”、农历) */\n getDayNote?: (date: string) => VNodeChild;\n /** 往格子里加别的内容(排班、价格),放在日程下面 */\n renderDay?: (date: string, state: CalendarBoardDayState) => VNodeChild;\n /** 页头右边的内容(筛选、视图切换) */\n toolbar?: VNodeChild;\n /** 只读:能翻页、移动焦点,不能选 */\n readonly?: boolean;\n /** “今天”按钮的部件属性 */\n propsToday?: Partial<ButtonProps>;\n /** 每格(td)的部件属性,可以按日期给 */\n propsCell?: PartProps<'td', 'role' | 'aria-selected'> | ((date: string) => PartProps<'td'>);\n}\n\n/** CalendarBoard 的样式 */\nexport const calendarBoardStyles = css.create({\n root: { display: 'flex', flexDirection: 'column', gap: '_sm', minWidth: 0 },\n header: { display: 'flex', alignItems: 'center', flexWrap: 'wrap', gap: '_sm' },\n title: { fontSize: '_lg', fontWeight: '_semibold', marginInlineEnd: 'auto' },\n grid: {\n width: '_full',\n tableLayout: 'fixed',\n borderCollapse: 'collapse',\n borderSpacing: 0,\n },\n weekday: {\n paddingBlock: '_xs',\n paddingInline: '_sm',\n color: '_textMuted',\n fontWeight: '_normal',\n fontSize: '_sm',\n textAlign: 'start',\n },\n cell: {\n height: '7em',\n padding: '_xs',\n verticalAlign: 'top',\n borderWidth: '_xs',\n borderStyle: 'solid',\n borderColor: '_borderMuted',\n cursor: 'pointer',\n transition: `background-color ${t.durations.sm} ${t.easings.standard}`,\n backgroundColor: { default: 'transparent', ':hover': '_fillHover' },\n },\n weekend: { backgroundColor: { default: '_surfaceMuted', ':hover': '_fillHover' } },\n outside: { color: '_textMuted' },\n selected: {\n backgroundColor: { default: '_accentSoft', ':hover': '_accentSoftHover' },\n boxShadow: `inset 0 0 0 ${t.borderWidths.sm} ${t.colors.accentBorder}`,\n },\n disabled: { cursor: 'not-allowed', opacity: '_disabled' },\n // 只读:格子不像能点\n readonly: { cursor: 'default' },\n dayHead: { display: 'flex', alignItems: 'center', gap: '_xs', minWidth: 0 },\n // 日期数字:可聚焦的按钮,焦点环画在它上面\n day: {\n display: 'inline-grid',\n placeItems: 'center',\n flexShrink: 0,\n minWidth: '1.75em',\n height: '1.75em',\n paddingInline: '_xs',\n borderRadius: '_full',\n fontVariantNumeric: 'tabular-nums',\n fontWeight: '_medium',\n },\n today: { backgroundColor: '_accent', color: '_accentContrast' },\n note: {\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n fontSize: '_xs',\n color: '_textMuted',\n },\n events: {\n display: 'flex',\n flexDirection: 'column',\n gap: '2px',\n marginBlock: '_xs',\n marginInline: 0,\n padding: 0,\n listStyle: 'none',\n },\n event: {\n display: 'block',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n paddingInline: '_xs',\n borderRadius: '_sm',\n fontSize: '_xs',\n lineHeight: '1.6',\n },\n more: {\n paddingInline: '_xs',\n borderRadius: '_sm',\n fontSize: '_xs',\n color: '_textMuted',\n backgroundColor: { default: 'transparent', ':hover': '_fillHover' },\n },\n});\n\n/** 整页的月历:每天一个大格子,放日程、排班、节假日 */\nexport const CalendarBoard = _component(\n <T,>({\n _value: value = _bindable<string | null>(null),\n _month: month = _bindable<string | undefined>(undefined),\n firstDayOfWeek,\n min,\n max,\n isDateUnavailable,\n events = [],\n getEventDate,\n getEventEnd,\n getEventKey,\n getEventLabel,\n getEventTone,\n renderEvent,\n maxEvents = 3,\n getDayNote,\n renderDay,\n toolbar,\n readonly = false,\n propsToday,\n propsCell,\n ...rest\n }: CalendarBoardProps<T>) => {\n const lang = useLang();\n const format = useFormat();\n const locale = useDateLocale(() => ({ firstDayOfWeek }));\n const titleId = useId();\n let root = _state.raw<HTMLElement | null>(null);\n const limits = _derived(toDateLimits(locale, { min, max, isDateUnavailable }));\n const selected = _derived.by(() => {\n const day = locale.fromValue(value);\n return day ? [day] : [];\n });\n const calendar = useCalendarState({\n mode: () => 'single',\n selected: () => selected,\n onChange: ([day]) => {\n value = locale.toIso(day!);\n },\n today: () => locale.today(),\n limits: () => limits,\n week: () => locale.week,\n readonly: () => readonly,\n defaultFocused: () => (month ? locale.fromValue(`${month}-01`) : null),\n });\n\n // 翻页写回 month;父级改了 month 时翻过去\n watch(\n () => calendar.page.toString().slice(0, 7),\n (page) => {\n if (month !== undefined && month !== page) month = page;\n },\n );\n watch(\n () => month,\n (next) => {\n const target = next ? locale.fromValue(`${next}-01`) : null;\n if (target && !isSameDate(target, calendar.page, 'month')) calendar.focus(target);\n },\n );\n\n /** 按天分好的数据:ISO 日期 → 那天的数据(跨天的每一天都有) */\n const byDay = _derived.by(() => {\n const map = new Map<string, T[]>();\n if (!getEventDate) return map;\n for (const event of events) {\n const first = locale.fromValue(getEventDate(event).slice(0, 10));\n if (!first) continue;\n const last = getEventEnd ? locale.fromValue(getEventEnd(event).slice(0, 10)) : null;\n // 跨天的最多铺 366 天,数据错了(结束早于开始、跨好几年)也不会卡住\n for (let day = first, count = 0; count < 366; day = day.add({ days: 1 }), count++) {\n const key = locale.toIso(day);\n map.set(key, [...(map.get(key) ?? []), event]);\n if (!last || day.compare(last) >= 0) break;\n }\n }\n return map;\n });\n\n function onKeydown(event: KeyboardEvent) {\n // 格子里的日程(链接、按钮)自己处理按键\n if (!(event.target as Element).matches('[data-day]')) return;\n if (!handleCalendarKeydown(calendar, event, !!root && isRtl(root))) return;\n event.preventDefault();\n void nextTick(() => root?.querySelector<HTMLElement>('[data-day][data-focused]')?.focus());\n }\n\n /** 点格子的空白处:选中那一天(点里面的链接、按钮时照常) */\n function onCellClick(event: MouseEvent, day: CalendarDate) {\n if ((event.target as Element).closest('a, button, input, [role=\"button\"]')) return;\n calendar.activate(day);\n }\n\n function renderCell(day: CalendarDate, page: CalendarDate) {\n const iso = locale.toIso(day);\n const state = calendar.cell(day, page);\n const dayState: CalendarBoardDayState = {\n today: state.today,\n outside: state.outside,\n selected: state.selected,\n weekend: isWeekend(day, locale.locale),\n disabled: state.disabled,\n };\n const list = byDay.get(iso) ?? [];\n const shown = list.slice(0, Math.max(0, maxEvents));\n const own = typeof propsCell === 'function' ? propsCell(iso) : propsCell;\n const label = format.date(day, { dateStyle: 'full' });\n return (\n <td\n key={iso}\n {...mergeAttrs<'td'>(\n {\n sx: [\n calendarBoardStyles.cell,\n dayState.weekend && calendarBoardStyles.weekend,\n state.outside && calendarBoardStyles.outside,\n state.selected && calendarBoardStyles.selected,\n state.disabled && calendarBoardStyles.disabled,\n readonly && calendarBoardStyles.readonly,\n ],\n },\n own,\n {\n role: 'gridcell',\n 'aria-selected': state.selected,\n onClick: (event: MouseEvent) => onCellClick(event, day),\n onPointerenter: () => calendar.hover(day),\n },\n )}\n data-date={iso}\n data-today={state.today || undefined}\n data-outside={state.outside || undefined}\n >\n <div {...css.attrs(calendarBoardStyles.dayHead)}>\n <button\n type=\"button\"\n tabindex={state.focused && !state.outside ? 0 : -1}\n aria-label={[\n state.today ? lang.calendarToday(label) : label,\n list.length > 0 ? lang.calendarBoardCount(list.length) : null,\n ]\n .filter(Boolean)\n .join(',')}\n aria-disabled={state.disabled || undefined}\n {...css.attrs(\n buttonBaseStyles.root,\n interactionTransitions.colors,\n calendarBoardStyles.day,\n focusRingStyles.tight,\n state.today && calendarBoardStyles.today,\n )}\n data-day=\"\"\n data-focused={(state.focused && !state.outside) || undefined}\n onClick={(event: MouseEvent) => {\n event.stopPropagation();\n if (!state.disabled) calendar.activate(day);\n }}\n onFocus={() => {\n if (!state.focused) calendar.focus(day);\n }}\n >\n {locale.dayNumber(day)}\n </button>\n {getDayNote && <span {...css.attrs(calendarBoardStyles.note)}>{getDayNote(iso)}</span>}\n </div>\n {shown.length > 0 && (\n <ul {...css.attrs(calendarBoardStyles.events)}>\n {shown.map((event, index) => (\n <li key={getEventKey?.(event) ?? index}>\n {renderEvent ? (\n renderEvent(event, iso)\n ) : (\n <span\n {...css.attrs(\n calendarBoardStyles.event,\n statusToneSx('soft', getEventTone?.(event) ?? 'accent'),\n )}\n >\n {getEventLabel?.(event) ?? ''}\n </span>\n )}\n </li>\n ))}\n {list.length > shown.length && (\n <li>\n <button\n type=\"button\"\n {...css.attrs(\n buttonBaseStyles.root,\n interactionTransitions.colors,\n calendarBoardStyles.more,\n focusRingStyles.tight,\n )}\n onClick={(event: MouseEvent) => {\n event.stopPropagation();\n calendar.activate(day);\n }}\n >\n {lang.calendarBoardMore(list.length - shown.length)}\n </button>\n </li>\n )}\n </ul>\n )}\n {renderDay?.(iso, dayState)}\n </td>\n );\n }\n\n return () => {\n const page = calendar.page;\n const title = format.date(page, { year: 'numeric', month: 'long' });\n const weeks = monthGrid(page, { ...locale.week, fixedWeeks: false });\n const names = weekdayNames(locale.locale, {\n firstDayOfWeek: locale.week.firstDayOfWeek,\n format: 'short',\n });\n return (\n <div\n {...mergeAttrs<'div'>({ sx: calendarBoardStyles.root }, rest, {\n ref: _toRef(root),\n role: 'group',\n })}\n >\n <div {...css.attrs(calendarBoardStyles.header)}>\n <span id={titleId} {...css.attrs(calendarBoardStyles.title)}>\n {title}\n </span>\n {toolbar}\n <Button\n {...mergePartProps<ButtonProps>(\n { size: 'sm', variant: 'soft', tone: 'neutral' },\n propsToday,\n {\n onClick: () => {\n calendar.focus(locale.today());\n void nextTick(() =>\n root?.querySelector<HTMLElement>('[data-day][data-focused]')?.focus(),\n );\n },\n },\n )}\n >\n {lang.dateRangePreset.today}\n </Button>\n <IconButton\n icon={ChevronLeft}\n aria-label={lang.calendarPreviousMonth}\n propsIcon={{ flipInRtl: true }}\n size=\"sm\"\n disabled={!calendar.canTurnPage(-1)}\n onClick={() => calendar.turnPage(-1)}\n />\n <IconButton\n icon={ChevronRight}\n aria-label={lang.calendarNextMonth}\n propsIcon={{ flipInRtl: true }}\n size=\"sm\"\n disabled={!calendar.canTurnPage(1)}\n onClick={() => calendar.turnPage(1)}\n />\n </div>\n <table\n {...css.attrs(calendarBoardStyles.grid)}\n role=\"grid\"\n aria-labelledby={titleId}\n onKeydown={onKeydown}\n onPointerleave={() => calendar.hover(null)}\n >\n <thead>\n <tr>\n {names.map((name) => (\n <th key={name} scope=\"col\" {...css.attrs(calendarBoardStyles.weekday)}>\n {name}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {weeks.map((week) => (\n <tr key={week[0]!.toString()}>{week.map((day) => renderCell(day, page))}</tr>\n ))}\n </tbody>\n </table>\n {/* 翻页时播报新的月份 */}\n <VisuallyHidden aria-live=\"polite\">{title}</VisuallyHidden>\n </div>\n );\n };\n },\n);\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import * as css from '@zerodep-dev/vue-tsx-pro-tsx/styles';
1
+ import { css } from '@zerodep-dev/vue-tsx-pro-tsx/styles';
2
2
  import { type VNodeChild } from 'vue';
3
3
  import { type IconButtonProps } from '../base/IconButton';
4
4
  import { type PartProps } from '../utils/props';
@@ -14,7 +14,7 @@ import { handleCalendarKeydown } from "./calendar-state.js";
14
14
  import { useDateLocale } from "./date-locale.js";
15
15
  import { createVNode, isVNode, nextTick, shallowRef, useId } from "vue";
16
16
  import { _component, childrenProp, mergeJsxProps, readonlyProp, restProps } from "@zerodep-dev/vue-tsx-pro-tsx";
17
- import * as css from "@zerodep-dev/vue-tsx-pro-tsx/styles";
17
+ import { css } from "@zerodep-dev/vue-tsx-pro-tsx/styles";
18
18
  import { ChevronLeft, ChevronRight } from "@lucide/icons";
19
19
  //#region src/date/CalendarView.tsx
20
20
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"CalendarView.js","names":["_isVNode","_vtp_readonlyProp","_vtp_childrenProp","_vtp_restProps","_vue_shallowRef","_createVNode","_mergeProps"],"sources":["../../src/date/CalendarView.tsx"],"sourcesContent":["/**\n * 日历的界面(WAI-ARIA 的日期网格):页头(上一页、标题、下一页)、并排的月份网格、月份视图与年份视图、页脚。\n * 状态由调用方的 useCalendarState 给(同 ListboxView 与 useListState 的分工):Calendar、RangeCalendar、各种日期选择器共用。\n *\n * const calendar = useCalendarState({ … });\n * <CalendarView calendar={calendar} showWeekNumbers>{(date, cell) => …}</CalendarView>\n *\n * - 每个月一张 table role=\"grid\",日期格是 td role=\"gridcell\"(aria-selected)里的按钮;焦点日期那一格 tabindex=0,\n * 键盘移动后焦点跟过去(handleCalendarKeydown);读屏念的完整日期(今天、星期)由 Intl 生成;\n * - 标题按钮切到月份视图、再切到年份视图(不比选择的粒度更细);翻页时用 aria-live 播报新的月份;\n * - 并排几个月时只显示本月的日期(补齐的上下月留空,不重复出现);只有一个月时补齐的日期变淡、可以点。\n *\n * 部件:Root、Header、Previous、Next(IconButton)、Heading(标题按钮)、Months(并排的月份)、Grid(table)、\n * Weekday(星期表头)、WeekNumber(周数)、Cell(td)、CellButton(日期 / 月份 / 年份按钮)、Footer。\n */\nimport { ChevronLeft, ChevronRight } from '@lucide/icons';\nimport { _component } from '@zerodep-dev/vue-tsx-pro-tsx';\nimport * as css from '@zerodep-dev/vue-tsx-pro-tsx/styles';\nimport { nextTick, useId, type VNodeChild } from 'vue';\nimport { buttonBaseStyles } from '../base/button-core';\nimport { IconButton, type IconButtonProps } from '../base/IconButton';\nimport { VisuallyHidden, visuallyHiddenStyles } from '../base/VisuallyHidden';\nimport { useFormat } from '../config/lang/format';\nimport {\n monthGrid,\n monthsOfYear,\n weekdayNames,\n weekOfYear,\n yearsOfDecade,\n} from '../utils/data/date';\nimport { isRtl } from '../utils/dom/direction';\nimport { hasContent, dataAttrs, mergeAttrs, mergePartProps, type PartProps } from '../utils/props';\nimport { focusRingStyles } from '../utils/style/styles';\nimport { interactionTransitions } from '../utils/style/transitions';\nimport { fontSizeStyles, type TextSize } from '../utils/style/typography';\nimport {\n handleCalendarKeydown,\n type CalendarCellState,\n type CalendarState,\n} from './calendar-state';\nimport { useDateLocale } from './date-locale';\nimport { useLang } from '../config/context';\nimport type { CalendarDate } from '@internationalized/date';\nimport { t } from '../config/theme/tokens';\n\n/** 角色由组件管理 */\nexport type CalendarViewManaged = 'role';\n\n/** 按项给的部件属性:固定的对象,或按这一格的日期(ISO)与状态返回 */\nexport type CalendarItemProps<P> = P | ((date: string, cell: CalendarCellState) => P);\n\n/** 日历界面的外观与内容选项:Calendar、RangeCalendar、日期选择器原样转交 */\nexport interface CalendarViewOptions {\n /** 字号档位,格子随之缩放;不写时继承上下文字号 */\n size?: TextSize;\n /** 在每行前显示一年里的第几周 */\n showWeekNumbers?: boolean;\n /** 总是 6 行(翻页时高度不跳),默认 true */\n fixedWeeks?: boolean;\n /** 不可用:不能翻页、不能选 */\n disabled?: boolean;\n /**\n * 自定义日期格的内容(价格、标记点):拿到日期(ISO)与这一格的状态;不写时是日期数字。\n * 读屏先念完整日期再念这里的文字:日期数字这类重复的部分可以加 aria-hidden\n */\n children?: (date: string, cell: CalendarCellState) => VNodeChild;\n /** 页脚:今天、清除这类按钮 */\n footer?: VNodeChild;\n /** 页头的部件属性 */\n propsHeader?: PartProps<'div'>;\n /** 上一页按钮的部件属性 */\n propsPrevious?: Omit<Partial<IconButtonProps>, 'disabled' | 'onClick'>;\n /** 下一页按钮的部件属性 */\n propsNext?: Omit<Partial<IconButtonProps>, 'disabled' | 'onClick'>;\n /** 标题按钮的部件属性 */\n propsHeading?: PartProps<'button', 'type' | 'aria-label'>;\n /** 并排月份那一层的部件属性 */\n propsMonths?: PartProps<'div'>;\n /** 每张网格(table)的部件属性 */\n propsGrid?: PartProps<'table', 'role' | 'aria-label' | 'aria-multiselectable'>;\n /** 星期表头的部件属性 */\n propsWeekday?: PartProps<'th', 'scope'>;\n /** 周数的部件属性 */\n propsWeekNumber?: PartProps<'th', 'scope' | 'aria-label'>;\n /** 每格(td)的部件属性 */\n propsCell?: CalendarItemProps<PartProps<'td', 'role' | 'aria-selected' | 'aria-disabled'>>;\n /** 每格里按钮的部件属性 */\n propsCellButton?: CalendarItemProps<\n PartProps<'button', 'type' | 'tabindex' | 'disabled' | 'aria-label' | 'aria-disabled'>\n >;\n /** 页脚的部件属性 */\n propsFooter?: PartProps<'div'>;\n}\n\n/** 未声明的属性落到根元素上(aria-label 等) */\nexport interface CalendarViewProps\n extends PartProps<'div', CalendarViewManaged>, CalendarViewOptions {\n /** 日历状态(useCalendarState) */\n calendar: CalendarState;\n /** 一周的第一天(0 表示周日),与 useCalendarState 的 week 一致;不写时取语言配置 */\n firstDayOfWeek?: number;\n}\n\n/** CalendarView 的样式:root、months、month、header、heading、grid、weekday、cell、button 等 */\nexport const calendarStyles = css.create({\n root: {\n display: 'inline-flex',\n flexDirection: 'column',\n gap: '_sm',\n color: '_text',\n lineHeight: '_normal',\n userSelect: 'none',\n },\n months: { display: 'flex', flexWrap: 'wrap', alignItems: 'flex-start', gap: '_xl' },\n month: { display: 'flex', flexDirection: 'column', gap: '_xs' },\n header: {\n display: 'grid',\n gridTemplateColumns: `max(${t.sizes.control}, ${t.sizes.minTarget}) 1fr max(${t.sizes.control}, ${t.sizes.minTarget})`,\n alignItems: 'center',\n gap: '_xs',\n },\n // 占住按钮的位置:并排几个月时中间的月没有翻页按钮,标题仍居中\n spacer: { width: `max(${t.sizes.control}, ${t.sizes.minTarget})` },\n heading: {\n display: 'inline-flex',\n alignItems: 'center',\n justifySelf: 'center',\n minHeight: `max(${t.sizes.control}, ${t.sizes.minTarget})`,\n paddingInline: '_sm',\n borderRadius: '_md',\n fontWeight: '_semibold',\n backgroundColor: { default: 'transparent', ':hover': '_fillHover' },\n },\n headingStatic: {\n cursor: 'default',\n backgroundColor: { default: 'transparent', ':hover': 'transparent' },\n },\n grid: { borderCollapse: 'collapse', borderSpacing: 0 },\n // 月份、年份视图:一行 3 格,与日期网格同宽\n periodGrid: { width: `calc(7 * max(2.25em, ${t.sizes.minTarget}))` },\n weekday: {\n paddingBlock: '_xs',\n paddingInline: 0,\n color: '_textMuted',\n fontWeight: '_normal',\n textAlign: 'center',\n },\n weekNumber: {\n paddingInlineEnd: '_xs',\n color: '_textMuted',\n fontWeight: '_normal',\n textAlign: 'center',\n },\n cell: { padding: 0, textAlign: 'center' },\n // 区间的底色画在 td 上,相邻的格连成一条;两端与每行的首尾是圆的\n inRange: {\n backgroundColor: '_accentSoft',\n borderStartStartRadius: { default: 0, ':first-of-type': '_md' },\n borderEndStartRadius: { default: 0, ':first-of-type': '_md' },\n borderStartEndRadius: { default: 0, ':last-of-type': '_md' },\n borderEndEndRadius: { default: 0, ':last-of-type': '_md' },\n },\n rangeStart: { borderStartStartRadius: '_md', borderEndStartRadius: '_md' },\n rangeEnd: { borderStartEndRadius: '_md', borderEndEndRadius: '_md' },\n button: {\n display: 'inline-flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n width: `max(2.25em, ${t.sizes.minTarget})`,\n height: `max(2.25em, ${t.sizes.minTarget})`,\n borderRadius: '_md',\n fontVariantNumeric: 'tabular-nums',\n backgroundColor: { default: 'transparent', ':hover': '_fillHover' },\n },\n periodButton: { width: '_full', height: `max(3em, ${t.sizes.minTarget})` },\n outside: { color: '_textMuted' },\n today: {\n fontWeight: '_semibold',\n boxShadow: `inset 0 0 0 ${t.borderWidths.xs} ${t.colors.accentBorder}`,\n },\n selected: {\n backgroundColor: { default: '_accent', ':hover': '_accentHover' },\n color: '_accentContrast',\n boxShadow: 'none',\n },\n // 区间中间的格:按钮透明,底色是 td 的那一条\n middle: {\n backgroundColor: { default: 'transparent', ':hover': '_accentSoftHover' },\n color: '_accentText',\n },\n unavailable: { color: '_textMuted', textDecorationLine: 'line-through' },\n disabled: {\n opacity: '_disabled',\n cursor: 'not-allowed',\n backgroundColor: { default: 'transparent', ':hover': 'transparent' },\n },\n footer: { display: 'flex', flexWrap: 'wrap', alignItems: 'center', gap: '_sm' },\n});\n\n/** 网格行列:月份、年份视图一行 3 格 */\nconst chunk = <T,>(items: readonly T[], size: number) =>\n Array.from({ length: Math.ceil(items.length / size) }, (_, row) =>\n items.slice(row * size, row * size + size),\n );\n\nconst resolve = <P,>(\n props: CalendarItemProps<P> | undefined,\n date: string,\n cell: CalendarCellState,\n) =>\n typeof props === 'function'\n ? (props as (date: string, cell: CalendarCellState) => P)(date, cell)\n : props;\n\n/** 日历的界面:页头、月份网格(或月份、年份视图)、页脚 */\nexport const CalendarView = _component(\n ({\n calendar,\n firstDayOfWeek,\n size,\n showWeekNumbers = false,\n fixedWeeks = true,\n disabled = false,\n children,\n footer,\n propsHeader,\n propsPrevious,\n propsNext,\n propsHeading,\n propsMonths,\n propsGrid,\n propsWeekday,\n propsWeekNumber,\n propsCell,\n propsCellButton,\n propsFooter,\n ...rest\n }: CalendarViewProps) => {\n const format = useFormat();\n const locale = useDateLocale(() => ({ firstDayOfWeek }));\n const lang = useLang();\n const id = useId();\n const hintId = `${id}-hint`;\n let root = _state.raw<HTMLElement | null>(null);\n\n /** 键盘移动后把焦点交给新的焦点格(翻页、换视图后它是新渲染的) */\n function onKeydown(event: KeyboardEvent) {\n if (disabled || !root) return;\n if (!handleCalendarKeydown(calendar, event, isRtl(root))) return;\n event.preventDefault();\n void nextTick(() => root?.querySelector<HTMLElement>('[data-focused]')?.focus());\n }\n\n const title = (date: CalendarDate) => {\n if (calendar.view === 'day') return format.date(date, { year: 'numeric', month: 'long' });\n if (calendar.view === 'month') return format.date(date, { year: 'numeric' });\n const end = date.add({ years: 9 });\n return `${format.date(date, { year: 'numeric' })} – ${format.date(end, { year: 'numeric' })}`;\n };\n\n /**\n * 一格:td + 按钮;label 是读屏念的完整日期,content 是格子里显示的。\n * 读屏名称来自按钮里的文字而不是 aria-label:自定义内容(如房价)跟在完整日期后面一起念,\n * 名称总包含看得见的文字(中文日期里“20”不是单独的词,写成 aria-label 时对不上);\n * 默认内容只是日期数字,不重复念。kind 为 period 时是月份、年份格\n */\n function cell(\n date: CalendarDate,\n month: CalendarDate | undefined,\n label: string,\n content: VNodeChild,\n kind: 'day' | 'custom' | 'period' = 'day',\n ) {\n const period = kind === 'period';\n const state = calendar.cell(date, month);\n const iso = locale.toIso(date);\n const off = disabled || state.disabled;\n const range = calendar.mode === 'range';\n const ends = range && (state.rangeStart || state.rangeEnd);\n const marked = range ? ends : state.selected;\n return (\n <td\n key={iso}\n {...mergeAttrs<'td'>(\n {\n sx: [\n calendarStyles.cell,\n state.inRange && calendarStyles.inRange,\n state.rangeStart && calendarStyles.rangeStart,\n state.rangeEnd && calendarStyles.rangeEnd,\n ],\n },\n resolve(propsCell, iso, state),\n {\n role: 'gridcell',\n 'aria-selected': state.selected,\n 'aria-disabled': off || undefined,\n ...dataAttrs({ 'data-in-range': state.inRange || undefined }),\n },\n )}\n >\n <button\n {...mergeAttrs<'button'>(\n {\n sx: [\n buttonBaseStyles.root,\n interactionTransitions.colors,\n calendarStyles.button,\n period && calendarStyles.periodButton,\n focusRingStyles.tight,\n state.outside && calendarStyles.outside,\n state.today && calendarStyles.today,\n state.unavailable && calendarStyles.unavailable,\n state.inRange && !ends && calendarStyles.middle,\n marked && calendarStyles.selected,\n off && calendarStyles.disabled,\n ],\n 'aria-describedby': calendar.anchor ? hintId : undefined,\n },\n resolve(propsCellButton, iso, state),\n {\n type: 'button',\n tabindex: state.focused && !state.outside ? 0 : -1,\n 'aria-disabled': off || undefined,\n onClick: () => {\n if (!off) calendar.activate(date);\n },\n // 点击、程序聚焦到别的格子时,键盘从这一格接着走\n onFocus: () => {\n if (!state.focused) calendar.focus(date);\n },\n onPointerenter: () => calendar.hover(date),\n // 写在受管层而不是 JSX 上:元素上只有一处展开,不用再经 Vue 的 mergeProps(每页几百格)\n ...dataAttrs({\n 'data-date': iso,\n 'data-focused': (state.focused && !state.outside) || undefined,\n 'data-selected': state.selected || undefined,\n 'data-today': state.today || undefined,\n 'data-outside': state.outside || undefined,\n 'data-unavailable': state.unavailable || undefined,\n 'data-disabled': off || undefined,\n }),\n },\n )}\n >\n {/* 每格一个:直接用样式,不多建几百个组件实例 */}\n <span {...css.attrs(visuallyHiddenStyles.hidden)}>\n {state.today ? lang.calendarToday(label) : label}\n </span>\n {kind === 'custom' ? content : <span aria-hidden=\"true\">{content}</span>}\n </button>\n </td>\n );\n }\n\n const gridAttrs = (label: string) =>\n mergeAttrs<'table'>(\n {\n sx: [calendarStyles.grid, calendar.view !== 'day' && calendarStyles.periodGrid],\n },\n propsGrid,\n {\n 'aria-label': label,\n role: 'grid',\n 'aria-multiselectable': calendar.mode !== 'single' || undefined,\n onKeydown,\n onPointerleave: () => calendar.hover(null),\n },\n );\n\n function dayGrid(month: CalendarDate, single: boolean) {\n const weeks = monthGrid(month, { ...locale.week, fixedWeeks });\n const names = weekdayNames(locale.locale, {\n firstDayOfWeek: locale.week.firstDayOfWeek,\n format: 'narrow',\n });\n const longNames = weekdayNames(locale.locale, {\n firstDayOfWeek: locale.week.firstDayOfWeek,\n format: 'long',\n });\n return (\n <table {...gridAttrs(title(month))}>\n <thead aria-hidden=\"true\">\n <tr>\n {showWeekNumbers && (\n <th\n {...mergeAttrs<'th'>({ sx: calendarStyles.weekNumber }, propsWeekNumber, {\n scope: 'col',\n })}\n >\n {lang.calendarWeek}\n </th>\n )}\n {names.map((name, index) => (\n <th\n key={index}\n {...mergeAttrs<'th'>(\n { sx: calendarStyles.weekday, title: longNames[index] },\n propsWeekday,\n {\n scope: 'col',\n },\n )}\n >\n {name}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {weeks.map((week) => (\n <tr key={week[0]!.toString()}>\n {showWeekNumbers && (\n <th\n {...mergeAttrs<'th'>({ sx: calendarStyles.weekNumber }, propsWeekNumber, {\n 'aria-label': lang.calendarWeekNumber(weekOfYear(week[0]!, locale.week)),\n scope: 'row',\n })}\n >\n {weekOfYear(week[0]!, locale.week)}\n </th>\n )}\n {week.map((date) => {\n const outside = date.month !== month.month;\n // 并排几个月时补齐的日期留空:同一天不在两张网格里重复出现\n if (outside && !single)\n return <td key={date.toString()} {...css.attrs(calendarStyles.cell)} />;\n return cell(\n date,\n month,\n format.date(date, { dateStyle: 'full' }),\n children\n ? children(locale.toIso(date), calendar.cell(date, month))\n : locale.dayNumber(date),\n children ? 'custom' : 'day',\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n );\n }\n\n function periodGrid() {\n const page = calendar.page;\n const month = calendar.view === 'month';\n const items = month ? monthsOfYear(page) : yearsOfDecade(page);\n return (\n <table {...gridAttrs(title(page))}>\n <tbody>\n {chunk(items, 3).map((row) => (\n <tr key={row[0]!.toString()}>\n {row.map((date) =>\n cell(\n date,\n undefined,\n month\n ? format.date(date, { year: 'numeric', month: 'long' })\n : format.date(date, { year: 'numeric' }),\n month\n ? format.date(date, { month: 'short' })\n : format.date(date, { year: 'numeric' }),\n 'period',\n ),\n )}\n </tr>\n ))}\n </tbody>\n </table>\n );\n }\n\n return () => {\n const view = calendar.view;\n const months = calendar.months;\n const coarser = view === 'day' ? 'month' : view === 'month' ? 'year' : undefined;\n const [previousLabel, nextLabel] =\n view === 'day'\n ? [lang.calendarPreviousMonth, lang.calendarNextMonth]\n : view === 'month'\n ? [lang.calendarPreviousYear, lang.calendarNextYear]\n : [lang.calendarPreviousDecade, lang.calendarNextDecade];\n const previous = (\n <IconButton\n {...mergePartProps<IconButtonProps>(\n { icon: ChevronLeft, 'aria-label': previousLabel, propsIcon: { flipInRtl: true } },\n propsPrevious,\n {\n disabled: disabled || !calendar.canTurnPage(-1),\n onClick: () => calendar.turnPage(-1),\n },\n )}\n />\n );\n const next = (\n <IconButton\n {...mergePartProps<IconButtonProps>(\n { icon: ChevronRight, 'aria-label': nextLabel, propsIcon: { flipInRtl: true } },\n propsNext,\n { disabled: disabled || !calendar.canTurnPage(1), onClick: () => calendar.turnPage(1) },\n )}\n />\n );\n const spacer = <span {...css.attrs(calendarStyles.spacer)} />;\n return (\n <div\n {...mergeAttrs<'div'>({ sx: [calendarStyles.root, size && fontSizeStyles[size]] }, rest, {\n ref: _toRef(root),\n role: 'group',\n })}\n data-view={view}\n data-disabled={disabled || undefined}\n >\n <div {...mergeAttrs<'div'>({ sx: calendarStyles.months }, propsMonths)}>\n {months.map((month, index) => {\n const label = title(month);\n return (\n <div key={month.toString()} {...css.attrs(calendarStyles.month)}>\n <div {...mergeAttrs<'div'>({ sx: calendarStyles.header }, propsHeader)}>\n {index === 0 ? previous : spacer}\n {coarser && !disabled ? (\n <button\n {...mergeAttrs<'button'>(\n {\n sx: [\n buttonBaseStyles.root,\n interactionTransitions.colors,\n calendarStyles.heading,\n focusRingStyles.visible,\n ],\n },\n propsHeading,\n {\n 'aria-label':\n coarser === 'month'\n ? lang.calendarChooseMonth(label)\n : lang.calendarChooseYear(label),\n type: 'button',\n onClick: () => calendar.setView(coarser),\n },\n )}\n >\n {label}\n </button>\n ) : (\n // 已经是最粗的视图(或不可用):标题只是文字\n <span {...css.attrs(calendarStyles.heading, calendarStyles.headingStatic)}>\n {label}\n </span>\n )}\n {index === months.length - 1 ? next : spacer}\n </div>\n {view === 'day' ? dayGrid(month, months.length === 1) : periodGrid()}\n </div>\n );\n })}\n </div>\n {/* 翻页、换视图时播报新的标题;不放在标题按钮上,免得聚焦按钮时重复念 */}\n <VisuallyHidden aria-live=\"polite\">{months.map(title).join(',')}</VisuallyHidden>\n {calendar.anchor && <VisuallyHidden id={hintId}>{lang.calendarPickEnd}</VisuallyHidden>}\n {hasContent(footer) && (\n <div {...mergeAttrs<'div'>({ sx: calendarStyles.footer }, propsFooter)}>{footer}</div>\n )}\n </div>\n );\n };\n },\n);\n"],"mappings":"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"}
1
+ {"version":3,"file":"CalendarView.js","names":["_isVNode","_vtp_readonlyProp","_vtp_childrenProp","_vtp_restProps","_vue_shallowRef","_createVNode","_mergeProps"],"sources":["../../src/date/CalendarView.tsx"],"sourcesContent":["/**\n * 日历的界面(WAI-ARIA 的日期网格):页头(上一页、标题、下一页)、并排的月份网格、月份视图与年份视图、页脚。\n * 状态由调用方的 useCalendarState 给(同 ListboxView 与 useListState 的分工):Calendar、RangeCalendar、各种日期选择器共用。\n *\n * const calendar = useCalendarState({ … });\n * <CalendarView calendar={calendar} showWeekNumbers>{(date, cell) => …}</CalendarView>\n *\n * - 每个月一张 table role=\"grid\",日期格是 td role=\"gridcell\"(aria-selected)里的按钮;焦点日期那一格 tabindex=0,\n * 键盘移动后焦点跟过去(handleCalendarKeydown);读屏念的完整日期(今天、星期)由 Intl 生成;\n * - 标题按钮切到月份视图、再切到年份视图(不比选择的粒度更细);翻页时用 aria-live 播报新的月份;\n * - 并排几个月时只显示本月的日期(补齐的上下月留空,不重复出现);只有一个月时补齐的日期变淡、可以点。\n *\n * 部件:Root、Header、Previous、Next(IconButton)、Heading(标题按钮)、Months(并排的月份)、Grid(table)、\n * Weekday(星期表头)、WeekNumber(周数)、Cell(td)、CellButton(日期 / 月份 / 年份按钮)、Footer。\n */\nimport { ChevronLeft, ChevronRight } from '@lucide/icons';\nimport { _component } from '@zerodep-dev/vue-tsx-pro-tsx';\nimport { css } from '@zerodep-dev/vue-tsx-pro-tsx/styles';\nimport { nextTick, useId, type VNodeChild } from 'vue';\nimport { buttonBaseStyles } from '../base/button-core';\nimport { IconButton, type IconButtonProps } from '../base/IconButton';\nimport { VisuallyHidden, visuallyHiddenStyles } from '../base/VisuallyHidden';\nimport { useFormat } from '../config/lang/format';\nimport {\n monthGrid,\n monthsOfYear,\n weekdayNames,\n weekOfYear,\n yearsOfDecade,\n} from '../utils/data/date';\nimport { isRtl } from '../utils/dom/direction';\nimport { hasContent, dataAttrs, mergeAttrs, mergePartProps, type PartProps } from '../utils/props';\nimport { focusRingStyles } from '../utils/style/styles';\nimport { interactionTransitions } from '../utils/style/transitions';\nimport { fontSizeStyles, type TextSize } from '../utils/style/typography';\nimport {\n handleCalendarKeydown,\n type CalendarCellState,\n type CalendarState,\n} from './calendar-state';\nimport { useDateLocale } from './date-locale';\nimport { useLang } from '../config/context';\nimport type { CalendarDate } from '@internationalized/date';\nimport { t } from '../config/theme/tokens';\n\n/** 角色由组件管理 */\nexport type CalendarViewManaged = 'role';\n\n/** 按项给的部件属性:固定的对象,或按这一格的日期(ISO)与状态返回 */\nexport type CalendarItemProps<P> = P | ((date: string, cell: CalendarCellState) => P);\n\n/** 日历界面的外观与内容选项:Calendar、RangeCalendar、日期选择器原样转交 */\nexport interface CalendarViewOptions {\n /** 字号档位,格子随之缩放;不写时继承上下文字号 */\n size?: TextSize;\n /** 在每行前显示一年里的第几周 */\n showWeekNumbers?: boolean;\n /** 总是 6 行(翻页时高度不跳),默认 true */\n fixedWeeks?: boolean;\n /** 不可用:不能翻页、不能选 */\n disabled?: boolean;\n /**\n * 自定义日期格的内容(价格、标记点):拿到日期(ISO)与这一格的状态;不写时是日期数字。\n * 读屏先念完整日期再念这里的文字:日期数字这类重复的部分可以加 aria-hidden\n */\n children?: (date: string, cell: CalendarCellState) => VNodeChild;\n /** 页脚:今天、清除这类按钮 */\n footer?: VNodeChild;\n /** 页头的部件属性 */\n propsHeader?: PartProps<'div'>;\n /** 上一页按钮的部件属性 */\n propsPrevious?: Omit<Partial<IconButtonProps>, 'disabled' | 'onClick'>;\n /** 下一页按钮的部件属性 */\n propsNext?: Omit<Partial<IconButtonProps>, 'disabled' | 'onClick'>;\n /** 标题按钮的部件属性 */\n propsHeading?: PartProps<'button', 'type' | 'aria-label'>;\n /** 并排月份那一层的部件属性 */\n propsMonths?: PartProps<'div'>;\n /** 每张网格(table)的部件属性 */\n propsGrid?: PartProps<'table', 'role' | 'aria-label' | 'aria-multiselectable'>;\n /** 星期表头的部件属性 */\n propsWeekday?: PartProps<'th', 'scope'>;\n /** 周数的部件属性 */\n propsWeekNumber?: PartProps<'th', 'scope' | 'aria-label'>;\n /** 每格(td)的部件属性 */\n propsCell?: CalendarItemProps<PartProps<'td', 'role' | 'aria-selected' | 'aria-disabled'>>;\n /** 每格里按钮的部件属性 */\n propsCellButton?: CalendarItemProps<\n PartProps<'button', 'type' | 'tabindex' | 'disabled' | 'aria-label' | 'aria-disabled'>\n >;\n /** 页脚的部件属性 */\n propsFooter?: PartProps<'div'>;\n}\n\n/** 未声明的属性落到根元素上(aria-label 等) */\nexport interface CalendarViewProps\n extends PartProps<'div', CalendarViewManaged>, CalendarViewOptions {\n /** 日历状态(useCalendarState) */\n calendar: CalendarState;\n /** 一周的第一天(0 表示周日),与 useCalendarState 的 week 一致;不写时取语言配置 */\n firstDayOfWeek?: number;\n}\n\n/** CalendarView 的样式:root、months、month、header、heading、grid、weekday、cell、button 等 */\nexport const calendarStyles = css.create({\n root: {\n display: 'inline-flex',\n flexDirection: 'column',\n gap: '_sm',\n color: '_text',\n lineHeight: '_normal',\n userSelect: 'none',\n },\n months: { display: 'flex', flexWrap: 'wrap', alignItems: 'flex-start', gap: '_xl' },\n month: { display: 'flex', flexDirection: 'column', gap: '_xs' },\n header: {\n display: 'grid',\n gridTemplateColumns: `max(${t.sizes.control}, ${t.sizes.minTarget}) 1fr max(${t.sizes.control}, ${t.sizes.minTarget})`,\n alignItems: 'center',\n gap: '_xs',\n },\n // 占住按钮的位置:并排几个月时中间的月没有翻页按钮,标题仍居中\n spacer: { width: `max(${t.sizes.control}, ${t.sizes.minTarget})` },\n heading: {\n display: 'inline-flex',\n alignItems: 'center',\n justifySelf: 'center',\n minHeight: `max(${t.sizes.control}, ${t.sizes.minTarget})`,\n paddingInline: '_sm',\n borderRadius: '_md',\n fontWeight: '_semibold',\n backgroundColor: { default: 'transparent', ':hover': '_fillHover' },\n },\n headingStatic: {\n cursor: 'default',\n backgroundColor: { default: 'transparent', ':hover': 'transparent' },\n },\n grid: { borderCollapse: 'collapse', borderSpacing: 0 },\n // 月份、年份视图:一行 3 格,与日期网格同宽\n periodGrid: { width: `calc(7 * max(2.25em, ${t.sizes.minTarget}))` },\n weekday: {\n paddingBlock: '_xs',\n paddingInline: 0,\n color: '_textMuted',\n fontWeight: '_normal',\n textAlign: 'center',\n },\n weekNumber: {\n paddingInlineEnd: '_xs',\n color: '_textMuted',\n fontWeight: '_normal',\n textAlign: 'center',\n },\n cell: { padding: 0, textAlign: 'center' },\n // 区间的底色画在 td 上,相邻的格连成一条;两端与每行的首尾是圆的\n inRange: {\n backgroundColor: '_accentSoft',\n borderStartStartRadius: { default: 0, ':first-of-type': '_md' },\n borderEndStartRadius: { default: 0, ':first-of-type': '_md' },\n borderStartEndRadius: { default: 0, ':last-of-type': '_md' },\n borderEndEndRadius: { default: 0, ':last-of-type': '_md' },\n },\n rangeStart: { borderStartStartRadius: '_md', borderEndStartRadius: '_md' },\n rangeEnd: { borderStartEndRadius: '_md', borderEndEndRadius: '_md' },\n button: {\n display: 'inline-flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n width: `max(2.25em, ${t.sizes.minTarget})`,\n height: `max(2.25em, ${t.sizes.minTarget})`,\n borderRadius: '_md',\n fontVariantNumeric: 'tabular-nums',\n backgroundColor: { default: 'transparent', ':hover': '_fillHover' },\n },\n periodButton: { width: '_full', height: `max(3em, ${t.sizes.minTarget})` },\n outside: { color: '_textMuted' },\n today: {\n fontWeight: '_semibold',\n boxShadow: `inset 0 0 0 ${t.borderWidths.xs} ${t.colors.accentBorder}`,\n },\n selected: {\n backgroundColor: { default: '_accent', ':hover': '_accentHover' },\n color: '_accentContrast',\n boxShadow: 'none',\n },\n // 区间中间的格:按钮透明,底色是 td 的那一条\n middle: {\n backgroundColor: { default: 'transparent', ':hover': '_accentSoftHover' },\n color: '_accentText',\n },\n unavailable: { color: '_textMuted', textDecorationLine: 'line-through' },\n disabled: {\n opacity: '_disabled',\n cursor: 'not-allowed',\n backgroundColor: { default: 'transparent', ':hover': 'transparent' },\n },\n footer: { display: 'flex', flexWrap: 'wrap', alignItems: 'center', gap: '_sm' },\n});\n\n/** 网格行列:月份、年份视图一行 3 格 */\nconst chunk = <T,>(items: readonly T[], size: number) =>\n Array.from({ length: Math.ceil(items.length / size) }, (_, row) =>\n items.slice(row * size, row * size + size),\n );\n\nconst resolve = <P,>(\n props: CalendarItemProps<P> | undefined,\n date: string,\n cell: CalendarCellState,\n) =>\n typeof props === 'function'\n ? (props as (date: string, cell: CalendarCellState) => P)(date, cell)\n : props;\n\n/** 日历的界面:页头、月份网格(或月份、年份视图)、页脚 */\nexport const CalendarView = _component(\n ({\n calendar,\n firstDayOfWeek,\n size,\n showWeekNumbers = false,\n fixedWeeks = true,\n disabled = false,\n children,\n footer,\n propsHeader,\n propsPrevious,\n propsNext,\n propsHeading,\n propsMonths,\n propsGrid,\n propsWeekday,\n propsWeekNumber,\n propsCell,\n propsCellButton,\n propsFooter,\n ...rest\n }: CalendarViewProps) => {\n const format = useFormat();\n const locale = useDateLocale(() => ({ firstDayOfWeek }));\n const lang = useLang();\n const id = useId();\n const hintId = `${id}-hint`;\n let root = _state.raw<HTMLElement | null>(null);\n\n /** 键盘移动后把焦点交给新的焦点格(翻页、换视图后它是新渲染的) */\n function onKeydown(event: KeyboardEvent) {\n if (disabled || !root) return;\n if (!handleCalendarKeydown(calendar, event, isRtl(root))) return;\n event.preventDefault();\n void nextTick(() => root?.querySelector<HTMLElement>('[data-focused]')?.focus());\n }\n\n const title = (date: CalendarDate) => {\n if (calendar.view === 'day') return format.date(date, { year: 'numeric', month: 'long' });\n if (calendar.view === 'month') return format.date(date, { year: 'numeric' });\n const end = date.add({ years: 9 });\n return `${format.date(date, { year: 'numeric' })} – ${format.date(end, { year: 'numeric' })}`;\n };\n\n /**\n * 一格:td + 按钮;label 是读屏念的完整日期,content 是格子里显示的。\n * 读屏名称来自按钮里的文字而不是 aria-label:自定义内容(如房价)跟在完整日期后面一起念,\n * 名称总包含看得见的文字(中文日期里“20”不是单独的词,写成 aria-label 时对不上);\n * 默认内容只是日期数字,不重复念。kind 为 period 时是月份、年份格\n */\n function cell(\n date: CalendarDate,\n month: CalendarDate | undefined,\n label: string,\n content: VNodeChild,\n kind: 'day' | 'custom' | 'period' = 'day',\n ) {\n const period = kind === 'period';\n const state = calendar.cell(date, month);\n const iso = locale.toIso(date);\n const off = disabled || state.disabled;\n const range = calendar.mode === 'range';\n const ends = range && (state.rangeStart || state.rangeEnd);\n const marked = range ? ends : state.selected;\n return (\n <td\n key={iso}\n {...mergeAttrs<'td'>(\n {\n sx: [\n calendarStyles.cell,\n state.inRange && calendarStyles.inRange,\n state.rangeStart && calendarStyles.rangeStart,\n state.rangeEnd && calendarStyles.rangeEnd,\n ],\n },\n resolve(propsCell, iso, state),\n {\n role: 'gridcell',\n 'aria-selected': state.selected,\n 'aria-disabled': off || undefined,\n ...dataAttrs({ 'data-in-range': state.inRange || undefined }),\n },\n )}\n >\n <button\n {...mergeAttrs<'button'>(\n {\n sx: [\n buttonBaseStyles.root,\n interactionTransitions.colors,\n calendarStyles.button,\n period && calendarStyles.periodButton,\n focusRingStyles.tight,\n state.outside && calendarStyles.outside,\n state.today && calendarStyles.today,\n state.unavailable && calendarStyles.unavailable,\n state.inRange && !ends && calendarStyles.middle,\n marked && calendarStyles.selected,\n off && calendarStyles.disabled,\n ],\n 'aria-describedby': calendar.anchor ? hintId : undefined,\n },\n resolve(propsCellButton, iso, state),\n {\n type: 'button',\n tabindex: state.focused && !state.outside ? 0 : -1,\n 'aria-disabled': off || undefined,\n onClick: () => {\n if (!off) calendar.activate(date);\n },\n // 点击、程序聚焦到别的格子时,键盘从这一格接着走\n onFocus: () => {\n if (!state.focused) calendar.focus(date);\n },\n onPointerenter: () => calendar.hover(date),\n // 写在受管层而不是 JSX 上:元素上只有一处展开,不用再经 Vue 的 mergeProps(每页几百格)\n ...dataAttrs({\n 'data-date': iso,\n 'data-focused': (state.focused && !state.outside) || undefined,\n 'data-selected': state.selected || undefined,\n 'data-today': state.today || undefined,\n 'data-outside': state.outside || undefined,\n 'data-unavailable': state.unavailable || undefined,\n 'data-disabled': off || undefined,\n }),\n },\n )}\n >\n {/* 每格一个:直接用样式,不多建几百个组件实例 */}\n <span {...css.attrs(visuallyHiddenStyles.hidden)}>\n {state.today ? lang.calendarToday(label) : label}\n </span>\n {kind === 'custom' ? content : <span aria-hidden=\"true\">{content}</span>}\n </button>\n </td>\n );\n }\n\n const gridAttrs = (label: string) =>\n mergeAttrs<'table'>(\n {\n sx: [calendarStyles.grid, calendar.view !== 'day' && calendarStyles.periodGrid],\n },\n propsGrid,\n {\n 'aria-label': label,\n role: 'grid',\n 'aria-multiselectable': calendar.mode !== 'single' || undefined,\n onKeydown,\n onPointerleave: () => calendar.hover(null),\n },\n );\n\n function dayGrid(month: CalendarDate, single: boolean) {\n const weeks = monthGrid(month, { ...locale.week, fixedWeeks });\n const names = weekdayNames(locale.locale, {\n firstDayOfWeek: locale.week.firstDayOfWeek,\n format: 'narrow',\n });\n const longNames = weekdayNames(locale.locale, {\n firstDayOfWeek: locale.week.firstDayOfWeek,\n format: 'long',\n });\n return (\n <table {...gridAttrs(title(month))}>\n <thead aria-hidden=\"true\">\n <tr>\n {showWeekNumbers && (\n <th\n {...mergeAttrs<'th'>({ sx: calendarStyles.weekNumber }, propsWeekNumber, {\n scope: 'col',\n })}\n >\n {lang.calendarWeek}\n </th>\n )}\n {names.map((name, index) => (\n <th\n key={index}\n {...mergeAttrs<'th'>(\n { sx: calendarStyles.weekday, title: longNames[index] },\n propsWeekday,\n {\n scope: 'col',\n },\n )}\n >\n {name}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {weeks.map((week) => (\n <tr key={week[0]!.toString()}>\n {showWeekNumbers && (\n <th\n {...mergeAttrs<'th'>({ sx: calendarStyles.weekNumber }, propsWeekNumber, {\n 'aria-label': lang.calendarWeekNumber(weekOfYear(week[0]!, locale.week)),\n scope: 'row',\n })}\n >\n {weekOfYear(week[0]!, locale.week)}\n </th>\n )}\n {week.map((date) => {\n const outside = date.month !== month.month;\n // 并排几个月时补齐的日期留空:同一天不在两张网格里重复出现\n if (outside && !single)\n return <td key={date.toString()} {...css.attrs(calendarStyles.cell)} />;\n return cell(\n date,\n month,\n format.date(date, { dateStyle: 'full' }),\n children\n ? children(locale.toIso(date), calendar.cell(date, month))\n : locale.dayNumber(date),\n children ? 'custom' : 'day',\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n );\n }\n\n function periodGrid() {\n const page = calendar.page;\n const month = calendar.view === 'month';\n const items = month ? monthsOfYear(page) : yearsOfDecade(page);\n return (\n <table {...gridAttrs(title(page))}>\n <tbody>\n {chunk(items, 3).map((row) => (\n <tr key={row[0]!.toString()}>\n {row.map((date) =>\n cell(\n date,\n undefined,\n month\n ? format.date(date, { year: 'numeric', month: 'long' })\n : format.date(date, { year: 'numeric' }),\n month\n ? format.date(date, { month: 'short' })\n : format.date(date, { year: 'numeric' }),\n 'period',\n ),\n )}\n </tr>\n ))}\n </tbody>\n </table>\n );\n }\n\n return () => {\n const view = calendar.view;\n const months = calendar.months;\n const coarser = view === 'day' ? 'month' : view === 'month' ? 'year' : undefined;\n const [previousLabel, nextLabel] =\n view === 'day'\n ? [lang.calendarPreviousMonth, lang.calendarNextMonth]\n : view === 'month'\n ? [lang.calendarPreviousYear, lang.calendarNextYear]\n : [lang.calendarPreviousDecade, lang.calendarNextDecade];\n const previous = (\n <IconButton\n {...mergePartProps<IconButtonProps>(\n { icon: ChevronLeft, 'aria-label': previousLabel, propsIcon: { flipInRtl: true } },\n propsPrevious,\n {\n disabled: disabled || !calendar.canTurnPage(-1),\n onClick: () => calendar.turnPage(-1),\n },\n )}\n />\n );\n const next = (\n <IconButton\n {...mergePartProps<IconButtonProps>(\n { icon: ChevronRight, 'aria-label': nextLabel, propsIcon: { flipInRtl: true } },\n propsNext,\n { disabled: disabled || !calendar.canTurnPage(1), onClick: () => calendar.turnPage(1) },\n )}\n />\n );\n const spacer = <span {...css.attrs(calendarStyles.spacer)} />;\n return (\n <div\n {...mergeAttrs<'div'>({ sx: [calendarStyles.root, size && fontSizeStyles[size]] }, rest, {\n ref: _toRef(root),\n role: 'group',\n })}\n data-view={view}\n data-disabled={disabled || undefined}\n >\n <div {...mergeAttrs<'div'>({ sx: calendarStyles.months }, propsMonths)}>\n {months.map((month, index) => {\n const label = title(month);\n return (\n <div key={month.toString()} {...css.attrs(calendarStyles.month)}>\n <div {...mergeAttrs<'div'>({ sx: calendarStyles.header }, propsHeader)}>\n {index === 0 ? previous : spacer}\n {coarser && !disabled ? (\n <button\n {...mergeAttrs<'button'>(\n {\n sx: [\n buttonBaseStyles.root,\n interactionTransitions.colors,\n calendarStyles.heading,\n focusRingStyles.visible,\n ],\n },\n propsHeading,\n {\n 'aria-label':\n coarser === 'month'\n ? lang.calendarChooseMonth(label)\n : lang.calendarChooseYear(label),\n type: 'button',\n onClick: () => calendar.setView(coarser),\n },\n )}\n >\n {label}\n </button>\n ) : (\n // 已经是最粗的视图(或不可用):标题只是文字\n <span {...css.attrs(calendarStyles.heading, calendarStyles.headingStatic)}>\n {label}\n </span>\n )}\n {index === months.length - 1 ? next : spacer}\n </div>\n {view === 'day' ? dayGrid(month, months.length === 1) : periodGrid()}\n </div>\n );\n })}\n </div>\n {/* 翻页、换视图时播报新的标题;不放在标题按钮上,免得聚焦按钮时重复念 */}\n <VisuallyHidden aria-live=\"polite\">{months.map(title).join(',')}</VisuallyHidden>\n {calendar.anchor && <VisuallyHidden id={hintId}>{lang.calendarPickEnd}</VisuallyHidden>}\n {hasContent(footer) && (\n <div {...mergeAttrs<'div'>({ sx: calendarStyles.footer }, propsFooter)}>{footer}</div>\n )}\n </div>\n );\n };\n },\n);\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import * as css from '@zerodep-dev/vue-tsx-pro-tsx/styles';
1
+ import { css } from '@zerodep-dev/vue-tsx-pro-tsx/styles';
2
2
  import { type VNodeChild } from 'vue';
3
3
  import { type PartProps } from '../utils/props';
4
4
  import type { DateTimeInput } from './DateTime';
@@ -5,7 +5,7 @@ import { useFormat } from "../config/lang/format.js";
5
5
  import { useNow } from "./clock.js";
6
6
  import { computed, createVNode, watch } from "vue";
7
7
  import { _component, childrenProp, readonlyProp, restProps } from "@zerodep-dev/vue-tsx-pro-tsx";
8
- import * as css from "@zerodep-dev/vue-tsx-pro-tsx/styles";
8
+ import { css } from "@zerodep-dev/vue-tsx-pro-tsx/styles";
9
9
  //#region src/date/Countdown.tsx
10
10
  /** 还剩多久,拆成天、时、分、秒 */
11
11
  /** 更新与显示的精度 */