one-design-next 0.0.97 → 0.0.99

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.
@@ -90,44 +90,76 @@
90
90
  color: var(--odn-color-black-8);
91
91
  }
92
92
 
93
+ /* 尺寸与 hover 内缩走 Dropdown 的 .odn-dropdown-compact;此处只留筛选项特有的 */
93
94
  [data-odn-dropdown-content].odn-chat-list-filter-menu {
94
- /* 比默认 Dropdown 小一号:对齐 popup 字号 + Select small 行高 */
95
- --odn-font-size: var(--odn-popup-font-size);
96
- --odn-line-height: var(--odn-popup-line-height);
97
- --odn-popup-control-height: 28px;
98
- }
99
- [data-odn-dropdown-content].odn-chat-list-filter-menu [data-odn-dropdown-label] {
100
- height: auto;
101
- padding: 0 12px 2px;
102
- }
103
- [data-odn-dropdown-content].odn-chat-list-filter-menu {
104
- /* hover 不通栏:左右各缩 4px,圆角 4px;padding 8px 使文案仍落在 12px */
105
- }
106
- [data-odn-dropdown-content].odn-chat-list-filter-menu [data-odn-dropdown-item] {
107
- margin: 0 4px;
108
- padding-inline: 8px;
109
- border-radius: 4px;
95
+ /* 勾选态图标靠右对齐,标签不参与省略 */
110
96
  }
111
97
  [data-odn-dropdown-content].odn-chat-list-filter-menu [data-odn-dropdown-item-label] {
112
98
  overflow: visible;
113
99
  }
