@q1travel/design-system 0.30.7 → 0.30.9
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/contracts/cascader.md +41 -0
- package/contracts/design.dark.md +6 -1
- package/contracts/design.md +6 -1
- package/contracts/implementation-map.md +4 -0
- package/contracts/overlay-foundation.md +2 -2
- package/contracts/token-naming.md +2 -1
- package/dist-pkg/design-system.d.ts +87 -1
- package/dist-pkg/design-system.js +6609 -5981
- package/dist-pkg/style.css +97 -16
- package/dist-pkg/tokens.css +2 -0
- package/package.json +3 -3
package/dist-pkg/style.css
CHANGED
|
@@ -185,6 +185,7 @@
|
|
|
185
185
|
--q1-color-auth-text-secondary: #273951;
|
|
186
186
|
--q1-color-auth-text-muted: #64748d;
|
|
187
187
|
--q1-color-auth-border-strong: #d6dde6;
|
|
188
|
+
--q1-color-auth-border-control: #8290a3;
|
|
188
189
|
--q1-color-auth-surface-card: #ffffff;
|
|
189
190
|
--q1-color-auth-surface-subtle: #f8fafc;
|
|
190
191
|
--q1-color-auth-surface-input: #ffffff;
|
|
@@ -526,6 +527,7 @@
|
|
|
526
527
|
--q1-color-auth-text-secondary: #d1d5db;
|
|
527
528
|
--q1-color-auth-text-muted: #9ca3af;
|
|
528
529
|
--q1-color-auth-border-strong: #343943;
|
|
530
|
+
--q1-color-auth-border-control: #616b7b;
|
|
529
531
|
--q1-color-auth-surface-card: #17191d;
|
|
530
532
|
--q1-color-auth-surface-subtle: #101216;
|
|
531
533
|
--q1-color-auth-surface-input: #101216;
|
|
@@ -610,6 +612,11 @@
|
|
|
610
612
|
text-decoration: none;
|
|
611
613
|
}
|
|
612
614
|
|
|
615
|
+
/* 暗色控件边界独立于表面分隔线;变体与选中/忙态仍由各自配方覆盖。 */
|
|
616
|
+
:where(:root[data-theme='dark'], [data-q1-theme='dark']) .button:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
|
|
617
|
+
border-color: var(--q1-color-border-control);
|
|
618
|
+
}
|
|
619
|
+
|
|
613
620
|
/* 文字槽包住内容与粗指针命中区:自身沿用按钮的行内排布与间距,图标与文字之间的 gap 不因包裹而丢失。 */
|
|
614
621
|
.button__text {
|
|
615
622
|
display: inline-flex;
|
|
@@ -778,6 +785,10 @@
|
|
|
778
785
|
background: var(--q1-color-bg-hover);
|
|
779
786
|
}
|
|
780
787
|
|
|
788
|
+
:where(:root[data-theme='dark'], [data-q1-theme='dark']) .button:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)):not(.button--primary):not(.button--ghost):not(.button--danger):not(.button--warning):not(.button--selected):not(:disabled):not([aria-disabled='true']):hover {
|
|
789
|
+
border-color: var(--q1-color-gray-800);
|
|
790
|
+
}
|
|
791
|
+
|
|
781
792
|
.button--primary:not(.button--icon):not(.button--selected):not(:disabled):not([aria-disabled='true']):hover {
|
|
782
793
|
border-color: transparent;
|
|
783
794
|
background: var(--q1-color-action-primary-hover);
|
|
@@ -1568,6 +1579,11 @@
|
|
|
1568
1579
|
transition: none;
|
|
1569
1580
|
}
|
|
1570
1581
|
|
|
1582
|
+
/* 未选中启用复选框使用控件边界角色;单选、错误态与独立圆形控件保留原有配方。 */
|
|
1583
|
+
.control-option:where(:not(.checkbox-circle, .control-option--error)):has(input:where(:not(:checked, :disabled, [aria-invalid='true']):not([type='checkbox']:indeterminate))) .control-option__visual:not(.control-option__visual--radio) {
|
|
1584
|
+
border-color: var(--q1-color-border-control);
|
|
1585
|
+
}
|
|
1586
|
+
|
|
1571
1587
|
/* 选中是原生 input 的即时状态:圆点不做生长动画,键盘、虚拟点击与表单 reset 都立即稳定。 */
|
|
1572
1588
|
.control-option__visual--radio::after {
|
|
1573
1589
|
content: '';
|
|
@@ -6554,9 +6570,15 @@ a.q1-card:focus-visible {
|
|
|
6554
6570
|
}
|
|
6555
6571
|
}
|
|
6556
6572
|
|
|
6557
|
-
@media (pointer: coarse) {
|
|
6573
|
+
@media (pointer: coarse), (any-pointer: coarse) {
|
|
6558
6574
|
.search-input__field {
|
|
6575
|
+
min-height: var(--q1-touch-target-min);
|
|
6559
6576
|
font-size: var(--q1-font-size-copy-16);
|
|
6577
|
+
line-height: var(--q1-line-height-heading-16);
|
|
6578
|
+
}
|
|
6579
|
+
|
|
6580
|
+
.search-input__field.form-control--lg {
|
|
6581
|
+
min-height: calc(var(--q1-control-height-default) + var(--q1-space-2));
|
|
6560
6582
|
}
|
|
6561
6583
|
|
|
6562
6584
|
.search-input__clear {
|
|
@@ -8016,7 +8038,7 @@ a.q1-card:focus-visible {
|
|
|
8016
8038
|
background: var(--q1-color-action-on-primary);
|
|
8017
8039
|
border: 0;
|
|
8018
8040
|
box-shadow:
|
|
8019
|
-
0 0 0 1px var(--q1-color-border-
|
|
8041
|
+
0 0 0 1px var(--q1-color-border-control),
|
|
8020
8042
|
0 1px 2px color-mix(in srgb, var(--q1-color-shadow) 22%, transparent);
|
|
8021
8043
|
transform: scaleX(var(--slider-thumb-scale, 1));
|
|
8022
8044
|
transform-origin: center;
|
|
@@ -8029,7 +8051,7 @@ a.q1-card:focus-visible {
|
|
|
8029
8051
|
background: var(--q1-color-action-on-primary);
|
|
8030
8052
|
border: 0;
|
|
8031
8053
|
box-shadow:
|
|
8032
|
-
0 0 0 1px var(--q1-color-border-
|
|
8054
|
+
0 0 0 1px var(--q1-color-border-control),
|
|
8033
8055
|
0 1px 2px color-mix(in srgb, var(--q1-color-shadow) 22%, transparent);
|
|
8034
8056
|
transform: scaleX(var(--slider-thumb-scale, 1));
|
|
8035
8057
|
transform-origin: center;
|
|
@@ -8766,10 +8788,13 @@ a.q1-card:focus-visible {
|
|
|
8766
8788
|
width: 16px;
|
|
8767
8789
|
height: 16px;
|
|
8768
8790
|
flex: none;
|
|
8769
|
-
border: 1px solid var(--q1-color-border-
|
|
8791
|
+
border: 1px solid var(--q1-color-border-control);
|
|
8770
8792
|
border-radius: var(--q1-radius-1);
|
|
8771
8793
|
color: var(--q1-color-bg-canvas);
|
|
8772
8794
|
}
|
|
8795
|
+
.multi-select__option:is(:hover, [data-multi-select-pointer-pressed='true']) .multi-select__check:not(.multi-select__check--on) {
|
|
8796
|
+
border-color: color-mix(in srgb, var(--q1-color-border-control) 75%, var(--q1-color-text-primary));
|
|
8797
|
+
}
|
|
8773
8798
|
/* 选中态是中性 gray-1000 黑底,不是品牌蓝——与 Radio/Note 行动按钮已定的
|
|
8774
8799
|
「选择控件中性,品牌色只归主动作」规则一致。 */
|
|
8775
8800
|
.multi-select__check--on {
|
|
@@ -9238,7 +9263,7 @@ a.q1-card:focus-visible {
|
|
|
9238
9263
|
.modal-input {
|
|
9239
9264
|
width: 100%;
|
|
9240
9265
|
padding: var(--q1-space-2) var(--q1-space-3);
|
|
9241
|
-
border: 1px solid var(--q1-color-border-
|
|
9266
|
+
border: 1px solid var(--q1-color-border-control);
|
|
9242
9267
|
border-radius: var(--q1-radius-2);
|
|
9243
9268
|
background: var(--q1-color-bg-panel);
|
|
9244
9269
|
color: var(--q1-color-text-primary);
|
|
@@ -11439,6 +11464,64 @@ a.q1-navigation__item[aria-disabled='true'] {
|
|
|
11439
11464
|
display: none;
|
|
11440
11465
|
}
|
|
11441
11466
|
|
|
11467
|
+
.q1-cascader { display: grid; gap: var(--q1-space-2); min-inline-size: 0; }
|
|
11468
|
+
.q1-cascader__label { color: var(--q1-color-text-primary); font-size: var(--q1-font-size-label-14); line-height: var(--q1-line-height-label-14); }
|
|
11469
|
+
.q1-cascader__control { position: relative; display: flex; flex-wrap: wrap; align-items: center; gap: var(--q1-space-2); border: calc(var(--q1-space-1) / 4) solid var(--q1-color-border); border-radius: var(--q1-radius-2); background: var(--q1-color-bg-sunken); }
|
|
11470
|
+
.q1-cascader__trigger { display: flex; align-items: center; justify-content: space-between; flex: 1; gap: var(--q1-space-2); min-inline-size: 0; min-block-size: var(--q1-control-height-default); padding: var(--q1-space-2) var(--q1-space-3); border: none; background: none; border-radius: var(--q1-radius-2); color: var(--q1-color-text-primary); font: inherit; font-size: var(--q1-font-size-label-14); line-height: var(--q1-line-height-label-14); cursor: pointer; text-align: start; overflow-wrap: anywhere; }
|
|
11471
|
+
.q1-cascader__trigger svg, .q1-cascader__option svg { flex: none; }
|
|
11472
|
+
.q1-cascader__control:focus-within { box-shadow: var(--q1-shadow-focus-input); }
|
|
11473
|
+
.q1-cascader__control[data-invalid] { border-color: var(--q1-color-status-danger); }
|
|
11474
|
+
.q1-cascader__control[data-invalid]:focus-within { box-shadow: var(--q1-shadow-focus-input-danger); }
|
|
11475
|
+
.q1-cascader__trigger:focus-visible { outline: none; }
|
|
11476
|
+
.q1-cascader__placeholder, .q1-cascader__path { color: var(--q1-color-text-muted); }
|
|
11477
|
+
.q1-cascader__control[data-disabled], .q1-cascader__trigger[aria-disabled], .q1-cascader__option[aria-disabled] { color: var(--q1-color-text-disabled); cursor: default; }
|
|
11478
|
+
.q1-cascader__control[data-disabled] .q1-cascader__trigger { color: inherit; }
|
|
11479
|
+
.q1-cascader__control[data-tags] { align-items: start; flex-wrap: nowrap; padding-inline-end: calc(var(--q1-control-height-default) + var(--q1-space-3)); }
|
|
11480
|
+
.q1-cascader__control[data-tags] .q1-cascader__trigger { position: absolute; inset: 0; inline-size: 100%; padding: 0; }
|
|
11481
|
+
.q1-cascader__control[data-tags][data-clearable] { padding-inline-end: calc(var(--q1-control-height-default) * 2 + var(--q1-space-3)); }
|
|
11482
|
+
.q1-cascader__control[data-clearable]:not([data-tags]) .q1-cascader__trigger { margin-inline-end: var(--q1-control-height-default); }
|
|
11483
|
+
.q1-cascader__control[data-tags] .q1-cascader__trigger > svg { position: absolute; inset-block-start: var(--q1-space-2); inset-inline-end: var(--q1-space-2); }
|
|
11484
|
+
.q1-cascader__control[data-tags][data-clearable] .q1-cascader__trigger > svg { inset-inline-end: calc(var(--q1-control-height-default) + var(--q1-space-2)); }
|
|
11485
|
+
.q1-cascader__remove { position: relative; z-index: 1; pointer-events: auto; }
|
|
11486
|
+
.q1-cascader__control > .q1-cascader__remove { position: absolute; inset-block-start: 0; inset-inline-end: 0; }
|
|
11487
|
+
.q1-cascader__tags { position: relative; pointer-events: none; min-inline-size: 0; flex: 1; display: flex; flex-wrap: wrap; gap: var(--q1-space-2); padding: var(--q1-space-2); }
|
|
11488
|
+
.q1-cascader__tag { max-inline-size: 100%; min-inline-size: 0; display: inline-flex; align-items: center; gap: var(--q1-space-2); background: var(--q1-color-bg-selected); border-radius: var(--q1-radius-2); padding-inline-start: var(--q1-space-2); overflow-wrap: anywhere; }
|
|
11489
|
+
.q1-cascader__tag > span { min-inline-size: 0; }
|
|
11490
|
+
.q1-cascader__tag .q1-cascader__remove { pointer-events: auto; flex: none; }
|
|
11491
|
+
.q1-cascader__option [data-selection-area] { display: inline-flex; align-items: center; justify-content: center; flex: none; align-self: stretch; inline-size: var(--q1-control-height-default); margin: calc(var(--q1-space-2) * -1) 0 calc(var(--q1-space-2) * -1) calc(var(--q1-space-3) * -1); }
|
|
11492
|
+
.q1-cascader__remove, .q1-cascader__back { display: inline-flex; align-items: center; justify-content: center; min-block-size: var(--q1-control-height-default); min-inline-size: var(--q1-control-height-default); padding: var(--q1-space-2); border: none; border-radius: var(--q1-radius-2); background: none; color: var(--q1-color-text-secondary); font: inherit; cursor: pointer; }
|
|
11493
|
+
.q1-cascader__remove:focus-visible, .q1-cascader__back:focus-visible, .q1-cascader__search:focus-visible, .q1-cascader__list:focus-visible { outline: none; box-shadow: var(--q1-shadow-focus-input); }
|
|
11494
|
+
.q1-cascader__popup.popover-panel { max-inline-size: calc(100vw - var(--q1-space-6)); padding: var(--q1-space-2); border-radius: var(--q1-radius-3); background: var(--q1-color-bg-overlay); }
|
|
11495
|
+
.q1-cascader__panel { display: grid; gap: var(--q1-space-2); min-inline-size: 0; }
|
|
11496
|
+
.q1-cascader__search { box-sizing: border-box; inline-size: 100%; min-block-size: var(--q1-control-height-default); padding: var(--q1-space-2) var(--q1-space-3); border: calc(var(--q1-space-1) / 4) solid var(--q1-color-border); border-radius: var(--q1-radius-2); background: var(--q1-color-bg-sunken); color: var(--q1-color-text-primary); font: inherit; font-size: var(--q1-font-size-label-14); }
|
|
11497
|
+
.q1-cascader__columns { display: flex; overflow-x: auto; min-inline-size: 0; max-inline-size: calc(100vw - var(--q1-space-6) * 2); }
|
|
11498
|
+
.q1-cascader__column { flex: 0 0 auto; inline-size: calc(var(--q1-space-10) * 6); min-inline-size: 0; max-inline-size: 100%; }
|
|
11499
|
+
.q1-cascader__column[hidden] { display: none; }
|
|
11500
|
+
.q1-cascader__column + .q1-cascader__column { border-inline-start: calc(var(--q1-space-1) / 4) solid var(--q1-color-border); }
|
|
11501
|
+
.q1-cascader__list { box-sizing: border-box; list-style: none; margin: var(--q1-space-1); padding: var(--q1-space-1); overflow-y: auto; outline: none; border-radius: var(--q1-radius-2); max-block-size: min(calc(var(--q1-space-10) * 6), 40dvh); min-block-size: var(--q1-control-height-default); overscroll-behavior: contain; }
|
|
11502
|
+
.q1-cascader__option { box-sizing: border-box; display: flex; align-items: center; gap: var(--q1-space-2); min-block-size: var(--q1-control-height-default); padding: var(--q1-space-2) var(--q1-space-3); border-radius: var(--q1-radius-2); color: var(--q1-color-text-primary); font-size: var(--q1-font-size-label-14); line-height: var(--q1-line-height-label-14); cursor: pointer; overflow-wrap: anywhere; }
|
|
11503
|
+
.q1-cascader__option[aria-disabled] { color: var(--q1-color-text-disabled); }
|
|
11504
|
+
.q1-cascader__option[data-active] { background: var(--q1-color-bg-hover); }
|
|
11505
|
+
.q1-cascader__option[aria-selected='true'] { background: var(--q1-color-bg-selected); }
|
|
11506
|
+
.q1-cascader__copy { display: grid; flex: 1; min-inline-size: 0; gap: var(--q1-space-1); }
|
|
11507
|
+
.q1-cascader__path { font-size: var(--q1-font-size-label-12); line-height: var(--q1-line-height-label-12); }
|
|
11508
|
+
.q1-cascader__status { padding: var(--q1-space-3); }
|
|
11509
|
+
.q1-cascader__footer { border-block-start: calc(var(--q1-space-1) / 4) solid var(--q1-color-border); padding: var(--q1-space-2); }
|
|
11510
|
+
.q1-cascader__error { display: flex; align-items: center; gap: var(--q1-space-2); margin: 0; color: var(--q1-color-status-danger-text); font-size: var(--q1-font-size-label-14); }
|
|
11511
|
+
.q1-cascader__panel[data-narrow='true'] .q1-cascader__column { border: none; }
|
|
11512
|
+
.q1-cascader__panel[data-narrow='true'] .q1-cascader__search { font-size: var(--q1-font-size-copy-16); }
|
|
11513
|
+
.q1-cascader__back { justify-content: start; overflow-wrap: anywhere; text-align: start; }
|
|
11514
|
+
@media (pointer: coarse), (any-pointer: coarse) {
|
|
11515
|
+
.q1-cascader__trigger, .q1-cascader__option, .q1-cascader__back, .q1-cascader__remove { min-block-size: var(--q1-touch-target-min); }
|
|
11516
|
+
.q1-cascader__option [data-selection-area] { inline-size: var(--q1-touch-target-min); }
|
|
11517
|
+
.q1-cascader__control[data-tags] { padding-inline-end: calc(var(--q1-touch-target-min) + var(--q1-space-3)); }
|
|
11518
|
+
.q1-cascader__control[data-tags][data-clearable] { padding-inline-end: calc(var(--q1-touch-target-min) * 2 + var(--q1-space-3)); }
|
|
11519
|
+
.q1-cascader__control[data-clearable]:not([data-tags]) .q1-cascader__trigger { margin-inline-end: var(--q1-touch-target-min); }
|
|
11520
|
+
.q1-cascader__control[data-tags] .q1-cascader__trigger > svg { inset-block-start: calc((var(--q1-touch-target-min) - var(--q1-space-4)) / 2); }
|
|
11521
|
+
.q1-cascader__control[data-tags][data-clearable] .q1-cascader__trigger > svg { inset-inline-end: calc(var(--q1-touch-target-min) + var(--q1-space-2)); }
|
|
11522
|
+
.q1-cascader__remove { min-inline-size: var(--q1-touch-target-min); }
|
|
11523
|
+
}
|
|
11524
|
+
|
|
11442
11525
|
/* 未知总量以往返移动表示持续等待;减弱动态时保留居中填充段,不伪装完成比例。 */
|
|
11443
11526
|
.progress--indeterminate .progress__fill {
|
|
11444
11527
|
width: 40%;
|
|
@@ -12185,6 +12268,10 @@ a.q1-navigation__item[aria-disabled='true'] {
|
|
|
12185
12268
|
background: var(--q1-color-bg-panel);
|
|
12186
12269
|
}
|
|
12187
12270
|
|
|
12271
|
+
.choicebox:where(:not(:has(:checked, :disabled, [aria-invalid='true'], input[type='checkbox']:indeterminate))) .choicebox__indicator {
|
|
12272
|
+
border-color: var(--q1-color-border-control);
|
|
12273
|
+
}
|
|
12274
|
+
|
|
12188
12275
|
.choicebox--radio .choicebox__indicator {
|
|
12189
12276
|
border-radius: 50%;
|
|
12190
12277
|
}
|
|
@@ -14178,7 +14265,7 @@ a.q1-navigation__item[aria-disabled='true'] {
|
|
|
14178
14265
|
min-width: 0;
|
|
14179
14266
|
height: var(--q1-space-8);
|
|
14180
14267
|
box-sizing: border-box;
|
|
14181
|
-
border: calc(var(--q1-space-1) / 4) dashed var(--q1-color-border-
|
|
14268
|
+
border: calc(var(--q1-space-1) / 4) dashed var(--q1-color-border-control);
|
|
14182
14269
|
border-radius: var(--q1-radius-full);
|
|
14183
14270
|
background: var(--q1-color-bg-canvas);
|
|
14184
14271
|
color: var(--q1-color-text-secondary);
|
|
@@ -14221,7 +14308,7 @@ a.q1-navigation__item[aria-disabled='true'] {
|
|
|
14221
14308
|
background: var(--q1-color-border);
|
|
14222
14309
|
}
|
|
14223
14310
|
.filter-chip__value { min-width: 0; max-width: calc(var(--q1-space-7) * 6); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--q1-color-action-text); font-weight: var(--q1-font-weight-medium); }
|
|
14224
|
-
.filter-chip:not([data-disabled]):has(button:hover) { background: var(--q1-color-bg-subtle); border-color: color-mix(in srgb, var(--q1-color-border-
|
|
14311
|
+
.filter-chip:not([data-disabled]):has(button:hover) { background: var(--q1-color-bg-subtle); border-color: color-mix(in srgb, var(--q1-color-border-control) 80%, var(--q1-color-text-primary)); color: var(--q1-color-text-primary); }
|
|
14225
14312
|
.filter-chip button:hover:not(:disabled) svg { color: var(--q1-color-text-primary); }
|
|
14226
14313
|
.filter-chip__picker:focus-visible, .filter-chip__clear:focus-visible { outline: none; box-shadow: var(--q1-shadow-focus); }
|
|
14227
14314
|
.filter-chip[data-disabled] { opacity: 0.5; }
|
|
@@ -14748,7 +14835,7 @@ a.q1-navigation__item[aria-disabled='true'] {
|
|
|
14748
14835
|
.message-scroller__notice { position: absolute; width: calc(var(--q1-space-1) / 4); height: calc(var(--q1-space-1) / 4); overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
|
|
14749
14836
|
|
|
14750
14837
|
.composer { position: relative; }
|
|
14751
|
-
.composer__box { border: 1px solid var(--q1-color-border-
|
|
14838
|
+
.composer__box { border: 1px solid var(--q1-color-border-control); border-radius: var(--q1-radius-3); background: var(--q1-color-bg-panel); }
|
|
14752
14839
|
.composer__box:focus-within { box-shadow: var(--q1-shadow-focus-input); }
|
|
14753
14840
|
.composer textarea { display: block; width: 100%; min-height: var(--q1-touch-target-min); max-height: calc(var(--q1-space-10) * 4); border: 0; outline: none; box-shadow: none; resize: none; background: transparent; padding: var(--q1-space-2-5) var(--q1-space-3) var(--q1-space-1); font: inherit; color: var(--q1-color-text-primary); line-height: var(--q1-line-height-relaxed); }
|
|
14754
14841
|
.composer textarea::placeholder { color: var(--q1-color-text-muted); }
|
|
@@ -15207,7 +15294,7 @@ a.q1-navigation__item[aria-disabled='true'] {
|
|
|
15207
15294
|
width: 100%;
|
|
15208
15295
|
min-width: 0;
|
|
15209
15296
|
resize: vertical;
|
|
15210
|
-
border: calc(var(--q1-space-1) / 4) solid var(--q1-color-border-
|
|
15297
|
+
border: calc(var(--q1-space-1) / 4) solid var(--q1-color-border-control);
|
|
15211
15298
|
border-radius: var(--q1-radius-2);
|
|
15212
15299
|
background: var(--q1-color-bg-panel);
|
|
15213
15300
|
color: var(--q1-color-text-primary);
|
|
@@ -15450,18 +15537,12 @@ a.q1-navigation__item[aria-disabled='true'] {
|
|
|
15450
15537
|
background: var(--q1-color-bg-panel);
|
|
15451
15538
|
}
|
|
15452
15539
|
|
|
15453
|
-
/*
|
|
15540
|
+
/* Context Menu 触发区:暗色 border-strong 与面板仅约 1.4:1,
|
|
15454
15541
|
先用 text-muted 拉到 ≥ 3:1;border-strong 取值定案后再统一回归。 */
|
|
15455
|
-
:is(:root[data-theme='dark'], [data-q1-theme='dark']) .filter-chip:not(.filter-chip--set):not([data-disabled]):not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)),
|
|
15456
15542
|
:is(:root[data-theme='dark'], [data-q1-theme='dark']) .context-menu__area:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
|
|
15457
15543
|
border-color: var(--q1-color-text-muted);
|
|
15458
15544
|
}
|
|
15459
15545
|
|
|
15460
|
-
/* Multi Select 未选中勾选框:暗色 border-strong 落在浮层底上约 1.1:1;改控件边界角色 border-control。 */
|
|
15461
|
-
:is(:root[data-theme='dark'], [data-q1-theme='dark']) .multi-select__check:not(.multi-select__check--on):not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
|
|
15462
|
-
border-color: var(--q1-color-border-control);
|
|
15463
|
-
}
|
|
15464
|
-
|
|
15465
15546
|
/* 选中态配方:选中 = 1px --q1-color-border-strong 描边 + 浅底(亮色 --q1-color-bg-subtle,
|
|
15466
15547
|
暗色 --q1-color-bg-raised),不叠焦点光晕。Choicebox 卡片描边走控件边界角色 --q1-color-border-control。
|
|
15467
15548
|
有实体边框的表面只换 border-color;无边框的分段项用 inset 1px 描边,不改变尺寸。
|
package/dist-pkg/tokens.css
CHANGED
|
@@ -169,6 +169,7 @@
|
|
|
169
169
|
--q1-color-auth-text-secondary: #273951;
|
|
170
170
|
--q1-color-auth-text-muted: #64748d;
|
|
171
171
|
--q1-color-auth-border-strong: #d6dde6;
|
|
172
|
+
--q1-color-auth-border-control: #8290a3;
|
|
172
173
|
--q1-color-auth-surface-card: #ffffff;
|
|
173
174
|
--q1-color-auth-surface-subtle: #f8fafc;
|
|
174
175
|
--q1-color-auth-surface-input: #ffffff;
|
|
@@ -494,6 +495,7 @@
|
|
|
494
495
|
--q1-color-auth-text-secondary: #d1d5db;
|
|
495
496
|
--q1-color-auth-text-muted: #9ca3af;
|
|
496
497
|
--q1-color-auth-border-strong: #343943;
|
|
498
|
+
--q1-color-auth-border-control: #616b7b;
|
|
497
499
|
--q1-color-auth-surface-card: #17191d;
|
|
498
500
|
--q1-color-auth-surface-subtle: #101216;
|
|
499
501
|
--q1-color-auth-surface-input: #101216;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@q1travel/design-system",
|
|
3
|
-
"version": "0.30.
|
|
3
|
+
"version": "0.30.9",
|
|
4
4
|
"description": "React components, design tokens, and interface contracts for q1travel products.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|
|
@@ -53,8 +53,8 @@
|
|
|
53
53
|
"preview": "vite preview --host 127.0.0.1",
|
|
54
54
|
"check:shell": "npm run sync:contracts && node scripts/check-shell.mjs && node scripts/check-token-package.mjs && npm run check:release-provenance",
|
|
55
55
|
"check:browser:strictmode": "node scripts/check-browser.mjs --strictmode-ref",
|
|
56
|
-
"check:browser": "node --test scripts/devtools-connection.test.mjs scripts/vite-server-lifecycle.test.mjs scripts/chromium-launch.test.mjs scripts/chromium-recovery.test.mjs scripts/chromium-ownership.test.mjs scripts/cdp-recovery.test.mjs && npm run check:browser:strictmode && node scripts/check-browser.mjs --note && node scripts/check-browser.mjs && node scripts/check-clearable-input-browser.mjs && node scripts/check-calendar-browser.mjs && node scripts/check-banner-browser.mjs && node scripts/check-button-link-browser.mjs && node scripts/check-button-browser.mjs && node scripts/check-trailing-icon-padding-browser.mjs && node scripts/check-overlay-theme-browser.mjs && node scripts/check-browser-component-browser.mjs",
|
|
57
|
-
"check:package-api": "node scripts/check-package-api.mjs && node --test scripts/check-multi-combobox-contract.test.mjs && node --test scripts/check-q1-design-lint.test.mjs scripts/check-q1-design-bin-entry.test.mjs && node --test scripts/check-json-view-contract.test.mjs && node --test scripts/check-verification-code-input.test.mjs && node --test scripts/check-bare-field-error.test.mjs scripts/check-label-hidden-contract.test.mjs scripts/check-required-indicator-contract.test.mjs scripts/check-spinner-inherit-contract.test.mjs && node --test scripts/check-controls-contract.test.mjs && node --test scripts/check-pagination-contract.test.mjs && node --test scripts/check-table-core.test.mjs scripts/check-table-interaction.test.mjs scripts/check-table-layout.test.mjs && node --test scripts/check-contrast-contract.test.mjs && node --test scripts/check-optical-alignment-contract.test.mjs && node --test scripts/check-overlay-coordination.test.mjs scripts/check-sheet-contract.test.mjs && node --test scripts/check-choicebox-contract.test.mjs && node --test scripts/check-radio-group-contract.test.mjs && node --test scripts/check-clearable-input-contract.test.mjs && node --test scripts/check-card-contract.test.mjs && node --test scripts/check-book-contract.test.mjs && node --test scripts/check-breadcrumbs-contract.test.mjs && node --test scripts/check-description-contract.test.mjs && node --test scripts/check-error-message-contract.test.mjs && node --test scripts/check-show-more-contract.test.mjs && node --test scripts/check-load-more-button-contract.test.mjs && node --test scripts/check-banner-contract.test.mjs && node --test scripts/check-project-banner-contract.test.mjs && node --test scripts/check-note-contract.test.mjs && node --test scripts/check-feedback-contract.test.mjs && node --test scripts/check-page-feedback-contract.test.mjs && node --test scripts/check-drawer-gesture.test.mjs && node --test scripts/check-checkbox-circle-contract.test.mjs && node --test scripts/check-chat-contract.test.mjs && node --test scripts/check-calendar-single-contract.test.mjs && node --test scripts/check-hover-card-contract.test.mjs && node --test scripts/check-bare-field-error.test.mjs && node --test scripts/check-controls-contract.test.mjs scripts/check-control-size-contract.test.mjs && node --test scripts/check-composer-dots-menu-contract.test.mjs && node --test scripts/check-filter-option-panel-contract.test.mjs && npm run check:release-diff",
|
|
56
|
+
"check:browser": "node --test scripts/devtools-connection.test.mjs scripts/browser-exit-deadline.test.mjs scripts/chromium-teardown.test.mjs scripts/vite-server-lifecycle.test.mjs scripts/chromium-launch.test.mjs scripts/chromium-recovery.test.mjs scripts/chromium-ownership.test.mjs scripts/cdp-recovery.test.mjs && npm run check:browser:strictmode && node scripts/check-browser.mjs --note && node scripts/check-browser.mjs --combobox-panel && node scripts/check-browser.mjs && node scripts/check-clearable-input-browser.mjs && node scripts/check-calendar-browser.mjs && node scripts/check-banner-browser.mjs && node scripts/check-button-link-browser.mjs && node scripts/check-button-browser.mjs && node scripts/check-trailing-icon-padding-browser.mjs && node scripts/check-overlay-theme-browser.mjs && node scripts/check-browser-component-browser.mjs",
|
|
57
|
+
"check:package-api": "node scripts/check-package-api.mjs && node --test scripts/check-combobox-required.test.mjs scripts/check-multi-combobox-contract.test.mjs && node --test scripts/check-q1-design-lint.test.mjs scripts/check-q1-design-bin-entry.test.mjs && node --test scripts/check-json-view-contract.test.mjs && node --test scripts/check-verification-code-input.test.mjs && node --test scripts/check-bare-field-error.test.mjs scripts/check-label-hidden-contract.test.mjs scripts/check-required-indicator-contract.test.mjs scripts/check-spinner-inherit-contract.test.mjs && node --test scripts/check-controls-contract.test.mjs && node --test scripts/check-pagination-contract.test.mjs && node --test scripts/check-table-core.test.mjs scripts/check-table-interaction.test.mjs scripts/check-table-layout.test.mjs && node --test scripts/check-contrast-contract.test.mjs && node --test scripts/check-optical-alignment-contract.test.mjs && node --test scripts/check-overlay-coordination.test.mjs scripts/check-sheet-contract.test.mjs && node --test scripts/check-choicebox-contract.test.mjs && node --test scripts/check-radio-group-contract.test.mjs && node --test scripts/check-clearable-input-contract.test.mjs && node --test scripts/check-card-contract.test.mjs && node --test scripts/check-book-contract.test.mjs && node --test scripts/check-breadcrumbs-contract.test.mjs && node --test scripts/check-description-contract.test.mjs && node --test scripts/check-error-message-contract.test.mjs && node --test scripts/check-show-more-contract.test.mjs && node --test scripts/check-load-more-button-contract.test.mjs && node --test scripts/check-banner-contract.test.mjs && node --test scripts/check-project-banner-contract.test.mjs && node --test scripts/check-note-contract.test.mjs && node --test scripts/check-feedback-contract.test.mjs && node --test scripts/check-page-feedback-contract.test.mjs && node --test scripts/check-drawer-gesture.test.mjs && node --test scripts/check-checkbox-circle-contract.test.mjs && node --test scripts/check-chat-contract.test.mjs && node --test scripts/check-calendar-single-contract.test.mjs && node --test scripts/check-hover-card-contract.test.mjs && node --test scripts/check-bare-field-error.test.mjs && node --test scripts/check-controls-contract.test.mjs scripts/check-control-size-contract.test.mjs && node --test scripts/check-composer-dots-menu-contract.test.mjs && node --test scripts/check-filter-option-panel-contract.test.mjs && npm run check:release-diff",
|
|
58
58
|
"check:release-diff": "node --test scripts/check-release-artifact-diff.test.mjs && node scripts/check-release-artifact-diff.mjs",
|
|
59
59
|
"check:release-provenance": "node --test scripts/check-release-provenance.test.mjs && node scripts/check-release-provenance.mjs",
|
|
60
60
|
"check:release-sync": "node --test scripts/release-sync.test.mjs scripts/release-preview-version.test.mjs",
|