@q1travel/design-system 0.31.2 → 0.31.4

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.
@@ -747,10 +747,21 @@
747
747
  animation: none;
748
748
  }
749
749
 
750
- /* 加载态的状态区与按钮内其他图标一样按 flex 居中;普通行内 span 会让 SVG 坐在文字基线上,偏高约 1px。 */
750
+ /* 加载内容保留尺寸与可访问名称,状态指示覆盖在按钮中央。 */
751
+ .button--loading {
752
+ position: relative;
753
+ }
754
+
755
+ .button--loading:not(.button--busy) > .button__text {
756
+ opacity: 0;
757
+ }
758
+
751
759
  .button__loading-status {
760
+ position: absolute;
761
+ inset: 0;
752
762
  display: inline-flex;
753
763
  align-items: center;
764
+ justify-content: center;
754
765
  }
755
766
 
756
767
  .button__icon-slot {
@@ -7131,12 +7142,11 @@ a.q1-card:focus-visible {
7131
7142
  flex: none;
7132
7143
  display: inline-block;
7133
7144
  border-radius: var(--q1-radius-full);
7134
- background: var(--q1-color-gray-400);
7145
+ background: var(--q1-color-gray-700);
7135
7146
  border: 0;
7136
- transform: scale(1);
7147
+ transform: none;
7137
7148
  transition:
7138
- background var(--q1-duration-fast) var(--q1-ease-state),
7139
- transform var(--q1-duration-press) var(--q1-ease-out);
7149
+ background var(--q1-duration-fast) var(--q1-ease-state);
7140
7150
  }
7141
7151
  .toggle__thumb {
7142
7152
  position: absolute;
@@ -7203,17 +7213,23 @@ a.q1-card:focus-visible {
7203
7213
 
7204
7214
  @media (hover: hover) and (pointer: fine) {
7205
7215
  .toggle-field:not(:disabled):hover .toggle {
7206
- background: var(--q1-color-gray-500);
7216
+ background: var(--q1-color-gray-800);
7207
7217
  }
7208
7218
  .toggle-field[aria-checked='true']:not(:disabled):hover .toggle {
7209
7219
  background: var(--toggle-on, var(--q1-color-action-primary-hover));
7210
7220
  }
7211
7221
  }
7212
7222
 
7213
- /* pointer-down 只压缩视觉轨道;按钮命中区和文字不动,thumb 保留自己的位移 transform。 */
7223
+ /* pointer-down 保持悬停轨道色,仅增加圆点阴影;定位与命中区保持稳定。 */
7214
7224
  @media (prefers-reduced-motion: no-preference) {
7215
7225
  .toggle-field[data-pointer-pressed='true']:not(:disabled) .toggle {
7216
- transform: scale(0.97);
7226
+ background: var(--q1-color-gray-800);
7227
+ }
7228
+ .toggle-field[aria-checked='true'][data-pointer-pressed='true']:not(:disabled) .toggle {
7229
+ background: var(--toggle-on, var(--q1-color-action-primary-hover));
7230
+ }
7231
+ .toggle-field[data-pointer-pressed='true']:not(:disabled) .toggle__thumb {
7232
+ box-shadow: var(--q1-shadow-popover);
7217
7233
  }
7218
7234
  }
7219
7235
 
@@ -8432,7 +8448,7 @@ a.q1-card:focus-visible {
8432
8448
  visibility: hidden;
8433
8449
  }
8434
8450
  /* 变体:default 是浅灰底 + border-strong 外框,分割线与外框同为 border-strong,在浅灰底上保持清晰;
8435
- secondary 是面板底 + 与 Button 次要档一致的外框(亮色 border、暗色 border-control);分割线始终与外框同色同粗。 */
8451
+ secondary 是面板底 + 与 Button 次要档一致的外框(亮色 border-strong、暗色 border-control);分割线始终与外框同色同粗。 */
8436
8452
  .split-button--default .split-button__primary,
8437
8453
  .split-button--default .split-button__toggle {
8438
8454
  background: var(--q1-color-bg-subtle);
@@ -8469,6 +8485,21 @@ a.q1-card:focus-visible {
8469
8485
  .split-button__toggle[aria-disabled='true'] {
8470
8486
  cursor: progress;
8471
8487
  }
8488
+ /* 亮色次要按钮的常态与交互边框;暗色和纯图标悬停沿用既有配方。 */
8489
+ :where(:root:not([data-theme='dark']), [data-q1-theme='light']) .button:where(:not(.button--primary, .button--ghost, .button--warning, .button--danger, .button--selected)):not(:where([data-q1-theme='dark'], [data-q1-theme='dark'] *)),
8490
+ :where(:root:not([data-theme='dark']), [data-q1-theme='light']) .split-button--secondary :is(.split-button__primary, .split-button__toggle):not(:where([data-q1-theme='dark'], [data-q1-theme='dark'] *)) {
8491
+ border-color: var(--q1-color-border-strong);
8492
+ }
8493
+ :where(:root:not([data-theme='dark']), [data-q1-theme='light']) .button:where(:not(.button--primary, .button--ghost, .button--warning, .button--danger, .button--selected, .button--icon)):not(:where([data-q1-theme='dark'], [data-q1-theme='dark'] *)):active:not(:disabled, [aria-disabled='true']),
8494
+ :where(:root:not([data-theme='dark']), [data-q1-theme='light']) .split-button--secondary :is(.split-button__primary, .split-button__toggle):not(:where([data-q1-theme='dark'], [data-q1-theme='dark'] *)):active:not(:disabled, [aria-disabled='true']) {
8495
+ border-color: var(--q1-color-gray-600);
8496
+ }
8497
+ @media (hover: hover) and (pointer: fine) {
8498
+ :where(:root:not([data-theme='dark']), [data-q1-theme='light']) .button:where(:not(.button--primary, .button--ghost, .button--warning, .button--danger, .button--selected, .button--icon)):not(:where([data-q1-theme='dark'], [data-q1-theme='dark'] *)):hover:not(:disabled, [aria-disabled='true']),
8499
+ :where(:root:not([data-theme='dark']), [data-q1-theme='light']) .split-button--secondary :is(.split-button__primary, .split-button__toggle):not(:where([data-q1-theme='dark'], [data-q1-theme='dark'] *)):hover:not(:disabled, [aria-disabled='true']) {
8500
+ border-color: var(--q1-color-gray-600);
8501
+ }
8502
+ }
8472
8503
  /* 尺寸(与 Button 家族共享刻度:高 32/40/48、radius 6/6/8、字号 14/14/16) */
8473
8504
  .split-button--sm .split-button__primary {
8474
8505
  min-height: 32px;
@@ -8559,6 +8590,7 @@ a.q1-card:focus-visible {
8559
8590
  }
8560
8591
  }
8561
8592
  .combobox {
8593
+ min-width: 0;
8562
8594
  position: relative;
8563
8595
  }
8564
8596
  .combobox__label {
@@ -8596,23 +8628,39 @@ a.q1-card:focus-visible {
8596
8628
  line-height: var(--q1-line-height-heading-16);
8597
8629
  }
8598
8630
  /* 悬停加深与 Input(.input-control:hover)同档同条件;聚焦、禁用、错误态不加深。 */
8599
- .combobox__control:hover:not(:focus-within):not(:has(:disabled, [aria-invalid='true'])):not(.combobox--error .combobox__control):not(
8600
- .combobox--disabled .combobox__control
8601
- ) {
8602
- border-color: var(--q1-color-gray-800);
8631
+ @media (hover: hover) and (pointer: fine) {
8632
+ .combobox__control:hover:not(.combobox--readonly .combobox__control):not(:focus-within):not(:has(:disabled, [aria-invalid='true'])):not(.combobox--error .combobox__control):not(
8633
+ .combobox--disabled .combobox__control
8634
+ ) {
8635
+ border-color: var(--q1-color-gray-800);
8636
+ }
8603
8637
  }
8604
8638
  .combobox__control:has(.combobox__input:focus) {
8605
8639
  box-shadow: var(--q1-shadow-focus-input);
8606
8640
  }
8607
8641
  .combobox--disabled .combobox__control {
8608
8642
  background: var(--q1-color-gray-100);
8609
- color: var(--q1-color-text-disabled);
8643
+ color: var(--q1-color-text-muted);
8644
+ opacity: 1;
8645
+ }
8646
+ .combobox--disabled:not(.combobox--error) .combobox__control {
8647
+ border-color: var(--q1-color-border);
8648
+ }
8649
+ .combobox--disabled .combobox__input,
8650
+ .combobox--disabled .combobox__input::placeholder {
8651
+ color: var(--q1-color-text-muted);
8610
8652
  opacity: 1;
8611
8653
  }
8654
+ .combobox--disabled .combobox__panel-trigger > svg {
8655
+ color: var(--q1-color-text-disabled);
8656
+ }
8612
8657
  .combobox--readonly .combobox__input {
8613
8658
  caret-color: transparent;
8614
8659
  cursor: default;
8615
8660
  }
8661
+ .combobox--readonly:not(.combobox--disabled) .combobox__input::placeholder {
8662
+ color: var(--q1-color-text-secondary);
8663
+ }
8616
8664
  .combobox__leading {
8617
8665
  flex: none;
8618
8666
  color: var(--q1-color-text-secondary);
@@ -8626,6 +8674,66 @@ a.q1-card:focus-visible {
8626
8674
  font: inherit;
8627
8675
  font-size: 14px;
8628
8676
  }
8677
+ .combobox__input:not(:focus) {
8678
+ text-overflow: ellipsis;
8679
+ }
8680
+ .combobox__leading[data-selected-prefix] {
8681
+ display: inline-flex;
8682
+ align-items: center;
8683
+ justify-content: center;
8684
+ width: var(--q1-space-6);
8685
+ height: var(--q1-space-6);
8686
+ overflow: hidden;
8687
+ pointer-events: none;
8688
+ }
8689
+ .combobox .combobox__leading[data-selected-prefix-slot] {
8690
+ box-sizing: border-box;
8691
+ width: var(--q1-space-6);
8692
+ height: var(--q1-space-6);
8693
+ padding: calc((var(--q1-space-6) - var(--q1-space-4)) / 2);
8694
+ }
8695
+ .combobox--sm .combobox__leading[data-selected-prefix-slot] {
8696
+ box-sizing: border-box;
8697
+ width: var(--q1-space-5);
8698
+ height: var(--q1-space-5);
8699
+ padding: calc((var(--q1-space-5) - var(--q1-space-4)) / 2);
8700
+ }
8701
+ .combobox--sm .combobox__leading[data-selected-prefix] {
8702
+ width: var(--q1-space-5);
8703
+ height: var(--q1-space-5);
8704
+ }
8705
+ .combobox--lg .combobox__leading[data-selected-prefix-slot] {
8706
+ box-sizing: border-box;
8707
+ width: var(--q1-space-7);
8708
+ height: var(--q1-space-7);
8709
+ padding: calc((var(--q1-space-7) - var(--q1-space-4)) / 2);
8710
+ }
8711
+ .combobox--lg .combobox__leading[data-selected-prefix] {
8712
+ width: var(--q1-space-7);
8713
+ height: var(--q1-space-7);
8714
+ }
8715
+ .combobox__leading[data-selected-prefix] > * {
8716
+ flex: none;
8717
+ max-width: 100%;
8718
+ max-height: 100%;
8719
+ object-fit: contain;
8720
+ }
8721
+ .combobox--disabled [data-selected-prefix] {
8722
+ color: var(--q1-color-text-muted);
8723
+ }
8724
+ .combobox__input::placeholder {
8725
+ color: var(--q1-color-text-secondary);
8726
+ opacity: 1;
8727
+ }
8728
+ :where(.combobox:not(.combobox--sm):not(.combobox--lg)) .combobox__control {
8729
+ box-sizing: border-box;
8730
+ min-height: var(--q1-control-height-default);
8731
+ }
8732
+ :where(.combobox:not(.combobox--sm):not(.combobox--lg)) .combobox__input {
8733
+ font-size: var(--q1-font-size-label-14);
8734
+ line-height: var(--q1-line-height-label-14);
8735
+ font-weight: var(--q1-font-weight-regular);
8736
+ }
8629
8737
  .combobox__input:focus {
8630
8738
  outline: none;
8631
8739
  }
@@ -8745,24 +8853,32 @@ a.q1-card:focus-visible {
8745
8853
  }
8746
8854
  }
8747
8855
  .multi-select {
8856
+ min-width: 0;
8748
8857
  position: relative;
8749
8858
  display: inline-block;
8859
+ max-width: 100%;
8860
+ }
8861
+ .multi-select > .q1-sr-only {
8862
+ inset-inline-start: 0;
8750
8863
  }
8751
8864
  .multi-select__trigger {
8865
+ max-width: 100%;
8752
8866
  display: inline-flex;
8753
8867
  align-items: center;
8754
8868
  justify-content: space-between;
8755
8869
  gap: var(--q1-space-3);
8756
8870
  min-width: 200px;
8757
- /* 末尾 chevron 一侧收一档,抵消图标框自带空白。 */
8758
- padding: var(--q1-space-2) var(--q1-space-2-5) var(--q1-space-2) var(--q1-space-3);
8871
+ box-sizing: border-box;
8872
+ min-height: var(--q1-control-height-default);
8873
+ padding: 0 var(--q1-space-2-5) 0 var(--q1-space-3);
8759
8874
  border: 1px solid var(--q1-color-border-control);
8760
8875
  border-radius: var(--q1-radius-2);
8761
8876
  background: var(--q1-color-bg-sunken);
8762
8877
  color: var(--q1-color-text-primary);
8763
8878
  font: inherit;
8764
- font-size: 14px;
8765
- font-weight: 500;
8879
+ font-size: var(--q1-font-size-label-14);
8880
+ line-height: var(--q1-line-height-label-14);
8881
+ font-weight: var(--q1-font-weight-regular);
8766
8882
  cursor: pointer;
8767
8883
  }
8768
8884
  .multi-select__trigger:focus {
@@ -8771,13 +8887,28 @@ a.q1-card:focus-visible {
8771
8887
  }
8772
8888
  .multi-select__trigger:disabled {
8773
8889
  background: var(--q1-color-gray-100);
8774
- color: var(--q1-color-text-disabled);
8890
+ color: var(--q1-color-text-muted);
8775
8891
  opacity: 1;
8776
8892
  }
8893
+ .multi-select__trigger > span {
8894
+ min-width: 0;
8895
+ overflow: hidden;
8896
+ text-overflow: ellipsis;
8897
+ white-space: nowrap;
8898
+ }
8899
+ .multi-select__trigger > svg {
8900
+ flex: none;
8901
+ }
8777
8902
  .multi-select__placeholder {
8778
8903
  color: var(--q1-color-text-secondary);
8779
8904
  font-weight: 400;
8780
8905
  }
8906
+ .multi-select__trigger:disabled .multi-select__placeholder {
8907
+ color: var(--q1-color-text-muted);
8908
+ }
8909
+ .multi-select__trigger:disabled > svg {
8910
+ color: var(--q1-color-text-disabled);
8911
+ }
8781
8912
  /* 菜单 radius-4(12px)、padding space-2(8px)、行高 32px。 */
8782
8913
  .multi-select__menu {
8783
8914
  min-width: 240px;
@@ -8902,7 +9033,9 @@ a.q1-card:focus-visible {
8902
9033
  text-align: center;
8903
9034
  }
8904
9035
  @media (hover: hover) and (pointer: fine) {
8905
- .multi-select__trigger:hover,
9036
+ .multi-select__trigger:hover:not(:disabled):not([aria-disabled='true']):not([aria-invalid='true']):not(:focus-within) {
9037
+ border-color: var(--q1-color-gray-800);
9038
+ }
8906
9039
  .multi-select__option:hover {
8907
9040
  background: color-mix(in srgb, var(--q1-color-text-primary) 5%, transparent);
8908
9041
  }
@@ -11566,17 +11699,87 @@ a.q1-navigation__item[aria-disabled='true'] {
11566
11699
  display: none;
11567
11700
  }
11568
11701
 
11702
+ .empty-state--panel {
11703
+ box-sizing: border-box;
11704
+ inline-size: 100%;
11705
+ max-inline-size: none;
11706
+ max-width: none;
11707
+ flex-direction: row;
11708
+ align-items: center;
11709
+ justify-content: space-between;
11710
+ gap: var(--q1-space-4);
11711
+ padding: var(--q1-space-4) var(--q1-space-6);
11712
+ border: calc(var(--q1-space-1) / 4) solid var(--q1-color-border-subtle);
11713
+ border-radius: var(--q1-radius-3);
11714
+ background: var(--q1-color-bg-subtle);
11715
+ text-align: start;
11716
+ }
11717
+
11718
+ .empty-state--panel > .empty-state__body {
11719
+ min-inline-size: 0;
11720
+ display: grid;
11721
+ gap: var(--q1-space-1);
11722
+ overflow-wrap: anywhere;
11723
+ }
11724
+
11725
+ .empty-state--panel .empty-state__title,
11726
+ .empty-state--panel .empty-state__desc {
11727
+ font-size: var(--q1-font-size-copy-14);
11728
+ line-height: var(--q1-line-height-copy-14);
11729
+ }
11730
+
11731
+ .empty-state--panel .empty-state__title {
11732
+ font-weight: var(--q1-font-weight-semibold);
11733
+ color: var(--q1-color-text-primary);
11734
+ }
11735
+
11736
+ .empty-state--panel .empty-state__desc {
11737
+ font-weight: var(--q1-font-weight-regular);
11738
+ color: var(--q1-color-text-secondary);
11739
+ }
11740
+
11741
+ .empty-state--panel > .empty-state__actions {
11742
+ flex-shrink: 0;
11743
+ justify-content: start;
11744
+ margin: 0;
11745
+ }
11746
+
11747
+ @media (max-width: 30rem) {
11748
+ .empty-state--panel {
11749
+ flex-direction: column;
11750
+ align-items: start;
11751
+ }
11752
+
11753
+ .empty-state--panel > .empty-state__actions {
11754
+ max-inline-size: 100%;
11755
+ }
11756
+ }
11757
+
11569
11758
  .q1-cascader { display: grid; gap: var(--q1-space-2); min-inline-size: 0; }
11570
11759
  .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); }
11571
- .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-control); border-radius: var(--q1-radius-2); background: var(--q1-color-bg-sunken); }
11572
- .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; }
11760
+ .q1-cascader__control { box-sizing: border-box; min-block-size: var(--q1-control-height-default); 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-control); border-radius: var(--q1-radius-2); background: var(--q1-color-bg-sunken); }
11761
+ .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: calc(var(--q1-control-height-default) - var(--q1-space-1) / 2); padding: 0 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); font-weight: var(--q1-font-weight-regular); cursor: pointer; text-align: start; overflow-wrap: anywhere; }
11762
+ .q1-cascader__control:not([data-tags]) { min-inline-size: 0; }
11763
+ .q1-cascader__control:not([data-tags]) .q1-cascader__trigger > span {
11764
+ min-inline-size: 0;
11765
+ overflow: hidden;
11766
+ text-overflow: ellipsis;
11767
+ white-space: nowrap;
11768
+ }
11573
11769
  .q1-cascader__trigger svg, .q1-cascader__option svg { flex: none; }
11770
+ @media (hover: hover) and (pointer: fine) {
11771
+ .q1-cascader__control:hover:not(:focus-within):not([data-disabled]):not([data-invalid]):not(:has(.q1-cascader__trigger[aria-disabled])) { border-color: var(--q1-color-gray-800); }
11772
+ }
11574
11773
  .q1-cascader__control:focus-within { box-shadow: var(--q1-shadow-focus-input); }
11575
11774
  .q1-cascader__control[data-invalid] { border-color: var(--q1-color-status-danger); }
11576
11775
  .q1-cascader__control[data-invalid]:focus-within { box-shadow: var(--q1-shadow-focus-input-danger); }
11577
11776
  .q1-cascader__trigger:focus-visible { outline: none; }
11578
- .q1-cascader__placeholder, .q1-cascader__path { color: var(--q1-color-text-muted); }
11579
- .q1-cascader__control[data-disabled], .q1-cascader__trigger[aria-disabled], .q1-cascader__option[aria-disabled] { color: var(--q1-color-text-disabled); cursor: default; }
11777
+ .q1-cascader__placeholder { color: var(--q1-color-text-secondary); }
11778
+ .q1-cascader__path { color: var(--q1-color-text-muted); }
11779
+ .q1-cascader__control[data-disabled], .q1-cascader__trigger:disabled, .q1-cascader__option[aria-disabled] { color: var(--q1-color-text-muted); cursor: default; }
11780
+ .q1-cascader__control[data-disabled] :is(.q1-cascader__tag > span, .q1-cascader__placeholder) { color: var(--q1-color-text-muted); }
11781
+ .q1-cascader__control[data-disabled] .q1-cascader__trigger > svg, .q1-cascader__control[data-disabled] .q1-cascader__tag svg, .q1-cascader__option[aria-disabled] svg { color: var(--q1-color-text-disabled); }
11782
+ .q1-cascader__control[data-disabled] { background: var(--q1-color-gray-100); }
11580
11783
  .q1-cascader__control[data-disabled]:not([data-invalid]) { border-color: var(--q1-color-border); }
11581
11784
  .q1-cascader__control[data-disabled] .q1-cascader__trigger { color: inherit; }
11582
11785
  .q1-cascader__control[data-tags] { align-items: start; flex-wrap: nowrap; padding-inline-end: calc(var(--q1-control-height-default) + var(--q1-space-3)); }
@@ -11589,7 +11792,7 @@ a.q1-navigation__item[aria-disabled='true'] {
11589
11792
  .q1-cascader__control > .q1-cascader__remove { position: absolute; inset-block-start: 0; inset-inline-end: 0; }
11590
11793
  .q1-cascader__tags { position: relative; pointer-events: none; min-inline-size: 0; flex: 1; display: flex; flex-wrap: wrap; gap: var(--q1-space-1); padding: var(--q1-space-2); }
11591
11794
  .q1-cascader__tag { font-size: var(--q1-font-size-label-14); line-height: var(--q1-line-height-label-14); max-inline-size: 100%; min-inline-size: 0; display: inline-flex; align-items: center; gap: var(--q1-space-1); background: var(--q1-color-bg-hover); border-radius: var(--q1-radius-1); padding-inline-start: var(--q1-space-2); overflow-wrap: anywhere; }
11592
- .q1-cascader__tag > span { min-inline-size: 0; }
11795
+ .q1-cascader__tag > span { min-inline-size: 0; color: var(--q1-color-text-primary); font-weight: var(--q1-font-weight-regular); }
11593
11796
  .q1-cascader__tag .q1-cascader__remove { pointer-events: auto; flex: none; min-block-size: var(--q1-space-6); min-inline-size: var(--q1-space-6); padding: 0; border-radius: var(--q1-radius-1); color: inherit; }
11594
11797
  .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); }
11595
11798
  .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; }
