@zerodep-dev/vue-tsx-pro-mobile 0.0.0-stage → 0.4.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 (209) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +29 -2
  3. package/dist/area/data.d.ts +10 -0
  4. package/dist/area/data.js +3899 -0
  5. package/dist/area/data.js.map +1 -0
  6. package/dist/area/index.d.ts +22 -0
  7. package/dist/area/index.js +41 -0
  8. package/dist/area/index.js.map +1 -0
  9. package/dist/base/Button.d.ts +170 -0
  10. package/dist/base/Button.js +537 -0
  11. package/dist/base/Button.js.map +1 -0
  12. package/dist/base/Icon.d.ts +38 -0
  13. package/dist/base/Icon.js +65 -0
  14. package/dist/base/Icon.js.map +1 -0
  15. package/dist/capability/PrivacyPrompt.d.ts +1 -0
  16. package/dist/capability/PrivacyPrompt.js +73 -0
  17. package/dist/capability/PrivacyPrompt.js.map +1 -0
  18. package/dist/capability/types.d.ts +92 -0
  19. package/dist/capability/usePermission.d.ts +23 -0
  20. package/dist/capability/usePermission.js +52 -0
  21. package/dist/capability/usePermission.js.map +1 -0
  22. package/dist/capability/useStorage.d.ts +8 -0
  23. package/dist/capability/useStorage.js +19 -0
  24. package/dist/capability/useStorage.js.map +1 -0
  25. package/dist/capability/web.d.ts +18 -0
  26. package/dist/capability/web.js +109 -0
  27. package/dist/capability/web.js.map +1 -0
  28. package/dist/capacitor/index.d.ts +9 -0
  29. package/dist/capacitor/index.js +143 -0
  30. package/dist/capacitor/index.js.map +1 -0
  31. package/dist/config/ConfigProvider.d.ts +37 -0
  32. package/dist/config/ConfigProvider.js +64 -0
  33. package/dist/config/ConfigProvider.js.map +1 -0
  34. package/dist/config/context.d.ts +16 -0
  35. package/dist/config/context.js +20 -0
  36. package/dist/config/context.js.map +1 -0
  37. package/dist/config/lang.d.ts +85 -0
  38. package/dist/config/lang.js +138 -0
  39. package/dist/config/lang.js.map +1 -0
  40. package/dist/display/Badge.d.ts +39 -0
  41. package/dist/display/Badge.js +108 -0
  42. package/dist/display/Badge.js.map +1 -0
  43. package/dist/display/Cell.d.ts +92 -0
  44. package/dist/display/Cell.js +204 -0
  45. package/dist/display/Cell.js.map +1 -0
  46. package/dist/display/Collapse.d.ts +47 -0
  47. package/dist/display/Collapse.js +173 -0
  48. package/dist/display/Collapse.js.map +1 -0
  49. package/dist/display/Empty.d.ts +42 -0
  50. package/dist/display/Empty.js +79 -0
  51. package/dist/display/Empty.js.map +1 -0
  52. package/dist/display/Grid.d.ts +49 -0
  53. package/dist/display/Grid.js +136 -0
  54. package/dist/display/Grid.js.map +1 -0
  55. package/dist/display/Image.d.ts +70 -0
  56. package/dist/display/Image.js +138 -0
  57. package/dist/display/Image.js.map +1 -0
  58. package/dist/display/IndexBar.d.ts +34 -0
  59. package/dist/display/IndexBar.js +158 -0
  60. package/dist/display/IndexBar.js.map +1 -0
  61. package/dist/display/List.d.ts +34 -0
  62. package/dist/display/List.js +105 -0
  63. package/dist/display/List.js.map +1 -0
  64. package/dist/display/NoticeBar.d.ts +57 -0
  65. package/dist/display/NoticeBar.js +172 -0
  66. package/dist/display/NoticeBar.js.map +1 -0
  67. package/dist/display/Steps.d.ts +59 -0
  68. package/dist/display/Steps.js +158 -0
  69. package/dist/display/Steps.js.map +1 -0
  70. package/dist/display/SwipeCell.d.ts +37 -0
  71. package/dist/display/SwipeCell.js +147 -0
  72. package/dist/display/SwipeCell.js.map +1 -0
  73. package/dist/display/Swiper.d.ts +47 -0
  74. package/dist/display/Swiper.js +173 -0
  75. package/dist/display/Swiper.js.map +1 -0
  76. package/dist/display/Tag.d.ts +99 -0
  77. package/dist/display/Tag.js +320 -0
  78. package/dist/display/Tag.js.map +1 -0
  79. package/dist/feedback/Dialog.d.ts +79 -0
  80. package/dist/feedback/Dialog.js +186 -0
  81. package/dist/feedback/Dialog.js.map +1 -0
  82. package/dist/feedback/FeedbackOutlet.d.ts +2 -0
  83. package/dist/feedback/FeedbackOutlet.js +31 -0
  84. package/dist/feedback/FeedbackOutlet.js.map +1 -0
  85. package/dist/feedback/Loading.d.ts +26 -0
  86. package/dist/feedback/Loading.js +68 -0
  87. package/dist/feedback/Loading.js.map +1 -0
  88. package/dist/feedback/Notify.d.ts +48 -0
  89. package/dist/feedback/Notify.js +116 -0
  90. package/dist/feedback/Notify.js.map +1 -0
  91. package/dist/feedback/PullRefresh.d.ts +58 -0
  92. package/dist/feedback/PullRefresh.js +178 -0
  93. package/dist/feedback/PullRefresh.js.map +1 -0
  94. package/dist/feedback/Skeleton.d.ts +56 -0
  95. package/dist/feedback/Skeleton.js +99 -0
  96. package/dist/feedback/Skeleton.js.map +1 -0
  97. package/dist/feedback/Toast.d.ts +89 -0
  98. package/dist/feedback/Toast.js +186 -0
  99. package/dist/feedback/Toast.js.map +1 -0
  100. package/dist/form/Checkbox.d.ts +52 -0
  101. package/dist/form/Checkbox.js +107 -0
  102. package/dist/form/Checkbox.js.map +1 -0
  103. package/dist/form/Field.d.ts +91 -0
  104. package/dist/form/Field.js +296 -0
  105. package/dist/form/Field.js.map +1 -0
  106. package/dist/form/Form.d.ts +50 -0
  107. package/dist/form/Form.js +96 -0
  108. package/dist/form/Form.js.map +1 -0
  109. package/dist/form/FormItem.d.ts +57 -0
  110. package/dist/form/FormItem.js +142 -0
  111. package/dist/form/FormItem.js.map +1 -0
  112. package/dist/form/Radio.d.ts +41 -0
  113. package/dist/form/Radio.js +85 -0
  114. package/dist/form/Radio.js.map +1 -0
  115. package/dist/form/Rate.d.ts +45 -0
  116. package/dist/form/Rate.js +162 -0
  117. package/dist/form/Rate.js.map +1 -0
  118. package/dist/form/Search.d.ts +50 -0
  119. package/dist/form/Search.js +152 -0
  120. package/dist/form/Search.js.map +1 -0
  121. package/dist/form/Slider.d.ts +43 -0
  122. package/dist/form/Slider.js +213 -0
  123. package/dist/form/Slider.js.map +1 -0
  124. package/dist/form/Stepper.d.ts +61 -0
  125. package/dist/form/Stepper.js +222 -0
  126. package/dist/form/Stepper.js.map +1 -0
  127. package/dist/form/Switch.d.ts +33 -0
  128. package/dist/form/Switch.js +116 -0
  129. package/dist/form/Switch.js.map +1 -0
  130. package/dist/form/Uploader.d.ts +67 -0
  131. package/dist/form/Uploader.js +207 -0
  132. package/dist/form/Uploader.js.map +1 -0
  133. package/dist/form/choice.d.ts +42 -0
  134. package/dist/form/choice.js +109 -0
  135. package/dist/form/choice.js.map +1 -0
  136. package/dist/form/context.d.ts +83 -0
  137. package/dist/form/context.js +89 -0
  138. package/dist/form/context.js.map +1 -0
  139. package/dist/index.d.ts +66 -0
  140. package/dist/index.js +59 -0
  141. package/dist/layout/Divider.d.ts +34 -0
  142. package/dist/layout/Divider.js +55 -0
  143. package/dist/layout/Divider.js.map +1 -0
  144. package/dist/layout/Space.d.ts +66 -0
  145. package/dist/layout/Space.js +65 -0
  146. package/dist/layout/Space.js.map +1 -0
  147. package/dist/navigation/BackTop.d.ts +29 -0
  148. package/dist/navigation/BackTop.js +89 -0
  149. package/dist/navigation/BackTop.js.map +1 -0
  150. package/dist/navigation/NavBar.d.ts +46 -0
  151. package/dist/navigation/NavBar.js +141 -0
  152. package/dist/navigation/NavBar.js.map +1 -0
  153. package/dist/navigation/Sticky.d.ts +19 -0
  154. package/dist/navigation/Sticky.js +28 -0
  155. package/dist/navigation/Sticky.js.map +1 -0
  156. package/dist/navigation/TabBar.d.ts +54 -0
  157. package/dist/navigation/TabBar.js +138 -0
  158. package/dist/navigation/TabBar.js.map +1 -0
  159. package/dist/navigation/Tabs.d.ts +45 -0
  160. package/dist/navigation/Tabs.js +206 -0
  161. package/dist/navigation/Tabs.js.map +1 -0
  162. package/dist/overlay/ActionSheet.d.ts +80 -0
  163. package/dist/overlay/ActionSheet.js +164 -0
  164. package/dist/overlay/ActionSheet.js.map +1 -0
  165. package/dist/overlay/Overlay.d.ts +35 -0
  166. package/dist/overlay/Overlay.js +85 -0
  167. package/dist/overlay/Overlay.js.map +1 -0
  168. package/dist/overlay/Popup.d.ts +76 -0
  169. package/dist/overlay/Popup.js +191 -0
  170. package/dist/overlay/Popup.js.map +1 -0
  171. package/dist/picker/Calendar.d.ts +69 -0
  172. package/dist/picker/Calendar.js +213 -0
  173. package/dist/picker/Calendar.js.map +1 -0
  174. package/dist/picker/Cascader.d.ts +50 -0
  175. package/dist/picker/Cascader.js +199 -0
  176. package/dist/picker/Cascader.js.map +1 -0
  177. package/dist/picker/DatePicker.d.ts +52 -0
  178. package/dist/picker/DatePicker.js +135 -0
  179. package/dist/picker/DatePicker.js.map +1 -0
  180. package/dist/picker/DropdownMenu.d.ts +39 -0
  181. package/dist/picker/DropdownMenu.js +242 -0
  182. package/dist/picker/DropdownMenu.js.map +1 -0
  183. package/dist/picker/Picker.d.ts +67 -0
  184. package/dist/picker/Picker.js +185 -0
  185. package/dist/picker/Picker.js.map +1 -0
  186. package/dist/picker/PickerColumn.d.ts +36 -0
  187. package/dist/picker/PickerColumn.js +175 -0
  188. package/dist/picker/PickerColumn.js.map +1 -0
  189. package/dist/theme/dark.d.ts +121 -0
  190. package/dist/theme/dark.js +77 -0
  191. package/dist/theme/dark.js.map +1 -0
  192. package/dist/theme/divider.d.ts +6 -0
  193. package/dist/theme/divider.js +18 -0
  194. package/dist/theme/divider.js.map +1 -0
  195. package/dist/theme/token-names.d.ts +1389 -0
  196. package/dist/theme/tokens.d.ts +549 -0
  197. package/dist/theme/tokens.js +312 -0
  198. package/dist/theme/tokens.js.map +1 -0
  199. package/dist/utils/host.d.ts +97 -0
  200. package/dist/utils/host.js +98 -0
  201. package/dist/utils/host.js.map +1 -0
  202. package/dist/utils/presence.d.ts +11 -0
  203. package/dist/utils/presence.js +34 -0
  204. package/dist/utils/presence.js.map +1 -0
  205. package/dist/utils/props.d.ts +38 -0
  206. package/dist/utils/props.js +115 -0
  207. package/dist/utils/props.js.map +1 -0
  208. package/dist/utils/scales.d.ts +48 -0
  209. package/package.json +106 -3
