@xihan-ui/styles 3.0.0 → 3.2.0

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 (221) hide show
  1. package/CHANGELOG.md +63 -0
  2. package/README.md +1 -1
  3. package/component-tokens.d.ts +29 -0
  4. package/components.tokens.json +683 -27
  5. package/css/alert.css +2 -2
  6. package/css/approval.css +4 -4
  7. package/css/button.css +9 -5
  8. package/css/calendar-picker.css +3 -3
  9. package/css/calendar-range-picker.css +7 -7
  10. package/css/carousel.css +45 -13
  11. package/css/cartesian-chart.css +11 -11
  12. package/css/cascader.css +10 -10
  13. package/css/citation.css +2 -2
  14. package/css/code-view.css +6 -6
  15. package/css/color-picker.css +81 -0
  16. package/css/color-swatch-picker.css +9 -4
  17. package/css/combobox.css +12 -4
  18. package/css/command.css +1 -1
  19. package/css/date-field.css +39 -0
  20. package/css/date-picker.css +86 -9
  21. package/css/date-range-picker.css +47 -7
  22. package/css/diff-view.css +8 -8
  23. package/css/field-array.css +1 -1
  24. package/css/field.css +4 -0
  25. package/css/file-upload.css +1 -1
  26. package/css/float-button.css +140 -27
  27. package/css/form.css +14 -6
  28. package/css/graph-chart.css +2 -2
  29. package/css/highlight.css +1 -1
  30. package/css/image.css +1 -1
  31. package/css/mention.css +1 -1
  32. package/css/message-feed.css +1 -1
  33. package/css/notification.css +26 -20
  34. package/css/number-field.css +18 -18
  35. package/css/page-header.css +2 -2
  36. package/css/password-input.css +2 -2
  37. package/css/popconfirm.css +3 -3
  38. package/css/question-flow.css +8 -8
  39. package/css/radar-chart.css +6 -6
  40. package/css/rating.css +1 -1
  41. package/css/select.css +2 -2
  42. package/css/separator.css +2 -2
  43. package/css/side-nav.css +13 -13
  44. package/css/skeleton.css +5 -5
  45. package/css/slider.css +6 -6
  46. package/css/sortable.css +2 -2
  47. package/css/table.css +19 -2
  48. package/css/tags-input.css +1 -1
  49. package/css/time-picker.css +59 -2
  50. package/css/tool-call.css +7 -7
  51. package/css/tooltip.css +1 -1
  52. package/css/tree-select.css +2 -2
  53. package/css/tree.css +81 -11
  54. package/dist/css/accordion.css +269 -0
  55. package/dist/css/affix.css +47 -0
  56. package/dist/css/alert.css +247 -0
  57. package/dist/css/anchor.css +252 -0
  58. package/dist/css/approval.css +501 -0
  59. package/dist/css/avatar-group.css +99 -0
  60. package/dist/css/avatar.css +98 -0
  61. package/dist/css/back-top.css +161 -0
  62. package/dist/css/badge.css +205 -0
  63. package/dist/css/bar-code.css +62 -0
  64. package/dist/css/breadcrumb.css +230 -0
  65. package/dist/css/button-group.css +263 -0
  66. package/dist/css/button.css +219 -0
  67. package/dist/css/calendar-picker.css +467 -0
  68. package/dist/css/calendar-range-picker.css +554 -0
  69. package/dist/css/card.css +221 -0
  70. package/dist/css/carousel.css +710 -0
  71. package/dist/css/cartesian-chart.css +830 -0
  72. package/dist/css/cascader.css +961 -0
  73. package/dist/css/checkbox-group.css +358 -0
  74. package/dist/css/checkbox.css +257 -0
  75. package/dist/css/citation.css +470 -0
  76. package/dist/css/clipboard.css +315 -0
  77. package/dist/css/code-view.css +374 -0
  78. package/dist/css/collapsible.css +185 -0
  79. package/dist/css/color-field.css +176 -0
  80. package/dist/css/color-picker.css +595 -0
  81. package/dist/css/color-slider.css +281 -0
  82. package/dist/css/color-swatch-picker.css +250 -0
  83. package/dist/css/color-swatch.css +35 -0
  84. package/dist/css/combobox.css +574 -0
  85. package/dist/css/command.css +399 -0
  86. package/dist/css/context-menu.css +420 -0
  87. package/dist/css/date-field.css +317 -0
  88. package/dist/css/date-picker.css +868 -0
  89. package/dist/css/date-range-picker.css +886 -0
  90. package/dist/css/description.css +67 -0
  91. package/dist/css/descriptions.css +299 -0
  92. package/dist/css/dialog.css +455 -0
  93. package/dist/css/diff-view.css +513 -0
  94. package/dist/css/download-trigger.css +151 -0
  95. package/dist/css/drawer.css +552 -0
  96. package/dist/css/editable.css +295 -0
  97. package/dist/css/empty-state.css +163 -0
  98. package/dist/css/field-array.css +226 -0
  99. package/dist/css/field.css +166 -0
  100. package/dist/css/fieldset.css +102 -0
  101. package/dist/css/file-upload.css +429 -0
  102. package/dist/css/flex.css +441 -0
  103. package/dist/css/float-button.css +569 -0
  104. package/dist/css/floating-panel.css +429 -0
  105. package/dist/css/focus.css +46 -0
  106. package/dist/css/forced-colors.css +93 -0
  107. package/dist/css/form.css +393 -0
  108. package/dist/css/funnel-chart.css +106 -0
  109. package/dist/css/graph-chart.css +205 -0
  110. package/dist/css/grid-list.css +235 -0
  111. package/dist/css/grid.css +1201 -0
  112. package/dist/css/heatmap.css +552 -0
  113. package/dist/css/hierarchy-chart.css +298 -0
  114. package/dist/css/highlight.css +41 -0
  115. package/dist/css/hover-card.css +226 -0
  116. package/dist/css/icon.css +225 -0
  117. package/dist/css/image-cropper.css +373 -0
  118. package/dist/css/image-viewer.css +538 -0
  119. package/dist/css/image.css +98 -0
  120. package/dist/css/infinite-scroll.css +77 -0
  121. package/dist/css/input-group.css +275 -0
  122. package/dist/css/json-viewer.css +379 -0
  123. package/dist/css/kbd.css +72 -0
  124. package/dist/css/label.css +78 -0
  125. package/dist/css/layers.css +7 -0
  126. package/dist/css/layout.css +372 -0
  127. package/dist/css/liquid.css +106 -0
  128. package/dist/css/list.css +152 -0
  129. package/dist/css/listbox.css +390 -0
  130. package/dist/css/loading-bar.css +141 -0
  131. package/dist/css/log.css +306 -0
  132. package/dist/css/markdown-stream.css +149 -0
  133. package/dist/css/marquee.css +378 -0
  134. package/dist/css/masonry.css +70 -0
  135. package/dist/css/matrix-code.css +67 -0
  136. package/dist/css/mention.css +393 -0
  137. package/dist/css/menu.css +364 -0
  138. package/dist/css/menubar.css +456 -0
  139. package/dist/css/message-feed.css +318 -0
  140. package/dist/css/navigation-menu.css +513 -0
  141. package/dist/css/notification.css +782 -0
  142. package/dist/css/number-animation.css +44 -0
  143. package/dist/css/number-field.css +252 -0
  144. package/dist/css/overlay-arrow.css +56 -0
  145. package/dist/css/page-header.css +184 -0
  146. package/dist/css/pagination.css +450 -0
  147. package/dist/css/password-input.css +391 -0
  148. package/dist/css/pie-chart.css +247 -0
  149. package/dist/css/pin-input.css +199 -0
  150. package/dist/css/pointer.css +36 -0
  151. package/dist/css/popconfirm.css +320 -0
  152. package/dist/css/popover.css +279 -0
  153. package/dist/css/progress.css +501 -0
  154. package/dist/css/prompt-input.css +260 -0
  155. package/dist/css/question-flow.css +553 -0
  156. package/dist/css/radar-chart.css +233 -0
  157. package/dist/css/radio-group.css +598 -0
  158. package/dist/css/rating.css +294 -0
  159. package/dist/css/reasoning.css +343 -0
  160. package/dist/css/reset.css +117 -0
  161. package/dist/css/resizable.css +242 -0
  162. package/dist/css/sankey-chart.css +174 -0
  163. package/dist/css/scroll-area.css +240 -0
  164. package/dist/css/scrollbar.css +204 -0
  165. package/dist/css/select.css +612 -0
  166. package/dist/css/separator.css +122 -0
  167. package/dist/css/side-nav.css +476 -0
  168. package/dist/css/signature-pad.css +179 -0
  169. package/dist/css/skeleton.css +161 -0
  170. package/dist/css/slider.css +374 -0
  171. package/dist/css/sortable.css +228 -0
  172. package/dist/css/sparkline.css +164 -0
  173. package/dist/css/spinner.css +236 -0
  174. package/dist/css/splitter.css +159 -0
  175. package/dist/css/statistic.css +137 -0
  176. package/dist/css/steps.css +627 -0
  177. package/dist/css/switch.css +351 -0
  178. package/dist/css/table.css +1145 -0
  179. package/dist/css/tabs.css +944 -0
  180. package/dist/css/tag-group.css +247 -0
  181. package/dist/css/tag.css +310 -0
  182. package/dist/css/tags-input.css +322 -0
  183. package/dist/css/text-field.css +197 -0
  184. package/dist/css/time-field.css +277 -0
  185. package/dist/css/time-picker.css +707 -0
  186. package/dist/css/time-range-picker.css +746 -0
  187. package/dist/css/timeline.css +423 -0
  188. package/dist/css/timer.css +123 -0
  189. package/dist/css/timestamp.css +34 -0
  190. package/dist/css/toggle-group.css +424 -0
  191. package/dist/css/toggle.css +146 -0
  192. package/dist/css/tone.css +189 -0
  193. package/dist/css/tool-call.css +429 -0
  194. package/dist/css/toolbar.css +365 -0
  195. package/dist/css/tooltip.css +218 -0
  196. package/dist/css/tour.css +439 -0
  197. package/dist/css/transfer.css +638 -0
  198. package/dist/css/tree-select.css +878 -0
  199. package/dist/css/tree.css +733 -0
  200. package/dist/css/truncate.css +108 -0
  201. package/dist/css/typography.css +472 -0
  202. package/dist/css/undefined.css +58 -0
  203. package/dist/css/virtualizer.css +166 -0
  204. package/dist/css/visually-hidden.css +20 -0
  205. package/dist/css/watermark.css +82 -0
  206. package/dist/family/action-control.css +487 -0
  207. package/dist/family/chart.css +480 -0
  208. package/dist/family/check-mark.css +94 -0
  209. package/dist/family/choice-card.css +97 -0
  210. package/dist/family/collection-item.css +764 -0
  211. package/dist/family/field-chrome.css +287 -0
  212. package/dist/family/loading-ring.css +95 -0
  213. package/dist/family/material.css +72 -0
  214. package/dist/family/menu-choice.css +56 -0
  215. package/dist/family/motion.css +363 -0
  216. package/dist/family/swatch.css +59 -0
  217. package/dist/family/tag-list.css +59 -0
  218. package/family/action-control.css +3 -12
  219. package/index.css +7307 -6759
  220. package/index.unlayered.css +7309 -6761
  221. package/package.json +165 -164
