@q1travel/design-system 0.3.1 → 0.4.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.
@@ -202,6 +202,10 @@
202
202
  --q1-radius-3: 8px;
203
203
  --q1-radius-4: 12px;
204
204
  --q1-shadow-focus: 0 0 0 3px color-mix(in srgb, var(--q1-color-primary-700) 22%, transparent);
205
+ /* 浮层阴影两档:popover=菜单/悬浮卡/小浮层,modal=模态级大浮层。方向性面板(drawer/sheet)例外,
206
+ 在组件内自持。恒黑 shadow token 混色,暗色靠 --q1-color-border-overlay 发丝边保证清晰度。 */
207
+ --q1-shadow-popover: 0 8px 28px color-mix(in srgb, var(--q1-color-shadow) 16%, transparent);
208
+ --q1-shadow-modal: 0 16px 48px color-mix(in srgb, var(--q1-color-shadow) 32%, transparent);
205
209
  }
206
210
 
207
211
  :root[data-theme='dark'] {
@@ -736,6 +740,74 @@
736
740
  padding: 12px 14px;
737
741
  }
738
742
 
743
+ /* Textarea 字符计数外框(#22 决策 5,仿 input-control affix 先例):maxLength 存在时才渲染,
744
+ 外框承载边框/焦点环/校验/禁用皮肤,内部 textarea 去皮,计数器占真实布局空间、右下角对齐。 */
745
+ .textarea-control {
746
+ display: flex;
747
+ flex-direction: column;
748
+ overflow: hidden;
749
+ border: 1px solid var(--q1-color-border-strong);
750
+ border-radius: var(--q1-radius-2);
751
+ background: var(--q1-color-bg-panel);
752
+ }
753
+
754
+ .textarea-control:hover:not(:has(.form-control:disabled)) {
755
+ border-color: var(--q1-color-text-secondary);
756
+ }
757
+
758
+ .textarea-control:focus-within {
759
+ border-color: var(--q1-color-action-primary);
760
+ box-shadow: var(--q1-shadow-focus);
761
+ }
762
+
763
+ .form-field--error .textarea-control,
764
+ .textarea-control:has(.form-control[aria-invalid='true']) {
765
+ border-color: var(--q1-color-status-danger);
766
+ box-shadow: 0 0 0 4px color-mix(in srgb, var(--q1-color-status-danger) 16%, transparent);
767
+ }
768
+
769
+ .textarea-control:has(.form-control:disabled) {
770
+ background: var(--q1-color-bg-subtle);
771
+ }
772
+
773
+ /* 尺寸档圆角随内部控件对齐(同 input-control 的 :has 尺寸档规则)。 */
774
+ .textarea-control:has(.form-control--xs) {
775
+ border-radius: var(--q1-radius-1);
776
+ }
777
+
778
+ .textarea-control:has(.form-control--lg) {
779
+ border-radius: var(--q1-radius-3);
780
+ }
781
+
782
+ .textarea-control .form-control {
783
+ border: none;
784
+ border-radius: inherit;
785
+ background: transparent;
786
+ }
787
+
788
+ .textarea-control .form-control:focus,
789
+ .textarea-control .form-control:focus-visible,
790
+ .form-field--error .textarea-control .form-control,
791
+ .textarea-control .form-control[aria-invalid='true'] {
792
+ box-shadow: none;
793
+ }
794
+
795
+ .textarea-control .form-control:disabled {
796
+ background: transparent;
797
+ }
798
+
799
+ .textarea-control__count {
800
+ align-self: flex-end;
801
+ padding: 0 12px 8px;
802
+ color: var(--q1-color-text-secondary);
803
+ font-size: 12px;
804
+ line-height: 16px;
805
+ }
806
+
807
+ .textarea-control:has(.form-control:disabled) .textarea-control__count {
808
+ color: var(--q1-color-text-muted);
809
+ }
810
+
739
811
  .form-control::placeholder {
740
812
  color: var(--q1-color-text-muted);
741
813
  }
@@ -784,6 +856,16 @@
784
856
  opacity: 0;
785
857
  }
786
858
 
859
+ /* 裸形态(#22 §1.3 / #45):去文本 body 列、仅剩 16px 视觉盒;外层是 span 非 label
860
+ (业务 <label> 包裹时 label 套 label 非法),保留 .control-option 类复用全部状态选择器
861
+ (checked/indeterminate/disabled/focus-visible 均以其为父作用域)。inline-grid 便于
862
+ 表格选择列/工具栏内联对齐。 */
863
+ .control-option--bare {
864
+ display: inline-grid;
865
+ grid-template-columns: 16px;
866
+ vertical-align: middle;
867
+ }
868
+
787
869
  .control-option__visual {
788
870
  position: relative;
789
871
  display: block;
@@ -1020,7 +1102,7 @@
1020
1102
  border: 1px solid var(--q1-color-border-overlay);
1021
1103
  border-radius: var(--q1-radius-4);
1022
1104
  background: var(--q1-color-bg-panel);
1023
- box-shadow: 0 8px 28px color-mix(in srgb, var(--q1-color-shadow) 16%, transparent);
1105
+ box-shadow: var(--q1-shadow-popover);
1024
1106
  }
