@didaoktv/didaoui-uniapp 1.2.3 → 1.3.1

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 (76) hide show
  1. package/README.md +59 -0
  2. package/components/dd-action-sheet/dd-action-sheet.vue +7 -7
  3. package/components/dd-alert/dd-alert.vue +16 -16
  4. package/components/dd-backtop/dd-backtop.vue +3 -3
  5. package/components/dd-badge/dd-badge.vue +10 -10
  6. package/components/dd-bill-detail/dd-bill-detail.vue +20 -20
  7. package/components/dd-button/dd-button.vue +12 -12
  8. package/components/dd-calendar/dd-calendar.vue +21 -21
  9. package/components/dd-capsule-button/dd-capsule-button.vue +5 -5
  10. package/components/dd-car-keyboard/dd-car-keyboard.vue +8 -8
  11. package/components/dd-card/dd-card.vue +9 -9
  12. package/components/dd-cascader/dd-cascader.vue +3 -3
  13. package/components/dd-cell/dd-cell.vue +9 -9
  14. package/components/dd-cell-group/dd-cell-group.vue +4 -4
  15. package/components/dd-champion-card/dd-champion-card.vue +8 -8
  16. package/components/dd-checkbox/dd-checkbox.vue +8 -8
  17. package/components/dd-collapse/dd-collapse.vue +1 -1
  18. package/components/dd-collapse-item/dd-collapse-item.vue +6 -6
  19. package/components/dd-count-down/dd-count-down.vue +1 -1
  20. package/components/dd-coupon/dd-coupon.vue +53 -53
  21. package/components/dd-date-picker/dd-date-picker.vue +7 -7
  22. package/components/dd-dialog/dd-dialog.vue +12 -12
  23. package/components/dd-divider/dd-divider.vue +2 -2
  24. package/components/dd-drawer/dd-drawer.vue +7 -7
  25. package/components/dd-dropdown-item/dd-dropdown-item.vue +3 -3
  26. package/components/dd-dropdown-menu/dd-dropdown-menu.vue +3 -3
  27. package/components/dd-empty-state/dd-empty-state.vue +5 -5
  28. package/components/dd-feature-grid/dd-feature-grid.vue +3 -3
  29. package/components/dd-field/dd-field.vue +18 -18
  30. package/components/dd-goods-sku/dd-goods-sku.vue +14 -14
  31. package/components/dd-icon/dd-icon.vue +1 -1
  32. package/components/dd-image/dd-image.vue +5 -5
  33. package/components/dd-input/dd-input.vue +9 -9
  34. package/components/dd-keyboard/dd-keyboard.vue +5 -5
  35. package/components/dd-list-cell/dd-list-cell.vue +8 -8
  36. package/components/dd-loading/dd-loading.vue +4 -4
  37. package/components/dd-loadmore/dd-loadmore.vue +1 -1
  38. package/components/dd-markdown/dd-markdown.vue +10 -34
  39. package/components/dd-mini-program-navbar/dd-mini-program-navbar.vue +7 -7
  40. package/components/dd-modal/dd-modal.vue +11 -11
  41. package/components/dd-navigation/dd-navigation.vue +6 -6
  42. package/components/dd-number-keyboard/dd-number-keyboard.vue +6 -6
  43. package/components/dd-overlay/dd-overlay.vue +1 -1
  44. package/components/dd-picker/dd-picker.vue +11 -10
  45. package/components/dd-popover/dd-popover.vue +4 -4
  46. package/components/dd-popover-item/dd-popover-item.vue +2 -2
  47. package/components/dd-popup/dd-popup.vue +4 -4
  48. package/components/dd-progress/dd-progress.vue +8 -8
  49. package/components/dd-pull-refresh/dd-pull-refresh.vue +4 -4
  50. package/components/dd-radio/dd-radio.vue +5 -5
  51. package/components/dd-room-card/dd-room-card.vue +26 -26
  52. package/components/dd-search-bar/dd-search-bar.vue +11 -11
  53. package/components/dd-segmented-tab/dd-segmented-tab.vue +7 -7
  54. package/components/dd-signature/dd-signature.vue +6 -6
  55. package/components/dd-skeleton/dd-skeleton.vue +2 -2
  56. package/components/dd-slider/dd-slider.vue +6 -6
  57. package/components/dd-stat-card/dd-stat-card.vue +9 -9
  58. package/components/dd-step/dd-step.vue +2 -2
  59. package/components/dd-stepper/dd-stepper.vue +7 -7
  60. package/components/dd-swipe/dd-swipe.vue +1 -1
  61. package/components/dd-swipe-action/dd-swipe-action.vue +3 -3
  62. package/components/dd-swipeable-tab/dd-swipeable-tab.vue +5 -5
  63. package/components/dd-switch/dd-switch.vue +4 -4
  64. package/components/dd-tabbar/dd-tabbar.vue +2 -2
  65. package/components/dd-tabbar-item/dd-tabbar-item.vue +2 -2
  66. package/components/dd-tag/dd-tag.vue +33 -33
  67. package/components/dd-text/dd-text.vue +11 -11
  68. package/components/dd-toast/dd-toast.vue +5 -5
  69. package/components/dd-top-navbar/dd-top-navbar.vue +4 -4
  70. package/components/dd-upload/dd-upload.vue +6 -6
  71. package/components/dd-workorder-card/dd-workorder-card.vue +17 -17
  72. package/package.json +2 -1
  73. package/scss/_mixins.scss +11 -11
  74. package/scss/_theme-tokens.scss +183 -0
  75. package/scss/_variables.scss +298 -250
  76. package/scss/theme.scss +36 -0
