@q1travel/design-system 0.30.7 → 0.30.8

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.
@@ -1568,6 +1568,11 @@
1568
1568
  transition: none;
1569
1569
  }
1570
1570
 
1571
+ /* 未选中启用复选框使用控件边界角色;单选、错误态与独立圆形控件保留原有配方。 */
1572
+ .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) {
1573
+ border-color: var(--q1-color-border-control);
1574
+ }
1575
+
1571
1576
  /* 选中是原生 input 的即时状态:圆点不做生长动画,键盘、虚拟点击与表单 reset 都立即稳定。 */
1572
1577
  .control-option__visual--radio::after {
1573
1578
  content: '';
@@ -6554,9 +6559,15 @@ a.q1-card:focus-visible {
6554
6559
  }
6555
6560
  }
6556
6561
 
6557
- @media (pointer: coarse) {
6562
+ @media (pointer: coarse), (any-pointer: coarse) {
6558
6563
  .search-input__field {
6564
+ min-height: var(--q1-touch-target-min);
6559
6565
  font-size: var(--q1-font-size-copy-16);
6566
+ line-height: var(--q1-line-height-heading-16);
6567
+ }
6568
+
6569
+ .search-input__field.form-control--lg {
6570
+ min-height: calc(var(--q1-control-height-default) + var(--q1-space-2));
6560
6571
  }
6561
6572
 
6562
6573
  .search-input__clear {
@@ -8016,7 +8027,7 @@ a.q1-card:focus-visible {
8016
8027
  background: var(--q1-color-action-on-primary);
8017
8028
  border: 0;
8018
8029
  box-shadow:
8019
- 0 0 0 1px var(--q1-color-border-strong),
8030
+ 0 0 0 1px var(--q1-color-border-control),
8020
8031
  0 1px 2px color-mix(in srgb, var(--q1-color-shadow) 22%, transparent);
8021
8032
  transform: scaleX(var(--slider-thumb-scale, 1));
8022
8033
  transform-origin: center;
@@ -8029,7 +8040,7 @@ a.q1-card:focus-visible {
8029
8040
  background: var(--q1-color-action-on-primary);
8030
8041
  border: 0;
8031
8042
  box-shadow:
8032
- 0 0 0 1px var(--q1-color-border-strong),
8043
+ 0 0 0 1px var(--q1-color-border-control),
8033
8044
  0 1px 2px color-mix(in srgb, var(--q1-color-shadow) 22%, transparent);
8034
8045
  transform: scaleX(var(--slider-thumb-scale, 1));
8035
8046
  transform-origin: center;
@@ -8766,10 +8777,13 @@ a.q1-card:focus-visible {
8766
8777
  width: 16px;
8767
8778
  height: 16px;
8768
8779
  flex: none;
8769
- border: 1px solid var(--q1-color-border-strong);
8780
+ border: 1px solid var(--q1-color-border-control);
8770
8781
  border-radius: var(--q1-radius-1);
8771
8782
  color: var(--q1-color-bg-canvas);
8772
8783
  }
8784
+ .multi-select__option:is(:hover, [data-multi-select-pointer-pressed='true']) .multi-select__check:not(.multi-select__check--on) {
8785
+ border-color: color-mix(in srgb, var(--q1-color-border-control) 75%, var(--q1-color-text-primary));
8786
+ }
8773
8787
  /* 选中态是中性 gray-1000 黑底,不是品牌蓝——与 Radio/Note 行动按钮已定的
8774
8788
  「选择控件中性,品牌色只归主动作」规则一致。 */
8775
8789
  .multi-select__check--on {
@@ -9238,7 +9252,7 @@ a.q1-card:focus-visible {
9238
9252
  .modal-input {
9239
9253
  width: 100%;
9240
9254
  padding: var(--q1-space-2) var(--q1-space-3);
9241
- border: 1px solid var(--q1-color-border-strong);
9255
+ border: 1px solid var(--q1-color-border-control);
9242
9256
  border-radius: var(--q1-radius-2);
9243
9257
  background: var(--q1-color-bg-panel);
9244
9258
  color: var(--q1-color-text-primary);
@@ -11439,6 +11453,64 @@ a.q1-navigation__item[aria-disabled='true'] {
11439
11453
  display: none;
11440
11454
  }
11441
11455
 
11456
+ .q1-cascader { display: grid; gap: var(--q1-space-2); min-inline-size: 0; }
11457
+ .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); }
11458
+ .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); }
11459
+ .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; }
11460
+ .q1-cascader__trigger svg, .q1-cascader__option svg { flex: none; }
11461
+ .q1-cascader__control:focus-within { box-shadow: var(--q1-shadow-focus-input); }
11462
+ .q1-cascader__control[data-invalid] { border-color: var(--q1-color-status-danger); }
11463
+ .q1-cascader__control[data-invalid]:focus-within { box-shadow: var(--q1-shadow-focus-input-danger); }
11464
+ .q1-cascader__trigger:focus-visible { outline: none; }
11465
+ .q1-cascader__placeholder, .q1-cascader__path { color: var(--q1-color-text-muted); }
11466
+ .q1-cascader__control[data-disabled], .q1-cascader__trigger[aria-disabled], .q1-cascader__option[aria-disabled] { color: var(--q1-color-text-disabled); cursor: default; }
11467
+ .q1-cascader__control[data-disabled] .q1-cascader__trigger { color: inherit; }
11468
+ .q1-cascader__control[data-tags] { align-items: start; flex-wrap: nowrap; padding-inline-end: calc(var(--q1-control-height-default) + var(--q1-space-3)); }
11469
+ .q1-cascader__control[data-tags] .q1-cascader__trigger { position: absolute; inset: 0; inline-size: 100%; padding: 0; }
11470
+ .q1-cascader__control[data-tags][data-clearable] { padding-inline-end: calc(var(--q1-control-height-default) * 2 + var(--q1-space-3)); }
11471
+ .q1-cascader__control[data-clearable]:not([data-tags]) .q1-cascader__trigger { margin-inline-end: var(--q1-control-height-default); }
11472
+ .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); }
11473
+ .q1-cascader__control[data-tags][data-clearable] .q1-cascader__trigger > svg { inset-inline-end: calc(var(--q1-control-height-default) + var(--q1-space-2)); }
11474
+ .q1-cascader__remove { position: relative; z-index: 1; pointer-events: auto; }
11475
+ .q1-cascader__control > .q1-cascader__remove { position: absolute; inset-block-start: 0; inset-inline-end: 0; }
11476
+ .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); }
11477
+ .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; }
11478
+ .q1-cascader__tag > span { min-inline-size: 0; }
11479
+ .q1-cascader__tag .q1-cascader__remove { pointer-events: auto; flex: none; }
11480
+ .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); }
11481
+ .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; }
11482
+ .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); }
11483
+ .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); }
11484
+ .q1-cascader__panel { display: grid; gap: var(--q1-space-2); min-inline-size: 0; }
11485
+ .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); }
11486
+ .q1-cascader__columns { display: flex; overflow-x: auto; min-inline-size: 0; max-inline-size: calc(100vw - var(--q1-space-6) * 2); }
11487
+ .q1-cascader__column { flex: 0 0 auto; inline-size: calc(var(--q1-space-10) * 6); min-inline-size: 0; max-inline-size: 100%; }
11488
+ .q1-cascader__column[hidden] { display: none; }
11489
+ .q1-cascader__column + .q1-cascader__column { border-inline-start: calc(var(--q1-space-1) / 4) solid var(--q1-color-border); }
11490
+ .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; }
11491
+ .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; }
11492
+ .q1-cascader__option[aria-disabled] { color: var(--q1-color-text-disabled); }
11493
+ .q1-cascader__option[data-active] { background: var(--q1-color-bg-hover); }
11494
+ .q1-cascader__option[aria-selected='true'] { background: var(--q1-color-bg-selected); }
11495
+ .q1-cascader__copy { display: grid; flex: 1; min-inline-size: 0; gap: var(--q1-space-1); }
11496
+ .q1-cascader__path { font-size: var(--q1-font-size-label-12); line-height: var(--q1-line-height-label-12); }
11497
+ .q1-cascader__status { padding: var(--q1-space-3); }
11498
+ .q1-cascader__footer { border-block-start: calc(var(--q1-space-1) / 4) solid var(--q1-color-border); padding: var(--q1-space-2); }
11499
+ .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); }
11500
+ .q1-cascader__panel[data-narrow='true'] .q1-cascader__column { border: none; }
11501
+ .q1-cascader__panel[data-narrow='true'] .q1-cascader__search { font-size: var(--q1-font-size-copy-16); }
11502
+ .q1-cascader__back { justify-content: start; overflow-wrap: anywhere; text-align: start; }
11503
+ @media (pointer: coarse), (any-pointer: coarse) {
11504
+ .q1-cascader__trigger, .q1-cascader__option, .q1-cascader__back, .q1-cascader__remove { min-block-size: var(--q1-touch-target-min); }
11505
+ .q1-cascader__option [data-selection-area] { inline-size: var(--q1-touch-target-min); }
11506
+ .q1-cascader__control[data-tags] { padding-inline-end: calc(var(--q1-touch-target-min) + var(--q1-space-3)); }
11507
+ .q1-cascader__control[data-tags][data-clearable] { padding-inline-end: calc(var(--q1-touch-target-min) * 2 + var(--q1-space-3)); }
11508
+ .q1-cascader__control[data-clearable]:not([data-tags]) .q1-cascader__trigger { margin-inline-end: var(--q1-touch-target-min); }
11509
+ .q1-cascader__control[data-tags] .q1-cascader__trigger > svg { inset-block-start: calc((var(--q1-touch-target-min) - var(--q1-space-4)) / 2); }
11510
+ .q1-cascader__control[data-tags][data-clearable] .q1-cascader__trigger > svg { inset-inline-end: calc(var(--q1-touch-target-min) + var(--q1-space-2)); }
11511
+ .q1-cascader__remove { min-inline-size: var(--q1-touch-target-min); }
11512
+ }
11513
+
11442
11514
  /* 未知总量以往返移动表示持续等待;减弱动态时保留居中填充段,不伪装完成比例。 */