@@ -0,0 +1,99 @@
1
+ import { css } from '@zerodep-dev/vue-tsx-pro-tsx/styles';
2
+ import type { VNodeChild } from 'vue';
3
+ import { type IconProps } from '../base/Icon';
4
+ import { type PartProps } from '../utils/props';
5
+ import type { MobileTone } from '../utils/scales';
6
+ /** 标签样式 */
7
+ export interface TagVariants {
8
+ /** 实底 */
9
+ solid: unknown;
10
+ /** 浅色底 */
11
+ soft: unknown;
12
+ /** 描边 */
13
+ outline: unknown;
14
+ }
15
+ /** 未声明的属性落到根元素(span)上 */
16
+ export interface TagProps extends PartProps<'span'> {
17
+ /**
18
+ * 样式
19
+ * @default 'soft'
20
+ */
21
+ variant?: keyof TagVariants;
22
+ /**
23
+ * 色调
24
+ * @default 'neutral'
25
+ */
26
+ tone?: MobileTone;
27
+ /**
28
+ * 尺寸
29
+ * @default 'md'
30
+ */
31
+ size?: 'sm' | 'md' | 'lg';
32
+ /**
33
+ * 圆角
34
+ * @default 'sm'
35
+ */
36
+ radius?: 'sm' | 'full';
37
+ /** 右边显示关闭按钮 */
38
+ closable?: boolean;
39
+ /** 点了关闭按钮 */
40
+ onClose?: (event: Event) => void;
41
+ /** 标签文字 */
42
+ children?: VNodeChild;
43
+ /** 关闭按钮的部件属性 */
44
+ propsClose?: PartProps<'button'>;
45
+ /** 关闭图标的部件属性 */
46
+ propsCloseIcon?: Partial<IconProps>;
47
+ }
48
+ /** Tag 的部件 */
49
+ export type TagPart = 'root' | 'close';
50
+ /** Tag 的配方:样式 × 色调 × 尺寸 × 圆角 */
51
+ export declare const tagRecipe: css.Recipe<"close" | "root", {
52
+ readonly size: {
53
+ readonly sm: {
54
+ readonly root: {
55
+ readonly fontSize: "_xs";
56
+ readonly lineHeight: "1.25";
57
+ readonly paddingInline: "0.3em";
58
+ };
59
+ };
60
+ readonly md: {
61
+ readonly root: {
62
+ readonly fontSize: "_xs";
63
+ };
64
+ };
65
+ readonly lg: {
66
+ readonly root: {
67
+ readonly fontSize: "_sm";
68
+ readonly paddingInline: "0.6em";
69
+ };
70
+ };
71
+ };
72
+ readonly radius: {
73
+ readonly sm: {
74
+ readonly root: {
75
+ readonly borderRadius: "_sm";
76
+ };
77
+ };
78
+ readonly full: {
79
+ readonly root: {
80
+ readonly borderRadius: "_full";
81
+ };
82
+ };
83
+ };
84
+ readonly variant: {
85
+ solid: {};
86
+ soft: {};
87
+ outline: {};
88
+ };
89
+ readonly tone: {
90
+ accent: {};
91
+ neutral: {};
92
+ danger: {};
93
+ success: {};
94
+ warning: {};
95
+ info: {};
96
+ };
97
+ }>;
98
+ /** 标签(span > 文字 + 关闭按钮) */
99
+ export declare const Tag: import("@zerodep-dev/vue-tsx-pro-tsx").TsxComponent<TagProps>;
@@ -0,0 +1,320 @@
1
+ import { useConfig } from "../config/context.js";
2
+ import { mergeAttrs, mergePartProps } from "../utils/props.js";
3
+ import { Icon } from "../base/Icon.js";
4
+ import { css } from "@zerodep-dev/vue-tsx-pro-tsx/styles";
5
+ import { _component, childrenProp, readonlyProp, restProps } from "@zerodep-dev/vue-tsx-pro-tsx";
6
+ import { createVNode } from "vue";
7
+ import { X } from "@lucide/icons";
8
+ //#region src/display/Tag.tsx
9
+ /**
10
+ * 标签:状态、分类、筛选条件。可关闭(右边一个 ×,点了调用 onClose)。
11
+ *
12
+ * <Tag tone="success">已付款</Tag>
13
+ * <Tag variant="outline" radius="full">新品</Tag>
14
+ * <Tag closable onClose={() => remove(item)}>{item.name}</Tag>
15
+ */
16
+ /** 标签样式 */
17
+ /** 未声明的属性落到根元素(span)上 */
18
+ /** Tag 的部件 */
19
+ /** Tag 的配方:样式 × 色调 × 尺寸 × 圆角 */
20
+ var tagRecipe = css.recipe({
21
+ name: "Tag",
22
+ parts: ["root", "close"],
23
+ base: {
24
+ root: {
25
+ boxSizing: "border-box",
26
+ display: "inline-flex",
27
+ alignItems: "center",
28
+ gap: "0.2em",
29
+ paddingInline: "0.45em",
30
+ borderWidth: "_xs",
31
+ borderStyle: "solid",
32
+ borderColor: "transparent",
33
+ lineHeight: "1.5",
34
+ whiteSpace: "nowrap",
35
+ verticalAlign: "middle"
36
+ },
37
+ close: {
38
+ display: "inline-flex",
39
+ alignItems: "center",
40
+ justifyContent: "center",
41
+ margin: 0,
42
+ marginInlineEnd: "-0.2em",
43
+ padding: 0,
44
+ borderWidth: 0,
45
+ backgroundColor: "transparent",
46
+ color: "inherit",
47
+ fontSize: "1em",
48
+ opacity: {
49
+ default: .7,
50
+ ":active": 1
51
+ },
52
+ cursor: "pointer"
53
+ }
54
+ },
55
+ variants: {
56
+ size: {
57
+ sm: { root: {
58
+ fontSize: "_xs",
59
+ lineHeight: "1.25",
60
+ paddingInline: "0.3em"
61
+ } },
62
+ md: { root: { fontSize: "_xs" } },
63
+ lg: { root: {
64
+ fontSize: "_sm",
65
+ paddingInline: "0.6em"
66
+ } }
67
+ },
68
+ radius: {
69
+ sm: { root: { borderRadius: "_sm" } },
70
+ full: { root: { borderRadius: "_full" } }
71
+ },
72
+ variant: {
73
+ solid: {},
74
+ soft: {},
75
+ outline: {}
76
+ },
77
+ tone: {
78
+ accent: {},
79
+ neutral: {},
80
+ danger: {},
81
+ success: {},
82
+ warning: {},
83
+ info: {}
84
+ }
85
+ },
86
+ compound: [
87
+ {
88
+ when: {
89
+ variant: "solid",
90
+ tone: "accent"
91
+ },
92
+ root: {
93
+ color: "_accentContrast",
94
+ backgroundColor: "_accent"
95
+ }
96
+ },
97
+ {
98
+ when: {
99
+ variant: "solid",
100
+ tone: "neutral"
101
+ },
102
+ root: {
103
+ color: "_inverseText",
104
+ backgroundColor: "_inverseSurface"
105
+ }
106
+ },
107
+ {
108
+ when: {
109
+ variant: "solid",
110
+ tone: "danger"
111
+ },
112
+ root: {
113
+ color: "_dangerContrast",
114
+ backgroundColor: "_danger"
115
+ }
116
+ },
117
+ {
118
+ when: {
119
+ variant: "solid",
120
+ tone: "success"
121
+ },
122
+ root: {
123
+ color: "_successContrast",
124
+ backgroundColor: "_success"
125
+ }
126
+ },
127
+ {
128
+ when: {
129
+ variant: "solid",
130
+ tone: "warning"
131
+ },
132
+ root: {
133
+ color: "_warningContrast",
134
+ backgroundColor: "_warning"
135
+ }
136
+ },
137
+ {
138
+ when: {
139
+ variant: "solid",
140
+ tone: "info"
141
+ },
142
+ root: {
143
+ color: "_infoContrast",
144
+ backgroundColor: "_info"
145
+ }
146
+ },
147
+ {
148
+ when: {
149
+ variant: "soft",
150
+ tone: "accent"
151
+ },
152
+ root: {
153
+ color: "_accentText",
154
+ backgroundColor: "_accentSoft"
155
+ }
156
+ },
157
+ {
158
+ when: {
159
+ variant: "soft",
160
+ tone: "neutral"
161
+ },
162
+ root: {
163
+ color: "_textMuted",
164
+ backgroundColor: "_fill"
165
+ }
166
+ },
167
+ {
168
+ when: {
169
+ variant: "soft",
170
+ tone: "danger"
171
+ },
172
+ root: {
173
+ color: "_dangerText",
174
+ backgroundColor: "_dangerSoft"
175
+ }
176
+ },
177
+ {
178
+ when: {
179
+ variant: "soft",
180
+ tone: "success"
181
+ },
182
+ root: {
183
+ color: "_successText",
184
+ backgroundColor: "_successSoft"
185
+ }
186
+ },
187
+ {
188
+ when: {
189
+ variant: "soft",
190
+ tone: "warning"
191
+ },
192
+ root: {
193
+ color: "_warningText",
194
+ backgroundColor: "_warningSoft"
195
+ }
196
+ },
197
+ {
198
+ when: {
199
+ variant: "soft",
200
+ tone: "info"
201
+ },
202
+ root: {
203
+ color: "_infoText",
204
+ backgroundColor: "_infoSoft"
205
+ }
206
+ },
207
+ {
208
+ when: {
209
+ variant: "outline",
210
+ tone: "accent"
211
+ },
212
+ root: {
213
+ color: "_accentText",
214
+ borderColor: "_accentBorder"
215
+ }
216
+ },
217
+ {
218
+ when: {
219
+ variant: "outline",
220
+ tone: "neutral"
221
+ },
222
+ root: {
223
+ color: "_textMuted",
224
+ borderColor: "_borderStrong"
225
+ }
226
+ },
227
+ {
228
+ when: {
229
+ variant: "outline",
230
+ tone: "danger"
231
+ },
232
+ root: {
233
+ color: "_dangerText",
234
+ borderColor: "_dangerBorder"
235
+ }
236
+ },
237
+ {
238
+ when: {
239
+ variant: "outline",
240
+ tone: "success"
241
+ },
242
+ root: {
243
+ color: "_successText",
244
+ borderColor: "_successBorder"
245
+ }
246
+ },
247
+ {
248
+ when: {
249
+ variant: "outline",
250
+ tone: "warning"
251
+ },
252
+ root: {
253
+ color: "_warningText",
254
+ borderColor: "_warningBorder"
255
+ }
256
+ },
257
+ {
258
+ when: {
259
+ variant: "outline",
260
+ tone: "info"
261
+ },
262
+ root: {
263
+ color: "_infoText",
264
+ borderColor: "_infoBorder"
265
+ }
266
+ }
267
+ ],
268
+ defaults: {
269
+ variant: "soft",
270
+ tone: "neutral",
271
+ size: "md",
272
+ radius: "sm"
273
+ }
274
+ });
275
+ /** 标签(span > 文字 + 关闭按钮) */
276
+ var Tag = /*#__PURE__*/ _component((_props, _ctx) => {
277
+ const variant = readonlyProp(_props, "variant");
278
+ const tone = readonlyProp(_props, "tone");
279
+ const size = readonlyProp(_props, "size");
280
+ const radius = readonlyProp(_props, "radius");
281
+ const closable = readonlyProp(_props, "closable", false);
282
+ const onClose = readonlyProp(_props, "onClose");
283
+ const children = childrenProp(_props);
284
+ const propsClose = readonlyProp(_props, "propsClose");
285
+ const propsCloseIcon = readonlyProp(_props, "propsCloseIcon");
286
+ const rest = restProps(_props, _ctx, false);
287
+ const config = useConfig();
288
+ return () => {
289
+ const s = tagRecipe({
290
+ variant: variant.value,
291
+ tone: tone.value,
292
+ size: size.value,
293
+ radius: radius.value
294
+ });
295
+ return createVNode("span", mergeAttrs({ sx: s.root }, rest), [children.value, closable.value && createVNode("button", mergeAttrs({ sx: s.close }, propsClose.value, {
296
+ type: "button",
297
+ "aria-label": config.lang.close,
298
+ onClick: (event) => {
299
+ event.stopPropagation();
300
+ onClose.value?.(event);
301
+ }
302
+ }), [createVNode(Icon, mergePartProps({ icon: X }, propsCloseIcon.value), null)])]);
303
+ };
304
+ }, {
305
+ name: "Tag",
306
+ props: [
307
+ "variant",
308
+ "tone",
309
+ "size",
310
+ "radius",
311
+ "closable",
312
+ "onClose",
313
+ "propsClose",
314
+ "propsCloseIcon"
315
+ ]
316
+ });
317
+ //#endregion
318
+ export { Tag, tagRecipe };
319
+
320
+ //# sourceMappingURL=Tag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tag.js","names":["_vtp_readonlyProp","_vtp_childrenProp","_vtp_restProps","_createVNode"],"sources":["../../src/display/Tag.tsx"],"sourcesContent":["/**\n * 标签:状态、分类、筛选条件。可关闭(右边一个 ×,点了调用 onClose)。\n *\n * <Tag tone=\"success\">已付款</Tag>\n * <Tag variant=\"outline\" radius=\"full\">新品</Tag>\n * <Tag closable onClose={() => remove(item)}>{item.name}</Tag>\n */\nimport { X } from '@lucide/icons';\nimport { _component } from '@zerodep-dev/vue-tsx-pro-tsx';\nimport { css } from '@zerodep-dev/vue-tsx-pro-tsx/styles';\nimport type { VNodeChild } from 'vue';\nimport { Icon, type IconProps } from '../base/Icon';\nimport { useConfig } from '../config/context';\nimport { mergeAttrs, mergePartProps, type PartProps } from '../utils/props';\nimport type { MobileTone } from '../utils/scales';\n\n/** 标签样式 */\nexport interface TagVariants {\n /** 实底 */\n solid: unknown;\n /** 浅色底 */\n soft: unknown;\n /** 描边 */\n outline: unknown;\n}\n\n/** 未声明的属性落到根元素(span)上 */\nexport interface TagProps extends PartProps<'span'> {\n /**\n * 样式\n * @default 'soft'\n */\n variant?: keyof TagVariants;\n /**\n * 色调\n * @default 'neutral'\n */\n tone?: MobileTone;\n /**\n * 尺寸\n * @default 'md'\n */\n size?: 'sm' | 'md' | 'lg';\n /**\n * 圆角\n * @default 'sm'\n */\n radius?: 'sm' | 'full';\n /** 右边显示关闭按钮 */\n closable?: boolean;\n /** 点了关闭按钮 */\n onClose?: (event: Event) => void;\n /** 标签文字 */\n children?: VNodeChild;\n /** 关闭按钮的部件属性 */\n propsClose?: PartProps<'button'>;\n /** 关闭图标的部件属性 */\n propsCloseIcon?: Partial<IconProps>;\n}\n\n/** Tag 的部件 */\nexport type TagPart = 'root' | 'close';\n\n/** Tag 的配方:样式 × 色调 × 尺寸 × 圆角 */\nexport const tagRecipe = css.recipe({\n name: 'Tag',\n parts: ['root', 'close'],\n base: {\n root: {\n boxSizing: 'border-box',\n display: 'inline-flex',\n alignItems: 'center',\n gap: '0.2em',\n paddingInline: '0.45em',\n borderWidth: '_xs',\n borderStyle: 'solid',\n borderColor: 'transparent',\n lineHeight: '1.5',\n whiteSpace: 'nowrap',\n verticalAlign: 'middle',\n },\n close: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n margin: 0,\n marginInlineEnd: '-0.2em',\n padding: 0,\n borderWidth: 0,\n backgroundColor: 'transparent',\n color: 'inherit',\n fontSize: '1em',\n opacity: { default: 0.7, ':active': 1 },\n cursor: 'pointer',\n },\n },\n variants: {\n size: {\n sm: { root: { fontSize: '_xs', lineHeight: '1.25', paddingInline: '0.3em' } },\n md: { root: { fontSize: '_xs' } },\n lg: { root: { fontSize: '_sm', paddingInline: '0.6em' } },\n },\n radius: {\n sm: { root: { borderRadius: '_sm' } },\n full: { root: { borderRadius: '_full' } },\n },\n variant: { solid: {}, soft: {}, outline: {} },\n tone: { accent: {}, neutral: {}, danger: {}, success: {}, warning: {}, info: {} },\n },\n compound: [\n {\n when: { variant: 'solid', tone: 'accent' },\n root: { color: '_accentContrast', backgroundColor: '_accent' },\n },\n {\n when: { variant: 'solid', tone: 'neutral' },\n root: { color: '_inverseText', backgroundColor: '_inverseSurface' },\n },\n {\n when: { variant: 'solid', tone: 'danger' },\n root: { color: '_dangerContrast', backgroundColor: '_danger' },\n },\n {\n when: { variant: 'solid', tone: 'success' },\n root: { color: '_successContrast', backgroundColor: '_success' },\n },\n {\n when: { variant: 'solid', tone: 'warning' },\n root: { color: '_warningContrast', backgroundColor: '_warning' },\n },\n {\n when: { variant: 'solid', tone: 'info' },\n root: { color: '_infoContrast', backgroundColor: '_info' },\n },\n {\n when: { variant: 'soft', tone: 'accent' },\n root: { color: '_accentText', backgroundColor: '_accentSoft' },\n },\n {\n when: { variant: 'soft', tone: 'neutral' },\n root: { color: '_textMuted', backgroundColor: '_fill' },\n },\n {\n when: { variant: 'soft', tone: 'danger' },\n root: { color: '_dangerText', backgroundColor: '_dangerSoft' },\n },\n {\n when: { variant: 'soft', tone: 'success' },\n root: { color: '_successText', backgroundColor: '_successSoft' },\n },\n {\n when: { variant: 'soft', tone: 'warning' },\n root: { color: '_warningText', backgroundColor: '_warningSoft' },\n },\n {\n when: { variant: 'soft', tone: 'info' },\n root: { color: '_infoText', backgroundColor: '_infoSoft' },\n },\n {\n when: { variant: 'outline', tone: 'accent' },\n root: { color: '_accentText', borderColor: '_accentBorder' },\n },\n {\n when: { variant: 'outline', tone: 'neutral' },\n root: { color: '_textMuted', borderColor: '_borderStrong' },\n },\n {\n when: { variant: 'outline', tone: 'danger' },\n root: { color: '_dangerText', borderColor: '_dangerBorder' },\n },\n {\n when: { variant: 'outline', tone: 'success' },\n root: { color: '_successText', borderColor: '_successBorder' },\n },\n {\n when: { variant: 'outline', tone: 'warning' },\n root: { color: '_warningText', borderColor: '_warningBorder' },\n },\n {\n when: { variant: 'outline', tone: 'info' },\n root: { color: '_infoText', borderColor: '_infoBorder' },\n },\n ],\n defaults: { variant: 'soft', tone: 'neutral', size: 'md', radius: 'sm' },\n});\n\n/** 标签(span > 文字 + 关闭按钮) */\nexport const Tag = _component(\n ({\n variant,\n tone,\n size,\n radius,\n closable = false,\n onClose,\n children,\n propsClose,\n propsCloseIcon,\n ...rest\n }: TagProps) => {\n const config = useConfig();\n return () => {\n const s = tagRecipe({ variant, tone, size, radius });\n return (\n <span {...mergeAttrs<'span'>({ sx: s.root }, rest)}>\n {children}\n {closable && (\n <button\n {...mergeAttrs<'button'>({ sx: s.close }, propsClose, {\n type: 'button',\n 'aria-label': config.lang.close,\n onClick: (event: Event) => {\n // 标签常放在可点击的单元格、卡片里:关闭不连带触发外层的点击\n event.stopPropagation();\n onClose?.(event);\n },\n })}\n >\n <Icon {...mergePartProps<IconProps>({ icon: X }, propsCloseIcon)} />\n </button>\n )}\n </span>\n );\n };\n },\n);\n"],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ import { css } from '@zerodep-dev/vue-tsx-pro-tsx/styles';
2
+ import { type VNodeChild } from 'vue';
3
+ import { type ButtonProps } from '../base/Button';
4
+ import { type PopupProps } from '../overlay/Popup';
5
+ import { type PartProps } from '../utils/props';
6
+ /** 关闭的原因 */
7
+ export type DialogCloseReason = 'confirm' | 'cancel' | 'overlay';
8
+ /** 对话框的选项(组件的 props 与 showDialog 的参数共用) */
9
+ export interface DialogOptions {
10
+ /** 标题 */
11
+ title?: VNodeChild;
12
+ /** 说明 */
13
+ message?: VNodeChild;
14
+ /** 确认按钮的文字;不给时用语言包的"确认" */
15
+ confirmText?: VNodeChild;
16
+ /** 取消按钮的文字;不给时用语言包的"取消" */
17
+ cancelText?: VNodeChild;
18
+ /** 显示取消按钮 */
19
+ showCancel?: boolean;
20
+ /**
21
+ * 确认按钮的色调:删除这类操作用 danger
22
+ * @default 'accent'
23
+ */
24
+ confirmTone?: 'accent' | 'danger';
25
+ /** 点遮罩关闭(等于取消) */
26
+ closeOnOverlay?: boolean;
27
+ /** 点了确认;返回 Promise 时按钮转圈,完成后才关闭 */
28
+ onConfirm?: () => void | Promise<unknown>;
29
+ /** 点了取消(或点遮罩关闭) */
30
+ onCancel?: () => void;
31
+ }
32
+ /** 未声明的属性落到对话框的面板上 */
33
+ export interface DialogProps extends DialogOptions, Omit<PartProps<'div', 'role'>, 'title'> {
34
+ /** 是否打开;双向绑定写 `_open={x}` */
35
+ _open?: boolean;
36
+ /** 关闭时带原因 */
37
+ onOpenChange?: (open: boolean, details: {
38
+ reason: DialogCloseReason;
39
+ }) => void;
40
+ /** 说明(与 message 二选一),可以放任意内容 */
41
+ children?: VNodeChild;
42
+ /** 自定义底部(代替确认、取消按钮) */
43
+ footer?: VNodeChild;
44
+ /** 弹出层的部件属性 */
45
+ propsPopup?: Partial<PopupProps>;
46
+ /** 确认按钮的部件属性 */
47
+ propsConfirm?: Partial<ButtonProps>;
48
+ /** 取消按钮的部件属性 */
49
+ propsCancel?: Partial<ButtonProps>;
50
+ }
51
+ /** Dialog 的样式:panel、header、title、message、footer、action */
52
+ export declare const dialogStyles: Readonly<{
53
+ action: css.CompiledStyles;
54
+ footer: css.CompiledStyles;
55
+ header: css.CompiledStyles;
56
+ message: css.CompiledStyles;
57
+ panel: css.CompiledStyles;
58
+ title: css.CompiledStyles;
59
+ titleOnly: css.CompiledStyles;
60
+ }>;
61
+ /** 对话框(弹出层 > 标题 + 说明 + 按钮) */
62
+ export declare const Dialog: import("@zerodep-dev/vue-tsx-pro-tsx").TsxComponent<DialogProps>;
63
+ /** 命令式对话框:排队显示,前一个关了才显示下一个 */
64
+ interface DialogRequest {
65
+ options: DialogOptions;
66
+ resolve: (confirmed: boolean) => void;
67
+ }
68
+ /** 命令式对话框的状态:ConfigProvider 里的出口按它渲染 */
69
+ export declare const dialogState: import("vue").ShallowReactive<{
70
+ open: boolean;
71
+ queue: DialogRequest[];
72
+ }>;
73
+ /** 显示一个对话框;确认时结果为 true,取消(或点遮罩关闭)时为 false */
74
+ export declare function showDialog(options: DialogOptions): Promise<boolean>;
75
+ /** 带取消按钮的确认对话框 */
76
+ export declare const showConfirmDialog: (options: DialogOptions) => Promise<boolean>;
77
+ /** 当前的命令式对话框关闭后:交出结果,过了离场动画再显示下一个 */
78
+ export declare function settleDialog(confirmed: boolean): void;
79
+ export {};