@didaoktv/didaoui-uniapp 1.2.2 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) 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-cropper/dd-cropper.vue +57 -40
  22. package/components/dd-date-picker/dd-date-picker.vue +7 -7
  23. package/components/dd-dialog/dd-dialog.vue +12 -12
  24. package/components/dd-divider/dd-divider.vue +2 -2
  25. package/components/dd-drawer/dd-drawer.vue +7 -7
  26. package/components/dd-dropdown-item/dd-dropdown-item.vue +3 -3
  27. package/components/dd-dropdown-menu/dd-dropdown-menu.vue +3 -3
  28. package/components/dd-empty-state/dd-empty-state.vue +5 -5
  29. package/components/dd-feature-grid/dd-feature-grid.vue +3 -3
  30. package/components/dd-field/dd-field.vue +18 -18
  31. package/components/dd-goods-sku/dd-goods-sku.vue +14 -14
  32. package/components/dd-icon/dd-icon.vue +1 -1
  33. package/components/dd-image/dd-image.vue +5 -5
  34. package/components/dd-input/dd-input.vue +9 -9
  35. package/components/dd-keyboard/dd-keyboard.vue +5 -5
  36. package/components/dd-list-cell/dd-list-cell.vue +8 -8
  37. package/components/dd-loading/dd-loading.vue +4 -4
  38. package/components/dd-loadmore/dd-loadmore.vue +1 -1
  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-picker/dd-picker.vue +8 -8
  44. package/components/dd-popover/dd-popover.vue +4 -4
  45. package/components/dd-popover-item/dd-popover-item.vue +2 -2
  46. package/components/dd-popup/dd-popup.vue +4 -4
  47. package/components/dd-progress/dd-progress.vue +5 -5
  48. package/components/dd-pull-refresh/dd-pull-refresh.vue +4 -4
  49. package/components/dd-radio/dd-radio.vue +5 -5
  50. package/components/dd-room-card/dd-room-card.vue +26 -26
  51. package/components/dd-search-bar/dd-search-bar.vue +11 -11
  52. package/components/dd-segmented-tab/dd-segmented-tab.vue +7 -7
  53. package/components/dd-signature/dd-signature.vue +6 -6
  54. package/components/dd-skeleton/dd-skeleton.vue +2 -2
  55. package/components/dd-slider/dd-slider.vue +6 -6
  56. package/components/dd-stat-card/dd-stat-card.vue +9 -9
  57. package/components/dd-step/dd-step.vue +2 -2
  58. package/components/dd-stepper/dd-stepper.vue +7 -7
  59. package/components/dd-swipe/dd-swipe.vue +1 -1
  60. package/components/dd-swipe-action/dd-swipe-action.vue +3 -3
  61. package/components/dd-swipeable-tab/dd-swipeable-tab.vue +5 -5
  62. package/components/dd-switch/dd-switch.vue +4 -4
  63. package/components/dd-tabbar/dd-tabbar.vue +2 -2
  64. package/components/dd-tabbar-item/dd-tabbar-item.vue +2 -2
  65. package/components/dd-tag/dd-tag.vue +33 -33
  66. package/components/dd-text/dd-text.vue +11 -11
  67. package/components/dd-toast/dd-toast.vue +5 -5
  68. package/components/dd-top-navbar/dd-top-navbar.vue +4 -4
  69. package/components/dd-upload/dd-upload.vue +6 -6
  70. package/components/dd-workorder-card/dd-workorder-card.vue +17 -17
  71. package/package.json +2 -1
  72. package/scss/_mixins.scss +11 -11
  73. package/scss/_theme-tokens.scss +183 -0
  74. package/scss/_variables.scss +298 -250
  75. package/scss/theme.scss +36 -0