package/README.md CHANGED
@@ -82,6 +82,65 @@ import { DdButton, DdInput } from '@didaoktv/didaoui-uniapp'
82
82
 
83
83
  4 / 8 / 12 / 16 / 24 / 32 / 48 / 64 px (8pt 基础网格)
84
84
 
85
+ ### 主题与浅色模式(v1.3.0+)
86
+
87
+ 默认主题为暗色(dark-first)。主题机制分三层,**新增任何主题都不需要改动组件**:
88
+
89
+ | 层 | 机制 | 适用场景 |
90
+ |----|------|---------|
91
+ | SCSS 编译期 | `_variables.scss` 全量 `!default`,消费者先声明变量再引入即可覆盖 | 整个 App 固定品牌换肤 |
92
+ | CSS 变量运行时 | 组件消费 `var(--dd-x, #{$dd-x})`,SCSS 值为兜底(不引入主题文件时与旧版渲染一致) | 明暗切换、多主题共存 |
93
+ | delta 级联 | `:root`/`page` 发射全量默认值(base 59 + 暗色 44),主题类只声明与默认不同的变量,未声明自动继承 | 快速配置新主题 |
94
+
95
+ **启用运行时主题**:在 `App.vue` 全局样式引入:
96
+
97
+ ```scss
98
+ @import '@didaoktv/didaoui-uniapp/scss/theme';
99
+ ```
100
+
101
+ **切换明暗**(默认暗色,`.light` 为 opt-in):
102
+
103
+ ```ts
104
+ // H5
105
+ document.documentElement.classList.toggle('light')
106
+ // 小程序:页面根节点挂类(自定义属性沿节点树继承进组件)
107
+ <view :class="isLight ? 'light' : 'dark'">…</view>
108
+ ```
109
+
110
+ **明暗核心对照**(翻转 delta 共 44 个,完整清单见 `scss/_theme-tokens.scss`):
111
+
112
+ | Token | Dark(默认) | Light |
113
+ |---|---|---|
114
+ | `--dd-bg` / `--dd-fg` | `#0A0A0A` / `#F5F5F5` | `#FAFAFA` / `#0A0A0A` |
115
+ | `--dd-surface` / `--dd-bg-card` | `#0A0A0A` / `#171717` | `#FFFFFF` |
116
+ | `--dd-border-default` / `--dd-rule` | `#2A2A2A` | `#BDBDBD` |
117
+ | `--dd-muted` | `#757575` | `#616161` |
118
+ | 品牌色 `--dd-primary` 等 | 不随明暗翻转 | 同暗色 |
119
+
120
+ **快速配置新主题**(两法互补):
121
+
122
+ ```scss
123
+ // 法一(编译期):uni.scss 中一行换品牌色,全库(含 var 兜底值)生效
124
+ $dd-primary: #d32f2f;
125
+ @import '@didaoktv/didaoui-uniapp/scss/variables';
126
+
127
+ // 法二(运行时):全局样式中声明 delta 类,页面根节点挂类即生效;可与 .light 并列
128
+ .cny-red {
129
+ @include dd-theme((
130
+ 'primary': #d32f2f,
131
+ 'primary-contrast': #ffffff,
132
+ 'gradient-primary': linear-gradient(135deg, #f44336, #b71c1c),
133
+ ));
134
+ }
135
+ ```
136
+
137
+ 注意事项:
138
+
139
+ - `$dd-primary-contrast`(金底文字)刻意**不随明暗翻转**(保持 `#0A0A0A`):品牌金不翻转,白字在金底对比度不可用;品牌主题可覆盖。
140
+ - 少数 `rgba($dd-brand, a)` 包裹处(checkbox/switch/slider 各 1 处)为编译期值,不跟随运行时品牌换肤(明暗无碍)。
141
+ - nvue 不支持 CSS 变量,不在主题机制支持范围内。
142
+ - 自检:`npx tsc scripts/theme-selfcheck.ts --module commonjs --target es2020 --lib "es2020,dom" --outDir .check --skipLibCheck; node .check/theme-selfcheck.js`
143
+
85
144
  ## 新增业务组件(2026-08-22 纳入设计系统)
