uview-ultra 4.5.53 → 4.5.74

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 (49) hide show
  1. package/changelog.md +214 -0
  2. package/components/up-button/up-button.uvue +9 -8
  3. package/components/up-button/up-button.vue +4 -4
  4. package/components/up-cell/props.js +6 -0
  5. package/components/up-cell/up-cell.uvue +15 -2
  6. package/components/up-cell/up-cell.vue +9 -2
  7. package/components/up-cell-group/up-cell-group.uvue +7 -0
  8. package/components/up-checkbox/up-checkbox.uvue +4 -3
  9. package/components/up-cropper/up-cropper.vue +1426 -1392
  10. package/components/up-form/up-form.uvue +281 -276
  11. package/components/up-form/up-form.vue +14 -6
  12. package/components/up-form-item/up-form-item.uvue +14 -1
  13. package/components/up-form-item/up-form-item.vue +14 -2
  14. package/components/up-input/up-input.uvue +4 -0
  15. package/components/up-input/up-input.vue +6 -1
  16. package/components/up-navbar/up-navbar.uvue +43 -4
  17. package/components/up-navbar/up-navbar.vue +14 -1
  18. package/components/up-number-keyboard/up-number-keyboard.uvue +7 -1
  19. package/components/up-number-keyboard/up-number-keyboard.vue +8 -1
  20. package/components/up-popup/props.js +10 -0
  21. package/components/up-popup/up-popup.uvue +89 -1
  22. package/components/up-popup/up-popup.vue +69 -1
  23. package/components/up-radio/up-radio.uvue +6 -4
  24. package/components/up-radio-group/radioGroup.js +1 -1
  25. package/components/up-radio-group/radioGroup.uts +1 -1
  26. package/components/up-root/root.js +1 -1
  27. package/components/up-select/up-select.uvue +328 -314
  28. package/components/up-select/up-select.vue +19 -2
  29. package/components/up-sticky/up-sticky.vue +4 -1
  30. package/components/up-switch/switch.uts +2 -1
  31. package/components/up-tag/up-tag.uvue +1 -1
  32. package/components/up-tag/up-tag.vue +1 -1
  33. package/components/up-transition/up-transition.uvue +10 -0
  34. package/components/up-transition/up-transition.vue +7 -0
  35. package/components/up-transition/vue.ani-style.scss +39 -10
  36. package/components/up-upload/props.js +5 -0
  37. package/components/up-upload/props.uts +5 -0
  38. package/components/up-upload/types.uts +1 -0
  39. package/components/up-upload/up-upload.uvue +9 -0
  40. package/components/up-upload/up-upload.vue +1 -0
  41. package/components/up-upload/upload.js +2 -0
  42. package/components/up-upload/upload.uts +2 -0
  43. package/components/up-upload/utils.js +23 -12
  44. package/components/up-upload/utils.uts +4 -0
  45. package/libs/theme/theme.js +12 -2
  46. package/libs/theme/theme.uts +151 -7
  47. package/libs/vite/app-icon-font.js +9 -5
  48. package/package.json +3 -2
  49. package/types/comps/upload.d.ts +5 -0