@@ -130,62 +130,62 @@ function onClose(e: Event) {
130
130
  // === Filled: 渐变背景 + 反色文字 ===
131
131
  .dd-tag--filled {
132
132
  &.dd-tag--primary {
133
- background: $dd-gradient-primary;
133
+ background: var(--dd-gradient-primary, #{$dd-gradient-primary});
134
134
  color: $dd-color-white;
135
135
  }
136
136
  &.dd-tag--accent {
137
- background: $dd-gradient-accent;
138
- color: $dd-accent-contrast;
137
+ background: var(--dd-gradient-accent, #{$dd-gradient-accent});
138
+ color: var(--dd-accent-contrast, #{$dd-accent-contrast});
139
139
  }
140
140
  &.dd-tag--success {
141
- background: $dd-success-500;
142
- color: $dd-success-contrast;
141
+ background: var(--dd-success, #{$dd-success});
142
+ color: var(--dd-success-contrast, #{$dd-success-contrast});
143
143
  }
144
144
  &.dd-tag--warning {
145
- background: $dd-warning-500;
146
- color: $dd-warning-contrast;
145
+ background: var(--dd-warning, #{$dd-warning});
146
+ color: var(--dd-warning-contrast, #{$dd-warning-contrast});
147
147
  }
148
148
  &.dd-tag--error {
149
- background: $dd-error-500;
150
- color: $dd-error-contrast;
149
+ background: var(--dd-error, #{$dd-error});
150
+ color: var(--dd-error-contrast, #{$dd-error-contrast});
151
151
  }
152
152
  &.dd-tag--info {
153
- background: $dd-info-500;
154
- color: $dd-info-contrast;
153
+ background: var(--dd-info, #{$dd-info});
154
+ color: var(--dd-info-contrast, #{$dd-info-contrast});
155
155
  }
156
156
  &.dd-tag--default {
157
- background: $dd-neutral-700;
158
- color: $dd-text-secondary;
157
+ background: var(--dd-surface-container-high, #{$dd-surface-container-high});
158
+ color: var(--dd-text-secondary, #{$dd-text-secondary});
159
159
  }
160
160
  }
161
161
 
162
162
  // === Outlined: 透明背景 + 1px 边框 + 语义色 ===
163
163
  .dd-tag--outlined {
164
164
  background: transparent;
165
- border: 1px solid $dd-border-strong;
166
-
167
- &.dd-tag--primary { color: $dd-primary-400; border-color: $dd-primary-500; }
168
- &.dd-tag--accent { color: $dd-accent-300; border-color: $dd-accent-500; }
169
- &.dd-tag--success { color: $dd-success-400; border-color: $dd-success-500; }
170
- &.dd-tag--warning { color: $dd-warning-400; border-color: $dd-warning-500; }
171
- &.dd-tag--error { color: $dd-error-400; border-color: $dd-error-500; }
172
- &.dd-tag--info { color: $dd-info-400; border-color: $dd-info-500; }
173
- &.dd-tag--default { color: $dd-text-secondary; border-color: $dd-border-strong; }
165
+ border: 1px solid var(--dd-border-strong, #{$dd-border-strong});
166
+
167
+ &.dd-tag--primary { color: var(--dd-primary-400, #{$dd-primary-400}); border-color: var(--dd-primary, #{$dd-primary}); }
168
+ &.dd-tag--accent { color: var(--dd-accent-300, #{$dd-accent-300}); border-color: var(--dd-accent, #{$dd-accent}); }
169
+ &.dd-tag--success { color: var(--dd-success-400, #{$dd-success-400}); border-color: var(--dd-success, #{$dd-success}); }
170
+ &.dd-tag--warning { color: var(--dd-warning-400, #{$dd-warning-400}); border-color: var(--dd-warning, #{$dd-warning}); }
171
+ &.dd-tag--error { color: var(--dd-error-400, #{$dd-error-400}); border-color: var(--dd-error, #{$dd-error}); }
172
+ &.dd-tag--info { color: var(--dd-info-400, #{$dd-info-400}); border-color: var(--dd-info, #{$dd-info}); }
173
+ &.dd-tag--default { color: var(--dd-text-secondary, #{$dd-text-secondary}); border-color: var(--dd-border-strong, #{$dd-border-strong}); }
174
174
  }
175
175
 
176
176
  // === Dot: elevated 背景 + 彩色点 + 次级色文字 ===
177
177
  .dd-tag--dot {
178
- background: $dd-bg-elevated;
179
- border: 1px solid $dd-border-default;
180
- color: $dd-text-secondary;
181
-
182
- &.dd-tag--primary .dd-tag__dot { background: $dd-primary-500; }
183
- &.dd-tag--accent .dd-tag__dot { background: $dd-accent-500; }
184
- &.dd-tag--success .dd-tag__dot { background: $dd-success-500; }
185
- &.dd-tag--warning .dd-tag__dot { background: $dd-warning-500; }
186
- &.dd-tag--error .dd-tag__dot { background: $dd-error-500; }
187
- &.dd-tag--info .dd-tag__dot { background: $dd-info-500; }
188
- &.dd-tag--default .dd-tag__dot { background: $dd-neutral-400; }
178
+ background: var(--dd-bg-elevated, #{$dd-bg-elevated});
179
+ border: 1px solid var(--dd-border-default, #{$dd-border-default});
180
+ color: var(--dd-text-secondary, #{$dd-text-secondary});
181
+
182
+ &.dd-tag--primary .dd-tag__dot { background: var(--dd-primary, #{$dd-primary}); }
183
+ &.dd-tag--accent .dd-tag__dot { background: var(--dd-accent, #{$dd-accent}); }
184
+ &.dd-tag--success .dd-tag__dot { background: var(--dd-success, #{$dd-success}); }
185
+ &.dd-tag--warning .dd-tag__dot { background: var(--dd-warning, #{$dd-warning}); }
186
+ &.dd-tag--error .dd-tag__dot { background: var(--dd-error, #{$dd-error}); }
187
+ &.dd-tag--info .dd-tag__dot { background: var(--dd-info, #{$dd-info}); }
188
+ &.dd-tag--default .dd-tag__dot { background: var(--dd-muted, #{$dd-muted}); }
189
189
  }
190
190
 
191
191
  .dd-tag--closable {
@@ -198,52 +198,52 @@ export default {
198
198
 
199
199
  &__price {
200
200
  font-size: 14px;
201
- color: $dd-text-secondary;
201
+ color: var(--dd-text-secondary, #{$dd-text-secondary});
202
202
  }
203
203
 
204
204
  &__value {
205
205
  font-size: 14px;
206
206
  @include flex;
207
- color: $dd-text-secondary;
207
+ color: var(--dd-text-secondary, #{$dd-text-secondary});
208
208
  flex-wrap: wrap;
209
209
  // flex: 1;
210
210
  text-overflow: ellipsis;
211
211
  align-items: center;
212
212
 
213
213
  &--primary {
214
- color: $dd-primary-400;
214
+ color: var(--dd-primary-400, #{$dd-primary-400});
215
215
  }
216
216
 
217
217
  &--warning {
218
- color: $dd-warning-400;
218
+ color: var(--dd-warning-400, #{$dd-warning-400});
219
219
  }
220
220
 
221
221
  &--success {
222
- color: $dd-success-400;
222
+ color: var(--dd-success-400, #{$dd-success-400});
223
223
  }
224
224
 
225
225
  &--info {
226
- color: $dd-info-400;
226
+ color: var(--dd-info-400, #{$dd-info-400});
227
227
  }
228
228
 
229
229
  &--error {
230
- color: $dd-error-400;
230
+ color: var(--dd-error-400, #{$dd-error-400});
231
231
  }
232
232
 
233
233
  &--main {
234
- color: $dd-text-primary;
234
+ color: var(--dd-text-primary, #{$dd-text-primary});
235
235
  }
236
236
 
237
237
  &--content {
238
- color: $dd-text-secondary;
238
+ color: var(--dd-text-secondary, #{$dd-text-secondary});
239
239
  }
240
240
 
241
241
  &--tips {
242
- color: $dd-text-tertiary;
242
+ color: var(--dd-text-tertiary, #{$dd-text-tertiary});
243
243
  }
244
244
 
245
245
  &--light {
246
- color: $dd-text-tertiary;
246
+ color: var(--dd-text-tertiary, #{$dd-text-tertiary});
247
247
  }
248
248
  }
249
249
  }
@@ -158,23 +158,23 @@ const iconName = computed(() => {
158
158
  font-weight: 700;
159
159
 
160
160
  &--success {
161
- color: $dd-success-400;
161
+ color: var(--dd-success-400, #{$dd-success-400});
162
162
  }
163
163
 
164
164
  &--error {
165
- color: $dd-error-400;
165
+ color: var(--dd-error-400, #{$dd-error-400});
166
166
  }
167
167
 
168
168
  &--warning {
169
- color: $dd-warning-400;
169
+ color: var(--dd-warning-400, #{$dd-warning-400});
170
170
  }
171
171
  }
172
172
 
173
173
  &__spinner {
174
174
  width: $dd-size-icon-xl;
175
175
  height: $dd-size-icon-xl;
176
- border: 6rpx solid $dd-border-default;
177
- border-top-color: $dd-primary-400;
176
+ border: 6rpx solid var(--dd-border-default, #{$dd-border-default});
177
+ border-top-color: var(--dd-primary-400, #{$dd-primary-400});
178
178
  border-radius: 50%;
179
179
  animation: dd-toast-spin 0.8s linear infinite;
180
180
  }
@@ -130,7 +130,7 @@ function onBack() {
130
130
  }
131
131
 
132
132
  &--border &__content {
133
- @include dd-hairline-bottom($dd-border-subtle);
133
+ @include dd-hairline-bottom(var(--dd-border-subtle, #{$dd-border-subtle}));
134
134
  }
135
135
 
136
136
  &__left {
@@ -148,13 +148,13 @@ function onBack() {
148
148
  display: flex;
149
149
  align-items: center;
150
150
  font-size: 56rpx;
151
- color: $dd-primary-400;
151
+ color: var(--dd-primary-400, #{$dd-primary-400});
152
152
  text-shadow: 0 0 8px rgba(245, 166, 35, 0.4);
153
153
  }
154
154
 
155
155
  &__back-text {
156
156
  font-size: $dd-font-size-body;
157
- color: $dd-primary-400;
157
+ color: var(--dd-primary-400, #{$dd-primary-400});
158
158
  }
159
159
 
160
160
  &__title {
@@ -165,7 +165,7 @@ function onBack() {
165
165
  max-width: 50%;
166
166
  font-size: $dd-font-size-lead;
167
167
  font-weight: 700;
168
- color: $dd-text-primary;
168
+ color: var(--dd-text-primary, #{$dd-text-primary});
169
169
  @include dd-ellipsis(1);
170
170
  }
171
171
 
@@ -140,7 +140,7 @@ function onPreview(index: number) {
140
140
  width: 160rpx;
141
141
  height: 160rpx;
142
142
  border-radius: $dd-radius-md;
143
- background: $dd-neutral-800;
143
+ background: var(--dd-surface-container-low, #{$dd-surface-container-low});
144
144
  overflow: hidden;
145
145
  }
146
146
 
@@ -157,7 +157,7 @@ function onPreview(index: number) {
157
157
  width: 36rpx;
158
158
  height: 36rpx;
159
159
  border-radius: 50%;
160
- background: $dd-error;
160
+ background: var(--dd-error, #{$dd-error});
161
161
  color: $dd-color-white;
162
162
  font-size: $dd-font-size-caption;
163
163
  @include dd-flex-center;
@@ -167,16 +167,16 @@ function onPreview(index: number) {
167
167
  @include dd-flex-center;
168
168
  width: 160rpx;
169
169
  height: 160rpx;
170
- border: 1px dashed $dd-border-default;
170
+ border: 1px dashed var(--dd-border-default, #{$dd-border-default});
171
171
  border-radius: $dd-radius-md;
172
- background: $dd-neutral-800;
173
- color: $dd-text-tertiary;
172
+ background: var(--dd-surface-container-low, #{$dd-surface-container-low});
173
+ color: var(--dd-text-tertiary, #{$dd-text-tertiary});
174
174
  font-size: $dd-font-size-h1;
175
175
  box-sizing: border-box;
176
176
  @include dd-transition(background 0.2s);
177
177
 
178
178
  &--active {
179
- background: $dd-border-default;
179
+ background: var(--dd-border-default, #{$dd-border-default});
180
180
  }
181
181
  }
182
182
 
@@ -111,7 +111,7 @@ function onClick() {
111
111
 
112
112
  &--press {
113
113
  transform: scale(0.99);
114
- background: $dd-surface-hover;
114
+ background: var(--dd-surface-hover, #{$dd-surface-hover});
115
115
  }
116
116
  }
117
117
 
@@ -127,7 +127,7 @@ function onClick() {
127
127
  min-width: 0;
128
128
  font-size: $dd-font-size-body;
129
129
  font-weight: $dd-font-weight-lead;
130
- color: $dd-text-primary;
130
+ color: var(--dd-text-primary, #{$dd-text-primary});
131
131
  @include dd-ellipsis(1);
132
132
  }
133
133
 
@@ -137,11 +137,11 @@ function onClick() {
137
137
  padding: 2rpx 14rpx;
138
138
  border-radius: $dd-radius-sm;
139
139
 
140
- &--service { color: $dd-primary-400; background: rgba(245, 166, 35, 0.12); }
141
- &--repair { color: $dd-error-400; background: rgba(229, 57, 53, 0.12); }
142
- &--feedback { color: $dd-accent-300; background: rgba(45, 75, 160, 0.2); }
143
- &--decoration { color: $dd-vip-500; background: rgba(156, 39, 176, 0.14); }
144
- &--todo { color: $dd-text-secondary; background: $dd-glass-border; }
140
+ &--service { color: var(--dd-primary-400, #{$dd-primary-400}); background: rgba(245, 166, 35, 0.12); }
141
+ &--repair { color: var(--dd-error-400, #{$dd-error-400}); background: rgba(229, 57, 53, 0.12); }
142
+ &--feedback { color: var(--dd-accent-300, #{$dd-accent-300}); background: rgba(45, 75, 160, 0.2); }
143
+ &--decoration { color: var(--dd-vip, #{$dd-vip-500}); background: rgba(156, 39, 176, 0.14); }
144
+ &--todo { color: var(--dd-text-secondary, #{$dd-text-secondary}); background: var(--dd-glass-border, #{$dd-glass-border}); }
145
145
  }
146
146
 
147
147
  .dd-workorder-card__checklist {
@@ -166,28 +166,28 @@ function onClick() {
166
166
  height: 40rpx;
167
167
  flex-shrink: 0;
168
168
  border-radius: $dd-radius-sm;
169
- border: 2rpx solid $dd-border-strong;
169
+ border: 2rpx solid var(--dd-border-strong, #{$dd-border-strong});
170
170
  @include dd-flex-center;
171
171
 
172
172
  &--on {
173
- background: $dd-gradient-primary;
173
+ background: var(--dd-gradient-primary, #{$dd-gradient-primary});
174
174
  border-color: transparent;
175
175
  }
176
176
  }
177
177
 
178
178
  .dd-workorder-card__box-check {
179
179
  font-size: $dd-font-size-caption;
180
- color: $dd-neutral-900;
180
+ color: var(--dd-primary-contrast, #{$dd-primary-contrast});
181
181
  line-height: 1;
182
182
  }
183
183
 
184
184
  .dd-workorder-card__check-text {
185
185
  flex: 1;
186
186
  font-size: $dd-font-size-body;
187
- color: $dd-text-primary;
187
+ color: var(--dd-text-primary, #{$dd-text-primary});
188
188
 
189
189
  &--done {
190
- color: $dd-text-tertiary;
190
+ color: var(--dd-text-tertiary, #{$dd-text-tertiary});
191
191
  text-decoration: line-through;
192
192
  }
193
193
  }
@@ -202,28 +202,28 @@ function onClick() {
202
202
  .dd-workorder-card__progress-track {
203
203
  flex: 1;
204
204
  height: $dd-space-1;
205
- background: $dd-surface-container-high;
205
+ background: var(--dd-surface-container-high, #{$dd-surface-container-high});
206
206
  border-radius: $dd-radius-full;
207
207
  overflow: hidden;
208
208
  }
209
209
 
210
210
  .dd-workorder-card__progress-bar {
211
211
  height: 100%;
212
- background: $dd-gradient-primary-h;
212
+ background: var(--dd-gradient-primary-h, #{$dd-gradient-primary-h});
213
213
  border-radius: $dd-radius-full;
214
214
  transition: width 0.3s ease;
215
215
  }
216
216
 
217
217
  .dd-workorder-card__progress-text {
218
218
  font-size: $dd-font-size-caption;
219
- color: $dd-text-tertiary;
219
+ color: var(--dd-text-tertiary, #{$dd-text-tertiary});
220
220
  font-family: $dd-font-mono;
221
221
  }
222
222
 
223
223
  .dd-workorder-card__time {
224
224
  margin-top: $dd-space-1;
225
225
  font-size: $dd-font-size-caption;
226
- color: $dd-text-tertiary;
226
+ color: var(--dd-text-tertiary, #{$dd-text-tertiary});
227
227
  }
228
228
 
229
229
  .dd-workorder-card__actions {
@@ -231,7 +231,7 @@ function onClick() {
231
231
  justify-content: flex-end;
232
232
  gap: $dd-space-3;
233
233
  margin-top: $dd-space-2;
234
- border-top: 1px solid $dd-border-subtle;
234
+ border-top: 1px solid var(--dd-border-subtle, #{$dd-border-subtle});
235
235
  padding-top: $dd-space-2;
236
236
  }
237
237
  </style>
package/package.json CHANGED
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "name": "@didaoktv/didaoui-uniapp",
3
- "version": "1.2.2",
3
+ "version": "1.3.0",
4
4
  "description": "帝到KTV UniApp 组件库",
5
5
  "main": "index.ts",
6
6
  "types": "index.ts",
7
7
  "exports": {
8
8
  ".": "./index.ts",
9
9
  "./uni.scss": "./uni.scss",
10
+ "./scss/theme": "./scss/theme.scss",
10
11
  "./scss/variables": "./scss/_variables.scss",
11
12
  "./scss/mixins": "./scss/_mixins.scss",
12
13
  "./scss/functions": "./scss/_functions.scss",
package/scss/_mixins.scss CHANGED
@@ -8,8 +8,8 @@
8
8
  @if $intensity == sm { $blur: $dd-glass-blur-sm; }
9
9
  @else if $intensity == md { $blur: $dd-glass-blur-md; }
10
10
  @else if $intensity == lg { $blur: $dd-glass-blur-lg; }
11
- background: $dd-glass-bg;
12
- border: 1px solid $dd-glass-border;
11
+ background: var(--dd-glass-bg, #{$dd-glass-bg});
12
+ border: 1px solid var(--dd-glass-border, #{$dd-glass-border});
13
13
  /* #ifdef H5 */
14
14
  backdrop-filter: blur($blur);
15
15
  -webkit-backdrop-filter: blur($blur);
@@ -17,15 +17,15 @@
17
17
  }
18
18
 
19
19
  @mixin dd-glass-strong {
20
- background: $dd-glass-bg-strong;
21
- border: 1px solid $dd-glass-border;
20
+ background: var(--dd-glass-bg-strong, #{$dd-glass-bg-strong});
21
+ border: 1px solid var(--dd-glass-border, #{$dd-glass-border});
22
22
  /* #ifdef H5 */
23
23
  backdrop-filter: blur($dd-glass-blur);
24
24
  -webkit-backdrop-filter: blur($dd-glass-blur);
25
25
  /* #endif */
26
26
  }
27
27
 
28
- // 发光阴影 — 支持 size: sm / md / lg
28
+ // 发光阴影 — 支持 size: sm / md / lg(动态拼 --dd-shadow-glow-* 变量名,主题可覆盖)
29
29
  @mixin dd-glow($color: gold, $size: md) {
30
30
  $shadows: (
31
31
  gold-sm: $dd-shadow-glow-gold-sm,
@@ -51,17 +51,17 @@
51
51
  vip-lg: $dd-shadow-glow-vip-lg,
52
52
  );
53
53
  $key: $color + '-' + $size;
54
- box-shadow: map-get($shadows, $key);
54
+ box-shadow: var(--dd-shadow-glow-#{$key}, #{map-get($shadows, $key)});
55
55
  }
56
56
 
57
- // 文字渐变
57
+ // 文字渐变(动态拼 --dd-gradient-text-* 变量名,主题可覆盖)
58
58
  @mixin dd-text-gradient($color: gold) {
59
59
  $gradients: (
60
60
  gold: $dd-gradient-text-gold,
61
61
  'gold-light': $dd-gradient-text-gold-light,
62
62
  blue: $dd-gradient-text-blue,
63
63
  );
64
- background: map-get($gradients, $color);
64
+ background: var(--dd-gradient-text-#{$color}, #{map-get($gradients, $color)});
65
65
  -webkit-background-clip: text;
66
66
  -webkit-text-fill-color: transparent;
67
67
  background-clip: text;
@@ -91,8 +91,8 @@
91
91
  padding-bottom: env(safe-area-inset-bottom);
92
92
  }
93
93
 
94
- // 1px 边框 (retina)
95
- @mixin dd-hairline-bottom($color: $dd-border-default) {
94
+ // 1px 边框 (retina)——默认色走主题变量,浅色下自动翻转
95
+ @mixin dd-hairline-bottom($color: var(--dd-border-default, #{$dd-border-default})) {
96
96
  position: relative;
97
97
  &::after {
98
98
  content: '';
@@ -107,7 +107,7 @@
107
107
  }
108
108
  }
109
109
 
110
- @mixin dd-hairline-top($color: $dd-border-default) {
110
+ @mixin dd-hairline-top($color: var(--dd-border-default, #{$dd-border-default})) {
111
111
  position: relative;
112
112
  &::before {
113
113
  content: '';
@@ -0,0 +1,183 @@
1
+ // ============================================================
2
+ // DidaoUI-uniapp Theme — base + delta 架构
3
+ //
4
+ // 一个主题 = 一份 SCSS map + 一个 class:
5
+ // .my-theme { @include dd-theme(( 'primary': #d32f2f, ... )); }
6
+ // 只声明与默认值的差异(delta),未声明的变量沿 CSS 级联继承默认值。
7
+ // 明暗主题(.dark/.light)与品牌主题类可并列组合(如 class="light cny-red")。
8
+ //
9
+ // 数据源: scss/_variables.scss($dd-* 暗色默认 / $dd-light-* 浅色)
10
+ // 输出入口: scss/theme.scss(消费者在 App.vue 全局样式中引入)
11
+ // ============================================================
12
+
13
+ // 把 map 展开为 --dd-* 自定义属性(#{} 插值保证渐变/阴影/rgba 原样输出)
14
+ @mixin dd-theme($map) {
15
+ @each $key, $value in $map {
16
+ --dd-#{$key}: #{$value};
17
+ }
18
+ }
19
+
20
+ // === base:主题无关层(品牌基色/对比色/渐变/发光阴影)——品牌换肤的 delta 覆盖入口 ===
21
+ // 明暗主题下值不变;自定义品牌主题按需覆盖其中几个变量
22
+ $dd-vars-base: (
23
+ // 品牌基色
24
+ 'primary': $dd-primary,
25
+ 'accent': $dd-accent,
26
+ 'success': $dd-success,
27
+ 'warning': $dd-warning,
28
+ 'error': $dd-error,
29
+ 'info': $dd-info,
30
+ 'vip': $dd-vip-500,
31
+ // 对比色(明暗不翻转;品牌主题可覆盖,如红金主题配白字)
32
+ 'primary-contrast': $dd-primary-contrast,
33
+ 'accent-contrast': $dd-accent-contrast,
34
+ 'success-contrast': $dd-success-contrast,
35
+ 'warning-contrast': $dd-warning-contrast,
36
+ 'error-contrast': $dd-error-contrast,
37
+ 'info-contrast': $dd-info-contrast,
38
+ // 组件实际使用的品牌色阶步(hover/描边/浅底)
39
+ 'primary-300': $dd-primary-300,
40
+ 'primary-400': $dd-primary-400,
41
+ 'accent-300': $dd-accent-300,
42
+ 'accent-400': $dd-accent-400,
43
+ 'error-400': $dd-error-400,
44
+ 'warning-400': $dd-warning-400,
45
+ 'success-400': $dd-success-400,
46
+ 'info-400': $dd-info-400,
47
+ // 品牌渐变(opaque 值,换主题时整条覆盖)
48
+ 'gradient-primary': $dd-gradient-primary,
49
+ 'gradient-primary-wide': $dd-gradient-primary-wide,
50
+ 'gradient-primary-h': $dd-gradient-primary-h,
51
+ 'gradient-primary-v': $dd-gradient-primary-v,
52
+ 'gradient-primary-triple': $dd-gradient-primary-triple,
53
+ 'gradient-accent': $dd-gradient-accent,
54
+ 'gradient-accent-h': $dd-gradient-accent-h,
55
+ 'gradient-accent-wide': $dd-gradient-accent-wide,
56
+ 'gradient-success': $dd-gradient-success,
57
+ 'gradient-warning': $dd-gradient-warning,
58
+ 'gradient-error': $dd-gradient-error,
59
+ 'gradient-info': $dd-gradient-info,
60
+ 'gradient-vip': $dd-gradient-vip,
61
+ 'gradient-text-gold': $dd-gradient-text-gold,
62
+ 'gradient-text-blue': $dd-gradient-text-blue,
63
+ 'gradient-sheen-top': $dd-gradient-sheen-top,
64
+ 'gradient-sheen-diagonal': $dd-gradient-sheen-diagonal,
65
+ // 发光阴影(dd-glow mixin 动态拼名,全量就绪)
66
+ 'shadow-glow-gold-sm': $dd-shadow-glow-gold-sm,
67
+ 'shadow-glow-gold-md': $dd-shadow-glow-gold-md,
68
+ 'shadow-glow-gold-lg': $dd-shadow-glow-gold-lg,
69
+ 'shadow-glow-blue-sm': $dd-shadow-glow-blue-sm,
70
+ 'shadow-glow-blue-md': $dd-shadow-glow-blue-md,
71
+ 'shadow-glow-blue-lg': $dd-shadow-glow-blue-lg,
72
+ 'shadow-glow-success-sm': $dd-shadow-glow-success-sm,
73
+ 'shadow-glow-success-md': $dd-shadow-glow-success-md,
74
+ 'shadow-glow-success-lg': $dd-shadow-glow-success-lg,
75
+ 'shadow-glow-warning-sm': $dd-shadow-glow-warning-sm,
76
+ 'shadow-glow-warning-md': $dd-shadow-glow-warning-md,
77
+ 'shadow-glow-warning-lg': $dd-shadow-glow-warning-lg,
78
+ 'shadow-glow-error-sm': $dd-shadow-glow-error-sm,
79
+ 'shadow-glow-error-md': $dd-shadow-glow-error-md,
80
+ 'shadow-glow-error-lg': $dd-shadow-glow-error-lg,
81
+ 'shadow-glow-info-sm': $dd-shadow-glow-info-sm,
82
+ 'shadow-glow-info-md': $dd-shadow-glow-info-md,
83
+ 'shadow-glow-info-lg': $dd-shadow-glow-info-lg,
84
+ 'shadow-glow-vip-sm': $dd-shadow-glow-vip-sm,
85
+ 'shadow-glow-vip-md': $dd-shadow-glow-vip-md,
86
+ 'shadow-glow-vip-lg': $dd-shadow-glow-vip-lg,
87
+ ) !default;
88
+
89
+ // === 明暗翻转层:暗色(默认)——44 个 delta ===
90
+ $dd-theme-dark: (
91
+ 'bg': $dd-bg,
92
+ 'fg': $dd-fg,
93
+ 'muted': $dd-muted,
94
+ 'rule': $dd-rule,
95
+ 'link': $dd-link,
96
+ 'surface': $dd-surface,
97
+ 'surface-dim': $dd-surface-dim,
98
+ 'surface-container-low': $dd-surface-container-low,
99
+ 'surface-container': $dd-surface-container,
100
+ 'surface-container-high': $dd-surface-container-high,
101
+ 'surface-container-highest': $dd-surface-container-highest,
102
+ 'bg-section': $dd-bg-section,
103
+ 'bg-card': $dd-bg-card,
104
+ 'bg-elevated': $dd-bg-elevated,
105
+ 'text-primary': $dd-text-primary,
106
+ 'text-secondary': $dd-text-secondary,
107
+ 'text-tertiary': $dd-text-tertiary,
108
+ 'border-default': $dd-border-default,
109
+ 'border-subtle': $dd-border-subtle,
110
+ 'border-strong': $dd-border-strong,
111
+ 'interactive-hover': $dd-interactive-hover,
112
+ 'interactive-focus': $dd-interactive-focus,
113
+ 'interactive-press': $dd-interactive-press,
114
+ 'color-overlay': $dd-color-overlay,
115
+ 'color-overlay-strong': $dd-color-overlay-strong,
116
+ 'color-overlay-soft': $dd-color-overlay-soft,
117
+ 'surface-hover': $dd-surface-hover,
118
+ 'surface-press': $dd-surface-press,
119
+ 'sheen': $dd-sheen,
120
+ 'text-glow': $dd-text-glow,
121
+ 'shadow-1': $dd-shadow-1,
122
+ 'shadow-2': $dd-shadow-2,
123
+ 'shadow-3': $dd-shadow-3,
124
+ 'shadow-4': $dd-shadow-4,
125
+ 'shadow-5': $dd-shadow-5,
126
+ 'glass-bg': $dd-glass-bg,
127
+ 'glass-bg-strong': $dd-glass-bg-strong,
128
+ 'glass-bg-solid': $dd-glass-bg-solid,
129
+ 'glass-border': $dd-glass-border,
130
+ 'step-inactive-color': $dd-step-inactive-color,
131
+ 'gradient-neutral': $dd-gradient-neutral,
132
+ 'gradient-text-gold-light': $dd-gradient-text-gold-light,
133
+ 'gradient-spot-gold': $dd-gradient-spot-gold,
134
+ 'gradient-spot-blue': $dd-gradient-spot-blue,
135
+ ) !default;
136
+
137
+ // === 明暗翻转层:浅色——与 $dd-theme-dark 同键,值取 $dd-light-* ===
138
+ $dd-theme-light: (
139
+ 'bg': $dd-light-bg,
140
+ 'fg': $dd-light-fg,
141
+ 'muted': $dd-light-muted,
142
+ 'rule': $dd-light-rule,
143
+ 'link': $dd-light-link,
144
+ 'surface': $dd-light-surface,
145
+ 'surface-dim': $dd-light-surface-dim,
146
+ 'surface-container-low': $dd-light-surface-container-low,
147
+ 'surface-container': $dd-light-surface-container,
148
+ 'surface-container-high': $dd-light-surface-container-high,
149
+ 'surface-container-highest': $dd-light-surface-container-highest,
150
+ 'bg-section': $dd-light-bg-section,
151
+ 'bg-card': $dd-light-bg-card,
152
+ 'bg-elevated': $dd-light-bg-elevated,
153
+ 'text-primary': $dd-light-text-primary,
154
+ 'text-secondary': $dd-light-text-secondary,
155
+ 'text-tertiary': $dd-light-text-tertiary,
156
+ 'border-default': $dd-light-border-default,
157
+ 'border-subtle': $dd-light-border-subtle,
158
+ 'border-strong': $dd-light-border-strong,
159
+ 'interactive-hover': $dd-light-interactive-hover,
160
+ 'interactive-focus': $dd-light-interactive-focus,
161
+ 'interactive-press': $dd-light-interactive-press,
162
+ 'color-overlay': $dd-light-color-overlay,
163
+ 'color-overlay-strong': $dd-light-color-overlay-strong,
164
+ 'color-overlay-soft': $dd-light-color-overlay-soft,
165
+ 'surface-hover': $dd-light-surface-hover,
166
+ 'surface-press': $dd-light-surface-press,
167
+ 'sheen': $dd-light-sheen,
168
+ 'text-glow': $dd-light-text-glow,
169
+ 'shadow-1': $dd-light-shadow-1,
170
+ 'shadow-2': $dd-light-shadow-2,
171
+ 'shadow-3': $dd-light-shadow-3,
172
+ 'shadow-4': $dd-light-shadow-4,
173
+ 'shadow-5': $dd-light-shadow-5,
174
+ 'glass-bg': $dd-light-glass-bg,
175
+ 'glass-bg-strong': $dd-light-glass-bg-strong,
176
+ 'glass-bg-solid': $dd-light-glass-bg-solid,
177
+ 'glass-border': $dd-light-glass-border,
178
+ 'step-inactive-color': $dd-light-step-inactive-color,
179
+ 'gradient-neutral': $dd-light-gradient-neutral,
180
+ 'gradient-text-gold-light': $dd-light-gradient-text-gold-light,
181
+ 'gradient-spot-gold': $dd-light-gradient-spot-gold,
182
+ 'gradient-spot-blue': $dd-light-gradient-spot-blue,
183
+ ) !default;