@q1travel/design-system 0.29.2 → 0.30.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.
@@ -4594,6 +4594,7 @@ a[href]:has(> .book):focus-visible {
4594
4594
  .spinner--danger { color: var(--q1-color-status-danger); }
4595
4595
  .spinner--success { color: var(--q1-color-status-success); }
4596
4596
  .spinner--info { color: var(--q1-color-status-info); }
4597
+ .spinner--inherit { color: inherit; }
4597
4598
 
4598
4599
  /* 辐条角度与动画延迟由组件按辐条数内联计算(辐条数随尺寸增减)。 */
4599
4600
  .spinner__bar {
@@ -8650,11 +8651,6 @@ a.q1-card:focus-visible {
8650
8651
  font-size: 14px;
8651
8652
  text-align: center;
8652
8653
  }
8653
- .multi-select__empty:focus-visible {
8654
- outline: none;
8655
- box-shadow: var(--q1-shadow-focus);
8656
- border-radius: var(--q1-radius-2);
8657
- }
8658
8654
  @media (hover: hover) and (pointer: fine) {
8659
8655
  .multi-select__trigger:hover,
8660
8656
  .multi-select__option:hover {
@@ -11299,6 +11295,10 @@ a.q1-navigation__item[aria-disabled='true'] {
11299
11295
  transition: color var(--q1-duration-press) var(--q1-ease-state);
11300
11296
  }
11301
11297
 
11298
+ .q1-navigation__item-line-content {
11299
+ display: contents;
11300
+ }
11301
+
11302
11302
  /* viewport 边缘留白保护横向外扩的环;基线仍从 nav 内容左缘开始。 */
11303
11303
  .q1-navigation--horizontal.q1-navigation--line .q1-navigation__item:focus-visible {
11304
11304
  box-shadow: none;
@@ -11345,7 +11345,29 @@ a.q1-navigation__item[aria-disabled='true'] {
11345
11345
  }
11346
11346
 
11347
11347
  .q1-navigation--horizontal.q1-navigation--line .q1-navigation__item {
11348
- min-height: var(--q1-touch-target-min);
11348
+ min-block-size: var(--q1-touch-target-min);
11349
+ min-inline-size: var(--q1-touch-target-min);
11350
+ justify-content: center;
11351
+ }
11352
+
11353
+ .q1-navigation--line .q1-navigation__item:is(.q1-navigation__item--active, [aria-current='page']) {
11354
+ border-bottom-color: transparent;
11355
+ }
11356
+
11357
+ .q1-navigation__item-line-content {
11358
+ display: flex;
11359
+ align-items: center;
11360
+ gap: inherit;
11361
+ position: relative;
11362
+ }
11363
+
11364
+ .q1-navigation--line .q1-navigation__item:is(.q1-navigation__item--active, [aria-current='page']) > .q1-navigation__item-line-content::after {
11365
+ content: '';
11366
+ position: absolute;
11367
+ inset-inline: 0;
11368
+ bottom: calc(-1 * (var(--q1-space-3) + var(--q1-space-1) / 2));
11369
+ border-bottom: calc(var(--q1-space-1) / 2) solid currentColor;
11370
+ pointer-events: none;
11349
11371
  }
11350
11372
 
11351
11373
  .q1-navigation--line .q1-navigation__item::before {
@@ -11353,7 +11375,7 @@ a.q1-navigation__item[aria-disabled='true'] {
11353
11375
  position: absolute;
11354
11376
  inset-block: 0;
11355
11377
  inset-inline-start: calc(var(--q1-navigation-line-gap) / -2);
11356
- width: max(var(--q1-touch-target-min), calc(100% + var(--q1-navigation-line-gap)));
11378
+ width: calc(100% + var(--q1-navigation-line-gap));
11357
11379
  }
11358
11380
  }
11359
11381
 
@@ -12015,6 +12037,41 @@ a.q1-navigation__item[aria-disabled='true'] {
12015
12037
  }
12016
12038
  }
12017
12039
 
12040
+ .multi-combobox { min-width: 0; }
12041
+ .multi-combobox__control { box-sizing: border-box; position: relative; display: flex; align-items: center; gap: var(--q1-space-2); min-height: var(--q1-control-height-default); padding: var(--q1-space-1) var(--q1-space-3); border: calc(var(--q1-space-1) / 4) solid var(--q1-color-border-control); border-radius: var(--q1-radius-2); background: var(--q1-color-bg-sunken); }
12042
+ .multi-combobox__trigger { position: absolute; inset: 0; width: 100%; border: 0; border-radius: inherit; background: transparent; cursor: pointer; }
12043
+ .multi-combobox__trigger:focus { outline: none; }
12044
+ .multi-combobox__control:has(.multi-combobox__trigger:focus-visible) { box-shadow: var(--q1-shadow-focus); }
12045
+ .multi-combobox__control[data-invalid] { border-color: var(--q1-color-status-danger); box-shadow: 0 0 0 calc(var(--q1-space-1) / 4) var(--q1-color-status-danger), 0 0 0 var(--q1-space-1) var(--q1-color-red-100); }
12046
+ .multi-combobox__control[data-invalid]:has(.multi-combobox__trigger:focus-visible) { box-shadow: var(--q1-shadow-focus-input-danger); }
12047
+ .multi-combobox__control[data-disabled] { opacity: 0.5; }
12048
+ .multi-combobox__trigger:disabled, .multi-combobox__trigger[aria-disabled] { cursor: default; }
12049
+ .multi-combobox__values { display: flex; flex: 1; flex-wrap: wrap; align-items: center; gap: var(--q1-space-1); min-width: 0; pointer-events: none; font-size: var(--q1-font-size-label-14); line-height: var(--q1-line-height-label-14); }
12050
+ .multi-combobox__tag { position: relative; display: inline-flex; align-items: center; gap: var(--q1-space-1); max-width: 100%; padding-inline-start: var(--q1-space-2); border-radius: var(--q1-radius-1); background: var(--q1-color-bg-hover); color: var(--q1-color-text-primary); }
12051
+ .multi-combobox__tag > span { min-width: 0; overflow-wrap: anywhere; }
12052
+ .multi-combobox__remove { position: relative; display: inline-flex; align-items: center; justify-content: center; flex: none; min-width: var(--q1-space-6); min-height: var(--q1-space-6); padding: 0; border: 0; border-radius: var(--q1-radius-1); background: transparent; color: inherit; pointer-events: auto; cursor: pointer; }
12053
+ .multi-combobox__remove:disabled { cursor: default; }
12054
+ .multi-combobox__remove:focus-visible { outline: none; box-shadow: var(--q1-shadow-focus); }
12055
+ .multi-combobox__placeholder { color: var(--q1-color-text-muted); }
12056
+ .multi-combobox__arrow { flex: none; pointer-events: none; color: var(--q1-color-text-secondary); }
12057
+ .multi-combobox__popup { box-sizing: border-box; max-width: calc(100vw - var(--q1-space-6)); }
12058
+ .multi-combobox__panel { display: grid; gap: var(--q1-space-2); min-width: 0; }
12059
+ .multi-combobox__search { min-width: 0; width: 100%; }
12060
+ .multi-combobox__list { list-style: none; margin: 0; padding: 0; max-height: min(calc(var(--q1-space-10) * 6), 40vh); overflow-y: auto; overscroll-behavior: contain; }
12061
+ .multi-combobox__option { box-sizing: border-box; min-height: var(--q1-control-height-default); justify-content: space-between; }
12062
+ .multi-combobox__option[data-active] { background: var(--q1-color-bg-hover); }
12063
+ .multi-combobox__option[aria-disabled] { color: var(--q1-color-text-muted); cursor: default; }
12064
+ .multi-combobox__copy { display: grid; min-width: 0; overflow-wrap: anywhere; }
12065
+ .multi-combobox__description { color: var(--q1-color-text-secondary); font-size: var(--q1-font-size-label-13); }
12066
+ .multi-combobox__option svg { flex-shrink: 0; }
12067
+ .multi-combobox__status { display: grid; justify-items: start; gap: var(--q1-space-3); padding: var(--q1-space-3); color: var(--q1-color-text-secondary); overflow-wrap: anywhere; }
12068
+ .multi-select__trigger[aria-invalid='true'] { border-color: var(--q1-color-status-danger); box-shadow: var(--q1-shadow-focus-input-danger); }
12069
+ @media (hover: none), (pointer: coarse), (any-pointer: coarse) {
12070
+ .multi-combobox__control, .multi-combobox__option, .multi-combobox__remove { min-height: var(--q1-touch-target-min); }
12071
+ .multi-combobox__remove { min-width: var(--q1-touch-target-min); }
12072
+ .multi-combobox__search { font-size: var(--q1-font-size-copy-16); }
12073
+ }
12074
+
12018
12075
  /* Command Menu:Foundation portal 内的全屏阻断层与可滚动命令列表。 */
12019
12076
  .command-palette__trigger {
12020
12077
  display: inline-flex;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@q1travel/design-system",
3
- "version": "0.29.2",
3
+ "version": "0.30.0",
4
4
  "description": "React components, design tokens, and interface contracts for q1travel products.",
5
5
  "keywords": [
6
6
  "react",
@@ -54,7 +54,7 @@
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
56
  "check:browser": "node --test scripts/devtools-connection.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-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 && 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-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",
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-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",