11443
11515
  .progress--indeterminate .progress__fill {
11444
11516
  width: 40%;
@@ -12185,6 +12257,10 @@ a.q1-navigation__item[aria-disabled='true'] {
12185
12257
  background: var(--q1-color-bg-panel);
12186
12258
  }
12187
12259
 
12260
+ .choicebox:where(:not(:has(:checked, :disabled, [aria-invalid='true'], input[type='checkbox']:indeterminate))) .choicebox__indicator {
12261
+ border-color: var(--q1-color-border-control);
12262
+ }
12263
+
12188
12264
  .choicebox--radio .choicebox__indicator {
12189
12265
  border-radius: 50%;
12190
12266
  }
@@ -14178,7 +14254,7 @@ a.q1-navigation__item[aria-disabled='true'] {
14178
14254
  min-width: 0;
14179
14255
  height: var(--q1-space-8);
14180
14256
  box-sizing: border-box;
14181
- border: calc(var(--q1-space-1) / 4) dashed var(--q1-color-border-strong);
14257
+ border: calc(var(--q1-space-1) / 4) dashed var(--q1-color-border-control);
14182
14258
  border-radius: var(--q1-radius-full);
14183
14259
  background: var(--q1-color-bg-canvas);
14184
14260
  color: var(--q1-color-text-secondary);
@@ -14221,7 +14297,7 @@ a.q1-navigation__item[aria-disabled='true'] {
14221
14297
  background: var(--q1-color-border);
14222
14298
  }
14223
14299
  .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-strong) 80%, var(--q1-color-text-primary)); color: var(--q1-color-text-primary); }
