@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.
- package/LICENSE +21 -0
- package/README.md +29 -2
- package/dist/area/data.d.ts +10 -0
- package/dist/area/data.js +3899 -0
- package/dist/area/data.js.map +1 -0
- package/dist/area/index.d.ts +22 -0
- package/dist/area/index.js +41 -0
- package/dist/area/index.js.map +1 -0
- package/dist/base/Button.d.ts +170 -0
- package/dist/base/Button.js +537 -0
- package/dist/base/Button.js.map +1 -0
- package/dist/base/Icon.d.ts +38 -0
- package/dist/base/Icon.js +65 -0
- package/dist/base/Icon.js.map +1 -0
- package/dist/capability/PrivacyPrompt.d.ts +1 -0
- package/dist/capability/PrivacyPrompt.js +73 -0
- package/dist/capability/PrivacyPrompt.js.map +1 -0
- package/dist/capability/types.d.ts +92 -0
- package/dist/capability/usePermission.d.ts +23 -0
- package/dist/capability/usePermission.js +52 -0
- package/dist/capability/usePermission.js.map +1 -0
- package/dist/capability/useStorage.d.ts +8 -0
- package/dist/capability/useStorage.js +19 -0
- package/dist/capability/useStorage.js.map +1 -0
- package/dist/capability/web.d.ts +18 -0
- package/dist/capability/web.js +109 -0
- package/dist/capability/web.js.map +1 -0
- package/dist/capacitor/index.d.ts +9 -0
- package/dist/capacitor/index.js +143 -0
- package/dist/capacitor/index.js.map +1 -0
- package/dist/config/ConfigProvider.d.ts +37 -0
- package/dist/config/ConfigProvider.js +64 -0
- package/dist/config/ConfigProvider.js.map +1 -0
- package/dist/config/context.d.ts +16 -0
- package/dist/config/context.js +20 -0
- package/dist/config/context.js.map +1 -0
- package/dist/config/lang.d.ts +85 -0
- package/dist/config/lang.js +138 -0
- package/dist/config/lang.js.map +1 -0
- package/dist/display/Badge.d.ts +39 -0
- package/dist/display/Badge.js +108 -0
- package/dist/display/Badge.js.map +1 -0
- package/dist/display/Cell.d.ts +92 -0
- package/dist/display/Cell.js +204 -0
- package/dist/display/Cell.js.map +1 -0
- package/dist/display/Collapse.d.ts +47 -0
- package/dist/display/Collapse.js +173 -0
- package/dist/display/Collapse.js.map +1 -0
- package/dist/display/Empty.d.ts +42 -0
- package/dist/display/Empty.js +79 -0
- package/dist/display/Empty.js.map +1 -0
- package/dist/display/Grid.d.ts +49 -0
- package/dist/display/Grid.js +136 -0
- package/dist/display/Grid.js.map +1 -0
- package/dist/display/Image.d.ts +70 -0
- package/dist/display/Image.js +138 -0
- package/dist/display/Image.js.map +1 -0
- package/dist/display/IndexBar.d.ts +34 -0
- package/dist/display/IndexBar.js +158 -0
- package/dist/display/IndexBar.js.map +1 -0
- package/dist/display/List.d.ts +34 -0
- package/dist/display/List.js +105 -0
- package/dist/display/List.js.map +1 -0
- package/dist/display/NoticeBar.d.ts +57 -0
- package/dist/display/NoticeBar.js +172 -0
- package/dist/display/NoticeBar.js.map +1 -0
- package/dist/display/Steps.d.ts +59 -0
- package/dist/display/Steps.js +158 -0
- package/dist/display/Steps.js.map +1 -0
- package/dist/display/SwipeCell.d.ts +37 -0
- package/dist/display/SwipeCell.js +147 -0
- package/dist/display/SwipeCell.js.map +1 -0
- package/dist/display/Swiper.d.ts +47 -0
- package/dist/display/Swiper.js +173 -0
- package/dist/display/Swiper.js.map +1 -0
- package/dist/display/Tag.d.ts +99 -0
- package/dist/display/Tag.js +320 -0
- package/dist/display/Tag.js.map +1 -0
- package/dist/feedback/Dialog.d.ts +79 -0
- package/dist/feedback/Dialog.js +186 -0
- package/dist/feedback/Dialog.js.map +1 -0
- package/dist/feedback/FeedbackOutlet.d.ts +2 -0
- package/dist/feedback/FeedbackOutlet.js +31 -0
- package/dist/feedback/FeedbackOutlet.js.map +1 -0
- package/dist/feedback/Loading.d.ts +26 -0
- package/dist/feedback/Loading.js +68 -0
- package/dist/feedback/Loading.js.map +1 -0
- package/dist/feedback/Notify.d.ts +48 -0
- package/dist/feedback/Notify.js +116 -0
- package/dist/feedback/Notify.js.map +1 -0
- package/dist/feedback/PullRefresh.d.ts +58 -0
- package/dist/feedback/PullRefresh.js +178 -0
- package/dist/feedback/PullRefresh.js.map +1 -0
- package/dist/feedback/Skeleton.d.ts +56 -0
- package/dist/feedback/Skeleton.js +99 -0
- package/dist/feedback/Skeleton.js.map +1 -0
- package/dist/feedback/Toast.d.ts +89 -0
- package/dist/feedback/Toast.js +186 -0
- package/dist/feedback/Toast.js.map +1 -0
- package/dist/form/Checkbox.d.ts +52 -0
- package/dist/form/Checkbox.js +107 -0
- package/dist/form/Checkbox.js.map +1 -0
- package/dist/form/Field.d.ts +91 -0
- package/dist/form/Field.js +296 -0
- package/dist/form/Field.js.map +1 -0
- package/dist/form/Form.d.ts +50 -0
- package/dist/form/Form.js +96 -0
- package/dist/form/Form.js.map +1 -0
- package/dist/form/FormItem.d.ts +57 -0
- package/dist/form/FormItem.js +142 -0
- package/dist/form/FormItem.js.map +1 -0
- package/dist/form/Radio.d.ts +41 -0
- package/dist/form/Radio.js +85 -0
- package/dist/form/Radio.js.map +1 -0
- package/dist/form/Rate.d.ts +45 -0
- package/dist/form/Rate.js +162 -0
- package/dist/form/Rate.js.map +1 -0
- package/dist/form/Search.d.ts +50 -0
- package/dist/form/Search.js +152 -0
- package/dist/form/Search.js.map +1 -0
- package/dist/form/Slider.d.ts +43 -0
- package/dist/form/Slider.js +213 -0
- package/dist/form/Slider.js.map +1 -0
- package/dist/form/Stepper.d.ts +61 -0
- package/dist/form/Stepper.js +222 -0
- package/dist/form/Stepper.js.map +1 -0
- package/dist/form/Switch.d.ts +33 -0
- package/dist/form/Switch.js +116 -0
- package/dist/form/Switch.js.map +1 -0
- package/dist/form/Uploader.d.ts +67 -0
- package/dist/form/Uploader.js +207 -0
- package/dist/form/Uploader.js.map +1 -0
- package/dist/form/choice.d.ts +42 -0
- package/dist/form/choice.js +109 -0
- package/dist/form/choice.js.map +1 -0
- package/dist/form/context.d.ts +83 -0
- package/dist/form/context.js +89 -0
- package/dist/form/context.js.map +1 -0
- package/dist/index.d.ts +66 -0
- package/dist/index.js +59 -0
- package/dist/layout/Divider.d.ts +34 -0
- package/dist/layout/Divider.js +55 -0
- package/dist/layout/Divider.js.map +1 -0
- package/dist/layout/Space.d.ts +66 -0
- package/dist/layout/Space.js +65 -0
- package/dist/layout/Space.js.map +1 -0
- package/dist/navigation/BackTop.d.ts +29 -0
- package/dist/navigation/BackTop.js +89 -0
- package/dist/navigation/BackTop.js.map +1 -0
- package/dist/navigation/NavBar.d.ts +46 -0
- package/dist/navigation/NavBar.js +141 -0
- package/dist/navigation/NavBar.js.map +1 -0
- package/dist/navigation/Sticky.d.ts +19 -0
- package/dist/navigation/Sticky.js +28 -0
- package/dist/navigation/Sticky.js.map +1 -0
- package/dist/navigation/TabBar.d.ts +54 -0
- package/dist/navigation/TabBar.js +138 -0
- package/dist/navigation/TabBar.js.map +1 -0
- package/dist/navigation/Tabs.d.ts +45 -0
- package/dist/navigation/Tabs.js +206 -0
- package/dist/navigation/Tabs.js.map +1 -0
- package/dist/overlay/ActionSheet.d.ts +80 -0
- package/dist/overlay/ActionSheet.js +164 -0
- package/dist/overlay/ActionSheet.js.map +1 -0
- package/dist/overlay/Overlay.d.ts +35 -0
- package/dist/overlay/Overlay.js +85 -0
- package/dist/overlay/Overlay.js.map +1 -0
- package/dist/overlay/Popup.d.ts +76 -0
- package/dist/overlay/Popup.js +191 -0
- package/dist/overlay/Popup.js.map +1 -0
- package/dist/picker/Calendar.d.ts +69 -0
- package/dist/picker/Calendar.js +213 -0
- package/dist/picker/Calendar.js.map +1 -0
- package/dist/picker/Cascader.d.ts +50 -0
- package/dist/picker/Cascader.js +199 -0
- package/dist/picker/Cascader.js.map +1 -0
- package/dist/picker/DatePicker.d.ts +52 -0
- package/dist/picker/DatePicker.js +135 -0
- package/dist/picker/DatePicker.js.map +1 -0
- package/dist/picker/DropdownMenu.d.ts +39 -0
- package/dist/picker/DropdownMenu.js +242 -0
- package/dist/picker/DropdownMenu.js.map +1 -0
- package/dist/picker/Picker.d.ts +67 -0
- package/dist/picker/Picker.js +185 -0
- package/dist/picker/Picker.js.map +1 -0
- package/dist/picker/PickerColumn.d.ts +36 -0
- package/dist/picker/PickerColumn.js +175 -0
- package/dist/picker/PickerColumn.js.map +1 -0
- package/dist/theme/dark.d.ts +121 -0
- package/dist/theme/dark.js +77 -0
- package/dist/theme/dark.js.map +1 -0
- package/dist/theme/divider.d.ts +6 -0
- package/dist/theme/divider.js +18 -0
- package/dist/theme/divider.js.map +1 -0
- package/dist/theme/token-names.d.ts +1389 -0
- package/dist/theme/tokens.d.ts +549 -0
- package/dist/theme/tokens.js +312 -0
- package/dist/theme/tokens.js.map +1 -0
- package/dist/utils/host.d.ts +97 -0
- package/dist/utils/host.js +98 -0
- package/dist/utils/host.js.map +1 -0
- package/dist/utils/presence.d.ts +11 -0
- package/dist/utils/presence.js +34 -0
- package/dist/utils/presence.js.map +1 -0
- package/dist/utils/props.d.ts +38 -0
- package/dist/utils/props.js +115 -0
- package/dist/utils/props.js.map +1 -0
- package/dist/utils/scales.d.ts +48 -0
- package/package.json +106 -3
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { t } from "../theme/tokens.js";
|
|
2
|
+
import { hasContent, mergeAttrs } from "../utils/props.js";
|
|
3
|
+
import { css } from "@zerodep-dev/vue-tsx-pro-tsx/styles";
|
|
4
|
+
import { _component, childrenProp, readonlyProp, restProps } from "@zerodep-dev/vue-tsx-pro-tsx";
|
|
5
|
+
import { createVNode } from "vue";
|
|
6
|
+
//#region src/display/Badge.tsx
|
|
7
|
+
/** 未声明的属性落到外层(span)上 */
|
|
8
|
+
/** Badge 的样式:root、badge、corner、dot、各色调 */
|
|
9
|
+
var badgeStyles = css.create({
|
|
10
|
+
root: {
|
|
11
|
+
position: "relative",
|
|
12
|
+
display: "inline-flex",
|
|
13
|
+
verticalAlign: "middle"
|
|
14
|
+
},
|
|
15
|
+
badge: {
|
|
16
|
+
boxSizing: "border-box",
|
|
17
|
+
display: "inline-flex",
|
|
18
|
+
alignItems: "center",
|
|
19
|
+
justifyContent: "center",
|
|
20
|
+
minWidth: "1.4em",
|
|
21
|
+
height: "1.4em",
|
|
22
|
+
paddingInline: "0.35em",
|
|
23
|
+
borderRadius: "_full",
|
|
24
|
+
fontSize: "_xs",
|
|
25
|
+
fontWeight: "_medium",
|
|
26
|
+
lineHeight: "_none",
|
|
27
|
+
fontVariantNumeric: "tabular-nums",
|
|
28
|
+
whiteSpace: "nowrap",
|
|
29
|
+
boxShadow: `0 0 0 1px ${t.colors.surface}`
|
|
30
|
+
},
|
|
31
|
+
corner: {
|
|
32
|
+
position: "absolute",
|
|
33
|
+
insetBlockStart: 0,
|
|
34
|
+
insetInlineEnd: 0,
|
|
35
|
+
transform: "translate(50%, -50%)",
|
|
36
|
+
transformOrigin: "100% 0",
|
|
37
|
+
zIndex: 1
|
|
38
|
+
},
|
|
39
|
+
dot: {
|
|
40
|
+
minWidth: "8px",
|
|
41
|
+
width: "8px",
|
|
42
|
+
height: "8px",
|
|
43
|
+
padding: 0
|
|
44
|
+
},
|
|
45
|
+
danger: {
|
|
46
|
+
color: "_dangerContrast",
|
|
47
|
+
backgroundColor: "_danger"
|
|
48
|
+
},
|
|
49
|
+
accent: {
|
|
50
|
+
color: "_accentContrast",
|
|
51
|
+
backgroundColor: "_accent"
|
|
52
|
+
},
|
|
53
|
+
success: {
|
|
54
|
+
color: "_successContrast",
|
|
55
|
+
backgroundColor: "_success"
|
|
56
|
+
},
|
|
57
|
+
warning: {
|
|
58
|
+
color: "_warningContrast",
|
|
59
|
+
backgroundColor: "_warning"
|
|
60
|
+
},
|
|
61
|
+
neutral: {
|
|
62
|
+
color: "_inverseText",
|
|
63
|
+
backgroundColor: "_inverseSurface"
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
/** 徽标(span > 内容 + 徽标) */
|
|
67
|
+
var Badge = /*#__PURE__*/ _component((_props, _ctx) => {
|
|
68
|
+
const content = readonlyProp(_props, "content");
|
|
69
|
+
const max = readonlyProp(_props, "max");
|
|
70
|
+
const dot = readonlyProp(_props, "dot", false);
|
|
71
|
+
const showZero = readonlyProp(_props, "showZero", false);
|
|
72
|
+
const tone = readonlyProp(_props, "tone", "danger");
|
|
73
|
+
const offset = readonlyProp(_props, "offset");
|
|
74
|
+
const children = childrenProp(_props);
|
|
75
|
+
const propsBadge = readonlyProp(_props, "propsBadge");
|
|
76
|
+
const rest = restProps(_props, _ctx, false);
|
|
77
|
+
return () => {
|
|
78
|
+
const text = typeof content.value === "number" && max.value != null && content.value > max.value ? `${max.value}+` : content.value;
|
|
79
|
+
const visible = dot.value || content.value != null && content.value !== "" && (content.value !== 0 || showZero.value);
|
|
80
|
+
const attached = hasContent(children.value);
|
|
81
|
+
const badge = visible && createVNode("span", mergeAttrs({ sx: [
|
|
82
|
+
badgeStyles.badge,
|
|
83
|
+
badgeStyles[tone.value],
|
|
84
|
+
attached && badgeStyles.corner,
|
|
85
|
+
dot.value && badgeStyles.dot
|
|
86
|
+
] }, propsBadge.value, { style: offset.value && {
|
|
87
|
+
marginInlineEnd: `${-offset.value[0]}px`,
|
|
88
|
+
marginBlockStart: `${offset.value[1]}px`
|
|
89
|
+
} }), [dot.value ? null : text]);
|
|
90
|
+
if (!attached) return badge || null;
|
|
91
|
+
return createVNode("span", mergeAttrs({ sx: badgeStyles.root }, rest), [children.value, badge]);
|
|
92
|
+
};
|
|
93
|
+
}, {
|
|
94
|
+
name: "Badge",
|
|
95
|
+
props: [
|
|
96
|
+
"content",
|
|
97
|
+
"max",
|
|
98
|
+
"dot",
|
|
99
|
+
"showZero",
|
|
100
|
+
"tone",
|
|
101
|
+
"offset",
|
|
102
|
+
"propsBadge"
|
|
103
|
+
]
|
|
104
|
+
});
|
|
105
|
+
//#endregion
|
|
106
|
+
export { Badge, badgeStyles };
|
|
107
|
+
|
|
108
|
+
//# sourceMappingURL=Badge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Badge.js","names":["_vtp_readonlyProp","_vtp_childrenProp","_vtp_restProps","_createVNode"],"sources":["../../src/display/Badge.tsx"],"sourcesContent":["/**\n * 徽标:右上角的数字或红点,挂在图标、头像、按钮上;也可以单独用。\n *\n * <Badge content={5}><Icon icon={Bell} /></Badge>\n * <Badge content={120} max={99}><Avatar … /></Badge> 显示 99+\n * <Badge dot><Icon icon={MessageCircle} /></Badge>\n * <Badge content=\"新\" tone=\"success\" /> 单独使用\n *\n * 内容是 0 时默认不显示(showZero 显示)。\n */\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 { t } from '../theme/tokens';\nimport { hasContent, mergeAttrs, type PartProps } from '../utils/props';\n\n/** 未声明的属性落到外层(span)上 */\nexport interface BadgeProps extends PartProps<'span'> {\n /** 数字或文字 */\n content?: number | string;\n /** 数字超过它时显示 `max+` */\n max?: number;\n /** 只显示一个小红点 */\n dot?: boolean;\n /** 内容是 0 时也显示 */\n showZero?: boolean;\n /**\n * 色调\n * @default 'danger'\n */\n tone?: 'danger' | 'accent' | 'success' | 'warning' | 'neutral';\n /** 相对右上角的偏移(px):[向右, 向下] */\n offset?: readonly [number, number];\n /** 被标记的内容;没有时徽标单独显示(行内) */\n children?: VNodeChild;\n /** 徽标本身的部件属性 */\n propsBadge?: PartProps<'span'>;\n}\n\n/** Badge 的样式:root、badge、corner、dot、各色调 */\nexport const badgeStyles = css.create({\n root: { position: 'relative', display: 'inline-flex', verticalAlign: 'middle' },\n badge: {\n boxSizing: 'border-box',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n minWidth: '1.4em',\n height: '1.4em',\n paddingInline: '0.35em',\n borderRadius: '_full',\n fontSize: '_xs',\n fontWeight: '_medium',\n lineHeight: '_none',\n fontVariantNumeric: 'tabular-nums',\n whiteSpace: 'nowrap',\n // 白边把徽标从下面的图标、头像上分出来\n boxShadow: `0 0 0 1px ${t.colors.surface}`,\n },\n corner: {\n position: 'absolute',\n insetBlockStart: 0,\n insetInlineEnd: 0,\n transform: 'translate(50%, -50%)',\n transformOrigin: '100% 0',\n zIndex: 1,\n },\n dot: { minWidth: '8px', width: '8px', height: '8px', padding: 0 },\n danger: { color: '_dangerContrast', backgroundColor: '_danger' },\n accent: { color: '_accentContrast', backgroundColor: '_accent' },\n success: { color: '_successContrast', backgroundColor: '_success' },\n warning: { color: '_warningContrast', backgroundColor: '_warning' },\n neutral: { color: '_inverseText', backgroundColor: '_inverseSurface' },\n});\n\n/** 徽标(span > 内容 + 徽标) */\nexport const Badge = _component(\n ({\n content,\n max,\n dot = false,\n showZero = false,\n tone = 'danger',\n offset,\n children,\n propsBadge,\n ...rest\n }: BadgeProps) =>\n () => {\n const text =\n typeof content === 'number' && max != null && content > max ? `${max}+` : content;\n const visible = dot || (content != null && content !== '' && (content !== 0 || showZero));\n const attached = hasContent(children);\n const badge = visible && (\n <span\n {...mergeAttrs<'span'>(\n {\n sx: [\n badgeStyles.badge,\n badgeStyles[tone],\n attached && badgeStyles.corner,\n dot && badgeStyles.dot,\n ],\n },\n propsBadge,\n {\n style: offset && {\n marginInlineEnd: `${-offset[0]}px`,\n marginBlockStart: `${offset[1]}px`,\n },\n },\n )}\n >\n {dot ? null : text}\n </span>\n );\n if (!attached) return badge || null;\n return (\n <span {...mergeAttrs<'span'>({ sx: badgeStyles.root }, rest)}>\n {children}\n {badge}\n </span>\n );\n },\n);\n"],"mappings":";;;;;;;;AAwCA,IAAa,cAAc,IAAI,OAAO;CACpC,MAAM;EAAE,UAAU;EAAY,SAAS;EAAe,eAAe;CAAS;CAC9E,OAAO;EACL,WAAW;EACX,SAAS;EACT,YAAY;EACZ,gBAAgB;EAChB,UAAU;EACV,QAAQ;EACR,eAAe;EACf,cAAc;EACd,UAAU;EACV,YAAY;EACZ,YAAY;EACZ,oBAAoB;EACpB,YAAY;EAEZ,WAAW,aAAa,EAAE,OAAO;CACnC;CACA,QAAQ;EACN,UAAU;EACV,iBAAiB;EACjB,gBAAgB;EAChB,WAAW;EACX,iBAAiB;EACjB,QAAQ;CACV;CACA,KAAK;EAAE,UAAU;EAAO,OAAO;EAAO,QAAQ;EAAO,SAAS;CAAE;CAChE,QAAQ;EAAE,OAAO;EAAmB,iBAAiB;CAAU;CAC/D,QAAQ;EAAE,OAAO;EAAmB,iBAAiB;CAAU;CAC/D,SAAS;EAAE,OAAO;EAAoB,iBAAiB;CAAW;CAClE,SAAS;EAAE,OAAO;EAAoB,iBAAiB;CAAW;CAClE,SAAS;EAAE,OAAO;EAAgB,iBAAiB;CAAkB;AACvE,CAAC;;AAGD,IAAa,QAAQ,0BACnB,QAAA,SAAA;CAAA,MAAA,UAAAA,aAAA,QAAA,SAAA;CAAA,MAAA,MAAAA,aAAA,QAAA,KAAA;CAAA,MAAA,MAAAA,aAAA,QAAA,OAGQ,KAAK;CAAA,MAAA,WAAAA,aAAA,QAAA,YACA,KAAK;CAAA,MAAA,OAAAA,aAAA,QAAA,QACT,QAAQ;CAAA,MAAA,SAAAA,aAAA,QAAA,QAAA;CAAA,MAAA,WAAAC,aAAA,MAAA;CAAA,MAAA,aAAAD,aAAA,QAAA,YAAA;CAAA,MAIZ,OAAIE,UAAA,QAAA,MAAA,KAAA;CAAA,aAED;EACJ,MAAM,OACJ,OAAA,QAAA,UAAmB,YAAY,IAAA,SAAO,QAAQ,QAAA,QAAA,IAAA,QAAgB,GAAA,IAAA,MAAA,KAAS,QAAA;EACzE,MAAM,UAAU,IAAA,SAAQ,QAAA,SAAW,QAAQ,QAAA,UAAY,OAAO,QAAA,UAAY,KAAC,SAAA;EAC3E,MAAM,WAAW,WAAU,SAAA,KAAS;EACpC,MAAM,QAAQ,WAAOC,YAAA,QAEb,WACF,EACE,IAAI;GACF,YAAY;GACZ,YAAW,KAAA;GACX,YAAY,YAAY;GACxB,IAAA,SAAO,YAAY;EAAG,EAE1B,GAAC,WAAA,OAED,EACE,OAAO,OAAA,SAAU;GACf,iBAAiB,GAAG,CAAC,OAAA,MAAO,GAAE;GAC9B,kBAAkB,GAAG,OAAA,MAAO,GAAE;EAChC,EACF,CACF,GAAC,CAEA,IAAA,QAAM,OAAO,IAAI,CAAA;EAGtB,IAAI,CAAC,UAAU,OAAO,SAAS;EAC/B,OAAAA,YAAA,QACY,WAAmB,EAAE,IAAI,YAAY,KAAK,GAAG,IAAI,GAAC,CAAA,SAAA,OAEzD,KAAK,CAAA;CAGZ;AAAC,GAAA;CAAA,MAAA;CAAA,OAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;CAAA;AAAA,CACL"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { css } from '@zerodep-dev/vue-tsx-pro-tsx/styles';
|
|
2
|
+
import type { VNodeChild } from 'vue';
|
|
3
|
+
import { type IconData, type IconProps } from '../base/Icon';
|
|
4
|
+
import { type PartProps } from '../utils/props';
|
|
5
|
+
/** 箭头的方向 */
|
|
6
|
+
export interface CellArrows {
|
|
7
|
+
/** 向右:进入下一页 */
|
|
8
|
+
right: unknown;
|
|
9
|
+
/** 向下:展开 */
|
|
10
|
+
down: unknown;
|
|
11
|
+
/** 向上:收起 */
|
|
12
|
+
up: unknown;
|
|
13
|
+
}
|
|
14
|
+
/** 未声明的属性落到根元素(div)上;title 是标题内容,不是元素的 title 属性 */
|
|
15
|
+
export interface CellProps extends PartProps<'div', 'role' | 'title'> {
|
|
16
|
+
/** 标题 */
|
|
17
|
+
title?: VNodeChild;
|
|
18
|
+
/** 标题下的说明 */
|
|
19
|
+
description?: VNodeChild;
|
|
20
|
+
/** 右边的值;也可以写在 children 里 */
|
|
21
|
+
value?: VNodeChild;
|
|
22
|
+
/** 标题前的图标 */
|
|
23
|
+
icon?: IconData;
|
|
24
|
+
/** 右边的箭头:true 是向右,也可以给方向 */
|
|
25
|
+
arrow?: boolean | keyof CellArrows;
|
|
26
|
+
/** 可点击:按下有反馈;有 onClick 或 arrow 时自动是可点击的 */
|
|
27
|
+
clickable?: boolean;
|
|
28
|
+
/** 标题前加红色星号(必填) */
|
|
29
|
+
required?: boolean;
|
|
30
|
+
/** 内容垂直居中(默认顶端对齐,说明多行时标题与值仍在第一行) */
|
|
31
|
+
center?: boolean;
|
|
32
|
+
/**
|
|
33
|
+
* 尺寸:lg 用在大号的列表项
|
|
34
|
+
* @default 'md'
|
|
35
|
+
*/
|
|
36
|
+
size?: 'md' | 'lg';
|
|
37
|
+
/** 不画下面的细线 */
|
|
38
|
+
noDivider?: boolean;
|
|
39
|
+
/** 右边的值(与 value 二选一) */
|
|
40
|
+
children?: VNodeChild;
|
|
41
|
+
/** 图标的部件属性 */
|
|
42
|
+
propsIcon?: Partial<IconProps>;
|
|
43
|
+
/** 标题与说明那一栏的部件属性 */
|
|
44
|
+
propsBody?: PartProps<'div'>;
|
|
45
|
+
/** 标题的部件属性 */
|
|
46
|
+
propsTitle?: PartProps<'div'>;
|
|
47
|
+
/** 说明的部件属性 */
|
|
48
|
+
propsDescription?: PartProps<'div'>;
|
|
49
|
+
/** 值的部件属性 */
|
|
50
|
+
propsValue?: PartProps<'div'>;
|
|
51
|
+
/** 箭头的部件属性 */
|
|
52
|
+
propsArrow?: Partial<IconProps>;
|
|
53
|
+
}
|
|
54
|
+
/** Cell 的样式:root、clickable、center、lg、icon、body、title、required、description、value、arrow */
|
|
55
|
+
export declare const cellStyles: Readonly<{
|
|
56
|
+
arrow: css.CompiledStyles;
|
|
57
|
+
body: css.CompiledStyles;
|
|
58
|
+
center: css.CompiledStyles;
|
|
59
|
+
clickable: css.CompiledStyles;
|
|
60
|
+
description: css.CompiledStyles;
|
|
61
|
+
icon: css.CompiledStyles;
|
|
62
|
+
lg: css.CompiledStyles;
|
|
63
|
+
required: css.CompiledStyles;
|
|
64
|
+
root: css.CompiledStyles;
|
|
65
|
+
title: css.CompiledStyles;
|
|
66
|
+
value: css.CompiledStyles;
|
|
67
|
+
}>;
|
|
68
|
+
/** 单元格(div):可点击时 role="button" */
|
|
69
|
+
export declare const Cell: import("@zerodep-dev/vue-tsx-pro-tsx").TsxComponent<CellProps>;
|
|
70
|
+
/** 未声明的属性落到根元素(div)上;title 是分组标题,不是元素的 title 属性 */
|
|
71
|
+
export interface CellGroupProps extends PartProps<'div', 'title'> {
|
|
72
|
+
/** 分组标题,在卡片上方 */
|
|
73
|
+
title?: VNodeChild;
|
|
74
|
+
/** 卡片样式:左右留边、圆角,浮在页面的灰底上 */
|
|
75
|
+
inset?: boolean;
|
|
76
|
+
/** 单元格 */
|
|
77
|
+
children?: VNodeChild;
|
|
78
|
+
/** 标题的部件属性 */
|
|
79
|
+
propsTitle?: PartProps<'div'>;
|
|
80
|
+
/** 包着单元格的那一层的部件属性 */
|
|
81
|
+
propsBody?: PartProps<'div'>;
|
|
82
|
+
}
|
|
83
|
+
/** CellGroup 的样式:root、title、insetTitle、body、insetBody */
|
|
84
|
+
export declare const cellGroupStyles: Readonly<{
|
|
85
|
+
body: css.CompiledStyles;
|
|
86
|
+
insetBody: css.CompiledStyles;
|
|
87
|
+
insetTitle: css.CompiledStyles;
|
|
88
|
+
root: css.CompiledStyles;
|
|
89
|
+
title: css.CompiledStyles;
|
|
90
|
+
}>;
|
|
91
|
+
/** 单元格分组(div > 标题 + 单元格) */
|
|
92
|
+
export declare const CellGroup: import("@zerodep-dev/vue-tsx-pro-tsx").TsxComponent<CellGroupProps>;
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import { dataAttrs, hasContent, mergeAttrs, mergePartProps } from "../utils/props.js";
|
|
2
|
+
import { Icon } from "../base/Icon.js";
|
|
3
|
+
import { dividerImage, dividerLayout } from "../theme/divider.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 { createTextVNode, createVNode } from "vue";
|
|
7
|
+
import { ChevronDown, ChevronRight, ChevronUp } from "@lucide/icons";
|
|
8
|
+
//#region src/display/Cell.tsx
|
|
9
|
+
/**
|
|
10
|
+
* 单元格与单元格分组:列表、设置页、表单的一行——左边标题(可带图标与说明),右边值,可带箭头、可点击。
|
|
11
|
+
*
|
|
12
|
+
* <CellGroup title="账户" inset>
|
|
13
|
+
* <Cell title="昵称" value="莱恩" arrow onClick={edit} />
|
|
14
|
+
* <Cell title="手机号" description="用于登录与找回密码" value="138****0000" />
|
|
15
|
+
* </CellGroup>
|
|
16
|
+
*
|
|
17
|
+
* 单元格之间的细线从左边内边距处开始,最后一个不画;inset 的分组是浮在灰底上的圆角卡片。
|
|
18
|
+
*/
|
|
19
|
+
/** 箭头的方向 */
|
|
20
|
+
/** 未声明的属性落到根元素(div)上;title 是标题内容,不是元素的 title 属性 */
|
|
21
|
+
/** Cell 的样式:root、clickable、center、lg、icon、body、title、required、description、value、arrow */
|
|
22
|
+
var cellStyles = css.create({
|
|
23
|
+
root: {
|
|
24
|
+
boxSizing: "border-box",
|
|
25
|
+
position: "relative",
|
|
26
|
+
display: "flex",
|
|
27
|
+
alignItems: "flex-start",
|
|
28
|
+
gap: "_md",
|
|
29
|
+
width: "100%",
|
|
30
|
+
minHeight: "_control",
|
|
31
|
+
paddingBlock: "0.7em",
|
|
32
|
+
paddingInline: "_lg",
|
|
33
|
+
fontSize: "_md",
|
|
34
|
+
lineHeight: "1.5",
|
|
35
|
+
color: "_text",
|
|
36
|
+
backgroundColor: "_surface",
|
|
37
|
+
backgroundImage: {
|
|
38
|
+
default: dividerImage,
|
|
39
|
+
":last-child": "none",
|
|
40
|
+
"[data-no-divider]": "none"
|
|
41
|
+
},
|
|
42
|
+
...dividerLayout
|
|
43
|
+
},
|
|
44
|
+
clickable: {
|
|
45
|
+
cursor: "pointer",
|
|
46
|
+
userSelect: "none",
|
|
47
|
+
backgroundColor: {
|
|
48
|
+
default: "_surface",
|
|
49
|
+
":active": "_fillActive"
|
|
50
|
+
},
|
|
51
|
+
transitionProperty: "background-color",
|
|
52
|
+
transitionDuration: "_xs"
|
|
53
|
+
},
|
|
54
|
+
center: { alignItems: "center" },
|
|
55
|
+
lg: {
|
|
56
|
+
minHeight: "3.5em",
|
|
57
|
+
paddingBlock: "0.9em",
|
|
58
|
+
fontSize: "_lg"
|
|
59
|
+
},
|
|
60
|
+
icon: {
|
|
61
|
+
fontSize: "1.15em",
|
|
62
|
+
marginBlockStart: "0.15em",
|
|
63
|
+
color: "_text"
|
|
64
|
+
},
|
|
65
|
+
body: {
|
|
66
|
+
flex: "1 1 auto",
|
|
67
|
+
minWidth: 0
|
|
68
|
+
},
|
|
69
|
+
title: { overflowWrap: "anywhere" },
|
|
70
|
+
required: {
|
|
71
|
+
color: "_dangerText",
|
|
72
|
+
marginInlineEnd: "0.15em"
|
|
73
|
+
},
|
|
74
|
+
description: {
|
|
75
|
+
marginBlockStart: "0.15em",
|
|
76
|
+
fontSize: "_xs",
|
|
77
|
+
color: "_textMuted"
|
|
78
|
+
},
|
|
79
|
+
value: {
|
|
80
|
+
flex: "0 1 auto",
|
|
81
|
+
maxWidth: "60%",
|
|
82
|
+
color: "_textMuted",
|
|
83
|
+
textAlign: "end",
|
|
84
|
+
overflowWrap: "anywhere"
|
|
85
|
+
},
|
|
86
|
+
arrow: {
|
|
87
|
+
fontSize: "1.1em",
|
|
88
|
+
marginBlockStart: "0.2em",
|
|
89
|
+
marginInlineStart: "-0.25em",
|
|
90
|
+
color: "_textPlaceholder"
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
var ARROWS = {
|
|
94
|
+
right: ChevronRight,
|
|
95
|
+
down: ChevronDown,
|
|
96
|
+
up: ChevronUp
|
|
97
|
+
};
|
|
98
|
+
/** 单元格(div):可点击时 role="button" */
|
|
99
|
+
var Cell = /*#__PURE__*/ _component((_props, _ctx) => {
|
|
100
|
+
const title = readonlyProp(_props, "title");
|
|
101
|
+
const description = readonlyProp(_props, "description");
|
|
102
|
+
const value = readonlyProp(_props, "value");
|
|
103
|
+
const icon = readonlyProp(_props, "icon");
|
|
104
|
+
const arrow = readonlyProp(_props, "arrow", false);
|
|
105
|
+
const clickable = readonlyProp(_props, "clickable");
|
|
106
|
+
const required = readonlyProp(_props, "required", false);
|
|
107
|
+
const center = readonlyProp(_props, "center", false);
|
|
108
|
+
const size = readonlyProp(_props, "size", "md");
|
|
109
|
+
const noDivider = readonlyProp(_props, "noDivider", false);
|
|
110
|
+
const children = childrenProp(_props);
|
|
111
|
+
const propsIcon = readonlyProp(_props, "propsIcon");
|
|
112
|
+
const propsBody = readonlyProp(_props, "propsBody");
|
|
113
|
+
const propsTitle = readonlyProp(_props, "propsTitle");
|
|
114
|
+
const propsDescription = readonlyProp(_props, "propsDescription");
|
|
115
|
+
const propsValue = readonlyProp(_props, "propsValue");
|
|
116
|
+
const propsArrow = readonlyProp(_props, "propsArrow");
|
|
117
|
+
const rest = restProps(_props, _ctx, false);
|
|
118
|
+
return () => {
|
|
119
|
+
const pressable = clickable.value ?? (arrow.value !== false || rest.onClick != null);
|
|
120
|
+
const content = hasContent(value.value) ? value.value : children.value;
|
|
121
|
+
return createVNode("div", mergeAttrs({ sx: [
|
|
122
|
+
cellStyles.root,
|
|
123
|
+
pressable && cellStyles.clickable,
|
|
124
|
+
center.value && cellStyles.center,
|
|
125
|
+
size.value === "lg" && cellStyles.lg
|
|
126
|
+
] }, rest, {
|
|
127
|
+
role: pressable ? "button" : void 0,
|
|
128
|
+
...dataAttrs({ "data-no-divider": noDivider.value || void 0 })
|
|
129
|
+
}), [
|
|
130
|
+
icon.value && createVNode(Icon, mergePartProps({
|
|
131
|
+
icon: icon.value,
|
|
132
|
+
sx: cellStyles.icon
|
|
133
|
+
}, propsIcon.value), null),
|
|
134
|
+
(hasContent(title.value) || hasContent(description.value)) && createVNode("div", mergeAttrs({ sx: cellStyles.body }, propsBody.value), [hasContent(title.value) && createVNode("div", mergeAttrs({ sx: cellStyles.title }, propsTitle.value), [required.value && createVNode("span", mergeAttrs({ sx: cellStyles.required }, void 0, { "aria-hidden": "true" }), [createTextVNode("*")]), title.value]), hasContent(description.value) && createVNode("div", mergeAttrs({ sx: cellStyles.description }, propsDescription.value), [description.value])]),
|
|
135
|
+
hasContent(content) && createVNode("div", mergeAttrs({ sx: cellStyles.value }, propsValue.value), [content]),
|
|
136
|
+
arrow.value !== false && createVNode(Icon, mergePartProps({
|
|
137
|
+
icon: ARROWS[arrow.value === true ? "right" : arrow.value],
|
|
138
|
+
sx: cellStyles.arrow
|
|
139
|
+
}, propsArrow.value), null)
|
|
140
|
+
]);
|
|
141
|
+
};
|
|
142
|
+
}, {
|
|
143
|
+
name: "Cell",
|
|
144
|
+
props: [
|
|
145
|
+
"title",
|
|
146
|
+
"description",
|
|
147
|
+
"value",
|
|
148
|
+
"icon",
|
|
149
|
+
"arrow",
|
|
150
|
+
"clickable",
|
|
151
|
+
"required",
|
|
152
|
+
"center",
|
|
153
|
+
"size",
|
|
154
|
+
"noDivider",
|
|
155
|
+
"propsIcon",
|
|
156
|
+
"propsBody",
|
|
157
|
+
"propsTitle",
|
|
158
|
+
"propsDescription",
|
|
159
|
+
"propsValue",
|
|
160
|
+
"propsArrow"
|
|
161
|
+
]
|
|
162
|
+
});
|
|
163
|
+
/** 未声明的属性落到根元素(div)上;title 是分组标题,不是元素的 title 属性 */
|
|
164
|
+
/** CellGroup 的样式:root、title、insetTitle、body、insetBody */
|
|
165
|
+
var cellGroupStyles = css.create({
|
|
166
|
+
root: { boxSizing: "border-box" },
|
|
167
|
+
title: {
|
|
168
|
+
paddingInline: "_lg",
|
|
169
|
+
paddingBlockStart: "_lg",
|
|
170
|
+
paddingBlockEnd: "_sm",
|
|
171
|
+
fontSize: "_sm",
|
|
172
|
+
lineHeight: "1.4",
|
|
173
|
+
color: "_textMuted"
|
|
174
|
+
},
|
|
175
|
+
insetTitle: { paddingInline: "1.75em" },
|
|
176
|
+
body: { backgroundColor: "_surface" },
|
|
177
|
+
insetBody: {
|
|
178
|
+
marginInline: "_lg",
|
|
179
|
+
borderRadius: "_lg",
|
|
180
|
+
overflow: "hidden"
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
/** 单元格分组(div > 标题 + 单元格) */
|
|
184
|
+
var CellGroup = /*#__PURE__*/ _component((_props2, _ctx2) => {
|
|
185
|
+
const title = readonlyProp(_props2, "title");
|
|
186
|
+
const inset = readonlyProp(_props2, "inset", false);
|
|
187
|
+
const children = childrenProp(_props2);
|
|
188
|
+
const propsTitle = readonlyProp(_props2, "propsTitle");
|
|
189
|
+
const propsBody = readonlyProp(_props2, "propsBody");
|
|
190
|
+
const rest = restProps(_props2, _ctx2, false);
|
|
191
|
+
return () => createVNode("div", mergeAttrs({ sx: cellGroupStyles.root }, rest), [hasContent(title.value) && createVNode("div", mergeAttrs({ sx: [cellGroupStyles.title, inset.value && cellGroupStyles.insetTitle] }, propsTitle.value), [title.value]), createVNode("div", mergeAttrs({ sx: [cellGroupStyles.body, inset.value && cellGroupStyles.insetBody] }, propsBody.value), [children.value])]);
|
|
192
|
+
}, {
|
|
193
|
+
name: "CellGroup",
|
|
194
|
+
props: [
|
|
195
|
+
"title",
|
|
196
|
+
"inset",
|
|
197
|
+
"propsTitle",
|
|
198
|
+
"propsBody"
|
|
199
|
+
]
|
|
200
|
+
});
|
|
201
|
+
//#endregion
|
|
202
|
+
export { Cell, CellGroup, cellGroupStyles, cellStyles };
|
|
203
|
+
|
|
204
|
+
//# sourceMappingURL=Cell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Cell.js","names":["_vtp_readonlyProp","_vtp_childrenProp","_vtp_restProps","_createVNode","_createTextVNode"],"sources":["../../src/display/Cell.tsx"],"sourcesContent":["/**\n * 单元格与单元格分组:列表、设置页、表单的一行——左边标题(可带图标与说明),右边值,可带箭头、可点击。\n *\n * <CellGroup title=\"账户\" inset>\n * <Cell title=\"昵称\" value=\"莱恩\" arrow onClick={edit} />\n * <Cell title=\"手机号\" description=\"用于登录与找回密码\" value=\"138****0000\" />\n * </CellGroup>\n *\n * 单元格之间的细线从左边内边距处开始,最后一个不画;inset 的分组是浮在灰底上的圆角卡片。\n */\nimport { ChevronDown, ChevronRight, ChevronUp } 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 IconData, type IconProps } from '../base/Icon';\nimport { dividerImage, dividerLayout } from '../theme/divider';\nimport { dataAttrs, hasContent, mergeAttrs, mergePartProps, type PartProps } from '../utils/props';\n\n/** 箭头的方向 */\nexport interface CellArrows {\n /** 向右:进入下一页 */\n right: unknown;\n /** 向下:展开 */\n down: unknown;\n /** 向上:收起 */\n up: unknown;\n}\n\n/** 未声明的属性落到根元素(div)上;title 是标题内容,不是元素的 title 属性 */\nexport interface CellProps extends PartProps<'div', 'role' | 'title'> {\n /** 标题 */\n title?: VNodeChild;\n /** 标题下的说明 */\n description?: VNodeChild;\n /** 右边的值;也可以写在 children 里 */\n value?: VNodeChild;\n /** 标题前的图标 */\n icon?: IconData;\n /** 右边的箭头:true 是向右,也可以给方向 */\n arrow?: boolean | keyof CellArrows;\n /** 可点击:按下有反馈;有 onClick 或 arrow 时自动是可点击的 */\n clickable?: boolean;\n /** 标题前加红色星号(必填) */\n required?: boolean;\n /** 内容垂直居中(默认顶端对齐,说明多行时标题与值仍在第一行) */\n center?: boolean;\n /**\n * 尺寸:lg 用在大号的列表项\n * @default 'md'\n */\n size?: 'md' | 'lg';\n /** 不画下面的细线 */\n noDivider?: boolean;\n /** 右边的值(与 value 二选一) */\n children?: VNodeChild;\n /** 图标的部件属性 */\n propsIcon?: Partial<IconProps>;\n /** 标题与说明那一栏的部件属性 */\n propsBody?: PartProps<'div'>;\n /** 标题的部件属性 */\n propsTitle?: PartProps<'div'>;\n /** 说明的部件属性 */\n propsDescription?: PartProps<'div'>;\n /** 值的部件属性 */\n propsValue?: PartProps<'div'>;\n /** 箭头的部件属性 */\n propsArrow?: Partial<IconProps>;\n}\n\n/** Cell 的样式:root、clickable、center、lg、icon、body、title、required、description、value、arrow */\nexport const cellStyles = css.create({\n root: {\n boxSizing: 'border-box',\n position: 'relative',\n display: 'flex',\n alignItems: 'flex-start',\n gap: '_md',\n width: '100%',\n minHeight: '_control',\n paddingBlock: '0.7em',\n paddingInline: '_lg',\n fontSize: '_md',\n lineHeight: '1.5',\n color: '_text',\n backgroundColor: '_surface',\n // 细线:从左边内边距处画到右边,最后一个不画(不用伪元素:小程序把样式展开成行内样式,伪元素进不去)\n backgroundImage: {\n default: dividerImage,\n ':last-child': 'none',\n '[data-no-divider]': 'none',\n },\n ...dividerLayout,\n },\n clickable: {\n cursor: 'pointer',\n userSelect: 'none',\n backgroundColor: { default: '_surface', ':active': '_fillActive' },\n transitionProperty: 'background-color',\n transitionDuration: '_xs',\n },\n center: { alignItems: 'center' },\n lg: { minHeight: '3.5em', paddingBlock: '0.9em', fontSize: '_lg' },\n icon: { fontSize: '1.15em', marginBlockStart: '0.15em', color: '_text' },\n body: { flex: '1 1 auto', minWidth: 0 },\n title: { overflowWrap: 'anywhere' },\n required: { color: '_dangerText', marginInlineEnd: '0.15em' },\n description: { marginBlockStart: '0.15em', fontSize: '_xs', color: '_textMuted' },\n value: {\n flex: '0 1 auto',\n maxWidth: '60%',\n color: '_textMuted',\n textAlign: 'end',\n overflowWrap: 'anywhere',\n },\n arrow: {\n fontSize: '1.1em',\n marginBlockStart: '0.2em',\n marginInlineStart: '-0.25em',\n color: '_textPlaceholder',\n },\n});\n\nconst ARROWS = { right: ChevronRight, down: ChevronDown, up: ChevronUp } as const;\n\n/** 单元格(div):可点击时 role=\"button\" */\nexport const Cell = _component(\n ({\n title,\n description,\n value,\n icon,\n arrow = false,\n clickable,\n required = false,\n center = false,\n size = 'md',\n noDivider = false,\n children,\n propsIcon,\n propsBody,\n propsTitle,\n propsDescription,\n propsValue,\n propsArrow,\n ...rest\n }: CellProps) =>\n () => {\n const pressable = clickable ?? (arrow !== false || rest.onClick != null);\n const content = hasContent(value) ? value : children;\n return (\n <div\n {...mergeAttrs<'div'>(\n {\n sx: [\n cellStyles.root,\n pressable && cellStyles.clickable,\n center && cellStyles.center,\n size === 'lg' && cellStyles.lg,\n ],\n },\n rest,\n {\n role: pressable ? 'button' : undefined,\n ...dataAttrs({ 'data-no-divider': noDivider || undefined }),\n },\n )}\n >\n {icon && (\n <Icon {...mergePartProps<IconProps>({ icon, sx: cellStyles.icon }, propsIcon)} />\n )}\n {(hasContent(title) || hasContent(description)) && (\n <div {...mergeAttrs<'div'>({ sx: cellStyles.body }, propsBody)}>\n {hasContent(title) && (\n <div {...mergeAttrs<'div'>({ sx: cellStyles.title }, propsTitle)}>\n {required && (\n <span\n {...mergeAttrs<'span'>({ sx: cellStyles.required }, undefined, {\n 'aria-hidden': 'true',\n })}\n >\n *\n </span>\n )}\n {title}\n </div>\n )}\n {hasContent(description) && (\n <div {...mergeAttrs<'div'>({ sx: cellStyles.description }, propsDescription)}>\n {description}\n </div>\n )}\n </div>\n )}\n {hasContent(content) && (\n <div {...mergeAttrs<'div'>({ sx: cellStyles.value }, propsValue)}>{content}</div>\n )}\n {arrow !== false && (\n <Icon\n {...mergePartProps<IconProps>(\n { icon: ARROWS[arrow === true ? 'right' : arrow], sx: cellStyles.arrow },\n propsArrow,\n )}\n />\n )}\n </div>\n );\n },\n);\n\n/** 未声明的属性落到根元素(div)上;title 是分组标题,不是元素的 title 属性 */\nexport interface CellGroupProps extends PartProps<'div', 'title'> {\n /** 分组标题,在卡片上方 */\n title?: VNodeChild;\n /** 卡片样式:左右留边、圆角,浮在页面的灰底上 */\n inset?: boolean;\n /** 单元格 */\n children?: VNodeChild;\n /** 标题的部件属性 */\n propsTitle?: PartProps<'div'>;\n /** 包着单元格的那一层的部件属性 */\n propsBody?: PartProps<'div'>;\n}\n\n/** CellGroup 的样式:root、title、insetTitle、body、insetBody */\nexport const cellGroupStyles = css.create({\n root: { boxSizing: 'border-box' },\n title: {\n paddingInline: '_lg',\n paddingBlockStart: '_lg',\n paddingBlockEnd: '_sm',\n fontSize: '_sm',\n lineHeight: '1.4',\n color: '_textMuted',\n },\n insetTitle: { paddingInline: '1.75em' },\n body: { backgroundColor: '_surface' },\n insetBody: { marginInline: '_lg', borderRadius: '_lg', overflow: 'hidden' },\n});\n\n/** 单元格分组(div > 标题 + 单元格) */\nexport const CellGroup = _component(\n ({ title, inset = false, children, propsTitle, propsBody, ...rest }: CellGroupProps) =>\n () => (\n <div {...mergeAttrs<'div'>({ sx: cellGroupStyles.root }, rest)}>\n {hasContent(title) && (\n <div\n {...mergeAttrs<'div'>(\n { sx: [cellGroupStyles.title, inset && cellGroupStyles.insetTitle] },\n propsTitle,\n )}\n >\n {title}\n </div>\n )}\n <div\n {...mergeAttrs<'div'>(\n { sx: [cellGroupStyles.body, inset && cellGroupStyles.insetBody] },\n propsBody,\n )}\n >\n {children}\n </div>\n </div>\n ),\n);\n"],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { css } from '@zerodep-dev/vue-tsx-pro-tsx/styles';
|
|
2
|
+
import type { VNodeChild } from 'vue';
|
|
3
|
+
import { type PartProps } from '../utils/props';
|
|
4
|
+
/** 未声明的属性落到根元素(div)上 */
|
|
5
|
+
export interface CollapseProps extends Omit<PartProps<'div'>, 'onChange'> {
|
|
6
|
+
/** 展开的项;双向绑定写 `_value={x}`。手风琴模式下是一个名字(或 null),否则是名字的数组 */
|
|
7
|
+
_value?: string[] | string | null;
|
|
8
|
+
/** 手风琴:同时只展开一个 */
|
|
9
|
+
accordion?: boolean;
|
|
10
|
+
/** 展开的项变了 */
|
|
11
|
+
onChange?: (value: string[] | string | null) => void;
|
|
12
|
+
/** 各个 CollapseItem */
|
|
13
|
+
children?: VNodeChild;
|
|
14
|
+
}
|
|
15
|
+
/** Collapse 的样式:root、header、title、arrow、panel、content */
|
|
16
|
+
export declare const collapseStyles: Readonly<{
|
|
17
|
+
arrow: css.CompiledStyles;
|
|
18
|
+
clip: css.CompiledStyles;
|
|
19
|
+
content: css.CompiledStyles;
|
|
20
|
+
header: css.CompiledStyles;
|
|
21
|
+
item: css.CompiledStyles;
|
|
22
|
+
panel: css.CompiledStyles;
|
|
23
|
+
root: css.CompiledStyles;
|
|
24
|
+
title: css.CompiledStyles;
|
|
25
|
+
value: css.CompiledStyles;
|
|
26
|
+
}>;
|
|
27
|
+
/** 折叠面板(div > 各项) */
|
|
28
|
+
export declare const Collapse: import("@zerodep-dev/vue-tsx-pro-tsx").TsxComponent<CollapseProps>;
|
|
29
|
+
/** 未声明的属性落到这一项的根元素(div)上 */
|
|
30
|
+
export interface CollapseItemProps extends PartProps<'div', 'title'> {
|
|
31
|
+
/** 名字:展开的状态按它记 */
|
|
32
|
+
name: string;
|
|
33
|
+
/** 标题 */
|
|
34
|
+
title: VNodeChild;
|
|
35
|
+
/** 标题右边的值 */
|
|
36
|
+
value?: VNodeChild;
|
|
37
|
+
/** 不能展开 */
|
|
38
|
+
disabled?: boolean;
|
|
39
|
+
/** 展开的内容 */
|
|
40
|
+
children?: VNodeChild;
|
|
41
|
+
/** 标题栏(button)的部件属性 */
|
|
42
|
+
propsHeader?: PartProps<'button'>;
|
|
43
|
+
/** 内容的部件属性 */
|
|
44
|
+
propsContent?: PartProps<'div'>;
|
|
45
|
+
}
|
|
46
|
+
/** 折叠面板的一项(div > 标题栏 button[aria-expanded] + 内容) */
|
|
47
|
+
export declare const CollapseItem: import("@zerodep-dev/vue-tsx-pro-tsx").TsxComponent<CollapseItemProps>;
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { dataAttrs, hasContent, mergeAttrs } from "../utils/props.js";
|
|
2
|
+
import { Icon } from "../base/Icon.js";
|
|
3
|
+
import { dividerImage, dividerLayout } from "../theme/divider.js";
|
|
4
|
+
import { css } from "@zerodep-dev/vue-tsx-pro-tsx/styles";
|
|
5
|
+
import { _component, bindable, childrenProp, createContext, mergeJsxProps, readonlyProp, restProps } from "@zerodep-dev/vue-tsx-pro-tsx";
|
|
6
|
+
import { createVNode } from "vue";
|
|
7
|
+
import { ChevronDown } from "@lucide/icons";
|
|
8
|
+
//#region src/display/Collapse.tsx
|
|
9
|
+
/**
|
|
10
|
+
* 折叠面板:一组可展开、收起的段落(常见问题、订单详情的分组);手风琴模式下同时只展开一个。
|
|
11
|
+
*
|
|
12
|
+
* <Collapse _value={open}>
|
|
13
|
+
* <CollapseItem name="ship" title="多久发货?">付款后 48 小时内发货。</CollapseItem>
|
|
14
|
+
* <CollapseItem name="refund" title="怎么退款?">…</CollapseItem>
|
|
15
|
+
* </Collapse>
|
|
16
|
+
* <Collapse _value={current} accordion>…</Collapse>
|
|
17
|
+
*
|
|
18
|
+
* 展开收起的高度动画用网格行(0fr ↔ 1fr),不用量内容的高度,小程序里也一样。
|
|
19
|
+
*/
|
|
20
|
+
/** 面板提供给各项的 */
|
|
21
|
+
var CollapseContext = createContext("Collapse");
|
|
22
|
+
/** 未声明的属性落到根元素(div)上 */
|
|
23
|
+
/** Collapse 的样式:root、header、title、arrow、panel、content */
|
|
24
|
+
var collapseStyles = css.create({
|
|
25
|
+
root: { backgroundColor: "_surface" },
|
|
26
|
+
item: {
|
|
27
|
+
backgroundImage: {
|
|
28
|
+
default: dividerImage,
|
|
29
|
+
":last-child": "none"
|
|
30
|
+
},
|
|
31
|
+
...dividerLayout
|
|
32
|
+
},
|
|
33
|
+
header: {
|
|
34
|
+
boxSizing: "border-box",
|
|
35
|
+
display: "flex",
|
|
36
|
+
alignItems: "center",
|
|
37
|
+
gap: "_md",
|
|
38
|
+
width: "100%",
|
|
39
|
+
minHeight: "_control",
|
|
40
|
+
margin: 0,
|
|
41
|
+
paddingBlock: "0.7em",
|
|
42
|
+
paddingInline: "_lg",
|
|
43
|
+
borderWidth: 0,
|
|
44
|
+
backgroundColor: {
|
|
45
|
+
default: "transparent",
|
|
46
|
+
":active:not([disabled])": "_fillActive"
|
|
47
|
+
},
|
|
48
|
+
color: {
|
|
49
|
+
default: "_text",
|
|
50
|
+
"[disabled]": "_textDisabled"
|
|
51
|
+
},
|
|
52
|
+
fontFamily: "inherit",
|
|
53
|
+
fontSize: "_md",
|
|
54
|
+
lineHeight: "1.5",
|
|
55
|
+
textAlign: "start",
|
|
56
|
+
cursor: {
|
|
57
|
+
default: "pointer",
|
|
58
|
+
"[disabled]": "not-allowed"
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
title: {
|
|
62
|
+
flex: "1 1 auto",
|
|
63
|
+
minWidth: 0,
|
|
64
|
+
overflowWrap: "anywhere"
|
|
65
|
+
},
|
|
66
|
+
value: {
|
|
67
|
+
flex: "none",
|
|
68
|
+
color: "_textMuted"
|
|
69
|
+
},
|
|
70
|
+
arrow: {
|
|
71
|
+
flex: "none",
|
|
72
|
+
color: "_textPlaceholder",
|
|
73
|
+
transform: {
|
|
74
|
+
default: "none",
|
|
75
|
+
"[data-open]": "rotate(180deg)"
|
|
76
|
+
},
|
|
77
|
+
transitionProperty: "transform",
|
|
78
|
+
transitionDuration: "_md"
|
|
79
|
+
},
|
|
80
|
+
panel: {
|
|
81
|
+
display: "grid",
|
|
82
|
+
gridTemplateRows: {
|
|
83
|
+
default: "0fr",
|
|
84
|
+
"[data-open]": "1fr"
|
|
85
|
+
},
|
|
86
|
+
transitionProperty: "grid-template-rows",
|
|
87
|
+
transitionDuration: "_md",
|
|
88
|
+
transitionTimingFunction: "_standard"
|
|
89
|
+
},
|
|
90
|
+
clip: {
|
|
91
|
+
overflow: "hidden",
|
|
92
|
+
minHeight: 0
|
|
93
|
+
},
|
|
94
|
+
content: {
|
|
95
|
+
paddingBlock: "0.25em 1em",
|
|
96
|
+
paddingInline: "_lg",
|
|
97
|
+
fontSize: "_sm",
|
|
98
|
+
lineHeight: "1.6",
|
|
99
|
+
color: "_textMuted"
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
/** 折叠面板(div > 各项) */
|
|
103
|
+
var Collapse = /*#__PURE__*/ _component((_props, _ctx) => {
|
|
104
|
+
const value = bindable(_props, "_value", () => [], _ctx.emit);
|
|
105
|
+
const accordion = readonlyProp(_props, "accordion", false);
|
|
106
|
+
const onChange = readonlyProp(_props, "onChange");
|
|
107
|
+
const children = childrenProp(_props);
|
|
108
|
+
const rest = restProps(_props, _ctx, false);
|
|
109
|
+
CollapseContext.provide({
|
|
110
|
+
isOpen: (name) => Array.isArray(value.value) ? value.value.includes(name) : value.value === name,
|
|
111
|
+
toggle(name) {
|
|
112
|
+
if (accordion.value) value.value = value.value === name ? null : name;
|
|
113
|
+
else {
|
|
114
|
+
const list = Array.isArray(value.value) ? value.value : [];
|
|
115
|
+
value.value = list.includes(name) ? list.filter((item) => item !== name) : [...list, name];
|
|
116
|
+
}
|
|
117
|
+
onChange.value?.(value.value);
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
return () => createVNode("div", mergeAttrs({ sx: collapseStyles.root }, rest), [children.value]);
|
|
121
|
+
}, {
|
|
122
|
+
name: "Collapse",
|
|
123
|
+
props: [
|
|
124
|
+
"_value",
|
|
125
|
+
"onUpdate:_value",
|
|
126
|
+
"accordion",
|
|
127
|
+
"onChange"
|
|
128
|
+
]
|
|
129
|
+
});
|
|
130
|
+
/** 未声明的属性落到这一项的根元素(div)上 */
|
|
131
|
+
/** 折叠面板的一项(div > 标题栏 button[aria-expanded] + 内容) */
|
|
132
|
+
var CollapseItem = /*#__PURE__*/ _component((_props2, _ctx2) => {
|
|
133
|
+
const name = readonlyProp(_props2, "name");
|
|
134
|
+
const title = readonlyProp(_props2, "title");
|
|
135
|
+
const value = readonlyProp(_props2, "value");
|
|
136
|
+
const disabled = readonlyProp(_props2, "disabled", false);
|
|
137
|
+
const children = childrenProp(_props2);
|
|
138
|
+
const propsHeader = readonlyProp(_props2, "propsHeader");
|
|
139
|
+
const propsContent = readonlyProp(_props2, "propsContent");
|
|
140
|
+
const rest = restProps(_props2, _ctx2, false);
|
|
141
|
+
const collapse = CollapseContext.inject();
|
|
142
|
+
return () => {
|
|
143
|
+
const open = collapse.isOpen(name.value);
|
|
144
|
+
const state = dataAttrs({ "data-open": open });
|
|
145
|
+
return createVNode("div", mergeAttrs({ sx: collapseStyles.item }, rest, state), [createVNode("button", mergeAttrs({ sx: collapseStyles.header }, propsHeader.value, {
|
|
146
|
+
type: "button",
|
|
147
|
+
disabled: disabled.value,
|
|
148
|
+
"aria-expanded": open ? "true" : "false",
|
|
149
|
+
onClick: () => collapse.toggle(name.value)
|
|
150
|
+
}), [
|
|
151
|
+
createVNode("span", mergeAttrs({ sx: collapseStyles.title }), [title.value]),
|
|
152
|
+
hasContent(value.value) && createVNode("span", mergeAttrs({ sx: collapseStyles.value }), [value.value]),
|
|
153
|
+
createVNode(Icon, mergeJsxProps({
|
|
154
|
+
"icon": ChevronDown,
|
|
155
|
+
"sx": collapseStyles.arrow
|
|
156
|
+
}, state), null)
|
|
157
|
+
]), createVNode("div", mergeAttrs({ sx: collapseStyles.panel }, state), [createVNode("div", mergeAttrs({ sx: collapseStyles.clip }), [createVNode("div", mergeAttrs({ sx: collapseStyles.content }, propsContent.value), [children.value])])])]);
|
|
158
|
+
};
|
|
159
|
+
}, {
|
|
160
|
+
name: "CollapseItem",
|
|
161
|
+
props: [
|
|
162
|
+
"name",
|
|
163
|
+
"title",
|
|
164
|
+
"value",
|
|
165
|
+
"disabled",
|
|
166
|
+
"propsHeader",
|
|
167
|
+
"propsContent"
|
|
168
|
+
]
|
|
169
|
+
});
|
|
170
|
+
//#endregion
|
|
171
|
+
export { Collapse, CollapseItem, collapseStyles };
|
|
172
|
+
|
|
173
|
+
//# sourceMappingURL=Collapse.js.map
|