@q1travel/design-system 0.29.0 → 0.29.2

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.
@@ -2462,7 +2462,7 @@
2462
2462
  }
2463
2463
 
2464
2464
  .badge--sm {
2465
- height: 20px;
2465
+ height: var(--q1-space-5);
2466
2466
  padding: 2px 6px;
2467
2467
  font-size: 11px;
2468
2468
  }
@@ -11275,29 +11275,31 @@ a.q1-navigation__item[aria-disabled='true'] {
11275
11275
  .q1-navigation--line {
11276
11276
  --q1-navigation-row-min-height: calc(var(--q1-space-10) + var(--q1-space-1));
11277
11277
 
11278
- scrollbar-width: none;
11279
- align-items: stretch;
11280
- gap: var(--q1-space-6);
11281
- /* 基线不占布局空间,绘于子项下方;滚动时下划线仍压在同一底边。 */
11282
- box-shadow: inset 0 calc(var(--q1-space-1) / -4) 0 var(--q1-color-border);
11278
+ display: block;
11279
+ width: 100%;
11280
+ max-width: 100%;
11281
+ min-width: 0;
11282
+ overflow: visible;
11283
11283
  }
11284
11284
 
11285
- .q1-navigation--line::-webkit-scrollbar {
11286
- display: none;
11285
+ /* 基线跟随完整内容轨道滚动,避免与外层重复叠色。 */
11286
+ .q1-navigation-line-track {
11287
+ box-shadow: inset 0 calc(var(--q1-space-1) / -4) 0 var(--q1-color-border);
11287
11288
  }
11288
11289
 
11289
- .q1-navigation--line .q1-navigation__item {
11290
+ .q1-navigation--horizontal.q1-navigation--line .q1-navigation__item {
11290
11291
  position: relative;
11291
11292
  border-bottom: calc(var(--q1-space-1) / 2) solid transparent;
11292
11293
  border-radius: 0;
11293
- padding: var(--q1-space-3) var(--q1-space-2);
11294
+ padding: var(--q1-space-3) 0;
11295
+ scroll-margin-inline: var(--q1-space-2);
11294
11296
  background: none;
11295
11297
  color: var(--q1-color-text-secondary);
11296
11298
  font-weight: var(--q1-font-weight-regular);
11297
11299
  transition: color var(--q1-duration-press) var(--q1-ease-state);
11298
11300
  }
11299
11301
 
11300
- /* 焦点环仅纵向收进项内,底边与选中下划线保留一档间距。 */
11302
+ /* viewport 边缘留白保护横向外扩的环;基线仍从 nav 内容左缘开始。 */
11301
11303
  .q1-navigation--horizontal.q1-navigation--line .q1-navigation__item:focus-visible {
11302
11304
  box-shadow: none;
11303
11305
  }
@@ -11305,7 +11307,7 @@ a.q1-navigation__item[aria-disabled='true'] {
11305
11307
  .q1-navigation--line .q1-navigation__item:focus-visible::after {
11306
11308
  content: '';
11307
11309
  position: absolute;
11308
- inset: var(--q1-space-1) 0;
11310
+ inset: var(--q1-space-1) calc(-1 * var(--q1-space-2));
11309
11311
  border-radius: var(--q1-radius-2);
11310
11312
  box-shadow: inset 0 0 0 calc(var(--q1-space-1) / 2) var(--q1-color-focus);
11311
11313
  pointer-events: none;
@@ -11332,11 +11334,123 @@ a.q1-navigation__item[aria-disabled='true'] {
11332
11334
  }
11333
11335
 
11334
11336
  @media (prefers-reduced-motion: reduce) {
11335
- .q1-navigation--line .q1-navigation__item {
11337
+ .q1-navigation--horizontal.q1-navigation--line .q1-navigation__item {
11336
11338
  transition: none;
11337
11339
  }
11338
11340
  }
11339
11341
 
11342
+ @media (pointer: coarse), (any-pointer: coarse) {
11343
+ .q1-navigation--line .q1-navigation-line-track > .q1-navigation__item-row {
11344
+ min-width: var(--q1-touch-target-min);
11345
+ }
11346
+
11347
+ .q1-navigation--horizontal.q1-navigation--line .q1-navigation__item {
11348
+ min-height: var(--q1-touch-target-min);
11349
+ }
11350
+
11351
+ .q1-navigation--line .q1-navigation__item::before {
11352
+ content: '';
11353
+ position: absolute;
11354
+ inset-block: 0;
11355
+ 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)));
11357
+ }
11358
+ }
11359
+
11360
+ @property --q1-navigation-fade-start {
11361
+ syntax: '<length>';
11362
+ inherits: false;
11363
+ initial-value: 0px;
11364
+ }
11365
+
11366
+ @property --q1-navigation-fade-end {
11367
+ syntax: '<length>';
11368
+ inherits: false;
11369
+ initial-value: 0px;
11370
+ }
11371
+
11372
+ .q1-navigation-line-viewport {
11373
+ --q1-navigation-line-gutter: var(--q1-space-2);
11374
+
11375
+ min-width: 0;
11376
+ margin-inline: calc(-1 * var(--q1-navigation-line-gutter));
11377
+ container-type: inline-size;
11378
+ padding-inline: var(--q1-navigation-line-gutter);
11379
+ overflow-x: auto;
11380
+ overscroll-behavior-inline: contain;
11381
+ scrollbar-width: none;
11382
+ scroll-padding-inline: var(--q1-navigation-line-gutter);
11383
+ mask-image: linear-gradient(to right, transparent, currentColor var(--q1-navigation-fade-start)),
11384
+ linear-gradient(to left, transparent, currentColor var(--q1-navigation-fade-end));
11385
+ mask-composite: intersect;
11386
+ }
11387
+
11388
+ .q1-navigation-line-track {
11389
+ --q1-navigation-line-gap: clamp(var(--q1-space-4), calc((100cqi - var(--q1-space-16) * 10) * 1000), var(--q1-space-6));
11390
+
11391
+ display: flex;
11392
+ align-items: stretch;
11393
+ gap: var(--q1-navigation-line-gap);
11394
+ width: max-content;
11395
+ min-width: 100%;
11396
+ }
11397
+
11398
+ .q1-navigation-line-track > .q1-navigation__item-row {
11399
+ flex: none;
11400
+ }
11401
+
11402
+ .q1-navigation-line-viewport::-webkit-scrollbar {
11403
+ display: none;
11404
+ }
11405
+
11406
+ /* Keyboard focus must never be dimmed by an overflow hint. */
11407
+ .q1-navigation-line-viewport:focus-within {
11408
+ mask-image: none;
11409
+ }
11410
+
11411
+ @supports (animation-timeline: scroll(self inline)) {
11412
+ .q1-navigation-line-viewport {
11413
+ animation: q1-navigation-fade-start linear both, q1-navigation-fade-end linear both;
11414
+ animation-timeline: scroll(self inline);
11415
+ }
11416
+ }
11417
+
11418
+ @keyframes q1-navigation-fade-start {
11419
+ from { --q1-navigation-fade-start: 0px; }
11420
+ 0.01%, to { --q1-navigation-fade-start: var(--q1-space-4); }
11421
+ }
11422
+
11423
+ @keyframes q1-navigation-fade-end {
11424
+ from, 99.99% { --q1-navigation-fade-end: var(--q1-space-4); }
11425
+ to { --q1-navigation-fade-end: 0px; }
11426
+ }
11427
+
11428
+ @media (pointer: coarse), (any-pointer: coarse) {
11429
+ .q1-navigation-line-viewport {
11430
+ --q1-navigation-line-gutter: var(--q1-space-3);
11431
+ }
11432
+ }
11433
+
11434
+ .q1-navigation-line-viewport[data-overflow-start][data-overflow-end] {
11435
+ animation: none;
11436
+ }
11437
+
11438
+ .q1-navigation-line-viewport[data-overflow-start='false'] {
11439
+ --q1-navigation-fade-start: 0px;
11440
+ }
11441
+
11442
+ .q1-navigation-line-viewport[data-overflow-end='false'] {
11443
+ --q1-navigation-fade-end: 0px;
11444
+ }
11445
+
11446
+ .q1-navigation-line-viewport[data-overflow-start='true'] {
11447
+ --q1-navigation-fade-start: var(--q1-space-4);
11448
+ }
11449
+
11450
+ .q1-navigation-line-viewport[data-overflow-end='true'] {
11451
+ --q1-navigation-fade-end: var(--q1-space-4);
11452
+ }
11453
+
11340
11454
  /* Calendar grid rows, focus treatment, touch targets, and RangeField entrance motion. */
11341
11455
  .calendar__weekdays,
11342
11456
  .calendar__row {
@@ -13379,6 +13493,60 @@ a.q1-navigation__item[aria-disabled='true'] {
13379
13493
  color: var(--q1-color-text-muted);
13380
13494
  }
13381
13495
 
13496
+ .check-circle-fill {
13497
+ display: inline-flex;
13498
+ align-items: center;
13499
+ justify-content: center;
13500
+ flex: none;
13501
+ width: var(--q1-space-5);
13502
+ height: var(--q1-space-5);
13503
+ vertical-align: middle;
13504
+ pointer-events: none;
13505
+ }
13506
+
13507
+ .check-circle-fill > svg {
13508
+ width: calc(var(--q1-space-5) * 0.9);
13509
+ height: calc(var(--q1-space-5) * 0.9);
13510
+ color: var(--q1-color-text-primary);
13511
+ transform-origin: center;
13512
+ animation: check-circle-fill-enter var(--q1-duration-fast) var(--q1-ease-out) both;
13513
+ }
13514
+
13515
+ .check-circle-fill path {
13516
+ color: var(--q1-color-text-on-inverse);
13517
+ stroke-dasharray: 1;
13518
+ stroke-dashoffset: 0;
13519
+ animation: check-circle-fill-draw var(--q1-duration-press) var(--q1-ease-out) calc(var(--q1-duration-base) - var(--q1-duration-press)) both;
13520
+ }
13521
+
13522
+ @keyframes check-circle-fill-enter {
13523
+ from { transform: scale(0.6); opacity: 0; }
13524
+ to { transform: scale(1); opacity: 1; }
13525
+ }
13526
+
13527
+ @keyframes check-circle-fill-draw {
13528
+ from { stroke-dashoffset: 1; opacity: 0; }
13529
+ to { stroke-dashoffset: 0; opacity: 1; }
13530
+ }
13531
+
13532
+ @media (prefers-reduced-motion: reduce) {
13533
+ .check-circle-fill > svg,
13534
+ .check-circle-fill path {
13535
+ animation: none;
13536
+ }
13537
+ }
13538
+
13539
+ @media (forced-colors: active) {
13540
+ .check-circle-fill > svg {
13541
+ forced-color-adjust: none;
13542
+ color: CanvasText;
13543
+ }
13544
+
13545
+ .check-circle-fill path {
13546
+ color: Canvas;
13547
+ }
13548
+ }
13549
+
13382
13550
  /* Private geometry derives from existing spacing; no new consumer token surface. */
13383
13551
  .control-option.checkbox-circle {
13384
13552
  --checkbox-circle-diameter: calc(var(--q1-space-4) + var(--q1-space-1) / 2);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@q1travel/design-system",
3
- "version": "0.29.0",
3
+ "version": "0.29.2",
4
4
  "description": "React components, design tokens, and interface contracts for q1travel products.",
5
5
  "keywords": [
6
6
  "react",