package/changelog.md CHANGED
@@ -1,3 +1,217 @@
1
+ ## 4.5.74
2
+ fix: 对齐 uview-plus 3.8.129 ~ 3.8.137 的上游修复
3
+
4
+ 逐条核对 3.8.129 起的 16 个提交后,把 ultra 侧缺失的部分移植过来;已在 ultra 具备或架构上不适用的项在末尾说明。
5
+
6
+ 修复:
7
+ - up-form 校验触发(#726):未配置 trigger 的规则视为任意触发方式执行,不再被静默跳过(此前 `[].concat(undefined)` 得到的数组不含事件名,规则永远不生效);errorType=toast 的提示统一移入 validateField,输入 / 失焦等自动触发的校验同样能弹提示,validate() 不再重复弹窗
8
+ - up-form-item 跟随 form 的 borderBottom(#614):新增 resolvedBorderBottom,未在 form-item 上显式设置时跟随 up-form 的同名属性;此前 form 级 borderBottom 完全不生效,分隔线永远不显示。注意升级后未显式设置的表单会开始显示分隔线,不需要时传 :borderBottom="false"
9
+ - up-input 首次程序化赋值不触发校验(#726):modelValue watcher 的早退分支补 firstChange 复位,修复弹窗选择回填首次赋值时不走 valueChange 与表单验证;doBlur 对原生节点引用补类型判断,避免小程序端 blur undefined
10
+ - up-sticky 吸顶间隙(#1063):cssSticky 分支的 addUnit 显式钉死 px。stickyTop 由 getPx 换算而来已是 px 数值,省略单位会跟随全局 unit 配置(如 rpx)二次换算,在非 375px 宽度设备上产生偏移
11
+ - up-select 面板位置(#1061):打开时在同一个更新周期内先复位对齐再挂载面板,避免复位产生的二次 setData 与节点查询竞态;溢出判断改用「触发区左缘 + 面板宽度」推算,与查询瞬间面板所处对齐状态无关,并补 else 分支复位,修复奇偶次打开位置交替、以及一旦溢出就永久贴右。.uvue 侧另补一次面板自身宽度测量,修复选项文字比触发区宽时右侧被裁掉
12
+ - up-number-keyboard 退格键短按无效:去掉退格键 @touchstart 上的 .stop(编译成微信小程序 catchtouchstart 后会吞掉同一节点上的 tap,短按再也删不掉、只剩长按有效);补 @touchcancel 清理长按定时器
13
+ - up-cropper 导出与安全区:新增 fileType 属性(默认 png,可选 jpg),quality 只在 jpg 下生效——此前 5 处 toTempFilePath 把 fileType 硬编码成 png,PNG 无质量档位导致 quality 形同虚设;quality 归一化由 parseInt 改 parseFloat 并夹取 0~1;safeAreaInsets 取值补兜底;底部操作栏高度改为 50px + 安全区并用 padding-bottom 让出,修复 iOS 上画布与操作栏之间露出一条页面背景、页面浮动元素透出的问题
14
+ - up-upload 选择媒体文件:新增 mediaType 属性(默认 ['image', 'video']),accept="media" 时透传给 chooseMedia 控制可选类型;chooseMedia 不再按平台编译判断,改为运行时检测接口是否存在,不存在时回退 chooseImage,修复部分平台 accept="media" 直接报错
15
+ - up-icon App 本地字体:构建插件原按 uni_modules/uview-ultra/... 绝对路径严格匹配,npm / pnpm 安装到 node_modules 时永远不命中,App 端远程 @font-face 不被剥离、本地图标字体不生效;改为按包内相对路径后缀匹配
16
+ - up-root(Vue3 侧):root.js 误写了 UTS 类型断言 as UTSJSONObject,导致该文件无法被 JS 解析、up-root 的默认配置在 uni-app Vue3 链路加载失败,已移除
17
+
18
+ 说明:
19
+ - up-navbar 的 avoidCapsule、up-text 移除 v-bind="$attrs"、up-goods-sku 的 defaultSku / safeAreaInsetBottom 与 close() 笔误、up-toast 的 overlay、up-barcode 画布引用时序在 ultra 侧已具备,本次未重复改动
20
+ - calc.div 改用 digit.divide:ultra 的 calc.div 引用的是本地 mul,不存在上游 xyutil is not defined 的崩溃,故未改
21
+ - 父子组件 children 时序守卫(#1065):ultra 的 children 在 setup 顶部即 ref([]) 初始化,不会出现上游 options API 里「watch 早于 created、children 尚未赋值」的 undefined,架构上已规避
22
+ - u-lottie 为独立新组件,涉及 H5 / 小程序 / 鸿蒙三套渲染引擎,不在本次移植范围
23
+
24
+ ## 4.5.73 (2026-10-30)
25
+ 更新示例工程
26
+ ## 4.5.72 (2026-10-30)
27
+ 累积更新:运行时主题能力增强、弹层交互、iOS 风格打磨、主色覆盖系列修复
28
+ 【新增】
29
+ 1. up-navbar 新增 frosted:滚过阈值后淡入一层半透明磨砂(高仿 iOS 材质),供 H5 / Android 等无系统玻璃带的端使用,与 ios 模式共用同一套淡入曲线;新增 statusBarInsetTop 状态栏占位覆盖(-1 用系统值、0 不占位,iOS standalone / PWA 下传 0);同时修复 App 端开 placeholder 后内容仍顶到导航行下、uvue App 端磨砂底色 color-mix 不生效「看似没开」(改用主题变量 --up-navbar-glass-bg / --up-navbar-glass-border)等问题
30
+ 2. up-empty 新增 bottom 具名插槽(按钮等操作区),对齐 uview-plus 3.x 接口——此前业务侧 template #bottom 静默不渲染(default 插槽不受影响)
31
+ 3. up-popup 新增 dragClose / dragCloseThreshold(默认 80px):bottom 弹层支持按住内容下拉跟手位移,松手超过阈值走既有 close 流程(update:show=false + close 事件),否则回弹归位;仅 bottom 模式且非 pageInline 生效,向上拖不拦截,弹层内部滚动不受影响
32
+ 4. 运行时主色(品牌色)切换 API:setThemePrimaryColor(color) / getThemePrimaryColor() / 响应式 upThemePrimaryColor。写入 storage 并立即刷新整张变量表,所有 var(--up-primary) / upThemeVar 消费点当前页即时生效;优先级:运行时品牌色 > config.color 覆盖(含 light/dark 后缀)> 主题表默认,传空串清除覆盖;启动时先加载持久化值再建首张变量表,避免首屏默认色跳变
33
+ 5. 新增 upThemeColorAlpha(varName, alpha, fallback):把当前主题色解析为 rgba(r, g, b, a),用于「主色 12% 浅底」(图标底衬、选中态背景、发光阴影)等场景,随主题切换与运行时品牌色联动;注意 --up-primary-light 是主题表独立浅色档(浅 #ecf5ff / 深 #10243a),不随主色计算,不能当「主色 + alpha」用
34
+ 6. config.uts 的 color 支持 up-<token>-light / up-<token>-dark 模式后缀键(优先于单值键):「浅色主色换黑系、深色保持原主色」只需在 config.color 写两个键,无需写 JS
35
+ 7. 主题变量新增 --up-tabbar-active-bg(底栏激活块底色),当前默认浅色 #e9e9eb / 深色 #2c2c2e(iOS 27 选中项浅灰风格;期间尝试的「由主色派生」方案因与底栏 Lottie 图标对比不足已撤回);应用侧激活文字需同步改深色(浅灰底上白字不可读)
36
+ 8. up-cell-group 默认改为 iOS grouped-inset 卡片形制(border-radius 12px + overflow hidden,子 cell 直角背景与分隔线裁进圆角;不需要圆角时 customStyle 传 borderRadius: 0);up-cell 新增 borderInsetLeft(默认 0 保持通栏):分隔线支持 iOS 标准左缩进(线条不顶到图标、从内容起始处开始)
37
+ 9. up-button / up-tag 默认(square)圆角改 iOS 风格:up-button 3px → 10px,up-tag 3px → 8px(circle 胶囊不变;显式 customStyle 圆角仍可覆盖)
38
+ 【修复】
39
+ 10. up-transition / 弹层「弹不出来」系列修复:进场动画结束后清理 enter-active / enter-to 类,修复 CSS 过渡被页面任意重渲染(字体 / lottie / 列表刷新)打断后弹层冻结在屏幕外;为 fade / zoom / fade-up/down/left/right / slide-up/down/left/right 十组动画补显式 enter-to 终态规则,修复蒸汽模式 web 端弹层被钉在起点;修复进场清理误引用 durationValue 导致的 ReferenceError
40
+ 11. up-navbar web 端状态栏高度改用 env(safe-area-inset-top) 探针探测,修复 iOS Safari 网页模式「状态栏与导航割裂成两块、导航有磨砂状态栏没有」;桌面 / Android 浏览器(env 为 0)与 App 端(原生 statusBarHeight)行为不变
41
+ 12. 主色覆盖后组件仍为默认蓝的系列修复:up-button type=primary 背景/边框接入 var(--up-primary)(.uvue / .vue 双实现,修复编译期色 + !important 压过内联样式的问题);up-radio / up-checkbox / up-switch 选中色接入主题变量;up-radio-group 默认 activeColor 改 var(--up-primary, #2979ff)。显式传色仍优先,行为不变
42
+ 13. 主题存储 key 统一 up- 前缀:u-theme-primary → up-theme-primary、u-theme-mode → up-theme-mode(.uts / .js 双实现),首次读取自动迁移旧值并删除旧 key,已有用户的主题模式与品牌色偏好不丢
43
+ 【变更】
44
+ 14. up-cell 默认内距 10px 15px → 14px(large 13px → 16px),left-icon-wrap margin-right 4px → 10px;外部如有依赖旧内距的布局请自查
45
+ ## 4.5.71
46
+ feat: 底栏激活块底色改 iOS 27 浅灰风格
47
+
48
+ - `--up-tabbar-active-bg`:浅色 #1c1c1f → **#e9e9eb**(iOS 27 选中项浅灰块),
49
+ 深色 #3a3a3c → **#2c2c2e**(比深色底栏微亮一档)
50
+ - 应用侧激活文字需同步改深色(浅灰底上白字不可读)
51
+
52
+ ## 4.5.70
53
+ revert: 撤回 4.5.69「底栏激活块底色由主色派生」,恢复固定值
54
+
55
+ - `--up-tabbar-active-bg` 恢复主题表固定值:浅 #1c1c1f / 深 #3a3a3c
56
+ - 原因:底栏 Lottie 图标是固定的蓝青双色填充,激活块改为「主色配套深色」后,
57
+ 彩色主色(如蓝/青)的派生底与固定蓝青图标对比不足(最差 3.02 贴线),
58
+ 且彩色底块与图标同框时色调打架;应用方决定撤回
59
+
60
+ ## 4.5.68
61
+ feat: 新增 upThemeColorAlpha,把主题色算成带透明度的 rgba
62
+
63
+ - `upThemeColorAlpha(varName, alpha, fallback)`:读当前主题色 → 解析 → 返回
64
+ `rgba(r, g, b, a)`。用于「主色 12% 浅底」这类场景(图标底衬、选中态背景、
65
+ 发光阴影),随主题切换与运行时品牌色一起变化
66
+ - 澄清:`--up-primary-light` 是主题表里独立的浅色档(浅 #ecf5ff / 深 #10243a),
67
+ **不随主色计算**,不能当「主色 + alpha」用——这正是业务侧此前只能硬编码
68
+ rgba 蓝的原因
69
+
70
+ ## 4.5.67
71
+ fix: 主题存储 key 统一 `up-` 前缀,并迁移旧 key
72
+
73
+ - `u-theme-primary`(4.5.66 首版)→ **`up-theme-primary`**;顺带把 fork 时代遗留的
74
+ `u-theme-mode` → **`up-theme-mode`**(`.uts` / `.js` 双实现)
75
+ - 首次读取时自动迁移旧 key(读到旧值写入新 key 并删除旧 key),已有用户的
76
+ 主题模式与品牌色偏好不会丢
77
+
78
+ ## 4.5.66
79
+ feat: 运行时主色(品牌色)切换 API
80
+
81
+ - theme.uts 新增 `setThemePrimaryColor(color)` / `getThemePrimaryColor()` /
82
+ 响应式 `upThemePrimaryColor`:写 storage(key `u-theme-primary`)+ 立即刷新
83
+ 整张变量表(`applyTheme`),所有 `var(--up-primary)` / `upThemeVar` 消费点
84
+ 当前页即时生效
85
+ - 优先级:**运行时品牌色 > `config.color` 覆盖(含 light/dark 后缀)> 主题表默认**;
86
+ 传空串清除覆盖回到 config 默认
87
+ - `initThemeSystem` 启动时先加载持久化值再建首张变量表,避免首屏默认色跳变
88
+ - 只覆盖主色单值;「浅色黑系、深色默认蓝」这类按模式区分的场景仍走 config 后缀键
89
+
90
+ ## 4.5.65
91
+ feat: up-button / up-tag 默认(square)圆角改为 iOS 风格
92
+
93
+ - up-button 默认 `shape: 'square'` 的圆角 3px → **10px**(`.uvue` / `.vue`
94
+ 双实现,四个方向变量同步);`shape: 'circle'` 仍为 100px 胶囊,不受影响
95
+ - up-tag 默认(square)圆角 3px → **8px**(尺寸比按钮小一档,视觉节奏一致);
96
+ `shape: 'circle'` 不变
97
+ - 显式传 `customStyle` 圆角仍可覆盖(内联优先级更高)
98
+
99
+ ## 4.5.64
100
+ fix: up-radio-group 默认 activeColor 接入主题变量(4.5.63 未覆盖到的一条)
101
+
102
+ - 4.5.63 改了 up-radio 自身的兜底色,但 **radio-group 的 `activeColor` 默认值本身
103
+ 就是 `#2979ff`**——子 radio 判定「父组件已指定颜色」,永远走不到 upThemeVar 兜底,
104
+ 选中态仍是蓝
105
+ - `radioGroup.uts` / `radioGroup.js` 的默认值改 `var(--up-primary, #2979ff)`
106
+ (显式传 activeColor 仍覆盖,行为不变)
107
+
108
+ ## 4.5.63
109
+ fix: up-radio / up-checkbox / up-switch 的选中色接入主题变量
110
+
111
+ 单选、复选、开关的选中色此前是**硬编码 #2979ff**(props 兜底 + scss 编译期色 +
112
+ `switch.uts` 默认值),完全不读主题变量——应用把主色覆盖为黑系后它们仍是蓝。
113
+
114
+ - up-radio:`elActiveColor` 兜底改 `upThemeVar('--up-primary', '#2979ff')`;
115
+ scss `&--checked` 的 background/border 改 `var(--up-primary, 编译期值)`
116
+ (显式传 `activeColor` 走内联 style,优先级更高,行为不变)
117
+ - up-checkbox:同款兜底与 scss 处理
118
+ - up-switch:`switch.uts` 的 `activeColor` 默认值与 `switch.js` 对齐为
119
+ `var(--up-switch-active-color, var(--up-primary, #2979ff))`
120
+ (蒸汽端走 .uts,此前只有 js 端接入了变量)
121
+
122
+ ## 4.5.62
123
+ fix: up-button 的 type=primary 接入主题变量,修复主色覆盖后按钮仍为默认蓝
124
+
125
+ - up-button(.uvue / .vue 双实现)此前 type 色走两条**编译期/静态**路径:
126
+ scss `$up-button-primary-background-color`(编译期 #2979ff,且带 !important
127
+ 压过内联样式)与 `.uvue` 的 `config.getString('color.up-primary')`(config
128
+ 单值键,light/dark 模式后缀键覆盖不生效)——应用把主色覆盖为黑系后按钮依旧蓝
129
+ - `.uvue`:`typeColor` / plain `textColor` 改 `upThemeVar(--up-<type>)`(响应式、
130
+ 随主题与模式后缀覆盖刷新,回退 config 单值);scss 背景与边框改
131
+ `var(--up-primary, 编译期值)`
132
+ - `.vue`:scss 背景/边框同样 var 化
133
+ - 其余 37 个组件的 scss `$up-primary` 消费(alert/badge/calendar/keyboard 等)
134
+ 列入后续清单
135
+
136
+ ## 4.5.61
137
+ fix: up-navbar web 端状态栏高度改用 env(safe-area-inset-top) 探测,修复 Safari 网页模式顶栏割裂
138
+
139
+ - H5 端 `uni.getSystemInfoSync().statusBarHeight` 恒 0,而 iOS Safari
140
+ (viewport-fit=cover,地址栏收起)的页面视口顶部包含状态栏区域:navbar 只有
141
+ 46px 钉在视口顶,状态栏段(约 59px)无导航、无磨砂,滚动内容直接穿过——
142
+ 「状态栏与导航割裂成两块、导航有磨砂状态栏没有」
143
+ - up-navbar(.uvue / .vue)在 web 端用探针元素读 `env(safe-area-inset-top)`
144
+ 实际像素作为状态栏占位(iPhone ≈ 59;桌面 / Android 浏览器 env 为 0、行为
145
+ 不变;App 端原生 statusBarHeight 准确,不进探测)
146
+ - standalone(PWA)分档不受影响:应用传 `statusBarInsetTop=0` 并由系统画带
147
+
148
+ ## 4.5.60
149
+ feat: config.uts color 支持 up-primary-light / up-primary-dark 按主题模式覆盖主色
150
+
151
+ - `configColorOverride` 支持模式后缀键(`up-<token>-light` / `up-<token>-dark`,
152
+ 优先于单值键):应用要「浅色主色换黑系、深色保持原主色」时在 config.color 写两个键即可,
153
+ 无需写 JS
154
+ - 修正 4.5.59 的 `--up-tabbar-active-bg` 浅色默认:#000000 → #1c1c1f(应用原意是
155
+ 「把主色覆盖为原底栏激活色」,激活块本身不该被改动)
156
+
157
+ ## 4.5.59
158
+ feat: 主题变量新增 --up-tabbar-active-bg(底栏激活块底色)
159
+
160
+ - theme.uts 的 light / dark 扩展变量表各加一项 `--up-tabbar-active-bg`
161
+ (浅色默认 #000000——应用方要求底栏激活块为黑色;深色 #3a3a3c,纯黑会融进
162
+ 深色底栏)。此前该色硬编码在应用侧底栏组件里,无法随主题配置
163
+ - 底栏组件以 `var(--up-tabbar-active-bg, ...)` 消费(应用侧自行接线)
164
+
165
+ ## 4.5.58
166
+ feat: up-cell-group 默认圆角 + up-cell 分隔线支持 iOS 标准左缩进
167
+
168
+ - up-cell-group(.uvue / .vue):默认 iOS grouped-inset 卡片形制——根节点
169
+ `border-radius: 12px; overflow: hidden`,子 cell 的直角背景与分隔线被裁进
170
+ 圆角;不需要圆角的场合用 customStyle 传 `borderRadius: 0` 覆盖
171
+ - up-cell(.uvue / .vue / props.js)新增 `borderInsetLeft`(默认 0,保持通栏):
172
+ 分隔线包进 `up-cell__line-wrap` 并按值加 `padding-left`,用于 iOS 标准的
173
+ 「线条不顶到图标、从图标右侧内容起始处开始」形制;业务侧按
174
+ 「左 padding + 图标宽 + 图标右距」取值
175
+
176
+ ## 4.5.57
177
+ fix: 修复 4.5.55 引入的 durationValue 未定义(up-transition 进场清理报 ReferenceError)
178
+
179
+ - vueEnter 的 setTimeout 清理误引用了不存在的 `durationValue` computed,弹层每次
180
+ 进场即抛 `ReferenceError: durationValue is not defined`;改为与 vueLeave 同款的
181
+ `parseInt(props.duration)` 解析
182
+
183
+ ## 4.5.56
184
+ fix: up-transition 补齐各模式 enter-to 显式终态,修复蒸汽 web 端弹层卡在起点
185
+
186
+ - vue.ani-style.scss:fade / zoom / fade-up / fade-down / fade-left / fade-right /
187
+ slide-up / slide-down / slide-left / slide-right 十组动画此前只定义了 enter(起点)
188
+ 规则,「归位」依赖 enter 类被移除后无 transform 的隐式状态。uni-app x 蒸汽模式的
189
+ web 渲染器对类名做包含式匹配(enter-to 含 enter 子串),起点规则持续命中,bottom
190
+ 弹层被钉在 translateY(100%)(屏幕之外),表现为「弹层弹不出来」
191
+ - 为十组模式补显式 `*-enter-to` 终态规则(transform: 0 / opacity: 1),规则顺序在
192
+ 起点规则之后,显式覆盖;同时保留 4.5.55 的动画类清理
193
+
194
+ ## 4.5.55
195
+ fix: up-transition 进场动画结束后清理动画类,修复 bottom 弹层偶发卡在屏幕外
196
+
197
+ - up-transition(.uvue / .vue 双实现):`vueEnter` 完成(duration + 50ms)后清掉
198
+ `enter-active` / `enter-to`。此前这两个类常驻,`transition-property: transform`
199
+ 一直在场——进场的 CSS 过渡一旦被页面上任何一次重渲染打断(字体/lottie/列表刷新
200
+ 都可能触发),computed transform 就冻结在起点:bottom 弹层停在 `translateY(100%)`
201
+ 即屏幕之外,且之后再无样式变化能触发新过渡把它拉回来,表现为「弹层弹不出来」
202
+ - 清掉 active 类后 transition-property 消失,被冻结的值直接跳到最终态归位;
203
+ 对 fade/zoom 等其它模式同样免疫打断
204
+
205
+ ## 4.5.54
206
+ feat: up-popup 新增 dragClose,bottom 弹层支持拖动下滑关闭
207
+
208
+ - up-popup(.uvue / .vue 双实现 + props.js)新增 `dragClose`(默认 false,不改变既有行为)
209
+ 与 `dragCloseThreshold`(默认 80px):bottom 弹层按住内容向下拖时跟手位移,松手超过
210
+ 阈值走既有 close 流程(update:show=false + close 事件),否则带回弹动画归位
211
+ - 仅 bottom 模式且非 pageInline 生效;向上拖不拦截,弹层内部滚动不受影响
212
+ - 动机:业务侧底部弹层(连接表单 / 主机选择器)顶部画了拖拽手柄,但组件一直没有
213
+ 拖动关闭能力,用户按手柄下拉毫无反应(「拖动失效」)
214
+
1
215
  ## 4.5.53
2
216
  feat: up-navbar 支持滚动磨砂与状态栏占位覆盖,磨砂底色改用主题变量;up-empty 补齐 bottom 具名插槽
3
217
 
@@ -72,6 +72,7 @@ import { computed } from 'vue'
72
72
  import { addStyle, addUnit, getPx, bem } from '../../libs/function/index'
73
73
  import { throttle } from '../../libs/function/throttle'
74
74
  import config from '../../libs/config/config'
75
+ import { upThemeVar } from '../../libs/theme/theme.uts'
75
76
  const props = defineProps({
76
77
  // 自定义样式
77
78
  customStyle: {
@@ -255,7 +256,7 @@ const loadingColor = computed(() => {
255
256
  // 如果有设置color值,则用color值,否则使用type主题颜色
256
257
  return props.color != ''
257
258
  ? props.color
258
- : config.getString(`color.up-${props.type}`) as string;
259
+ : upThemeVar(`--up-${props.type}`, config.getString(`color.up-${props.type}`) as string);
259
260
  }
260
261
  if (props.type == "info") {
261
262
  return "#c9c9c9";
@@ -270,7 +271,7 @@ const textColor = computed((): string => {
270
271
  if (props.color != '') return props.color
271
272
  if (props.type == 'info') return '#000000'
272
273
  if (props.type == 'warning') return config.getString('color.up-error') ?? '#fa3534'
273
- const color = config.getString(`color.up-${props.type}`) ?? ''
274
+ const color = upThemeVar(`--up-${props.type}`, config.getString(`color.up-${props.type}`) ?? '')
274
275
  return color == '' ? '#ffffff' : color
275
276
  })
276
277
 
@@ -402,10 +403,10 @@ $up-button-circle-border-top-right-radius: 100px !default;
402
403
  $up-button-circle-border-top-left-radius: 100px !default;
403
404
  $up-button-circle-border-bottom-left-radius: 100px !default;
404
405
  $up-button-circle-border-bottom-right-radius: 100px !default;
405
- $up-button-square-border-top-right-radius: 3px !default;
406
- $up-button-square-border-top-left-radius: 3px !default;
407
- $up-button-square-border-bottom-left-radius: 3px !default;
408
- $up-button-square-border-bottom-right-radius: 3px !default;
406
+ $up-button-square-border-top-right-radius: 10px !default;
407
+ $up-button-square-border-top-left-radius: 10px !default;
408
+ $up-button-square-border-bottom-left-radius: 10px !default;
409
+ $up-button-square-border-bottom-right-radius: 10px !default;
409
410
  $up-button-icon-min-width: 4px !default;
410
411
  $up-button-plain-background-color: transparent !default;
411
412
  $up-button-hairline-border-width: 0.5px !default;
@@ -500,8 +501,8 @@ $up-button-plain-up-button-warning-color:$up-error !default;;
500
501
  /* #ifndef APP */
501
502
  color: $up-button-primary-color;
502
503
  /* #endif */
503
- background-color: $up-button-primary-background-color !important;
504
- border-color: $up-button-primary-border-color !important;
504
+ background-color: var(--up-primary, $up-button-primary-background-color) !important;
505
+ border-color: var(--up-primary, $up-button-primary-border-color) !important;
505
506
  border-width: $up-button-primary-border-width !important;
506
507
  border-style: $up-button-primary-border-style !important;
507
508
  }
@@ -315,10 +315,10 @@ $up-button-circle-border-top-right-radius: 100px !default;
315
315
  $up-button-circle-border-top-left-radius: 100px !default;
316
316
  $up-button-circle-border-bottom-left-radius: 100px !default;
317
317
  $up-button-circle-border-bottom-right-radius: 100px !default;
318
- $up-button-square-border-top-right-radius: 3px !default;
319
- $up-button-square-border-top-left-radius: 3px !default;
320
- $up-button-square-border-bottom-left-radius: 3px !default;
321
- $up-button-square-border-bottom-right-radius: 3px !default;
318
+ $up-button-square-border-top-right-radius: 10px !default;
319
+ $up-button-square-border-top-left-radius: 10px !default;
320
+ $up-button-square-border-bottom-left-radius: 10px !default;
321
+ $up-button-square-border-bottom-right-radius: 10px !default;
322
322
  $up-button-icon-min-width: 1em !default;
323
323
  $up-button-plain-background-color: transparent !default;
324
324
  $up-button-hairline-border-width: 0.5px !default;
@@ -33,6 +33,12 @@ export const propsCell = defineMixin({
33
33
  type: Boolean,
34
34
  default: () => defProps.cell.border
35
35
  },
36
+ // 分隔线左侧偏移(px 或带单位字符串)。iOS 标准是线条不顶到图标,
37
+ // 而是从图标右侧的内容起始处开始;传 0 或不传保持通栏。
38
+ borderInsetLeft: {
39
+ type: [String, Number],
40
+ default: 0
41
+ },
36
42
  // 内容是否垂直居中(主要是针对右侧的value部分)
37
43
  center: {
38
44
  type: Boolean,
@@ -51,14 +51,21 @@
51
51
  </slot>
52
52
  </view>
53
53
  </view>
54
- <up-line v-if="border"></up-line>
54
+ <!--
55
+ iOS 标准分隔线:默认通栏;borderInsetLeft 传值后线条从该偏移处开始,
56
+ 对齐「图标右侧内容」的起始位置(= 左 padding + 图标宽 + 图标右距)。
57
+ -->
58
+ <view v-if="border" class="up-cell__line-wrap"
59
+ :style="{ paddingLeft: addUnit(borderInsetLeft) }">
60
+ <up-line></up-line>
61
+ </view>
55
62
  </view>
56
63
  </template>
57
64
 
58
65
  <script setup lang="ts">
59
66
  import { computed } from 'vue'
60
67
  import defProps from './cell'
61
- import { addStyle } from '../../libs/function/index'
68
+ import { addStyle, addUnit } from '../../libs/function/index'
62
69
  import { empty as _testEmpty } from '../../libs/function/test'
63
70
  // props
64
71
  const props = defineProps({
@@ -139,6 +146,12 @@
139
146
  type: Boolean,
140
147
  default: defProps.getBoolean('cell.border')
141
148
  },
149
+ // 分隔线左侧偏移(px 或带单位字符串)。iOS 标准是线条不顶到图标,
150
+ // 而是从图标右侧的内容起始处开始;传 0 或不传保持通栏。
151
+ borderInsetLeft: {
152
+ type: [String, Number],
153
+ default: 0
154
+ },
142
155
  disabled: {
143
156
  type: Boolean,
144
157
  default: defProps.getBoolean('cell.disabled')
@@ -44,7 +44,14 @@
44
44
  </slot>
45
45
  </view>
46
46
  </view>
47
- <up-line v-if="border"></up-line>
47
+ <!--
48
+ iOS 标准分隔线:默认通栏;borderInsetLeft 传值后线条从该偏移处开始,
49
+ 对齐「图标右侧内容」的起始位置(= 左 padding + 图标宽 + 图标右距)。
50
+ -->
51
+ <view v-if="border" class="up-cell__line-wrap"
52
+ :style="{ paddingLeft: addUnit(borderInsetLeft) }">
53
+ <up-line></up-line>
54
+ </view>
48
55
  </view>
49
56
  </template>
50
57
 
@@ -52,7 +59,7 @@
52
59
  import { computed, inject } from 'vue'
53
60
  import { propsCell } from './props.js'
54
61
  import { commonProps, useUltraUI } from '../../libs/composable/useUltraUI.js'
55
- import { addStyle } from '../../libs/function/index.js'
62
+ import { addStyle, addUnit } from '../../libs/function/index.js'
56
63
  import test from '../../libs/function/test.js'
57
64
  /**
58
65
  * cell 单元格
@@ -51,7 +51,14 @@
51
51
  $up-cell-group-title-line-height: 16px !default;
52
52
  $up-cell-group-title-color: $up-main-color !default;
53
53
 
54
+ /*
55
+ * 默认 iOS grouped-inset 卡片形制:大圆角 + 裁剪。
56
+ * 分隔线/子 cell 的直角背景被裁进圆角里;不需要圆角的场合用 customStyle
57
+ * 传 borderRadius: 0 覆盖(内联样式优先级高于此处类规则)。
58
+ */
54
59
  .up-cell-group {
60
+ border-radius: 12px;
61
+ overflow: hidden;
55
62
 
56
63
  &__title {
57
64
  padding: $up-cell-group-title-padding;
@@ -38,6 +38,7 @@
38
38
  import { array as testArray } from '../../libs/function/test'
39
39
  import { addStyle, addUnit, deepMerge, formValidate, error } from '../../libs/function/index'
40
40
  import defProps from './checkbox.uts'
41
+ import { upThemeVar } from '../../libs/theme/theme.uts'
41
42
  import { useUltraUI } from '../../libs/composable/useUltraUI'
42
43
  const { parent, parentData, getParentData } = useUltraUI()
43
44
  const instance = getCurrentInstance()!.proxy!
@@ -193,7 +194,7 @@
193
194
  ? props.activeColor
194
195
  : (parentData.value['activeColor'] != null
195
196
  ? parentData.value['activeColor'].toString()
196
- : '#2979ff');
197
+ : upThemeVar('--up-primary', '#2979ff'));
197
198
  })
198
199
 
199
200
  // 组件选未中激活时的颜色
@@ -503,8 +504,8 @@
503
504
 
504
505
  &--checked {
505
506
  color: $up-checkbox-icon-wrap-checked-color;
506
- background-color: $up-checkbox-icon-wrap-checked-background-color;
507
- border-color: $up-checkbox-icon-wrap-checked-border-color;
507
+ background-color: var(--up-primary, $up-checkbox-icon-wrap-checked-background-color);
508
+ border-color: var(--up-primary, $up-checkbox-icon-wrap-checked-border-color);
508
509
  }
509
510
 
510
511
  &--disabled {