1025
1107
  .menu__popup--start {
1026
1108
  left: 0;
@@ -2505,10 +2587,10 @@ a.breadcrumb__link:hover {
2505
2587
  display: flex;
2506
2588
  gap: var(--q1-space-6);
2507
2589
  padding: var(--q1-space-4);
2508
- border: 1px solid var(--q1-color-border);
2590
+ border: 1px solid var(--q1-color-border-overlay);
2509
2591
  border-radius: var(--q1-radius-3);
2510
2592
  background: var(--q1-color-bg-panel);
2511
- box-shadow: 0 8px 24px color-mix(in srgb, var(--q1-color-mask-opaque) 14%, transparent);
2593
+ box-shadow: var(--q1-shadow-popover);
2512
2594
  }
2513
2595
 
2514
2596
  .cal-popover--vertical {
@@ -2784,10 +2866,10 @@ a.breadcrumb__link:hover {
2784
2866
  z-index: 20;
2785
2867
  display: flex;
2786
2868
  min-width: 380px;
2787
- border: 1px solid var(--q1-color-border);
2869
+ border: 1px solid var(--q1-color-border-overlay);
2788
2870
  border-radius: var(--q1-radius-3);
2789
2871
  background: var(--q1-color-bg-panel);
2790
- box-shadow: 0 8px 24px color-mix(in srgb, var(--q1-color-mask-opaque) 14%, transparent);
2872
+ box-shadow: var(--q1-shadow-popover);
2791
2873
  overflow: hidden;
2792
2874
  }
2793
2875
 
@@ -3992,10 +4074,10 @@ a.breadcrumb__link:hover {
3992
4074
  flex-direction: column;
3993
4075
  gap: var(--q1-space-1);
3994
4076
  padding: var(--q1-space-3) var(--q1-space-4);
3995
- border: 1px solid var(--q1-color-border);
4077
+ border: 1px solid var(--q1-color-border-overlay);
3996
4078
  border-radius: var(--q1-radius-2);
3997
4079
  background: var(--q1-color-bg-panel);
3998
- box-shadow: 0 8px 24px color-mix(in srgb, var(--q1-color-mask-opaque) 14%, transparent);
4080
+ box-shadow: var(--q1-shadow-popover);
3999
4081
  opacity: 0;
4000
4082
  visibility: hidden;
4001
4083
  transition: opacity 0.12s ease, visibility 0.12s ease;
@@ -4133,7 +4215,7 @@ a.breadcrumb__link:hover {
4133
4215
  border: 1px solid var(--q1-color-border-overlay);
4134
4216
  border-radius: var(--q1-radius-2);
4135
4217
  background: var(--q1-color-bg-panel);
4136
- box-shadow: 0 8px 24px color-mix(in srgb, var(--q1-color-shadow) 14%, transparent);
4218
+ box-shadow: var(--q1-shadow-popover);
4137
4219
  opacity: 0;
4138
4220
  visibility: hidden;
4139
4221
  transition: opacity 0.12s ease, visibility 0.12s ease;
@@ -5176,7 +5258,7 @@ a.q1-card:focus-visible {
5176
5258
  z-index: 10;
5177
5259
  width: 336px;
5178
5260
  border-color: var(--q1-color-border-overlay);
5179
- box-shadow: 0 8px 24px color-mix(in srgb, var(--q1-color-shadow) 16%, transparent);
5261
+ box-shadow: var(--q1-shadow-popover);
5180
5262
  }
5181
5263
  .feedback__head {
5182
5264
  display: flex;
@@ -6107,6 +6189,10 @@ a.q1-card:focus-visible {
6107
6189
  .combobox--disabled .combobox__control {
6108
6190
  opacity: 0.55;
6109
6191
  }
6192
+ .combobox--readonly .combobox__input {
6193
+ caret-color: transparent;
6194
+ cursor: default;
6195
+ }
6110
6196
  .combobox__leading {
6111
6197
  flex: none;
6112
6198
  color: var(--q1-color-text-secondary);
@@ -6143,7 +6229,7 @@ a.q1-card:focus-visible {
6143
6229
  outline: none;
6144
6230
  box-shadow: var(--q1-shadow-focus);
6145
6231
  }
6146
- .combobox__listbox {
6232
+ .combobox__popup {
6147
6233
  position: absolute;
6148
6234
  top: calc(100% + var(--q1-space-1));
6149
6235
  left: 0;
@@ -6157,7 +6243,12 @@ a.q1-card:focus-visible {
6157
6243
  border: 1px solid var(--q1-color-border-overlay);
6158
6244
  border-radius: var(--q1-radius-3);
6159
6245
  background: var(--q1-color-bg-panel);
6160
- box-shadow: 0 8px 28px color-mix(in srgb, var(--q1-color-shadow) 16%, transparent);
6246
+ box-shadow: var(--q1-shadow-popover);
6247
+ }
6248
+ .combobox__listbox {
6249
+ margin: 0;
6250
+ padding: 0;
6251
+ list-style: none;
6161
6252
  }
6162
6253
  .combobox__option {
6163
6254
  display: flex;
@@ -6186,15 +6277,31 @@ a.q1-card:focus-visible {
6186
6277
  .combobox__option--active {
6187
6278
  background: color-mix(in srgb, var(--q1-color-text-primary) 6%, transparent);
6188
6279
  }
6280
+ .combobox__option--disabled {
6281
+ color: var(--q1-color-text-secondary);
6282
+ opacity: 0.55;
6283
+ cursor: not-allowed;
6284
+ }
6189
6285
  .combobox__option[aria-selected='true'] {
6190
6286
  color: var(--q1-color-action-primary);
6191
6287
  font-weight: 500;
6192
6288
  }
6289
+ /* 选中项对勾(对标 Geist 选中标记):推到行尾,随选中色。 */
6290
+ .combobox__option-check {
6291
+ flex: none;
6292
+ margin-left: auto;
6293
+ color: var(--q1-color-action-primary);
6294
+ }
6193
6295
  .combobox__empty {
6194
6296
  padding: var(--q1-space-3);
6195
6297
  font-size: 13px;
6196
6298
  color: var(--q1-color-text-secondary);
6197
6299
  }
6300
+ .combobox__empty :focus-visible {
6301
+ outline: none;
6302
+ border-radius: var(--q1-radius-1);
6303
+ box-shadow: var(--q1-shadow-focus);
6304
+ }
6198
6305
  .combobox__error-text {
6199
6306
  margin: var(--q1-space-2) 0 0;
6200
6307
  font-size: 13px;
@@ -6242,7 +6349,7 @@ a.q1-card:focus-visible {
6242
6349
  border: 1px solid var(--q1-color-border-overlay);
6243
6350
  border-radius: var(--q1-radius-4);
6244
6351
  background: var(--q1-color-bg-panel);
6245
- box-shadow: 0 8px 28px color-mix(in srgb, var(--q1-color-shadow) 16%, transparent);
6352
+ box-shadow: var(--q1-shadow-popover);
6246
6353
  }
6247
6354
  .multi-select__bulk {
6248
6355
  display: flex;
@@ -6407,7 +6514,7 @@ a.q1-card:focus-visible {
6407
6514
  border: 1px solid var(--q1-color-border-overlay);
6408
6515
  border-radius: var(--q1-radius-4);
6409
6516
  background: var(--q1-color-bg-panel);
6410
- box-shadow: 0 16px 48px color-mix(in srgb, var(--q1-color-shadow) 32%, transparent);
6517
+ box-shadow: var(--q1-shadow-modal);
6411
6518
  overflow: hidden;
6412
6519
  }
6413
6520
  .command-palette__search {
@@ -6563,10 +6670,9 @@ a.q1-card:focus-visible {
6563
6670
  .modal-btn--primary:disabled:hover {
6564
6671
  background: var(--q1-color-bg-subtle);
6565
6672
  }
6566
- /* fullWidth(对标 Geist Single button):单按钮场景下让主操作铺满整行,而不是退回右对齐。 */
6567
- .modal-btn--full-width {
6673
+ /* 单按钮场景铺满整行(对标 Geist Single button):布局属于模态框上下文,不进 Button 本体。 */
6674
+ .modal__action--full {
6568
6675
  width: 100%;
6569
- text-align: center;
6570
6676
  }
6571
6677
  .modal {
6572
6678
  position: fixed;
@@ -6592,7 +6698,7 @@ a.q1-card:focus-visible {
6592
6698
  border: 1px solid var(--q1-color-border-overlay);
6593
6699
  border-radius: var(--q1-radius-4);
6594
6700
  background: var(--q1-color-bg-panel);
6595
- box-shadow: 0 16px 48px color-mix(in srgb, var(--q1-color-shadow) 32%, transparent);
6701
+ box-shadow: var(--q1-shadow-modal);
6596
6702
  }
6597
6703
  .modal__header {
6598
6704
  display: flex;
@@ -0,0 +1,407 @@
1
+ :root {
2
+ --q1-color-background-100: #ffffff;
3
+ --q1-color-background-200: #fafafa;
4
+ --q1-color-gray-100: #f2f2f2;
5
+ --q1-color-gray-200: #ebebeb;
6
+ --q1-color-gray-300: #e6e6e6;
7
+ --q1-color-gray-400: #eaeaea;
8
+ --q1-color-gray-500: #c9c9c9;
9
+ --q1-color-gray-600: #a8a8a8;
10
+ --q1-color-gray-700: #8f8f8f;
11
+ --q1-color-gray-800: #7d7d7d;
12
+ --q1-color-gray-900: #4d4d4d;
13
+ --q1-color-gray-1000: #171717;
14
+ --q1-color-primary-100: #f1efff;
15
+ --q1-color-primary-200: #e4e0ff;
16
+ --q1-color-primary-300: #cbc4ff;
17
+ --q1-color-primary-400: #aa9eff;
18
+ --q1-color-primary-500: #8776ff;
19
+ --q1-color-primary-600: #6b55ff;
20
+ --q1-color-primary-700: #533afd;
21
+ --q1-color-primary-800: #4434d4;
22
+ --q1-color-primary-900: #2e2b8c;
23
+ --q1-color-primary-1000: #17124f;
24
+ --q1-color-blue-100: #f0f7ff;
25
+ --q1-color-blue-200: #e9f4ff;
26
+ --q1-color-blue-300: #dfefff;
27
+ --q1-color-blue-400: #cae7ff;
28
+ --q1-color-blue-500: #94ccff;
29
+ --q1-color-blue-600: #48aeff;
30
+ --q1-color-blue-700: #006bff;
31
+ --q1-color-blue-800: #0059ec;
32
+ --q1-color-blue-900: #005ff2;
33
+ --q1-color-blue-1000: #002359;
34
+ --q1-color-red-100: #ffeeef;
35
+ --q1-color-red-200: #ffe8ea;
36
+ --q1-color-red-300: #ffe3e4;
37
+ --q1-color-red-400: #ffd7d6;
38
+ --q1-color-red-500: #ffb1b3;
39
+ --q1-color-red-600: #ff676d;
40
+ --q1-color-red-700: #fc0035;
41
+ --q1-color-red-800: #ea001d;
42
+ --q1-color-red-900: #d8001b;
43
+ --q1-color-red-1000: #47000c;
44
+ --q1-color-amber-100: #fff6de;
45
+ --q1-color-amber-200: #fff4cf;
46
+ --q1-color-amber-300: #fff1c1;
47
+ --q1-color-amber-400: #ffdc73;
48
+ --q1-color-amber-500: #ffc543;
49
+ --q1-color-amber-600: #ffa600;
50
+ --q1-color-amber-700: #ffae00;
51
+ --q1-color-amber-800: #ff9300;
52
+ --q1-color-amber-900: #aa4d00;
53
+ --q1-color-amber-1000: #561900;
54
+ --q1-color-green-100: #ecfdec;
55
+ --q1-color-green-200: #e5fce7;
56
+ --q1-color-green-300: #d3fad1;
57
+ --q1-color-green-400: #b9f5bc;
58
+ --q1-color-green-500: #82eb8d;
59
+ --q1-color-green-600: #4ce15e;
60
+ --q1-color-green-700: #28a948;
61
+ --q1-color-green-800: #279141;
62
+ --q1-color-green-900: #107d32;
63
+ --q1-color-green-1000: #003a00;
64
+ --q1-color-teal-100: #defffb;
65
+ --q1-color-teal-200: #ddfef6;
66
+ --q1-color-teal-300: #ccf9f1;
67
+ --q1-color-teal-400: #b1f7ec;
68
+ --q1-color-teal-500: #52f0db;
69
+ --q1-color-teal-600: #00e3c4;
70
+ --q1-color-teal-700: #00ac96;
71
+ --q1-color-teal-800: #00927f;
72
+ --q1-color-teal-900: #007f70;
73
+ --q1-color-teal-1000: #003f34;
74
+ --q1-color-purple-100: #faf0ff;
75
+ --q1-color-purple-200: #f9f0ff;
76
+ --q1-color-purple-300: #f6e8ff;
77
+ --q1-color-purple-400: #f2d9ff;
78
+ --q1-color-purple-500: #dfa7ff;
79
+ --q1-color-purple-600: #c979ff;
80
+ --q1-color-purple-700: #a000f8;
81
+ --q1-color-purple-800: #8500d1;
82
+ --q1-color-purple-900: #7d00cc;
83
+ --q1-color-purple-1000: #2f004e;
84
+ --q1-color-pink-100: #ffe8f6;
85
+ --q1-color-pink-200: #ffe8f3;
86
+ --q1-color-pink-300: #ffdfeb;
87
+ --q1-color-pink-400: #ffd3e1;
88
+ --q1-color-pink-500: #fdb3cc;
89
+ --q1-color-pink-600: #f97ea7;
90
+ --q1-color-pink-700: #f22782;
91
+ --q1-color-pink-800: #e4106e;
92
+ --q1-color-pink-900: #c41562;
93
+ --q1-color-pink-1000: #460523;
94
+ --q1-color-scale-neutral: var(--q1-color-gray-700);
95
+ --q1-color-scale-primary: var(--q1-color-primary-700);
96
+ --q1-color-scale-blue: var(--q1-color-blue-700);
97
+ --q1-color-scale-pink: var(--q1-color-pink-700);
98
+ --q1-color-scale-red: var(--q1-color-red-700);
99
+ --q1-color-scale-amber: var(--q1-color-amber-600);
100
+ --q1-color-scale-green: var(--q1-color-green-700);
101
+ --q1-color-scale-teal: var(--q1-color-teal-700);
102
+ --q1-color-action-primary: var(--q1-color-primary-700);
103
+ --q1-color-action-primary-hover: var(--q1-color-primary-800);
104
+ --q1-color-action-primary-press: var(--q1-color-primary-900);
105
+ --q1-color-action-on-primary: #ffffff;
106
+ --q1-color-brand-preview-light-bg: #ffffff;
107
+ --q1-color-brand-preview-light-fg: #171717;
108
+ --q1-color-brand-preview-dark-bg: #000000;
109
+ --q1-color-brand-preview-dark-fg: #ededed;
110
+ --q1-color-mask-visible: #ffffff;
111
+ --q1-color-mask-opaque: #000000;
112
+ --q1-color-shadow: #000000;
113
+ --q1-color-border-overlay: var(--q1-color-gray-400);
114
+ --q1-color-bg-canvas: var(--q1-color-background-100);
115
+ --q1-color-bg-subtle: var(--q1-color-background-200);
116
+ --q1-color-bg-panel: var(--q1-color-background-100);
117
+ --q1-color-border: var(--q1-color-gray-400);
118
+ --q1-color-border-strong: var(--q1-color-gray-500);
119
+ --q1-color-text-primary: var(--q1-color-gray-1000);
120
+ --q1-color-text-secondary: var(--q1-color-gray-900);
121
+ --q1-color-text-muted: var(--q1-color-gray-700);
122
+ --q1-color-selection-bg: var(--q1-color-text-primary);
123
+ --q1-color-selection-fg: var(--q1-color-bg-canvas);
124
+ --q1-color-status-success: var(--q1-color-green-700);
125
+ --q1-color-status-warning: var(--q1-color-amber-900);
126
+ --q1-color-status-danger: var(--q1-color-red-700);
127
+ --q1-color-status-info: var(--q1-color-blue-700);
128
+ --q1-font-sans: "Noto Sans SC", "PingFang SC", "Microsoft YaHei UI", sans-serif;
129
+ --q1-font-mono: "Geist Mono", ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace;
130
+ --q1-font-weight-regular: 400;
131
+ --q1-font-weight-medium: 500;
132
+ --q1-font-weight-semibold: 600;
133
+ --q1-font-size-heading-72: 72px;
134
+ --q1-font-weight-heading-72: var(--q1-font-weight-medium);
135
+ --q1-line-height-heading-72: 72px;
136
+ --q1-font-size-heading-64: 64px;
137
+ --q1-font-weight-heading-64: var(--q1-font-weight-medium);
138
+ --q1-line-height-heading-64: 68px;
139
+ --q1-font-size-heading-56: 56px;
140
+ --q1-font-weight-heading-56: var(--q1-font-weight-medium);
141
+ --q1-line-height-heading-56: 60px;
142
+ --q1-font-size-heading-48: 48px;
143
+ --q1-font-weight-heading-48: var(--q1-font-weight-medium);
144
+ --q1-line-height-heading-48: 52px;
145
+ --q1-font-size-heading-40: 40px;
146
+ --q1-font-weight-heading-40: var(--q1-font-weight-medium);
147
+ --q1-line-height-heading-40: 44px;
148
+ --q1-font-size-heading-32: 32px;
149
+ --q1-font-weight-heading-32: var(--q1-font-weight-medium);
150
+ --q1-line-height-heading-32: 38px;
151
+ --q1-font-size-heading-24: 24px;
152
+ --q1-font-weight-heading-24: var(--q1-font-weight-medium);
153
+ --q1-line-height-heading-24: 32px;
154
+ --q1-font-size-heading-20: 20px;
155
+ --q1-font-weight-heading-20: var(--q1-font-weight-medium);
156
+ --q1-line-height-heading-20: 28px;
157
+ --q1-font-size-heading-16: 16px;
158
+ --q1-font-weight-heading-16: var(--q1-font-weight-medium);
159
+ --q1-line-height-heading-16: 24px;
160
+ --q1-font-size-heading-14: 14px;
161
+ --q1-font-weight-heading-14: var(--q1-font-weight-medium);
162
+ --q1-line-height-heading-14: 20px;
163
+ --q1-font-size-label-14: 14px;
164
+ --q1-line-height-label-14: 20px;
165
+ --q1-font-size-label-13: 13px;
166
+ --q1-line-height-label-13: 18px;
167
+ --q1-font-size-copy-16: 16px;
168
+ --q1-line-height-copy-16: 24px;
169
+ --q1-font-size-copy-14: 14px;
170
+ --q1-line-height-copy-14: 20px;
171
+ --q1-font-size-code-13: 13px;
172
+ --q1-line-height-code-13: 18px;
173
+ --q1-space-1: 4px;
174
+ --q1-space-2: 8px;
175
+ --q1-space-3: 12px;
176
+ --q1-space-4: 16px;
177
+ --q1-space-6: 24px;
178
+ --q1-space-8: 32px;
179
+ --q1-space-10: 40px;
180
+ --q1-space-16: 64px;
181
+ --q1-space-24: 96px;
182
+ --q1-control-height-default: 40px;
183
+ --q1-doc-frame-gutter: 60px;
184
+ --q1-doc-frame-max-width: 1220px;
185
+ --q1-doc-sidebar-width: 260px;
186
+ --q1-doc-topbar-height: 64px;
187
+ --q1-doc-topbar-gutter: 16px;
188
+ --q1-doc-search-width: 220px;
189
+ --q1-doc-page-header-min-height: 187px;
190
+ --q1-doc-page-header-padding: 48px;
191
+ --q1-doc-page-content-max-width: 1120px;
192
+ --q1-doc-page-footer-min-height: 112px;
193
+ --q1-doc-page-footer-padding: 28px var(--q1-space-8) 48px;
194
+ --q1-doc-intro-footer-padding: 28px 48px;
195
+ --q1-doc-page-footer-action-min-width: 72px;
196
+ --q1-radius-1: 4px;
197
+ --q1-radius-2: 6px;
198
+ --q1-radius-3: 8px;
199
+ --q1-radius-4: 12px;
200
+ --q1-shadow-focus: 0 0 0 3px color-mix(in srgb, var(--q1-color-primary-700) 22%, transparent);
201
+ --q1-shadow-popover: 0 8px 28px color-mix(in srgb, var(--q1-color-shadow) 16%, transparent);
202
+ --q1-shadow-modal: 0 16px 48px color-mix(in srgb, var(--q1-color-shadow) 32%, transparent);
203
+ }
204
+
205
+ :root[data-theme='dark'] {
206
+ --q1-color-background-100: #0a0a0a;
207
+ --q1-color-background-200: #000000;
208
+ --q1-color-gray-100: #1a1a1a;
209
+ --q1-color-gray-200: #1f1f1f;
210
+ --q1-color-gray-300: #292929;
211
+ --q1-color-gray-400: #2e2e2e;
212
+ --q1-color-gray-500: #454545;
213
+ --q1-color-gray-600: #878787;
214
+ --q1-color-gray-700: #8f8f8f;
215
+ --q1-color-gray-800: #7d7d7d;
216
+ --q1-color-gray-900: #a0a0a0;
217
+ --q1-color-gray-1000: #ededed;
218
+ --q1-color-primary-100: #15103a;
219
+ --q1-color-primary-200: #1a1547;
220
+ --q1-color-primary-300: #241a6b;
221
+ --q1-color-primary-400: #2b2080;
222
+ --q1-color-primary-500: #342899;
223
+ --q1-color-primary-600: #5b41f5;
224
+ --q1-color-primary-700: #533afd;
225
+ --q1-color-primary-800: #4631d6;
226
+ --q1-color-primary-900: #9c8cff;
227
+ --q1-color-primary-1000: #ece9ff;
228
+ --q1-color-blue-100: #06193a;
229
+ --q1-color-blue-200: #022248;
230
+ --q1-color-blue-300: #002f62;
231
+ --q1-color-blue-400: #003674;
232
+ --q1-color-blue-500: #00418b;
233
+ --q1-color-blue-600: #0090ff;
234
+ --q1-color-blue-700: #006efe;
235
+ --q1-color-blue-800: #005be7;
236
+ --q1-color-blue-900: #47a8ff;
237
+ --q1-color-blue-1000: #eaf6ff;
238
+ --q1-color-red-100: #330a11;
239
+ --q1-color-red-200: #440d13;
240
+ --q1-color-red-300: #5d0e17;
241
+ --q1-color-red-400: #6f101b;
242
+ --q1-color-red-500: #88151f;
243
+ --q1-color-red-600: #f32e40;
244
+ --q1-color-red-700: #f13242;
245
+ --q1-color-red-800: #e2162a;
246
+ --q1-color-red-900: #ff565f;
247
+ --q1-color-red-1000: #ffe9ed;
248
+ --q1-color-amber-100: #2a1700;
249
+ --q1-color-amber-200: #361900;
250
+ --q1-color-amber-300: #502800;
251
+ --q1-color-amber-400: #5b3000;
252
+ --q1-color-amber-500: #703e00;
253
+ --q1-color-amber-600: #ed9a00;
254
+ --q1-color-amber-700: #ffae00;
255
+ --q1-color-amber-800: #ff9300;
256
+ --q1-color-amber-900: #ff9300;
257
+ --q1-color-amber-1000: #fff3d5;
258
+ --q1-color-green-100: #002608;
259
+ --q1-color-green-200: #00320b;
260
+ --q1-color-green-300: #003a0e;
261
+ --q1-color-green-400: #004615;
262
+ --q1-color-green-500: #006717;
263
+ --q1-color-green-600: #00952d;
264
+ --q1-color-green-700: #00ac3a;
265
+ --q1-color-green-800: #009432;
266
+ --q1-color-green-900: #00ca50;
267
+ --q1-color-green-1000: #d8ffe4;
268
+ --q1-color-teal-100: #00231b;
269
+ --q1-color-teal-200: #002b22;
270
+ --q1-color-teal-300: #003d34;
271
+ --q1-color-teal-400: #004035;
272
+ --q1-color-teal-500: #006354;
273
+ --q1-color-teal-600: #009e86;
274
+ --q1-color-teal-700: #00aa95;
275
+ --q1-color-teal-800: #00927f;
276
+ --q1-color-teal-900: #00cfb7;
277
+ --q1-color-teal-1000: #cbfff5;
278
+ --q1-color-purple-100: #290c33;
279
+ --q1-color-purple-200: #341142;
280
+ --q1-color-purple-300: #47185e;
281
+ --q1-color-purple-400: #541a76;
282
+ --q1-color-purple-500: #642290;
283
+ --q1-color-purple-600: #9440d5;
284
+ --q1-color-purple-700: #9440d5;
285
+ --q1-color-purple-800: #7d2bba;
286
+ --q1-color-purple-900: #c472fb;
287
+ --q1-color-purple-1000: #fbecff;
288
+ --q1-color-pink-100: #310d1e;
289
+ --q1-color-pink-200: #420c25;
290
+ --q1-color-pink-300: #571032;
291
+ --q1-color-pink-400: #5d0c34;
292
+ --q1-color-pink-500: #76063f;
293
+ --q1-color-pink-600: #ba0056;
294
+ --q1-color-pink-700: #f12b82;
295
+ --q1-color-pink-800: #e7006d;
296
+ --q1-color-pink-900: #ff4d8d;
297
+ --q1-color-pink-1000: #ffe9f4;
298
+ --q1-color-scale-neutral: var(--q1-color-gray-700);
299
+ --q1-color-scale-primary: var(--q1-color-primary-700);
300
+ --q1-color-scale-blue: var(--q1-color-blue-600);
301
+ --q1-color-scale-pink: var(--q1-color-pink-700);
302
+ --q1-color-scale-red: var(--q1-color-red-600);
303
+ --q1-color-scale-amber: var(--q1-color-amber-600);
304
+ --q1-color-scale-green: var(--q1-color-green-700);
305
+ --q1-color-scale-teal: var(--q1-color-teal-700);
306
+ --q1-color-action-primary: var(--q1-color-primary-700);
307
+ --q1-color-action-primary-hover: var(--q1-color-primary-800);
308
+ --q1-color-action-primary-press: var(--q1-color-primary-500);
309
+ --q1-color-action-on-primary: #ffffff;
310
+ --q1-color-brand-preview-light-bg: #ffffff;
311
+ --q1-color-brand-preview-light-fg: #171717;
312
+ --q1-color-brand-preview-dark-bg: #000000;
313
+ --q1-color-brand-preview-dark-fg: #ededed;
314
+ --q1-color-mask-visible: #ffffff;
315
+ --q1-color-mask-opaque: #000000;
316
+ --q1-color-shadow: #000000;
317
+ --q1-color-border-overlay: color-mix(in srgb, #ffffff 14%, transparent);
318
+ --q1-color-bg-canvas: var(--q1-color-background-100);
319
+ --q1-color-bg-subtle: var(--q1-color-gray-100);
320
+ --q1-color-bg-panel: var(--q1-color-background-100);
321
+ --q1-color-border: var(--q1-color-gray-200);
322
+ --q1-color-border-strong: var(--q1-color-gray-400);
323
+ --q1-color-text-primary: var(--q1-color-gray-1000);
324
+ --q1-color-text-secondary: var(--q1-color-gray-900);
325
+ --q1-color-text-muted: var(--q1-color-gray-800);
326
+ --q1-color-selection-bg: var(--q1-color-text-primary);
327
+ --q1-color-selection-fg: var(--q1-color-bg-canvas);
328
+ --q1-color-status-success: var(--q1-color-green-900);
329
+ --q1-color-status-warning: var(--q1-color-amber-700);
330
+ --q1-color-status-danger: var(--q1-color-red-900);
331
+ --q1-color-status-info: var(--q1-color-blue-900);
332
+ --q1-font-sans: "Noto Sans SC", "PingFang SC", "Microsoft YaHei UI", sans-serif;
333
+ --q1-font-mono: "Geist Mono", ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace;
334
+ --q1-font-weight-regular: 400;
335
+ --q1-font-weight-medium: 500;
336
+ --q1-font-weight-semibold: 600;
337
+ --q1-font-size-heading-72: 72px;
338
+ --q1-font-weight-heading-72: var(--q1-font-weight-medium);
339
+ --q1-line-height-heading-72: 72px;
340
+ --q1-font-size-heading-64: 64px;
341
+ --q1-font-weight-heading-64: var(--q1-font-weight-medium);
342
+ --q1-line-height-heading-64: 68px;
343
+ --q1-font-size-heading-56: 56px;
344
+ --q1-font-weight-heading-56: var(--q1-font-weight-medium);
345
+ --q1-line-height-heading-56: 60px;
346
+ --q1-font-size-heading-48: 48px;
347
+ --q1-font-weight-heading-48: var(--q1-font-weight-medium);
348
+ --q1-line-height-heading-48: 52px;
349
+ --q1-font-size-heading-40: 40px;
350
+ --q1-font-weight-heading-40: var(--q1-font-weight-medium);
351
+ --q1-line-height-heading-40: 44px;
352
+ --q1-font-size-heading-32: 32px;
353
+ --q1-font-weight-heading-32: var(--q1-font-weight-medium);
354
+ --q1-line-height-heading-32: 38px;
355
+ --q1-font-size-heading-24: 24px;
356
+ --q1-font-weight-heading-24: var(--q1-font-weight-medium);
357
+ --q1-line-height-heading-24: 32px;
358
+ --q1-font-size-heading-20: 20px;
359
+ --q1-font-weight-heading-20: var(--q1-font-weight-medium);
360
+ --q1-line-height-heading-20: 28px;
361
+ --q1-font-size-heading-16: 16px;
362
+ --q1-font-weight-heading-16: var(--q1-font-weight-medium);
363
+ --q1-line-height-heading-16: 24px;
364
+ --q1-font-size-heading-14: 14px;
365
+ --q1-font-weight-heading-14: var(--q1-font-weight-medium);
366
+ --q1-line-height-heading-14: 20px;
367
+ --q1-font-size-label-14: 14px;
368
+ --q1-line-height-label-14: 20px;
369
+ --q1-font-size-label-13: 13px;
370
+ --q1-line-height-label-13: 18px;
371
+ --q1-font-size-copy-16: 16px;
372
+ --q1-line-height-copy-16: 24px;
373
+ --q1-font-size-copy-14: 14px;
374
+ --q1-line-height-copy-14: 20px;
375
+ --q1-font-size-code-13: 13px;
376
+ --q1-line-height-code-13: 18px;
377
+ --q1-space-1: 4px;
378
+ --q1-space-2: 8px;
379
+ --q1-space-3: 12px;
380
+ --q1-space-4: 16px;
381
+ --q1-space-6: 24px;
382
+ --q1-space-8: 32px;
383
+ --q1-space-10: 40px;
384
+ --q1-space-16: 64px;
385
+ --q1-space-24: 96px;
386
+ --q1-control-height-default: 40px;
387
+ --q1-doc-frame-gutter: 60px;
388
+ --q1-doc-frame-max-width: 1220px;
389
+ --q1-doc-sidebar-width: 260px;
390
+ --q1-doc-topbar-height: 64px;
391
+ --q1-doc-topbar-gutter: 16px;
392
+ --q1-doc-search-width: 220px;
393
+ --q1-doc-page-header-min-height: 187px;
394
+ --q1-doc-page-header-padding: 48px;
395
+ --q1-doc-page-content-max-width: 1120px;
396
+ --q1-doc-page-footer-min-height: 112px;
397
+ --q1-doc-page-footer-padding: 28px var(--q1-space-8) 48px;
398
+ --q1-doc-intro-footer-padding: 28px 48px;
399
+ --q1-doc-page-footer-action-min-width: 72px;
400
+ --q1-radius-1: 4px;
401
+ --q1-radius-2: 6px;
402
+ --q1-radius-3: 8px;
403
+ --q1-radius-4: 12px;
404
+ --q1-shadow-focus: 0 0 0 3px color-mix(in srgb, var(--q1-color-primary-700) 22%, transparent);
405
+ --q1-shadow-popover: 0 8px 28px color-mix(in srgb, var(--q1-color-shadow) 16%, transparent);
406
+ --q1-shadow-modal: 0 16px 48px color-mix(in srgb, var(--q1-color-shadow) 32%, transparent);
407
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@q1travel/design-system",
3
- "version": "0.3.1",
3
+ "version": "0.4.0",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "./dist-pkg/design-system.js",
@@ -15,6 +15,7 @@
15
15
  "import": "./dist-pkg/design-system.js"
16
16
  },
17
17
  "./style.css": "./dist-pkg/style.css",
18
+ "./tokens.css": "./dist-pkg/tokens.css",
18
19
  "./contracts/*": "./contracts/*",
19
20
  "./package.json": "./package.json"
20
21
  },
@@ -33,7 +34,7 @@
33
34
  "sync:contracts": "node scripts/sync-design-contracts.mjs",
34
35
  "build": "npm run sync:contracts && tsc -b && vite build",
35
36
  "preview": "vite preview --host 127.0.0.1",
36
- "check:shell": "npm run sync:contracts && node scripts/check-shell.mjs",
37
+ "check:shell": "npm run sync:contracts && node scripts/check-shell.mjs && node scripts/check-token-package.mjs",
37
38
  "check:browser": "node scripts/check-browser.mjs",
38
39
  "check": "npm run build && npm run check:shell && npm run check:browser",
39
40
  "build:lib": "vite build --config vite.lib.config.ts",