@@ -11603,7 +11806,7 @@ a.q1-navigation__item[aria-disabled='true'] {
11603
11806
  .q1-cascader__column + .q1-cascader__column { border-inline-start: calc(var(--q1-space-1) / 4) solid var(--q1-color-border); }
11604
11807
  .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; }
11605
11808
  .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; }
11606
- .q1-cascader__option[aria-disabled] { color: var(--q1-color-text-disabled); }
11809
+ .q1-cascader__option[aria-disabled] { color: var(--q1-color-text-muted); }
11607
11810
  .q1-cascader__option[data-active] { background: var(--q1-color-bg-hover); }
11608
11811
  .q1-cascader__option[aria-selected='true'] { background: var(--q1-color-bg-selected); }
11609
11812
  .q1-cascader__copy { display: grid; flex: 1; min-inline-size: 0; gap: var(--q1-space-1); }
@@ -12583,7 +12786,8 @@ a.q1-navigation__item[aria-disabled='true'] {
12583
12786
  .multi-combobox__copy { display: grid; min-width: 0; overflow-wrap: anywhere; }
12584
12787
  .multi-combobox__option svg { flex-shrink: 0; }
12585
12788
  .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; }
12586
- .multi-select__trigger[aria-invalid='true'] { border-color: var(--q1-color-status-danger); box-shadow: var(--q1-shadow-focus-input-danger); }
12789
+ .multi-select__trigger[aria-invalid='true'] { border-color: var(--q1-color-status-danger); }
12790
+ .multi-select__trigger[aria-invalid='true']:focus { box-shadow: var(--q1-shadow-focus-input-danger); }
12587
12791
  @media (hover: none), (pointer: coarse), (any-pointer: coarse) {
12588
12792
  .multi-combobox__control, .multi-combobox__option, .multi-combobox__remove { min-height: var(--q1-touch-target-min); }
12589
12793
  .multi-combobox__trigger { inset: calc(var(--q1-space-1) / -4); width: auto; }
@@ -12599,10 +12803,24 @@ a.q1-navigation__item[aria-disabled='true'] {
12599
12803
  .combobox__footer a:focus-visible,
12600
12804
  .multi-combobox__footer a:focus-visible { outline: none; box-shadow: var(--q1-shadow-focus); }
12601
12805
  .combobox__panel-trigger { display: flex; align-items: center; justify-content: space-between; gap: var(--q1-space-2); width: 100%; min-width: 0; padding: 0; border: 0; background: transparent; color: inherit; font: inherit; text-align: start; cursor: pointer; }
12602
- .combobox__panel-trigger > span { overflow-wrap: anywhere; }
12806
+ :where(.combobox:not(.combobox--sm):not(.combobox--lg)) .combobox__panel-trigger { font-size: var(--q1-font-size-label-14); line-height: var(--q1-line-height-label-14); font-weight: var(--q1-font-weight-regular); }
12807
+ .combobox__panel-trigger > span:not([data-selected-prefix]) {
12808
+ min-width: 0;
12809
+ overflow: hidden;
12810
+ text-overflow: ellipsis;
12811
+ white-space: nowrap;
12812
+ }
12813
+ .combobox__panel-trigger:has([data-selected-prefix]) > span:not([data-selected-prefix]) { flex: 1; }
12814
+ .combobox__panel-trigger > [data-selected-prefix] { display: inline-flex; flex: none; align-items: center; justify-content: center; width: var(--q1-space-6); height: var(--q1-space-6); overflow: hidden; color: var(--q1-color-text-secondary); pointer-events: none; }
12815
+ .combobox--sm .combobox__panel-trigger > [data-selected-prefix] { width: var(--q1-space-5); height: var(--q1-space-5); }
12816
+ .combobox--lg .combobox__panel-trigger > [data-selected-prefix] { width: var(--q1-space-7); height: var(--q1-space-7); }
12817
+ .combobox--disabled .combobox__panel-trigger > [data-selected-prefix] { color: var(--q1-color-text-muted); }
12818
+ .combobox__panel-trigger > [data-selected-prefix] > * { flex: none; max-width: 100%; max-height: 100%; object-fit: contain; }
12819
+ .combobox:not(.combobox--disabled) .combobox__panel-trigger > [data-placeholder] { color: var(--q1-color-text-secondary); }
12603
12820
  .combobox__panel-trigger > svg { flex: none; }
12604
12821
  .combobox__panel-trigger:focus { outline: none; }
12605
12822
  .combobox__control:has(.combobox__panel-trigger:focus-visible) { box-shadow: var(--q1-shadow-focus); }
12823
+ .combobox--error .combobox__control:has(.combobox__panel-trigger:focus-visible) { box-shadow: var(--q1-shadow-focus-input-danger); }
12606
12824
  .combobox__panel-trigger[aria-disabled], .combobox__panel-trigger:disabled { cursor: default; }
12607
12825
  .combobox__popup--panel { box-sizing: border-box; display: flex; flex-direction: column; gap: var(--q1-space-2); overflow: hidden; }
12608
12826
  .combobox__popup--panel > :not(.combobox__listbox) { flex: none; }
@@ -13258,6 +13476,27 @@ a.q1-navigation__item[aria-disabled='true'] {
13258
13476
  }
13259
13477
  }
13260
13478
 
13479
+ .copy-button__feedback {
13480
+ pointer-events: none;
13481
+ position: fixed;
13482
+ width: max-content;
13483
+ max-width: calc(100vw - var(--q1-space-6));
13484
+ padding: var(--q1-space-2) var(--q1-space-3);
13485
+ border-radius: var(--q1-radius-2);
13486
+ background: var(--q1-color-bg-overlay);
13487
+ color: var(--q1-color-text-primary);
13488
+ box-shadow: var(--q1-shadow-popover);
13489
+ font-size: var(--q1-font-size-label-14);
13490
+ line-height: var(--q1-line-height-label-14);
13491
+ display: inline-flex;
13492
+ align-items: center;
13493
+ gap: var(--q1-space-1);
13494
+ }
13495
+
13496
+ [data-q1-portal='overlay'] > .copy-button__feedback {
13497
+ z-index: var(--q1-z-popover);
13498
+ }
13499
+
13261
13500
  .clearable {
13262
13501
  position: relative;
13263
13502
  display: block;
@@ -14308,16 +14547,17 @@ a.q1-navigation__item[aria-disabled='true'] {
14308
14547
 
14309
14548
  .empty-state__illustration {
14310
14549
  display: grid;
14550
+ grid-template-columns: minmax(0, 1fr);
14311
14551
  place-items: center;
14312
- max-inline-size: calc(var(--q1-space-6) * 4);
14313
- margin-block-end: var(--q1-space-2);
14552
+ max-inline-size: var(--q1-space-16);
14553
+ margin-block-end: 0;
14314
14554
  }
14315
14555
 
14316
14556
  .empty-state--inline > .empty-state__illustration {
14317
14557
  grid-template-columns: minmax(0, 1fr);
14318
14558
  flex-shrink: 0;
14319
- inline-size: var(--q1-space-16);
14320
- max-inline-size: var(--q1-space-16);
14559
+ inline-size: var(--q1-space-10);
14560
+ max-inline-size: var(--q1-space-10);
14321
14561
  margin-block-end: 0;
14322
14562
  }
14323
14563
 
@@ -14337,7 +14577,7 @@ a.q1-navigation__item[aria-disabled='true'] {
14337
14577
 
14338
14578
  .empty-list-illustration__back { fill: var(--q1-color-gray-400); }
14339
14579
  .empty-list-illustration__card { fill: var(--q1-color-gray-500); stroke: var(--q1-color-border-strong); }
14340
- .empty-list-illustration rect { rx: var(--q1-radius-3); }
14580
+ .empty-list-illustration rect:not(:where(.empty-illustration-redraw *)) { rx: var(--q1-radius-3); }
14341
14581
  .empty-list-illustration .empty-list-illustration__clip { rx: var(--q1-radius-1); }
14342
14582
  .empty-list-illustration__rows { fill: none; stroke: var(--q1-color-gray-600); }
14343
14583
  .empty-list-illustration__lens { stroke: var(--q1-color-border-control); }
@@ -14391,6 +14631,72 @@ a.q1-navigation__item[aria-disabled='true'] {
14391
14631
  }
14392
14632
  }
14393
14633
 
14634
+ .empty-list-illustration .empty-illustration-redraw .empty-illustration-redraw__surface { fill: var(--q1-color-background-100); }
14635
+ .empty-illustration-redraw__outline { stroke: var(--q1-color-gray-700); }
14636
+ .empty-illustration-redraw__detail { fill: none; stroke: var(--q1-color-gray-700); }
14637
+ .empty-illustration-redraw__tint { fill: var(--q1-color-teal-300); stroke: var(--q1-color-teal-900); }
14638
+ .empty-illustration-redraw__tint-detail { fill: none; stroke: var(--q1-color-teal-900); }
14639
+ .empty-illustration-redraw__shadow { fill: var(--q1-color-gray-alpha-100); stroke: none; }
14640
+ .empty-illustration-redraw__brand { fill: var(--q1-color-primary-700); stroke: none; }
14641
+ .empty-illustration-redraw__brand-line { fill: none; stroke: var(--q1-color-primary-700); }
14642
+
14643
+ [data-scene='inventory'] .empty-illustration-redraw__tint { fill: var(--q1-color-amber-300); stroke: var(--q1-color-amber-900); }
14644
+ [data-scene='orders'] .empty-illustration-redraw__tint { fill: var(--q1-color-green-300); stroke: var(--q1-color-green-900); }
14645
+ [data-scene='orders'] .empty-illustration-redraw__tint-detail { stroke: var(--q1-color-green-900); }
14646
+ [data-scene='activity'] .empty-illustration-redraw__tint { fill: var(--q1-color-blue-300); stroke: var(--q1-color-blue-900); }
14647
+ [data-scene='activity'] .empty-illustration-redraw__tint-detail { stroke: var(--q1-color-blue-900); }
14648
+
14649
+ [data-scene='purchase'] .empty-illustration-redraw__tint { fill: var(--q1-color-green-300); stroke: var(--q1-color-green-900); }
14650
+ [data-scene='purchase'] .empty-illustration-redraw__tint-detail { stroke: var(--q1-color-green-900); }
14651
+ [data-scene='search'] .empty-illustration-redraw__tint { fill: var(--q1-color-blue-300); stroke: var(--q1-color-blue-900); }
14652
+ [data-scene='search'] .empty-illustration-redraw__tint-detail { stroke: var(--q1-color-blue-900); }
14653
+ [data-scene='supplier'] .empty-illustration-redraw__tint { fill: var(--q1-color-blue-300); stroke: var(--q1-color-blue-900); }
14654
+ [data-scene='supplier'] .empty-illustration-redraw__tint-detail { stroke: var(--q1-color-blue-900); }
14655
+ [data-scene='product'] .empty-illustration-redraw__tint { fill: var(--q1-color-teal-300); stroke: var(--q1-color-teal-900); }
14656
+ [data-scene='product'] .empty-illustration-redraw__tint-detail { stroke: var(--q1-color-teal-900); }
14657
+ [data-scene='team'] .empty-illustration-redraw__tint { fill: var(--q1-color-green-300); stroke: var(--q1-color-green-900); }
14658
+ [data-scene='team'] .empty-illustration-redraw__tint-detail { stroke: var(--q1-color-green-900); }
14659
+ [data-scene='store'] .empty-illustration-redraw__tint { fill: var(--q1-color-blue-300); stroke: var(--q1-color-blue-900); }
14660
+ [data-scene='store'] .empty-illustration-redraw__tint-detail { stroke: var(--q1-color-blue-900); }
14661
+
14662
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .empty-illustration-redraw__tint:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)),
14663
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .empty-illustration-redraw__tint-detail:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) { stroke: var(--q1-color-gray-700); }
14664
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) [data-scene='inventory'] .empty-illustration-redraw__tint:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) { fill: var(--q1-color-blue-300); }
14665
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .empty-illustration-redraw__shadow:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) { fill: var(--q1-color-gray-alpha-200); }
14666
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .empty-illustration-redraw__brand:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) { fill: var(--q1-color-primary-900); }
14667
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .empty-illustration-redraw__brand-line:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) { stroke: var(--q1-color-primary-900); }
14668
+
14669
+ @media (forced-colors: active) {
14670
+ .empty-illustration-redraw :is(.empty-illustration-redraw__surface, .empty-illustration-redraw__tint) { fill: Canvas !important; stroke: CanvasText !important; }
14671
+ .empty-illustration-redraw :is(.empty-illustration-redraw__outline, .empty-illustration-redraw__detail, .empty-illustration-redraw__tint-detail, .empty-illustration-redraw__brand-line) { stroke: CanvasText !important; }
14672
+ .empty-illustration-redraw__brand { fill: CanvasText !important; }
14673
+ .empty-illustration-redraw__shadow { fill: none !important; }
14674
+ }
14675
+
14676
+ .empty-state--inline { padding-inline: 0; }
14677
+ .empty-state--inline .empty-state__title { color: var(--q1-color-text-primary); }
14678
+ .empty-state--inline .empty-illustration-inline :is(rect, path, circle) { vector-effect: non-scaling-stroke; }
14679
+ [data-scene='complete'] .empty-illustration-redraw__tint { fill: var(--q1-color-green-300); stroke: var(--q1-color-green-900); }
14680
+ [data-scene='complete'] .empty-illustration-redraw__tint-detail { stroke: var(--q1-color-green-900); }
14681
+ [data-scene='permission'] .empty-illustration-redraw__tint { fill: var(--q1-color-blue-300); stroke: var(--q1-color-blue-900); }
14682
+ [data-scene='permission'] .empty-illustration-redraw__tint-detail { stroke: var(--q1-color-blue-900); }
14683
+ [data-scene='notification'] .empty-illustration-redraw__tint { fill: var(--q1-color-teal-300); stroke: var(--q1-color-teal-900); }
14684
+ [data-scene='notification'] .empty-illustration-redraw__tint-detail { stroke: var(--q1-color-teal-900); }
14685
+ [data-scene='session'] .empty-illustration-redraw__tint { fill: var(--q1-color-blue-300); stroke: var(--q1-color-blue-900); }
14686
+ [data-scene='session'] .empty-illustration-redraw__tint-detail { stroke: var(--q1-color-blue-900); }
14687
+ [data-scene='integration'] .empty-illustration-redraw__tint { fill: var(--q1-color-teal-300); stroke: var(--q1-color-teal-900); }
14688
+ [data-scene='integration'] .empty-illustration-redraw__tint-detail { stroke: var(--q1-color-teal-900); }
14689
+ [data-scene='payment'] .empty-illustration-redraw__tint { fill: var(--q1-color-green-300); stroke: var(--q1-color-green-900); }
14690
+ [data-scene='payment'] .empty-illustration-redraw__tint-detail { stroke: var(--q1-color-green-900); }
14691
+ [data-scene='security'] .empty-illustration-redraw__tint { fill: var(--q1-color-blue-300); stroke: var(--q1-color-blue-900); }
14692
+ [data-scene='security'] .empty-illustration-redraw__tint-detail { stroke: var(--q1-color-blue-900); }
14693
+
14694
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .empty-illustration-redraw__tint:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)),
14695
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .empty-illustration-redraw__tint-detail:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) { stroke: var(--q1-color-gray-700); }
14696
+
14697
+ [data-scene='activity'] .empty-illustration-inline__solid { fill: var(--q1-color-blue-900); stroke: none; }
14698
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) [data-scene='activity'] .empty-illustration-inline__solid:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) { fill: var(--q1-color-blue-900); stroke: none; }
14699
+
14394
14700
  /* Private geometry derives from existing spacing; no new consumer token surface. */