14300
+ .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
14301
  .filter-chip button:hover:not(:disabled) svg { color: var(--q1-color-text-primary); }
14226
14302
  .filter-chip__picker:focus-visible, .filter-chip__clear:focus-visible { outline: none; box-shadow: var(--q1-shadow-focus); }
14227
14303
  .filter-chip[data-disabled] { opacity: 0.5; }
@@ -14748,7 +14824,7 @@ a.q1-navigation__item[aria-disabled='true'] {
14748
14824
  .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
14825
 
14750
14826
  .composer { position: relative; }
14751
- .composer__box { border: 1px solid var(--q1-color-border-strong); border-radius: var(--q1-radius-3); background: var(--q1-color-bg-panel); }
14827
+ .composer__box { border: 1px solid var(--q1-color-border-control); border-radius: var(--q1-radius-3); background: var(--q1-color-bg-panel); }
14752
14828
  .composer__box:focus-within { box-shadow: var(--q1-shadow-focus-input); }
14753
14829
  .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
14830
  .composer textarea::placeholder { color: var(--q1-color-text-muted); }
@@ -15207,7 +15283,7 @@ a.q1-navigation__item[aria-disabled='true'] {
15207
15283
  width: 100%;
15208
15284
  min-width: 0;
15209
15285
  resize: vertical;
15210
- border: calc(var(--q1-space-1) / 4) solid var(--q1-color-border-strong);
15286
+ border: calc(var(--q1-space-1) / 4) solid var(--q1-color-border-control);
15211
15287
  border-radius: var(--q1-radius-2);
15212
15288
  background: var(--q1-color-bg-panel);
15213
15289
  color: var(--q1-color-text-primary);
@@ -15450,18 +15526,12 @@ a.q1-navigation__item[aria-disabled='true'] {
15450
15526
  background: var(--q1-color-bg-panel);
15451
15527
  }
15452
15528
 
15453
- /* 虚线占位(Filter Chip 未设值、Context Menu 触发区):暗色 border-strong 与面板仅约 1.4:1,
15529
+ /* Context Menu 触发区:暗色 border-strong 与面板仅约 1.4:1,
15454
15530
  先用 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
15531
  :is(:root[data-theme='dark'], [data-q1-theme='dark']) .context-menu__area:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
15457
15532
  border-color: var(--q1-color-text-muted);
15458
15533
  }
15459
15534
 
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
15535
  /* 选中态配方:选中 = 1px --q1-color-border-strong 描边 + 浅底(亮色 --q1-color-bg-subtle,
15466
15536
  暗色 --q1-color-bg-raised),不叠焦点光晕。Choicebox 卡片描边走控件边界角色 --q1-color-border-control。
15467
15537
  有实体边框的表面只换 border-color;无边框的分段项用 inset 1px 描边,不改变尺寸。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@q1travel/design-system",
3
- "version": "0.30.7",
3
+ "version": "0.30.8",
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 && 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",