@q1travel/design-system 0.3.2 → 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.
- package/dist-pkg/design-system.d.ts +87 -30
- package/dist-pkg/design-system.js +1720 -1552
- package/dist-pkg/style.css +123 -17
- package/dist-pkg/tokens.css +4 -0
- package/package.json +1 -1
package/dist-pkg/style.css
CHANGED
|
@@ -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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
-
.
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
-
/*
|
|
6567
|
-
.
|
|
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:
|
|
6701
|
+
box-shadow: var(--q1-shadow-modal);
|
|
6596
6702
|
}
|
|
6597
6703
|
.modal__header {
|
|
6598
6704
|
display: flex;
|
package/dist-pkg/tokens.css
CHANGED
|
@@ -198,6 +198,8 @@
|
|
|
198
198
|
--q1-radius-3: 8px;
|
|
199
199
|
--q1-radius-4: 12px;
|
|
200
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);
|
|
201
203
|
}
|
|
202
204
|
|
|
203
205
|
:root[data-theme='dark'] {
|
|
@@ -400,4 +402,6 @@
|
|
|
400
402
|
--q1-radius-3: 8px;
|
|
401
403
|
--q1-radius-4: 12px;
|
|
402
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);
|
|
403
407
|
}
|