14395
14701
  .control-option.checkbox-circle {
14396
14702
  --checkbox-circle-diameter: calc(var(--q1-space-4) + var(--q1-space-1) / 2);
@@ -15382,7 +15688,6 @@ a.q1-navigation__item[aria-disabled='true'] {
15382
15688
  .form-field--error .form-control:not(.input-control .form-control):not(.textarea-control .form-control):not(.q1-verification-code__slot):not(.q1-verification-code__input),
15383
15689
  .form-control[aria-invalid='true']:not(.input-control .form-control):not(.textarea-control .form-control):not(.q1-verification-code__slot):not(.q1-verification-code__input),
15384
15690
  .q1-verification-code:has(input[aria-invalid='true']),
15385
- .combobox--error .combobox__control,
15386
15691
  .control-option input[aria-invalid='true'] + .control-option__visual,
15387
15692
  .control-option--error .control-option__visual {
15388
15693
  --field-error-shadow: 0 0 0 calc(var(--q1-space-1) / 4) var(--q1-color-status-danger),
@@ -15699,7 +16004,7 @@ a.q1-navigation__item[aria-disabled='true'] {
15699
16004
 
15700
16005
  :is(:root[data-theme='dark'], [data-q1-theme='dark']) :is(
15701
16006
  .combobox__control:not(:has(:disabled, [aria-invalid='true'])),
15702
- .multi-select__trigger:not(:disabled),
16007
+ .multi-select__trigger:not(:disabled):not([aria-invalid='true']),
15703
16008
  .composer__box:not(:has(textarea:disabled)),
15704
16009
  .feedback__select:not(:disabled),
15705
16010
  .feedback__textarea:not(:disabled),
@@ -15729,7 +16034,7 @@ a.q1-navigation__item[aria-disabled='true'] {
15729
16034
  .feedback__select:disabled,
15730
16035
  .feedback__textarea:disabled,
15731
16036
  .range-slider__number:disabled,
15732
- .multi-select__trigger:disabled {
16037
+ .multi-select__trigger:disabled:not([aria-invalid='true']) {
15733
16038
  border-color: var(--q1-color-border);
15734
16039
  }
15735
16040
 
@@ -15738,7 +16043,9 @@ a.q1-navigation__item[aria-disabled='true'] {
15738
16043
  .form-control:not(.input-control .form-control):not(.textarea-control .form-control):not(:disabled):not([aria-invalid='true']):not(.form-field--error .form-control),
15739
16044
  .input-control:not(:has(:disabled, [aria-invalid='true'])):not(.form-field--error .input-control),
15740
16045
  .textarea-control:not(:has(:disabled, [aria-invalid='true'])):not(.form-field--error .textarea-control),
15741
- .combobox__control:not(:has(:disabled, [aria-invalid='true'])),
16046
+ .combobox__control:not(:has(:disabled, [aria-invalid='true'])):not(.combobox--readonly .combobox__control),
16047
+ .multi-select__trigger:not(:disabled):not([aria-disabled='true']):not([aria-invalid='true']),
16048
+ .q1-cascader__control:not([data-disabled]):not([data-invalid]):not(:has(.q1-cascader__trigger[aria-disabled])),
15742
16049
  .choicebox:not(:has(:checked, :disabled))
15743
16050
  ):hover:not(:focus-within):not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
15744
16051
  border-color: var(--q1-color-gray-700);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@q1travel/design-system",
3
- "version": "0.31.2",
3
+ "version": "0.31.4",
4
4
  "description": "React components, design tokens, and interface contracts for q1travel products.",
5
5
  "keywords": [
6
6
  "react",
@@ -55,11 +55,13 @@
55
55
  "preview": "vite preview --host 127.0.0.1",
56
56
  "check:shell": "npm run sync:contracts && node scripts/check-shell.mjs && node scripts/check-token-package.mjs && npm run check:release-provenance",
57
57
  "check:browser:strictmode": "node scripts/check-browser.mjs --strictmode-ref",
58
- "check:browser": "node --test scripts/cascader-browser-lifecycle.test.mjs scripts/devtools-connection.test.mjs scripts/combobox-panel-readiness.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 scripts/load-response-timeout.test.mjs && node scripts/wait-host-idle.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",
59
- "check:package-api": "node scripts/check-package-api.mjs && node --test scripts/check-public-type-global-augmentations.test.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-component-enums.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
+ "check:browser:selected-prefix": "node scripts/lib/check-combobox-selected-prefix-browser.mjs",
59
+ "check:browser": "node --test scripts/devtools-timeout-telemetry.test.mjs scripts/devtools-renderer-map.test.mjs scripts/cascader-browser-lifecycle.test.mjs scripts/devtools-connection.test.mjs scripts/combobox-panel-readiness.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 scripts/load-response-timeout.test.mjs && node --test --test-concurrency=2 scripts/browser-style-ready-browser.test.mjs && node scripts/wait-host-idle.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-browser.mjs --button-loading-size && node scripts/check-browser.mjs --toggle-contrast && node scripts/check-browser.mjs --field-appearance && node scripts/check-browser.mjs --disabled-text-muted && node scripts/check-browser.mjs --cascader-disabled-background && node scripts/check-copy-button-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 && npm run check:browser:selected-prefix",
60
+ "check:package-api": "node scripts/check-package-api.mjs && node scripts/lib/check-combobox-selected-prefix-api.mjs && node --test scripts/check-public-type-global-augmentations.test.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-component-enums.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",
60
61
  "check:release-diff": "node --test scripts/check-release-artifact-diff.test.mjs && node scripts/check-release-artifact-diff.mjs",
61
62
  "check:release-provenance": "node --test scripts/check-release-provenance.test.mjs && node scripts/check-release-provenance.mjs",
62
- "check:release-sync": "node --test scripts/release-sync.test.mjs scripts/release-preview-version.test.mjs",
63
+ "check:release-sync": "node --test scripts/release-sync.test.mjs scripts/release-preview-version.test.mjs scripts/release-record.test.mjs",
64
+ "release:record": "node scripts/release-record.mjs",
63
65
  "release:verify": "node scripts/release-sync.mjs --verify-only",
64
66
  "release:sync": "node scripts/release-sync.mjs",
65
67
  "check": "npm run check:release-sync && npm run build && npm run check:shell && npm run check:browser && npm run build:pkg",