@@ -0,0 +1,260 @@
1
+ /*
2
+ * Copyright (c) 2021-Present XiHanFun and contributors.
3
+ * Licensed under the MIT License. See LICENSE in the project root for license information.
4
+ */
5
+
6
+ /* PromptInput 独立皮肤同时传递引入字段视觉盒与字段内动作;full bundle 递归去重。 */
7
+ @import '../family/field-chrome.css';
8
+ @import '../family/action-control.css';
9
+ /* 字形换身份时的淡入由 family/motion.css 提供,本皮肤 @import 它,单独引入仍成立。 */
10
+ @import '../family/motion.css';
11
+
12
+ @layer xihan.components {
13
+ /* 皮肤在场的标记:开发模式下按 scope 探一次,取不到就说明这份皮肤没被引入。 */
14
+ .xh-scope-prompt-input {
15
+ --xh-prompt-input-skin: 1;
16
+ }
17
+
18
+ /* root 就是视觉盒:描边、底色、圆角、聚焦环、悬停与禁用面由 Field Chrome 家族画在它身上(静息描边式:
19
+ canvas 底 + --xh-border-control 描边 + 无影,不用 soft,登记的例外只在 8px surface 圆角),内部 textarea
20
+ 无边框;align-items: flex-end 让按钮随输入框长高贴着底边。
21
+ 三个视觉轴都落在 root 上:形态三档由家族按 data-variant 生成,语气管用哪族颜色,尺寸管高度与字号 */
22
+ .xh-scope-prompt-input[data-part='root'] {
23
+ /* 圆角可由使用者槽切换,家族只过渡底、描边、影与环 */
24
+ transition: border-radius var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
25
+ /* 尺寸缺省档:不写 data-size 时按中档走 */
26
+ --xh-_prompt-input-h: var(--xh-control-h-md);
27
+ --xh-_prompt-input-gap: var(--xh-control-gap-md);
28
+ --xh-_prompt-input-px: var(--xh-control-px-sm);
29
+ --xh-_prompt-input-font-size: var(--xh-control-font-md);
30
+ --xh-_prompt-input-submit-px: var(--xh-control-px-md);
31
+ /* 皮肤画的兜底字形与作者塞进来的图标读同一把尺,随尺寸档一起换 */
32
+ --xh-icon-size: var(--xh-prompt-input-icon-size, var(--xh-glyph-size-md));
33
+
34
+ /* 家族桥接槽:既有使用者槽保留为第一参数,缺省落家族按 data-variant 生成的三档 */
35
+ /* 多行随内容长高,盒不定高 */
36
+ --xh-field-control-height: auto;
37
+ /* 家族的行内内衬与下面 padding 简写同值 */
38
+ --xh-field-control-padding-inline: var(--xh-prompt-input-p, var(--xh-_prompt-input-px));
39
+ --xh-field-control-gap: var(--xh-prompt-input-gap, var(--xh-_prompt-input-gap));
40
+ --xh-field-control-radius: var(--xh-prompt-input-radius, var(--xh-shape-surface));
41
+ --xh-field-bg-rest: var(--xh-prompt-input-bg, var(--xh-_field-variant-bg-rest));
42
+ --xh-field-bg-hover: var(--xh-prompt-input-bg-hover, var(--xh-_field-variant-bg-hover));
43
+ --xh-field-bg-disabled: var(--xh-prompt-input-bg-disabled, var(--xh-_field-variant-bg-disabled));
44
+ --xh-field-border-rest: var(--xh-prompt-input-border, var(--xh-_field-variant-border-rest));
45
+ --xh-field-border-hover: var(--xh-prompt-input-border-hover, var(--xh-_field-variant-border-hover));
46
+ --xh-field-border-focus: var(--xh-prompt-input-border-focus, var(--xh-_field-variant-border-focus));
47
+ --xh-field-shadow-rest: var(--xh-prompt-input-shadow, none);
48
+ /* 家族 chrome 会重写 --xh-icon-size,使用者图标槽必须经桥接槽下发才能在盒内生效 */
49
+ --xh-field-glyph-size: var(--xh-prompt-input-icon-size, var(--xh-_field-size-glyph-size));
50
+ /* 生成中(data-loading)这块框仍可打字:不压前景、不换等待光标,只有按钮换成停止身份 */
51
+ --xh-field-fg-loading: var(--xh-fg-default);
52
+ --xh-field-cursor-loading: text;
53
+
54
+ /* 整框内衬的当前值,随尺寸档与 --xh-prompt-input-p 一起变。
55
+ 附件条与动作行由作者写在 root 里、不是本组件的部件,它们靠读这一支对齐同一条内衬线 */
56
+ --xh-prompt-input-computed-px: var(--xh-prompt-input-p, var(--xh-_prompt-input-px));
57
+
58
+ display: flex;
59
+ align-items: flex-end;
60
+ /* 整框的内衬走控件内边距尺的小档,密度收紧时随之收窄 */
61
+ padding: var(--xh-prompt-input-p, var(--xh-_prompt-input-px));
62
+ }
63
+
64
+ /* 上面声明的 display 会盖掉 UA 的 [hidden]{display:none},这里补回 */
65
+ .xh-scope-prompt-input[data-part='root'][hidden] {
66
+ display: none;
67
+ }
68
+
69
+ /* 写了输入行,root 就翻成竖排:输入框与按钮收进那一行,上下两侧腾给附件条与动作行。
70
+ 不写就是单行,输入框与按钮并排——两种写法的皮肤是同一份 */
71
+ .xh-scope-prompt-input[data-part='root']:has(> .xh-scope-prompt-input[data-part='control']) {
72
+ flex-direction: column;
73
+ align-items: stretch;
74
+ }
75
+
76
+ /* —— 尺寸 —— */
77
+ .xh-scope-prompt-input[data-part='root'][data-size='sm'] {
78
+ --xh-_prompt-input-h: var(--xh-control-h-sm);
79
+ --xh-_prompt-input-gap: var(--xh-control-gap-sm);
80
+ --xh-_prompt-input-px: var(--xh-control-px-sm);
81
+ --xh-_prompt-input-font-size: var(--xh-control-font-sm);
82
+ --xh-_prompt-input-submit-px: var(--xh-control-px-sm);
83
+ --xh-icon-size: var(--xh-prompt-input-icon-size, var(--xh-glyph-size-sm));
84
+ }
85
+
86
+ .xh-scope-prompt-input[data-part='root'][data-size='md'] {
87
+ --xh-_prompt-input-h: var(--xh-control-h-md);
88
+ --xh-_prompt-input-gap: var(--xh-control-gap-md);
89
+ --xh-_prompt-input-px: var(--xh-control-px-md);
90
+ --xh-_prompt-input-font-size: var(--xh-control-font-md);
91
+ --xh-_prompt-input-submit-px: var(--xh-control-px-md);
92
+ --xh-icon-size: var(--xh-prompt-input-icon-size, var(--xh-glyph-size-md));
93
+ }
94
+
95
+ .xh-scope-prompt-input[data-part='root'][data-size='lg'] {
96
+ --xh-_prompt-input-h: var(--xh-control-h-lg);
97
+ --xh-_prompt-input-gap: var(--xh-control-gap-lg);
98
+ --xh-_prompt-input-px: var(--xh-control-px-lg);
99
+ --xh-_prompt-input-font-size: var(--xh-control-font-lg);
100
+ --xh-_prompt-input-submit-px: var(--xh-control-px-lg);
101
+ --xh-icon-size: var(--xh-prompt-input-icon-size, var(--xh-glyph-size-lg));
102
+ }
103
+
104
+ /* 输入行承接单行写法下落在 root 上的那份几何:输入框与按钮并排、按钮贴着底边。
105
+ 它自己不画底也不画描边,边界仍由 root 表达 */
106
+ .xh-scope-prompt-input[data-part='control'] {
107
+ display: flex;
108
+ align-items: flex-end;
109
+ gap: var(--xh-prompt-input-row-gap, var(--xh-_prompt-input-gap));
110
+ }
111
+
112
+ .xh-scope-prompt-input[data-part='control'][hidden] {
113
+ display: none;
114
+ }
115
+
116
+ /* 输入段透明、底由外框承担:重置、字色、占位符与自动填充由 Field Chrome 家族的 [data-xh-field-input] 给,
117
+ 组件只映射既有使用者槽。刻意不投影 data-xh-field-layout:家族 textarea 布局的 :has() 变体会压掉
118
+ root 自己的 padding 与 align-items。 */
119
+ .xh-scope-prompt-input[data-part='input'] {
120
+ --xh-field-input-fg: var(--xh-prompt-input-input-fg, var(--xh-fg-default));
121
+ --xh-field-input-font-size: var(--xh-prompt-input-input-font-size, var(--xh-_prompt-input-font-size));
122
+ --xh-field-placeholder-fg: var(--xh-prompt-input-placeholder-fg, var(--xh-fg-subtle));
123
+ /* 框的底画在 root 上,input 本身是透明分段,自动填充铺的是外框缺省那一档的实体底 */
124
+ --xh-field-autofill-bg: var(--xh-prompt-input-input-autofill-bg, var(--xh-bg-canvas));
125
+ --xh-field-autofill-fg: var(--xh-prompt-input-input-autofill-fg, var(--xh-fg-default));
126
+
127
+ /* 多行随内容长高,不撑满外框 */
128
+ block-size: auto;
129
+ /* 上下留白把单行文本盒撑到控件高度,文字中线与按钮中线对齐。
130
+ 级联兜底:先写一行的高度算式(输入框字号 × 行距),再写 1lh。
131
+ 1lh 晚于本库声明的浏览器地板,取不到时旧引擎丢掉后一条、留下前一条。
132
+ 两条取的是同一组槽——字号来自家族映射的 --xh-field-input-font-size、行距来自家族的
133
+ line-height,所以算出来是同一个数。 */
134
+ padding-block: calc((var(--xh-_prompt-input-h) - var(--xh-prompt-input-input-font-size, var(--xh-_prompt-input-font-size)) * var(--xh-leading-normal)) / 2);
135
+ padding-block: calc((var(--xh-_prompt-input-h) - 1lh) / 2);
136
+ border-radius: var(--xh-prompt-input-input-radius, var(--xh-shape-inset));
137
+ /* 高度由 field-sizing 随内容变,不支持的引擎退化为 rows 定下的固定行数;
138
+ 配套禁用 resize,避免拖拽写死的高度盖掉它。封顶行数由使用者覆盖槽给。 */
139
+ max-block-size: var(--xh-prompt-input-max-h, calc(var(--xh-leading-normal) * 1em * 8));
140
+ field-sizing: content;
141
+ resize: none;
142
+ }
143
+
144
+ /* textarea 是单体表单控件,禁用走原生 disabled */
145
+ .xh-scope-prompt-input[data-part='input']:disabled {
146
+ color: var(--xh-fg-disabled);
147
+ }
148
+
149
+ /* 发送钮是组件的主要动作,与 Button 缺省同为品牌实心:盒几何、悬停 / 按下与 0.97 按压、焦点环、禁用面
150
+ 全由 Action Control 的 text solid 档给(连接层按 loading 切成 subtle 的停止身份),组件只映射既有使用者槽。
151
+ 取 text 档而不是 icon 档:icon 档把行内尺寸钉成正方,作者放文案(「发送」)会被挤;发送钮的几何本来就是
152
+ 「至少一个控件高的方钮 + 行内内衬」,与 text 档一致 */
153
+ .xh-scope-prompt-input[data-part='submit-trigger'] {
154
+ --xh-action-visual-size: var(--xh-_prompt-input-h);
155
+ --xh-action-min-inline-size: var(--xh-_prompt-input-h);
156
+ --xh-action-padding-inline: var(--xh-prompt-input-submit-px, var(--xh-_prompt-input-submit-px));
157
+ --xh-action-radius: var(--xh-prompt-input-submit-radius, var(--xh-shape-control));
158
+ --xh-action-bg-rest: var(--xh-prompt-input-send-bg, var(--xh-_action-variant-bg-rest));
159
+ --xh-action-bg-hover: var(--xh-prompt-input-send-bg-hover, var(--xh-_action-variant-bg-hover));
160
+ --xh-action-bg-pressed: var(--xh-prompt-input-send-bg-active, var(--xh-_action-variant-bg-pressed));
161
+ --xh-action-fg-rest: var(--xh-prompt-input-send-fg, var(--xh-_action-variant-fg-rest));
162
+ --xh-action-fg-hover: var(--xh-prompt-input-send-fg, var(--xh-_action-variant-fg-hover));
163
+ --xh-action-fg-pressed: var(--xh-prompt-input-send-fg, var(--xh-_action-variant-fg-pressed));
164
+ --xh-action-border-rest: transparent;
165
+ --xh-action-highlight-rest: transparent;
166
+ /* 发送身份是实心底,顶边画一条极浅的内高光把这块面衬出厚度;三态同一支,禁用面由家族收掉 */
167
+ --xh-action-shadow-rest: var(--xh-prompt-input-submit-shadow, var(--xh-_highlight-tone));
168
+ --xh-action-shadow-hover: var(--xh-prompt-input-submit-shadow, var(--xh-_highlight-tone));
169
+ --xh-action-shadow-pressed: var(--xh-prompt-input-submit-shadow, var(--xh-_highlight-tone));
170
+ /* 输入为空时按钮转灰但不收起 */
171
+ --xh-action-bg-disabled: var(--xh-prompt-input-send-bg-off, var(--xh-bg-muted));
172
+ --xh-action-font-size: var(--xh-prompt-input-submit-font-size, var(--xh-text-label-size));
173
+ /* 面是实心的,环色与面同族,画在面里就看不出来;环改取面自己的前景色——
174
+ 那一族色本来就要在这块面上把字读清楚,与面的对比是按可读性定的 */
175
+ --xh-action-ring-color-focus-visible: currentColor;
176
+
177
+ /* 按钮不参与弹性伸缩 */
178
+ flex: none;
179
+ border-width: 0;
180
+ font-weight: var(--xh-prompt-input-submit-font-weight, var(--xh-text-label-weight));
181
+ }
182
+
183
+ /* 家族那条 display 会把 UA 的 [hidden]{display:none} 盖掉 */
184
+ .xh-scope-prompt-input[data-part='submit-trigger'][hidden] {
185
+ display: none;
186
+ }
187
+
188
+ /* 停止身份只换配色,从主色降到中性淡底(连接层同时把家族档切成 subtle);文案与可访问名由连接层切换。
189
+ 淡底面上没有厚度可言,内高光收掉;环色回到公共焦点色 */
190
+ .xh-scope-prompt-input[data-part='submit-trigger'][data-mode='stop'] {
191
+ --xh-action-bg-rest: var(--xh-prompt-input-stop-bg, var(--xh-_action-variant-bg-rest));
192
+ --xh-action-bg-hover: var(--xh-prompt-input-stop-bg-hover, var(--xh-_action-variant-bg-hover));
193
+ --xh-action-bg-pressed: var(--xh-prompt-input-stop-bg-active, var(--xh-_action-variant-bg-pressed));
194
+ --xh-action-fg-rest: var(--xh-prompt-input-stop-fg, var(--xh-_action-variant-fg-rest));
195
+ --xh-action-fg-hover: var(--xh-prompt-input-stop-fg, var(--xh-_action-variant-fg-hover));
196
+ --xh-action-fg-pressed: var(--xh-prompt-input-stop-fg, var(--xh-_action-variant-fg-pressed));
197
+ --xh-action-shadow-rest: none;
198
+ --xh-action-shadow-hover: none;
199
+ --xh-action-shadow-pressed: none;
200
+ --xh-action-ring-color-focus-visible: var(--xh-ring-focus);
201
+ }
202
+
203
+ /* 按钮没写内容就由皮肤画兜底字形,两种身份各画一枚;
204
+ 作者往部件里塞了自己的图形或文案,这两条即不命中 */
205
+ .xh-scope-prompt-input[data-part='submit-trigger'][data-mode='send']:empty::before {
206
+ content: '';
207
+ display: inline-block;
208
+ inline-size: var(--xh-icon-size, var(--xh-glyph-size-text));
209
+ block-size: var(--xh-icon-size, var(--xh-glyph-size-text));
210
+ vertical-align: var(--xh-glyph-baseline-shift);
211
+ background-color: currentColor;
212
+ -webkit-mask: var(--xh-glyph-mark-arrow-up) center / contain no-repeat;
213
+ mask: var(--xh-glyph-mark-arrow-up) center / contain no-repeat;
214
+ }
215
+
216
+ /* 停止身份画一枚实心圆角方块:它不是「反过来的发送」,用一个不指向任何方向的形状 */
217
+ .xh-scope-prompt-input[data-part='submit-trigger'][data-mode='stop']:empty::before {
218
+ content: '';
219
+ display: inline-block;
220
+ inline-size: var(--xh-prompt-input-stop-mark-size, calc(var(--xh-icon-size, var(--xh-glyph-size-text)) * 0.6));
221
+ block-size: var(--xh-prompt-input-stop-mark-size, calc(var(--xh-icon-size, var(--xh-glyph-size-text)) * 0.6));
222
+ vertical-align: var(--xh-glyph-baseline-shift);
223
+ border-radius: var(--xh-prompt-input-stop-mark-radius, var(--xh-shape-inset));
224
+ background-color: currentColor;
225
+ }
226
+
227
+ /* 身份切换时换上来的那一枚字形淡入,与按钮换面同一拍:停止的方块从略小处浮出,发送的箭头只淡入。
228
+ 两种身份各取一支关键帧,切换时动画名跟着换才会重播。首帧就在的字形直接呈现(data-instant);
229
+ 减弱动效下缩放归一、只剩淡入。粗指针下 ::after 是家族的命中区,字形只有 ::before 这一层,
230
+ 旧字形与新字形不在两层上叠着淡 */
231
+ .xh-scope-prompt-input[data-part='submit-trigger'][data-mode='send']:not([data-instant]):empty::before {
232
+ animation: xh-fade-in var(--xh-motion-duration-enter) var(--xh-motion-ease-enter);
233
+ }
234
+
235
+ .xh-scope-prompt-input[data-part='submit-trigger'][data-mode='stop']:not([data-instant]):empty::before {
236
+ animation: xh-pop-in var(--xh-motion-duration-enter) var(--xh-motion-ease-enter-strong);
237
+ }
238
+
239
+ @media (forced-colors: active) {
240
+ /* 兜底字形是 mask 挖出来的一块底色,这一档里底色被系统换成 Canvas,字形跟着消失。
241
+ 字形退出强制换色、直接写系统色(不能取 currentColor:退出强制换色的伪元素读到的是被系统换掉之前的作者色):
242
+ 按钮面上取 ButtonText,悬停与按下时家族把按钮涂成 Highlight、字形换 HighlightText;
243
+ 禁用取 GrayText */
244
+ .xh-scope-prompt-input[data-part='submit-trigger'][data-mode='send']:empty::before,
245
+ .xh-scope-prompt-input[data-part='submit-trigger'][data-mode='stop']:empty::before {
246
+ forced-color-adjust: none;
247
+ background-color: ButtonText;
248
+ }
249
+
250
+ .xh-scope-prompt-input[data-part='submit-trigger'][data-mode='send']:not([data-disabled]):not([data-loading]):is(:hover, :active, [data-pressed]):empty::before,
251
+ .xh-scope-prompt-input[data-part='submit-trigger'][data-mode='stop']:not([data-disabled]):not([data-loading]):is(:hover, :active, [data-pressed]):empty::before {
252
+ background-color: HighlightText;
253
+ }
254
+
255
+ .xh-scope-prompt-input[data-part='submit-trigger'][data-mode='send'][data-disabled]:empty::before,
256
+ .xh-scope-prompt-input[data-part='submit-trigger'][data-mode='stop'][data-disabled]:empty::before {
257
+ background-color: GrayText;
258
+ }
259
+ }
260
+ }