@q1travel/design-system 0.30.8 → 0.30.10
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/design.dark.md +1 -0
- package/contracts/design.md +1 -0
- package/contracts/token-naming.md +2 -1
- package/dist-pkg/style.css +22 -11
- package/dist-pkg/tokens.css +2 -0
- package/package.json +2 -2
package/contracts/design.dark.md
CHANGED
package/contracts/design.md
CHANGED
|
@@ -135,7 +135,8 @@ Shipped domain palette (owner-approved 2026-10-13): `auth`, the cool blue-gray p
|
|
|
135
135
|
| `--q1-color-auth-text-primary` | `#061b31` | `#f3f4f6` | Headings |
|
|
136
136
|
| `--q1-color-auth-text-secondary` | `#273951` | `#d1d5db` | Body copy |
|
|
137
137
|
| `--q1-color-auth-text-muted` | `#64748d` | `#9ca3af` | Supporting notes |
|
|
138
|
-
| `--q1-color-auth-border-strong` | `#d6dde6` | `#343943` | Card and
|
|
138
|
+
| `--q1-color-auth-border-strong` | `#d6dde6` | `#343943` | Card borders and dividers |
|
|
139
|
+
| `--q1-color-auth-border-control` | `#8290a3` | `#616b7b` | Enabled input and selection control boundaries; at least 3:1 against auth input, card and subtle surfaces |
|
|
139
140
|
| `--q1-color-auth-surface-card` | `#ffffff` | `#17191d` | Card |
|
|
140
141
|
| `--q1-color-auth-surface-subtle` | `#f8fafc` | `#101216` | Preview area |
|
|
141
142
|
| `--q1-color-auth-surface-input` | `#ffffff` | `#101216` | Input background |
|
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;
|
|
@@ -640,7 +647,7 @@
|
|
|
640
647
|
|
|
641
648
|
.button--danger {
|
|
642
649
|
border-color: color-mix(in srgb, var(--q1-color-status-danger) 44%, var(--q1-color-border));
|
|
643
|
-
color: var(--q1-color-status-danger);
|
|
650
|
+
color: var(--q1-color-status-danger-text);
|
|
644
651
|
}
|
|
645
652
|
|
|
646
653
|
.button--warning {
|
|
@@ -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:where(: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);
|
|
@@ -968,7 +979,7 @@
|
|
|
968
979
|
--q1-tone-fg-warning: oklch(from var(--q1-color-status-warning) 0.47 0.13 h);
|
|
969
980
|
--q1-tone-bg-danger: oklch(from var(--q1-color-status-danger) 0.96 0.03 h);
|
|
970
981
|
--q1-tone-border-danger: oklch(from var(--q1-color-status-danger) 0.86 0.06 h);
|
|
971
|
-
--q1-tone-fg-danger: oklch(from var(--q1-color-status-danger) 0.47 0.13 h);
|
|
982
|
+
--q1-tone-fg-danger: oklch(from var(--q1-color-status-danger-text) 0.47 0.13 h);
|
|
972
983
|
}
|
|
973
984
|
|
|
974
985
|
:root[data-theme='dark'],
|
|
@@ -984,7 +995,7 @@
|
|
|
984
995
|
--q1-tone-fg-warning: oklch(from var(--q1-color-status-warning) 0.72 0.14 h);
|
|
985
996
|
--q1-tone-bg-danger: oklch(from var(--q1-color-status-danger) 0.24 0.04 h);
|
|
986
997
|
--q1-tone-border-danger: oklch(from var(--q1-color-status-danger) 0.34 0.06 h);
|
|
987
|
-
--q1-tone-fg-danger: oklch(from var(--q1-color-status-danger) 0.72 0.14 h);
|
|
998
|
+
--q1-tone-fg-danger: oklch(from var(--q1-color-status-danger-text) 0.72 0.14 h);
|
|
988
999
|
}
|
|
989
1000
|
|
|
990
1001
|
/* 局部主题子树根元素:原生控件与继承文字色随子树主题,不沿用页面主题。 */
|
|
@@ -2552,7 +2563,7 @@
|
|
|
2552
2563
|
|
|
2553
2564
|
.badge--danger-subtle {
|
|
2554
2565
|
background: oklch(from var(--q1-color-status-danger) 0.95 0.035 h);
|
|
2555
|
-
color: oklch(from var(--q1-color-status-danger) 0.47 0.15 h);
|
|
2566
|
+
color: oklch(from var(--q1-color-status-danger-text) 0.47 0.15 h);
|
|
2556
2567
|
}
|
|
2557
2568
|
|
|
2558
2569
|
/* subtle 暗色:暗底 + 亮字(oklch L0.26 底 / L0.74 字)。 */
|
|
@@ -2573,7 +2584,7 @@
|
|
|
2573
2584
|
|
|
2574
2585
|
:is(:root[data-theme='dark'], [data-q1-theme='dark']) .badge--danger-subtle:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
|
|
2575
2586
|
background: oklch(from var(--q1-color-status-danger) 0.26 0.045 h);
|
|
2576
|
-
color: oklch(from var(--q1-color-status-danger) 0.74 0.16 h);
|
|
2587
|
+
color: oklch(from var(--q1-color-status-danger-text) 0.74 0.16 h);
|
|
2577
2588
|
}
|
|
2578
2589
|
|
|
2579
2590
|
/* quiet 档:低强调元数据形态(SKU/条码/待绑定包裹等),视觉≈neutral-subtle——淡染底、无描边,但不带 tone 语义色。 */
|
|
@@ -4882,7 +4893,7 @@ a[href]:has(> .book):focus-visible {
|
|
|
4882
4893
|
|
|
4883
4894
|
.label__required {
|
|
4884
4895
|
margin-left: 2px;
|
|
4885
|
-
color: var(--q1-color-status-danger);
|
|
4896
|
+
color: var(--q1-color-status-danger-text);
|
|
4886
4897
|
}
|
|
4887
4898
|
|
|
4888
4899
|
.code-block {
|
|
@@ -6648,7 +6659,7 @@ a.q1-card:focus-visible {
|
|
|
6648
6659
|
}
|
|
6649
6660
|
|
|
6650
6661
|
.fieldset--danger .fieldset__status {
|
|
6651
|
-
color: var(--q1-color-status-danger);
|
|
6662
|
+
color: var(--q1-color-status-danger-text);
|
|
6652
6663
|
}
|
|
6653
6664
|
|
|
6654
6665
|
/* 窄屏:页脚纵排,说明文字整行在上、操作在下,避免日期与按钮文案被并排挤成两行。 */
|
|
@@ -10682,7 +10693,7 @@ a.q1-navigation__item[aria-disabled='true'] {
|
|
|
10682
10693
|
border-radius: var(--q1-radius-2);
|
|
10683
10694
|
background: color-mix(in srgb, var(--q1-color-status-danger) 10%, transparent);
|
|
10684
10695
|
padding: var(--q1-space-2) var(--q1-space-3);
|
|
10685
|
-
color: color-mix(in srgb, var(--q1-color-status-danger) 70%, var(--q1-color-text-primary));
|
|
10696
|
+
color: color-mix(in srgb, var(--q1-color-status-danger-text) 70%, var(--q1-color-text-primary));
|
|
10686
10697
|
font-size: var(--q1-font-size-label-13);
|
|
10687
10698
|
line-height: var(--q1-line-height-label-13);
|
|
10688
10699
|
}
|
|
@@ -12012,7 +12023,7 @@ a.q1-navigation__item[aria-disabled='true'] {
|
|
|
12012
12023
|
}
|
|
12013
12024
|
|
|
12014
12025
|
.cal-inputs__error {
|
|
12015
|
-
color: var(--q1-color-status-danger);
|
|
12026
|
+
color: var(--q1-color-status-danger-text);
|
|
12016
12027
|
font-size: var(--q1-font-size-label-12);
|
|
12017
12028
|
line-height: var(--q1-line-height-label-12);
|
|
12018
12029
|
}
|
|
@@ -15011,7 +15022,7 @@ a.q1-navigation__item[aria-disabled='true'] {
|
|
|
15011
15022
|
}
|
|
15012
15023
|
|
|
15013
15024
|
.feedback__message--error {
|
|
15014
|
-
color: var(--q1-color-status-danger);
|
|
15025
|
+
color: var(--q1-color-status-danger-text);
|
|
15015
15026
|
}
|
|
15016
15027
|
|
|
15017
15028
|
.feedback__submit {
|
|
@@ -15298,7 +15309,7 @@ a.q1-navigation__item[aria-disabled='true'] {
|
|
|
15298
15309
|
|
|
15299
15310
|
.page-feedback__actions { justify-content: flex-end; }
|
|
15300
15311
|
.page-feedback__status { margin: 0; }
|
|
15301
|
-
.page-feedback__error { color: var(--q1-color-status-danger); }
|
|
15312
|
+
.page-feedback__error { color: var(--q1-color-status-danger-text); }
|
|
15302
15313
|
.page-feedback :disabled { cursor: default; opacity: 0.5; }
|
|
15303
15314
|
|
|
15304
15315
|
@media (hover: hover) and (pointer: fine) {
|
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.10",
|
|
4
4
|
"description": "React components, design tokens, and interface contracts for q1travel products.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|
|
@@ -53,7 +53,7 @@
|
|
|
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/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 && 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",
|
|
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
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",
|