114
- [data-odn-dropdown-content].odn-chat-list-filter-menu {
115
- /* 组间线:上下各 8px padding,线画在 content-box,左右内缩 */
100
+
101
+ [data-odn-chat-list],
102
+ [data-odn-chat-list-body] {
103
+ scrollbar-width: thin;
104
+ scrollbar-color: var(--odn-color-black-5) transparent;
105
+ }
106
+ [data-odn-chat-list]::-webkit-scrollbar,
107
+ [data-odn-chat-list-body]::-webkit-scrollbar {
108
+ width: 3px;
116
109
  }
117
- [data-odn-dropdown-content].odn-chat-list-filter-menu [data-odn-dropdown-separator] {
118
- box-sizing: content-box;
119
- height: 1px;
120
- margin: 0 12px;
121
- padding: 8px 0;
110
+ [data-odn-chat-list]::-webkit-scrollbar-thumb,
111
+ [data-odn-chat-list-body]::-webkit-scrollbar-thumb {
112
+ border-radius: 9999px;
122
113
  background-color: var(--odn-color-black-5);
123
- background-clip: content-box;
114
+ }
115
+ [data-odn-chat-list]::-webkit-scrollbar-track,
116
+ [data-odn-chat-list-body]::-webkit-scrollbar-track {
117
+ background: transparent;
118
+ }
119
+ [data-odn-chat-list]::-webkit-scrollbar-thumb:hover,
120
+ [data-odn-chat-list-body]::-webkit-scrollbar-thumb:hover {
121
+ background-color: var(--odn-color-black-6);
122
+ }
123
+
124
+ [data-odn-chat-list-scroll] {
125
+ position: relative;
126
+ display: flex;
127
+ flex-direction: column;
128
+ min-width: 0;
129
+ min-height: 0;
124
130
  }
125
131
 
126
132
  [data-odn-chat-list-body] {
127
133
  display: flex;
128
134
  flex-direction: column;
135
+ flex: 1 1 auto;
129
136
  gap: 8px;
130
137
  min-width: 0;
138
+ min-height: 0;
139
+ overflow-anchor: none;
140
+ }
141
+
142
+ [data-odn-chat-list-fade] {
143
+ position: absolute;
144
+ inset-inline: 0;
145
+ z-index: 1;
146
+ height: 24px;
147
+ pointer-events: none;
148
+ opacity: 1;
149
+ transition: opacity 0.15s ease;
150
+ }
151
+ [data-odn-chat-list-fade][data-hidden] {
152
+ opacity: 0;
153
+ }
154
+
155
+ [data-odn-chat-list-fade=top] {
156
+ top: 0;
157
+ background: linear-gradient(to bottom, var(--odn-chat-list-fade-bg, #fff), transparent);
158
+ }
159
+
160
+ [data-odn-chat-list-fade=bottom] {
161
+ bottom: 0;
162
+ background: linear-gradient(to top, var(--odn-chat-list-fade-bg, #fff), transparent);
131
163
  }
132
164
 
133
165
  [data-odn-chat-list-empty] {
@@ -149,7 +181,7 @@
149
181
  flex-shrink: 0;
150
182
  }
151
183
 
152
- /* 置顶 / 最近分区头:视觉同组标题,无折叠 / 菜单等交互;左缘同标题栏 / ChatItem */
184
+ /* 置顶 / 最近 /「分组」分区头:次级标签(12px / black-9),与 ChatGroup 组头拉开层级 */
153
185
  [data-odn-chat-list-pinned-title],
154
186
  [data-odn-chat-list-recent-title] {
155
187
  padding: 4px 12px 2px;
@@ -167,4 +199,213 @@
167
199
  flex-direction: column;
168
200
  gap: 4px;
169
201
  min-width: 0;
202
+ }
203
+
204
+ /* 自定义分组:标题栏搜索展开、分组模块 */
205
+ [data-odn-chat-list-grouped] [data-odn-chat-list-scroll] {
206
+ flex: 1 1 auto;
207
+ }
208
+
209
+ [data-odn-chat-list-grouped] [data-odn-chat-list-body] {
210
+ overflow-y: auto;
211
+ /* overlay 条子落在 padding 里,不压 ChatItem */
212
+ padding-right: var(--odn-chat-list-scroll-slot, 8px);
213
+ }
214
+
215
+ [data-odn-chat-list-grouped] [data-odn-chat-list-toolbar] {
216
+ position: relative;
217
+ padding-right: var(--odn-chat-list-scroll-slot, 8px);
218
+ }
219
+
220
+ [data-odn-chat-list-toolbar-idle] {
221
+ display: flex;
222
+ align-items: center;
223
+ gap: 2px;
224
+ flex: 1 1 auto;
225
+ min-width: 0;
226
+ padding-right: 30px;
227
+ opacity: 1;
228
+ visibility: visible;
229
+ transition: opacity 220ms ease 160ms, visibility 0s linear 160ms;
230
+ }
231
+
232
+ [data-odn-chat-list-search-open] [data-odn-chat-list-toolbar-idle] {
233
+ opacity: 0;
234
+ pointer-events: none;
235
+ visibility: hidden;
236
+ transition: opacity 0s, visibility 0s;
237
+ }
238
+
239
+ [data-odn-chat-list-search-field] {
240
+ position: absolute;
241
+ top: 0;
242
+ right: 0;
243
+ bottom: 0;
244
+ z-index: 1;
245
+ display: flex;
246
+ align-items: center;
247
+ gap: 6px;
248
+ width: 28px;
249
+ min-width: 0;
250
+ overflow: hidden;
251
+ transition: width 420ms cubic-bezier(0.22, 1, 0.36, 1);
252
+ }
253
+
254
+ [data-odn-chat-list-search-open] [data-odn-chat-list-search-field] {
255
+ width: 100%;
256
+ }
257
+
258
+ [data-odn-chat-list-search-trigger],
259
+ [data-odn-chat-list-icon-btn],
260
+ [data-odn-chat-list-search-close] {
261
+ flex-shrink: 0;
262
+ display: flex;
263
+ align-items: center;
264
+ justify-content: center;
265
+ width: 28px;
266
+ height: 28px;
267
+ margin: 0;
268
+ padding: 0;
269
+ border: none;
270
+ border-radius: 6px;
271
+ background: transparent;
272
+ color: var(--odn-color-black-9);
273
+ cursor: pointer;
274
+ }
275
+ [data-odn-chat-list-search-trigger]:hover,
276
+ [data-odn-chat-list-icon-btn]:hover,
277
+ [data-odn-chat-list-search-close]:hover {
278
+ background: var(--odn-color-black-3);
279
+ color: var(--odn-color-black-12);
280
+ }
281
+ [data-odn-chat-list-search-trigger]:focus-visible,
282
+ [data-odn-chat-list-icon-btn]:focus-visible,
283
+ [data-odn-chat-list-search-close]:focus-visible {
284
+ outline: none;
285
+ background: var(--odn-color-black-3);
286
+ color: var(--odn-color-black-12);
287
+ }
288
+
289
+ [data-odn-chat-list-icon-btn] {
290
+ width: 24px;
291
+ height: 24px;
292
+ color: var(--odn-color-black-8);
293
+ }
294
+ [data-odn-chat-list-icon-btn]:hover {
295
+ color: var(--odn-color-black-12);
296
+ }
297
+
298
+ /* 组头 … 对齐 ChatItem 操作按钮:色阶、展开按下态。hover 底交给 HoverFill。 */
299
+ [data-odn-chat-list-group-menu] {
300
+ color: var(--odn-color-black-9);
301
+ }
302
+ [data-odn-chat-list-group-menu]:hover, [data-odn-chat-list-group-menu]:focus-visible {
303
+ color: var(--odn-color-black-12);
304
+ }
305
+ [data-odn-chat-list-group-menu]:active, [data-odn-chat-list-group-menu][data-odn-chat-list-group-menu-open] {
306
+ background: var(--odn-color-black-5);
307
+ color: var(--odn-color-black-12);
308
+ }
309
+
310
+ .odn-chat-list-icon-btn-bg {
311
+ border-radius: 6px;
312
+ }
313
+
314
+ [data-odn-chat-list-search-open] [data-odn-chat-list-search-trigger],
315
+ [data-odn-chat-list-search-open] [data-odn-chat-list-search-trigger]:hover {
316
+ background: transparent;
317
+ color: var(--odn-color-black-8);
318
+ }
319
+
320
+ [data-odn-chat-list-search-input] {
321
+ flex: 1 1 auto;
322
+ min-width: 0;
323
+ width: auto;
324
+ height: 28px;
325
+ margin: 0;
326
+ padding: 0;
327
+ border: none;
328
+ background: transparent;
329
+ color: var(--odn-color-black-12);
330
+ font: inherit;
331
+ font-size: 14px;
332
+ line-height: 22px;
333
+ outline: none;
334
+ box-shadow: none;
335
+ opacity: 0;
336
+ pointer-events: none;
337
+ transition: opacity calc(420ms * 0.6) cubic-bezier(0.22, 1, 0.36, 1);
338
+ }
339
+ [data-odn-chat-list-search-input]::placeholder {
340
+ color: var(--odn-color-black-7);
341
+ }
342
+
343
+ [data-odn-chat-list-search-open] [data-odn-chat-list-search-input] {
344
+ opacity: 1;
345
+ pointer-events: auto;
346
+ }
347
+
348
+ [data-odn-chat-list-search-close] {
349
+ flex-shrink: 0;
350
+ width: 24px;
351
+ min-width: 24px;
352
+ height: 24px;
353
+ opacity: 0;
354
+ pointer-events: none;
355
+ color: var(--odn-color-black-8);
356
+ transition: opacity calc(420ms * 0.6) cubic-bezier(0.22, 1, 0.36, 1);
357
+ }
358
+
359
+ [data-odn-chat-list-search-open] [data-odn-chat-list-search-close] {
360
+ opacity: 1;
361
+ pointer-events: auto;
362
+ }
363
+
364
+ @media (prefers-reduced-motion: reduce) {
365
+ [data-odn-chat-list-search-field],
366
+ [data-odn-chat-list-search-input],
367
+ [data-odn-chat-list-search-close] {
368
+ transition-duration: 0.01ms !important;
369
+ transition-delay: 0ms !important;
370
+ }
371
+ }
372
+ [data-odn-chat-list-groups] {
373
+ display: flex;
374
+ flex-direction: column;
375
+ gap: 2px;
376
+ min-width: 0;
377
+ }
378
+
379
+ [data-odn-chat-list-section-header] {
380
+ display: flex;
381
+ align-items: center;
382
+ gap: 4px;
383
+ min-width: 0;
384
+ /* 左缘与标题栏 / ChatItem / 置顶分区头同为 12px */
385
+ padding: 4px 4px 2px 12px;
386
+ }
387
+ [data-odn-chat-list-section-header] [data-odn-chat-list-icon-btn] {
388
+ opacity: 0;
389
+ transition: opacity 0.15s ease;
390
+ }
391
+ [data-odn-chat-list-section-header]:hover [data-odn-chat-list-icon-btn], [data-odn-chat-list-section-header]:has(:focus-visible) [data-odn-chat-list-icon-btn] {
392
+ opacity: 1;
393
+ }
394
+
395
+ [data-odn-chat-list-section-title] {
396
+ flex: 1 1 auto;
397
+ min-width: 0;
398
+ padding: 2px 4px 2px 0;
399
+ color: var(--odn-color-black-9);
400
+ font-size: 12px;
401
+ font-weight: 400;
402
+ line-height: 18px;
403
+ overflow: hidden;
404
+ text-overflow: ellipsis;
405
+ white-space: nowrap;
406
+ }
407
+
408
+ [data-odn-chat-group-extra] [data-odn-chat-list-icon-btn]:hover,
409
+ [data-odn-chat-group-extra] [data-odn-chat-list-icon-btn]:focus-visible {
410
+ background: transparent;
170
411
  }
@@ -26,9 +26,9 @@ declare const DropdownMenuItem: React.ForwardRefExoticComponent<Omit<Omit<Omit<i
26
26
  closeOnClick?: boolean | undefined;
27
27
  onClick?: React.ComponentPropsWithoutRef<typeof Menu.Item>['onClick'];
28
28
  } & React.RefAttributes<HTMLElement>>;
29
- declare function DropdownMenuCheckboxItem({ children, checked, ...props }: React.ComponentProps<typeof Menu.CheckboxItem>): React.JSX.Element;
29
+ declare function DropdownMenuCheckboxItem({ children, checked, disabled, ...props }: React.ComponentProps<typeof Menu.CheckboxItem>): React.JSX.Element;
30
30
  declare function DropdownMenuRadioGroup({ ...props }: React.ComponentProps<typeof Menu.RadioGroup>): React.JSX.Element;
31
- declare function DropdownMenuRadioItem({ children, ...props }: React.ComponentProps<typeof Menu.RadioItem>): React.JSX.Element;
31
+ declare function DropdownMenuRadioItem({ children, disabled, ...props }: React.ComponentProps<typeof Menu.RadioItem>): React.JSX.Element;
32
32
  declare function DropdownMenuLabel({ inset, children, ...props }: React.ComponentPropsWithoutRef<typeof Menu.GroupLabel> & {
33
33
  inset?: boolean;
34
34
  }): React.JSX.Element;
@@ -37,6 +37,7 @@ declare function DropdownMenuShortcut({ ...props }: React.ComponentProps<'span'>
37
37
  declare function DropdownMenuSub({ onOpenChange, ...props }: React.ComponentProps<typeof Menu.SubmenuRoot>): React.JSX.Element;
38
38
  declare const DropdownMenuSubTrigger: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react/menu").MenuSubmenuTriggerProps, "ref"> & React.RefAttributes<HTMLElement>, "ref"> & {
39
39
  inset?: boolean | undefined;
40
+ icon?: string | undefined;
40
41
  } & React.RefAttributes<HTMLElement>>;
41
42
  declare const DropdownMenuSubContent: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/menu").MenuPositionerProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "children"> & Omit<Omit<Omit<import("@base-ui/react/menu").MenuPopupProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "children"> & {
42
43
  children?: React.ReactNode;