@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.
@@ -175,6 +175,7 @@ semantic-colors:
175
175
  auth-text-secondary: "#d1d5db"
176
176
  auth-text-muted: "#9ca3af"
177
177
  auth-border-strong: "#343943"
178
+ auth-border-control: "#616b7b"
178
179
  auth-surface-card: "#17191d"
179
180
  auth-surface-subtle: "#101216"
180
181
  auth-surface-input: "#101216"
@@ -175,6 +175,7 @@ semantic-colors:
175
175
  auth-text-secondary: "#273951"
176
176
  auth-text-muted: "#64748d"
177
177
  auth-border-strong: "#d6dde6"
178
+ auth-border-control: "#8290a3"
178
179
  auth-surface-card: "#ffffff"
179
180
  auth-surface-subtle: "#f8fafc"
180
181
  auth-surface-input: "#ffffff"
@@ -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 input borders |
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 |
@@ -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) {
@@ -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.8",
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",