86
145
 
87
146
  > 新组件统一以主流组件库(Vant 等)同名/同类组件为 API 设计基准,符合 uni-app 多端规范,只消费上层 `scss/_variables.scss` 既有 token。
@@ -98,7 +98,7 @@ function onClose() {
98
98
  &__mask {
99
99
  position: fixed;
100
100
  inset: 0;
101
- background: $dd-color-overlay-strong;
101
+ background: var(--dd-color-overlay-strong, #{$dd-color-overlay-strong});
102
102
  opacity: 0;
103
103
  visibility: hidden;
104
104
  z-index: 1000;
@@ -145,7 +145,7 @@ function onClose() {
145
145
  &__title-text {
146
146
  font-size: $dd-font-size-h4;
147
147
  font-weight: $dd-font-weight-h4;
148
- color: $dd-text-primary;
148
+ color: var(--dd-text-primary, #{$dd-text-primary});
149
149
  }
150
150
 
151
151
  &__grid {
@@ -165,7 +165,7 @@ function onClose() {
165
165
  width: 96rpx;
166
166
  height: 96rpx;
167
167
  border-radius: 50%;
168
- background: $dd-gradient-primary;
168
+ background: var(--dd-gradient-primary, #{$dd-gradient-primary});
169
169
  @include dd-flex-center;
170
170
  @include dd-glow(gold);
171
171
  }
@@ -180,7 +180,7 @@ function onClose() {
180
180
  &__name {
181
181
  margin-top: $dd-space-1;
182
182
  font-size: $dd-font-size-caption;
183
- color: $dd-text-secondary;
183
+ color: var(--dd-text-secondary, #{$dd-text-secondary});
184
184
  max-width: 128rpx;
185
185
  @include dd-ellipsis(1);
186
186
  }
@@ -189,14 +189,14 @@ function onClose() {
189
189
  margin-top: $dd-space-3;
190
190
  height: 96rpx;
191
191
  border-radius: $dd-radius-xl;
192
- background: $dd-surface-container-high;
192
+ background: var(--dd-surface-container-high, #{$dd-surface-container-high});
193
193
  @include dd-flex-center;
194
- @include dd-hairline-top($dd-border-strong);
194
+ @include dd-hairline-top(var(--dd-border-strong, #{$dd-border-strong}));
195
195
  }
196
196
 
197
197
  &__cancel-text {
198
198
  font-size: $dd-font-size-body;
199
- color: $dd-text-primary;
199
+ color: var(--dd-text-primary, #{$dd-text-primary});
200
200
  font-weight: $dd-font-weight-body;
201
201
  }
202
202
 
@@ -97,7 +97,7 @@ function onMaskClick() {
97
97
  &__mask {
98
98
  position: fixed;
99
99
  inset: 0;
100
- background: $dd-color-overlay-strong;
100
+ background: var(--dd-color-overlay-strong, #{$dd-color-overlay-strong});
101
101
  opacity: 0;
102
102
  visibility: hidden;
103
103
  z-index: 1000;
@@ -118,10 +118,10 @@ function onMaskClick() {
118
118
  visibility: hidden;
119
119
  z-index: 1001;
120
120
  width: 560rpx;
121
- background: $dd-bg-elevated;
122
- border: 1px solid $dd-border-default;
121
+ background: var(--dd-bg-elevated, #{$dd-bg-elevated});
122
+ border: 1px solid var(--dd-border-default, #{$dd-border-default});
123
123
  border-radius: $dd-radius-xl;
124
- box-shadow: $dd-shadow-4;
124
+ box-shadow: var(--dd-shadow-4, #{$dd-shadow-4});
125
125
  padding: $dd-space-5 $dd-space-5 $dd-space-4;
126
126
  display: flex;
127
127
  flex-direction: column;
@@ -143,27 +143,27 @@ function onMaskClick() {
143
143
  margin-bottom: $dd-space-3;
144
144
 
145
145
  &--info {
146
- background: $dd-gradient-accent;
146
+ background: var(--dd-gradient-accent, #{$dd-gradient-accent});
147
147
  box-shadow: 0 0 40rpx rgba(45, 75, 160, 0.4);
148
148
  }
149
149
 
150
150
  &--success {
151
- background: $dd-gradient-success;
151
+ background: var(--dd-gradient-success, #{$dd-gradient-success});
152
152
  box-shadow: 0 0 40rpx rgba(76, 175, 80, 0.4);
153
153
  }
154
154
 
155
155
  &--warning {
156
- background: $dd-gradient-warning;
156
+ background: var(--dd-gradient-warning, #{$dd-gradient-warning});
157
157
  box-shadow: 0 0 40rpx rgba(249, 168, 37, 0.4);
158
158
  }
159
159
 
160
160
  &--error {
161
- background: $dd-gradient-error;
161
+ background: var(--dd-gradient-error, #{$dd-gradient-error});
162
162
  box-shadow: 0 0 40rpx rgba(229, 57, 53, 0.4);
163
163
  }
164
164
 
165
165
  &--confirm {
166
- background: $dd-gradient-primary-wide;
166
+ background: var(--dd-gradient-primary-wide, #{$dd-gradient-primary-wide});
167
167
  @include dd-glow(gold);
168
168
  }
169
169
  }
@@ -178,7 +178,7 @@ function onMaskClick() {
178
178
  &__title {
179
179
  font-size: $dd-font-size-h4;
180
180
  font-weight: $dd-font-weight-h4;
181
- color: $dd-text-primary;
181
+ color: var(--dd-text-primary, #{$dd-text-primary});
182
182
  text-align: center;
183
183
  line-height: $dd-line-height-h4;
184
184
  }
@@ -186,7 +186,7 @@ function onMaskClick() {
186
186
  &__message {
187
187
  margin-top: $dd-space-2;
188
188
  font-size: $dd-font-size-body;
189
- color: $dd-text-secondary;
189
+ color: var(--dd-text-secondary, #{$dd-text-secondary});
190
190
  text-align: center;
191
191
  line-height: $dd-line-height-body;
192
192
  }
@@ -209,13 +209,13 @@ function onMaskClick() {
209
209
 
210
210
  &--cancel {
211
211
  height: 88rpx;
212
- background: $dd-neutral-700;
213
- border: 1px solid $dd-border-strong;
212
+ background: var(--dd-surface-container-high, #{$dd-surface-container-high});
213
+ border: 1px solid var(--dd-border-strong, #{$dd-border-strong});
214
214
  }
215
215
 
216
216
  &--confirm {
217
217
  height: 88rpx;
218
- background: $dd-gradient-primary;
218
+ background: var(--dd-gradient-primary, #{$dd-gradient-primary});
219
219
  }
220
220
  }
221
221
 
@@ -228,11 +228,11 @@ function onMaskClick() {
228
228
  font-weight: $dd-font-weight-body;
229
229
 
230
230
  &--cancel {
231
- color: $dd-text-secondary;
231
+ color: var(--dd-text-secondary, #{$dd-text-secondary});
232
232
  }
233
233
 
234
234
  &--confirm {
235
- color: $dd-neutral-900;
235
+ color: var(--dd-primary-contrast, #{$dd-primary-contrast});
236
236
  font-weight: 700;
237
237
  }
238
238
  }
@@ -51,9 +51,9 @@ function onClick() {
51
51
  width: 80rpx;
52
52
  height: 80rpx;
53
53
  border-radius: $dd-radius-full;
54
- background: $dd-surface;
55
- color: $dd-text-primary;
56
- box-shadow: $dd-shadow-2;
54
+ background: var(--dd-surface, #{$dd-surface});
55
+ color: var(--dd-text-primary, #{$dd-text-primary});
56
+ box-shadow: var(--dd-shadow-2, #{$dd-shadow-2});
57
57
  @include dd-flex-center;
58
58
  opacity: 0;
59
59
  transform: scale(0);
@@ -121,28 +121,28 @@ const visible = computed(() => {
121
121
 
122
122
  // === 4 色变体 ===
123
123
  .dd-badge__sup--primary {
124
- background: $dd-gradient-primary;
125
- box-shadow: $dd-shadow-glow-gold-sm;
124
+ background: var(--dd-gradient-primary, #{$dd-gradient-primary});
125
+ box-shadow: var(--dd-shadow-glow-gold-sm, #{$dd-shadow-glow-gold-sm});
126
126
  }
127
127
 
128
128
  .dd-badge__sup--error {
129
- background: $dd-error-500;
130
- box-shadow: $dd-shadow-glow-error-sm;
129
+ background: var(--dd-error, #{$dd-error});
130
+ box-shadow: var(--dd-shadow-glow-error-sm, #{$dd-shadow-glow-error-sm});
131
131
  }
132
132
 
133
133
  .dd-badge__sup--success {
134
- background: $dd-success-500;
135
- box-shadow: $dd-shadow-glow-success-sm;
134
+ background: var(--dd-success, #{$dd-success});
135
+ box-shadow: var(--dd-shadow-glow-success-sm, #{$dd-shadow-glow-success-sm});
136
136
  }
137
137
 
138
138
  .dd-badge__sup--warning {
139
- background: $dd-warning-500;
140
- color: $dd-warning-contrast;
141
- box-shadow: $dd-shadow-glow-warning-md;
139
+ background: var(--dd-warning, #{$dd-warning});
140
+ color: var(--dd-warning-contrast, #{$dd-warning-contrast});
141
+ box-shadow: var(--dd-shadow-glow-warning-md, #{$dd-shadow-glow-warning-md});
142
142
  }
143
143
 
144
144
  // text 变体强制反色字
145
145
  .dd-badge__sup--text.dd-badge__sup--warning .dd-badge__txt {
146
- color: $dd-warning-contrast;
146
+ color: var(--dd-warning-contrast, #{$dd-warning-contrast});
147
147
  }
148
148
  </style>
@@ -115,8 +115,8 @@ function onClick(item: BillItem, index: number) {
115
115
  padding: $dd-space-3 $dd-space-4;
116
116
  font-size: $dd-font-size-body;
117
117
  font-weight: $dd-font-weight-lead;
118
- color: $dd-text-primary;
119
- border-bottom: 1px solid $dd-border-subtle;
118
+ color: var(--dd-text-primary, #{$dd-text-primary});
119
+ border-bottom: 1px solid var(--dd-border-subtle, #{$dd-border-subtle});
120
120
  }
121
121
 
122
122
  .dd-bill-detail__goods {
@@ -130,7 +130,7 @@ function onClick(item: BillItem, index: number) {
130
130
  padding: $dd-space-2 0;
131
131
 
132
132
  &--press {
133
- background: $dd-interactive-hover;
133
+ background: var(--dd-interactive-hover, #{$dd-interactive-hover});
134
134
  }
135
135
  }
136
136
 
@@ -152,13 +152,13 @@ function onClick(item: BillItem, index: number) {
152
152
 
153
153
  .dd-bill-detail__name {
154
154
  font-size: $dd-font-size-body;
155
- color: $dd-text-primary;
155
+ color: var(--dd-text-primary, #{$dd-text-primary});
156
156
  @include dd-ellipsis(1);
157
157
  }
158
158
 
159
159
  .dd-bill-detail__price {
160
160
  font-size: $dd-font-size-caption;
161
- color: $dd-text-tertiary;
161
+ color: var(--dd-text-tertiary, #{$dd-text-tertiary});
162
162
  }
163
163
 
164
164
  .dd-bill-detail__gcount {
@@ -167,7 +167,7 @@ function onClick(item: BillItem, index: number) {
167
167
 
168
168
  .dd-bill-detail__count {
169
169
  font-size: $dd-font-size-caption;
170
- color: $dd-text-secondary;
170
+ color: var(--dd-text-secondary, #{$dd-text-secondary});
171
171
  }
172
172
 
173
173
  .dd-bill-detail__gamount {
@@ -177,7 +177,7 @@ function onClick(item: BillItem, index: number) {
177
177
  .dd-bill-detail__amount {
178
178
  font-size: $dd-font-size-body;
179
179
  font-weight: $dd-font-weight-lead;
180
- color: $dd-text-primary;
180
+ color: var(--dd-text-primary, #{$dd-text-primary});
181
181
  font-family: $dd-font-mono;
182
182
  }
183
183
 
@@ -187,12 +187,12 @@ function onClick(item: BillItem, index: number) {
187
187
 
188
188
  &-text {
189
189
  font-size: $dd-font-size-body;
190
- color: $dd-text-tertiary;
190
+ color: var(--dd-text-tertiary, #{$dd-text-tertiary});
191
191
  }
192
192
  }
193
193
 
194
194
  .dd-bill-detail__summary {
195
- border-top: 1px solid $dd-border-subtle;
195
+ border-top: 1px solid var(--dd-border-subtle, #{$dd-border-subtle});
196
196
  padding: $dd-space-2 $dd-space-4 $dd-space-3;
197
197
  }
198
198
 
@@ -205,18 +205,18 @@ function onClick(item: BillItem, index: number) {
205
205
  &--total {
206
206
  margin-top: $dd-space-1;
207
207
  padding-top: $dd-space-2;
208
- border-top: 1px solid $dd-border-subtle;
208
+ border-top: 1px solid var(--dd-border-subtle, #{$dd-border-subtle});
209
209
  }
210
210
  }
211
211
 
212
212
  .dd-bill-detail__sum-label {
213
213
  font-size: $dd-font-size-caption;
214
- color: $dd-text-tertiary;
214
+ color: var(--dd-text-tertiary, #{$dd-text-tertiary});
215
215
  }
216
216
 
217
217
  .dd-bill-detail__sum-value {
218
218
  font-size: $dd-font-size-caption;
219
- color: $dd-text-secondary;
219
+ color: var(--dd-text-secondary, #{$dd-text-secondary});
220
220
  font-family: $dd-font-mono;
221
221
  }
222
222
 
@@ -229,13 +229,13 @@ function onClick(item: BillItem, index: number) {
229
229
  .dd-bill-detail__total-label {
230
230
  font-size: $dd-font-size-body;
231
231
  font-weight: $dd-font-weight-lead;
232
- color: $dd-text-primary;
232
+ color: var(--dd-text-primary, #{$dd-text-primary});
233
233
  }
234
234
 
235
235
  .dd-bill-detail__total {
236
236
  font-size: $dd-font-size-h4;
237
237
  font-weight: $dd-font-weight-h3;
238
- color: $dd-primary-400;
238
+ color: var(--dd-primary-400, #{$dd-primary-400});
239
239
  font-family: $dd-font-mono;
240
240
  }
241
241
 
@@ -244,16 +244,16 @@ function onClick(item: BillItem, index: number) {
244
244
  padding: 2rpx 12rpx;
245
245
  border-radius: $dd-radius-sm;
246
246
 
247
- &--unpaid { color: $dd-warning-400; background: rgba(249, 168, 37, 0.12); }
248
- &--paid { color: $dd-success-400; background: rgba(76, 175, 80, 0.12); }
249
- &--refunding { color: $dd-info-400; background: rgba(0, 188, 212, 0.12); }
250
- &--refunded { color: $dd-warning-400; background: rgba(249, 168, 37, 0.12); }
251
- &--cancelled { color: $dd-text-tertiary; background: rgba(255, 255, 255, 0.08); }
247
+ &--unpaid { color: var(--dd-warning-400, #{$dd-warning-400}); background: rgba(249, 168, 37, 0.12); }
248
+ &--paid { color: var(--dd-success-400, #{$dd-success-400}); background: rgba(76, 175, 80, 0.12); }
249
+ &--refunding { color: var(--dd-info-400, #{$dd-info-400}); background: rgba(0, 188, 212, 0.12); }
250
+ &--refunded { color: var(--dd-warning-400, #{$dd-warning-400}); background: rgba(249, 168, 37, 0.12); }
251
+ &--cancelled { color: var(--dd-text-tertiary, #{$dd-text-tertiary}); background: rgba(255, 255, 255, 0.08); }
252
252
  }
253
253
 
254
254
  .dd-bill-detail__actions {
255
255
  padding: $dd-space-3 $dd-space-4;
256
- border-top: 1px solid $dd-border-subtle;
256
+ border-top: 1px solid var(--dd-border-subtle, #{$dd-border-subtle});
257
257
  display: flex;
258
258
  justify-content: flex-end;
259
259
  gap: $dd-space-3;
@@ -150,21 +150,21 @@ function onClick(e: Event) {
150
150
  }
151
151
 
152
152
  .dd-btn--primary {
153
- background: $dd-primary-500;
153
+ background: var(--dd-primary, #{$dd-primary});
154
154
  color: $dd-neutral-50;
155
155
  }
156
156
  .dd-btn--secondary {
157
- background: $dd-neutral-800;
158
- color: $dd-primary-400;
159
- border-color: $dd-neutral-700;
157
+ background: var(--dd-surface-container, #{$dd-surface-container});
158
+ color: var(--dd-primary-400, #{$dd-primary-400});
159
+ border-color: var(--dd-border-default, #{$dd-border-default});
160
160
  }
161
161
  .dd-btn--ghost {
162
162
  background: transparent;
163
- color: $dd-neutral-300;
163
+ color: var(--dd-text-secondary, #{$dd-text-secondary});
164
164
  }
165
165
  .dd-btn--text {
166
166
  background: transparent;
167
- color: $dd-primary-400;
167
+ color: var(--dd-primary-400, #{$dd-primary-400});
168
168
  border-color: transparent;
169
169
  border-radius: 0;
170
170
  height: auto;
@@ -178,16 +178,16 @@ function onClick(e: Event) {
178
178
  }
179
179
  }
180
180
  .dd-btn--success {
181
- background: $dd-success-500;
182
- color: $dd-success-contrast;
181
+ background: var(--dd-success, #{$dd-success});
182
+ color: var(--dd-success-contrast, #{$dd-success-contrast});
183
183
  }
184
184
  .dd-btn--warning {
185
- background: $dd-warning-500;
186
- color: $dd-warning-contrast;
185
+ background: var(--dd-warning, #{$dd-warning});
186
+ color: var(--dd-warning-contrast, #{$dd-warning-contrast});
187
187
  }
188
188
  .dd-btn--danger {
189
- background: $dd-error-500;
190
- color: $dd-error-contrast;
189
+ background: var(--dd-error, #{$dd-error});
190
+ color: var(--dd-error-contrast, #{$dd-error-contrast});
191
191
  }
192
192
 
193
193
  .dd-btn--round {
@@ -217,20 +217,20 @@ function onConfirm() {
217
217
  width: 56rpx;
218
218
  height: 56rpx;
219
219
  border-radius: $dd-radius-md;
220
- background: $dd-surface-container-high;
220
+ background: var(--dd-surface-container-high, #{$dd-surface-container-high});
221
221
  @include dd-flex-center;
222
- color: $dd-text-secondary;
222
+ color: var(--dd-text-secondary, #{$dd-text-secondary});
223
223
  font-size: $dd-font-size-h4;
224
224
 
225
225
  &--press {
226
- background: $dd-surface-press;
226
+ background: var(--dd-surface-press, #{$dd-surface-press});
227
227
  }
228
228
  }
229
229
 
230
230
  .dd-calendar__title {
231
231
  font-size: $dd-font-size-body;
232
232
  font-weight: $dd-font-weight-lead;
233
- color: $dd-text-primary;
233
+ color: var(--dd-text-primary, #{$dd-text-primary});
234
234
  }
235
235
 
236
236
  .dd-calendar__week {
@@ -242,7 +242,7 @@ function onConfirm() {
242
242
  .dd-calendar__week-item {
243
243
  text-align: center;
244
244
  font-size: $dd-font-size-caption;
245
- color: $dd-text-tertiary;
245
+ color: var(--dd-text-tertiary, #{$dd-text-tertiary});
246
246
  }
247
247
 
248
248
  .dd-calendar__grid {
@@ -257,13 +257,13 @@ function onConfirm() {
257
257
  border-radius: $dd-radius-md;
258
258
 
259
259
  &--press:not(.dd-calendar__cell--disabled, .dd-calendar__cell--blank) {
260
- background: $dd-surface-hover;
260
+ background: var(--dd-surface-hover, #{$dd-surface-hover});
261
261
  }
262
262
  }
263
263
 
264
264
  .dd-calendar__day {
265
265
  font-size: $dd-font-size-body;
266
- color: $dd-text-primary;
266
+ color: var(--dd-text-primary, #{$dd-text-primary});
267
267
  }
268
268
 
269
269
  .dd-calendar__cell--blank .dd-calendar__day {
@@ -271,19 +271,19 @@ function onConfirm() {
271
271
  }
272
272
 
273
273
  .dd-calendar__cell--disabled .dd-calendar__day {
274
- color: $dd-text-tertiary;
274
+ color: var(--dd-text-tertiary, #{$dd-text-tertiary});
275
275
  opacity: 0.4;
276
276
  }
277
277
 
278
278
  .dd-calendar__cell--today .dd-calendar__day {
279
- color: $dd-primary-400;
279
+ color: var(--dd-primary-400, #{$dd-primary-400});
280
280
  font-weight: 700;
281
281
  }
282
282
 
283
283
  .dd-calendar__cell--selected {
284
- background: $dd-gradient-primary;
284
+ background: var(--dd-gradient-primary, #{$dd-gradient-primary});
285
285
  .dd-calendar__day {
286
- color: $dd-neutral-900;
286
+ color: var(--dd-primary-contrast, #{$dd-primary-contrast});
287
287
  font-weight: 700;
288
288
  }
289
289
  }
@@ -295,13 +295,13 @@ function onConfirm() {
295
295
 
296
296
  .dd-calendar__slots {
297
297
  margin-top: $dd-space-3;
298
- border-top: 1px solid $dd-border-subtle;
298
+ border-top: 1px solid var(--dd-border-subtle, #{$dd-border-subtle});
299
299
  padding-top: $dd-space-3;
300
300
  }
301
301
 
302
302
  .dd-calendar__slots-title {
303
303
  font-size: $dd-font-size-caption;
304
- color: $dd-text-tertiary;
304
+ color: var(--dd-text-tertiary, #{$dd-text-tertiary});
305
305
  margin-bottom: $dd-space-2;
306
306
  }
307
307
 
@@ -314,13 +314,13 @@ function onConfirm() {
314
314
  .dd-calendar__slot {
315
315
  padding: $dd-space-1 $dd-space-3;
316
316
  font-size: $dd-font-size-caption;
317
- color: $dd-text-secondary;
318
- background: $dd-surface-container-high;
317
+ color: var(--dd-text-secondary, #{$dd-text-secondary});
318
+ background: var(--dd-surface-container-high, #{$dd-surface-container-high});
319
319
  border-radius: $dd-radius-md;
320
320
 
321
321
  &--active {
322
- color: $dd-neutral-900;
323
- background: $dd-gradient-primary;
322
+ color: var(--dd-primary-contrast, #{$dd-primary-contrast});
323
+ background: var(--dd-gradient-primary, #{$dd-gradient-primary});
324
324
  font-weight: 700;
325
325
  }
326
326
 
@@ -334,19 +334,19 @@ function onConfirm() {
334
334
  justify-content: flex-end;
335
335
  gap: $dd-space-3;
336
336
  margin-top: $dd-space-3;
337
- border-top: 1px solid $dd-border-subtle;
337
+ border-top: 1px solid var(--dd-border-subtle, #{$dd-border-subtle});
338
338
  padding-top: $dd-space-3;
339
339
  }
340
340
 
341
341
  .dd-calendar__footer-btn {
342
342
  padding: $dd-space-2 $dd-space-4;
343
343
  font-size: $dd-font-size-body;
344
- color: $dd-text-secondary;
344
+ color: var(--dd-text-secondary, #{$dd-text-secondary});
345
345
  border-radius: $dd-radius-md;
346
346
 
347
347
  &--primary {
348
- color: $dd-neutral-900;
349
- background: $dd-gradient-primary;
348
+ color: var(--dd-primary-contrast, #{$dd-primary-contrast});
349
+ background: var(--dd-gradient-primary, #{$dd-gradient-primary});
350
350
  font-weight: 700;
351
351
  }
352
352
 
@@ -66,7 +66,7 @@ function onMenu() {
66
66
  &__btn {
67
67
  flex: 1;
68
68
  @include dd-flex-center;
69
- color: $dd-text-secondary;
69
+ color: var(--dd-text-secondary, #{$dd-text-secondary});
70
70
  @include dd-transition(background 0.2s ease);
71
71
 
72
72
  &:active {
@@ -78,8 +78,8 @@ function onMenu() {
78
78
  &__arrow {
79
79
  width: 20rpx;
80
80
  height: 20rpx;
81
- border-left: $dd-space-1 solid $dd-text-secondary;
82
- border-bottom: $dd-space-1 solid $dd-text-secondary;
81
+ border-left: $dd-space-1 solid var(--dd-text-secondary, #{$dd-text-secondary});
82
+ border-bottom: $dd-space-1 solid var(--dd-text-secondary, #{$dd-text-secondary});
83
83
  transform: rotate(45deg);
84
84
  margin-left: $dd-space-1;
85
85
  }
@@ -87,7 +87,7 @@ function onMenu() {
87
87
  &__dots {
88
88
  font-size: $dd-font-size-h3;
89
89
  line-height: 1;
90
- color: $dd-text-secondary;
90
+ color: var(--dd-text-secondary, #{$dd-text-secondary});
91
91
  }
92
92
 
93
93
  // 1px 竖向分隔线,仅 default 变体
@@ -95,7 +95,7 @@ function onMenu() {
95
95
  width: 1px;
96
96
  height: $dd-space-4;
97
97
  align-self: center;
98
- background: $dd-border-default;
98
+ background: var(--dd-border-default, #{$dd-border-default});
99
99
  flex-shrink: 0;
100
100
  }
101
101
 
@@ -222,25 +222,25 @@
222
222
  <style lang="scss" scoped>
223
223
  @import '../../scss/variables';
224
224
  @import '../../scss/dd-shared';
225
- $dd-car-keyboard-background-color: $dd-bg-section !default;
225
+ $dd-car-keyboard-background-color: var(--dd-bg-section, #{$dd-bg-section}) !default;
226
226
  $dd-car-keyboard-padding:6px 0 6px !default;
227
227
  $dd-car-keyboard-button-inner-width:64rpx !default;
228
- $dd-car-keyboard-button-inner-background-color:$dd-surface-container-high !default;
228
+ $dd-car-keyboard-button-inner-background-color:var(--dd-surface-container-high, #{$dd-surface-container-high}) !default;
229
229
  $dd-car-keyboard-button-height:80rpx !default;
230
- $dd-car-keyboard-button-inner-box-shadow:0 1px 0px $dd-bg !default;
230
+ $dd-car-keyboard-button-inner-box-shadow:0 1px 0px var(--dd-bg, #{$dd-bg}) !default;
231
231
  $dd-car-keyboard-button-border-radius:4px !default;
232
232
  $dd-car-keyboard-button-inner-margin:8rpx 5rpx !default;
233
233
  $dd-car-keyboard-button-text-font-size:16px !default;
234
- $dd-car-keyboard-button-text-color:$dd-text-primary !default;
234
+ $dd-car-keyboard-button-text-color:var(--dd-text-primary, #{$dd-text-primary}) !default;
235
235
  $dd-car-keyboard-center-inner-margin: 0 4rpx !default;
236
236
  $dd-car-keyboard-special-button-width:134rpx !default;
237
237
  $dd-car-keyboard-lang-font-size:16px !default;
238
- $dd-car-keyboard-lang-color:$dd-text-primary !default;
239
- $dd-car-keyboard-active-color:$dd-primary-400 !default;
238
+ $dd-car-keyboard-lang-color:var(--dd-text-primary, #{$dd-text-primary}) !default;
239
+ $dd-car-keyboard-active-color:var(--dd-primary-400, #{$dd-primary-400}) !default;
240
240
  $dd-car-keyboard-line-font-size:15px !default;
241
- $dd-car-keyboard-line-color:$dd-text-primary !default;
241
+ $dd-car-keyboard-line-color:var(--dd-text-primary, #{$dd-text-primary}) !default;
242
242
  $dd-car-keyboard-line-margin:0 1px !default;
243
- $dd-car-keyboard-dd-keyboard-hover-background-color:$dd-surface-hover !default;
243
+ $dd-car-keyboard-dd-keyboard-hover-background-color:var(--dd-surface-hover, #{$dd-surface-hover}) !default;
244
244
 
245
245
  .dd-keyboard {
246
246
  @include flex(column);