@streamscloud/kit 0.85.1 → 0.87.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.
Files changed (49) hide show
  1. package/README.md +2 -2
  2. package/dist/core/files/file-decorators.d.ts +3 -0
  3. package/dist/core/files/file-decorators.js +2 -0
  4. package/dist/core/files/file-validation-rules.d.ts +3 -8
  5. package/dist/core/files/file-with-blob-data-helper.d.ts +1 -1
  6. package/dist/core/files/file-with-blob-data-helper.js +1 -1
  7. package/dist/core/files/image-resizer.d.ts +17 -29
  8. package/dist/core/files/image-resizer.js +30 -57
  9. package/dist/core/files/index.d.ts +4 -4
  10. package/dist/core/files/index.js +2 -2
  11. package/dist/core/files/types.d.ts +14 -2
  12. package/dist/core/files/types.js +1 -10
  13. package/dist/core/files/upload-media-store.svelte.d.ts +11 -17
  14. package/dist/core/files/upload-media-store.svelte.js +32 -35
  15. package/dist/styles/_mixins.scss +71 -17
  16. package/dist/styles/reset.css +19 -12
  17. package/dist/ui/ai-panel/cmp.ai-panel.svelte +27 -0
  18. package/dist/ui/cropper/image-editor-dialog/cmp.image-editor-dialog.svelte +8 -12
  19. package/dist/ui/cropper/image-editor-dialog/crop-and-resize.d.ts +6 -13
  20. package/dist/ui/cropper/image-editor-dialog/crop-and-resize.js +6 -18
  21. package/dist/ui/cropper/image-editor-dialog/open-image-editor-dialog.d.ts +6 -1
  22. package/dist/ui/cropper/image-editor-dialog/open-image-editor-dialog.js +6 -1
  23. package/dist/ui/cropper/image-editor-dialog/types.d.ts +8 -5
  24. package/dist/ui/cropper/img-cropper/img-cropper.svelte.d.ts +6 -2
  25. package/dist/ui/cropper/img-cropper/img-cropper.svelte.js +18 -11
  26. package/dist/ui/date-picker/cmp.date-time-picker.svelte +67 -8
  27. package/dist/ui/date-picker/cmp.date-time-picker.svelte.d.ts +8 -5
  28. package/dist/ui/date-picker/cmp.time-picker.svelte +3 -2
  29. package/dist/ui/date-picker/cmp.time-picker.svelte.d.ts +2 -0
  30. package/dist/ui/dialog/cmp.dialog-container.svelte +19 -12
  31. package/dist/ui/dialog/cmp.dialog.svelte +19 -12
  32. package/dist/ui/dialog/layout/cmp.stepper-dialog.svelte +54 -0
  33. package/dist/ui/emoji-picker/cmp.emoji-panel.svelte +19 -12
  34. package/dist/ui/file-uploader/cmp.upload-progress-toaster.svelte +20 -11
  35. package/dist/ui/grouped-sidebar/cmp.grouped-sidebar.svelte +20 -11
  36. package/dist/ui/navigation/cmp.nav-menu.svelte +20 -11
  37. package/dist/ui/page-layout/cmp.page-layout.svelte +38 -24
  38. package/dist/ui/page-layout/cmp.page-panel-sidebars.svelte +40 -22
  39. package/dist/ui/page-layout/cmp.page-panel.svelte +20 -11
  40. package/dist/ui/popover/cmp.popover.svelte +19 -12
  41. package/dist/ui/select/cmp.input-suggest.svelte +1 -0
  42. package/dist/ui/select/cmp.singleselect-async.svelte +1 -0
  43. package/dist/ui/select/multiselect-base.svelte +1 -0
  44. package/dist/ui/select/select-core.svelte.js +41 -11
  45. package/dist/ui/select/select-listbox.svelte +42 -19
  46. package/dist/ui/select/select-listbox.svelte.d.ts +5 -3
  47. package/dist/ui/table/table-core.svelte +19 -12
  48. package/dist/ui/textarea/cmp.textarea.svelte +20 -11
  49. package/package.json +4 -7
@@ -174,6 +174,33 @@ Header, body and sidebar block padding follow `Dialog`'s header / body padding v
174
174
  border-inline-end: 1px solid var(--sc-kit--color--border);
175
175
  overflow-y: auto;
176
176
  min-block-size: 0;
177
+ --_cross-browser-scrollbar--thumb-color: var(--scrollbar--thumb-color, light-dark(#d1d5db, #4b5563));
178
+ --_cross-browser-scrollbar--track-color: var(--scrollbar--track-color, transparent);
179
+ --_cross-browser-scrollbar--gutter: 0px;
180
+ }
181
+ @supports selector(::-webkit-scrollbar) {
182
+ .stepper-dialog__sidebar {
183
+ scrollbar-color: auto;
184
+ scrollbar-width: auto;
185
+ }
186
+ .stepper-dialog__sidebar::-webkit-scrollbar {
187
+ width: 6px;
188
+ height: 6px;
189
+ }
190
+ .stepper-dialog__sidebar::-webkit-scrollbar-track {
191
+ background: var(--_cross-browser-scrollbar--track-color);
192
+ border-radius: 100vw;
193
+ }
194
+ .stepper-dialog__sidebar::-webkit-scrollbar-thumb {
195
+ background: var(--_cross-browser-scrollbar--thumb-color);
196
+ border-radius: 100vw;
197
+ }
198
+ }
199
+ @supports not selector(::-webkit-scrollbar) {
200
+ .stepper-dialog__sidebar {
201
+ scrollbar-color: var(--_cross-browser-scrollbar--thumb-color) var(--_cross-browser-scrollbar--track-color);
202
+ scrollbar-width: thin;
203
+ }
177
204
  }
178
205
  @media screen and (max-width: 768px) {
179
206
  .stepper-dialog__sidebar {
@@ -194,4 +221,31 @@ Header, body and sidebar block padding follow `Dialog`'s header / body padding v
194
221
  min-block-size: 0;
195
222
  overflow-y: auto;
196
223
  padding: var(--_--dialog--body--padding-block) var(--_--dialog--body--padding-inline);
224
+ --_cross-browser-scrollbar--thumb-color: var(--scrollbar--thumb-color, light-dark(#d1d5db, #4b5563));
225
+ --_cross-browser-scrollbar--track-color: var(--scrollbar--track-color, transparent);
226
+ --_cross-browser-scrollbar--gutter: 0px;
227
+ }
228
+ @supports selector(::-webkit-scrollbar) {
229
+ .stepper-dialog__body {
230
+ scrollbar-color: auto;
231
+ scrollbar-width: auto;
232
+ }
233
+ .stepper-dialog__body::-webkit-scrollbar {
234
+ width: 6px;
235
+ height: 6px;
236
+ }
237
+ .stepper-dialog__body::-webkit-scrollbar-track {
238
+ background: var(--_cross-browser-scrollbar--track-color);
239
+ border-radius: 100vw;
240
+ }
241
+ .stepper-dialog__body::-webkit-scrollbar-thumb {
242
+ background: var(--_cross-browser-scrollbar--thumb-color);
243
+ border-radius: 100vw;
244
+ }
245
+ }
246
+ @supports not selector(::-webkit-scrollbar) {
247
+ .stepper-dialog__body {
248
+ scrollbar-color: var(--_cross-browser-scrollbar--thumb-color) var(--_cross-browser-scrollbar--track-color);
249
+ scrollbar-width: thin;
250
+ }
197
251
  }</style>
@@ -148,20 +148,27 @@ can be embedded directly by input components.
148
148
  overflow-y: auto;
149
149
  --_cross-browser-scrollbar--thumb-color: var(--scrollbar--thumb-color, light-dark(#d1d5db, #4b5563));
150
150
  --_cross-browser-scrollbar--track-color: var(--scrollbar--track-color, transparent);
151
+ --_cross-browser-scrollbar--gutter: 0px;
151
152
  }
152
- .emoji-panel__categories::-webkit-scrollbar {
153
- width: 6px;
154
- height: 6px;
155
- }
156
- .emoji-panel__categories::-webkit-scrollbar-track {
157
- background: var(--_cross-browser-scrollbar--track-color);
158
- border-radius: 100vw;
159
- }
160
- .emoji-panel__categories::-webkit-scrollbar-thumb {
161
- background: var(--_cross-browser-scrollbar--thumb-color);
162
- border-radius: 100vw;
153
+ @supports selector(::-webkit-scrollbar) {
154
+ .emoji-panel__categories {
155
+ scrollbar-color: auto;
156
+ scrollbar-width: auto;
157
+ }
158
+ .emoji-panel__categories::-webkit-scrollbar {
159
+ width: 6px;
160
+ height: 6px;
161
+ }
162
+ .emoji-panel__categories::-webkit-scrollbar-track {
163
+ background: var(--_cross-browser-scrollbar--track-color);
164
+ border-radius: 100vw;
165
+ }
166
+ .emoji-panel__categories::-webkit-scrollbar-thumb {
167
+ background: var(--_cross-browser-scrollbar--thumb-color);
168
+ border-radius: 100vw;
169
+ }
163
170
  }
164
- @supports (scrollbar-color: transparent transparent) {
171
+ @supports not selector(::-webkit-scrollbar) {
165
172
  .emoji-panel__categories {
166
173
  scrollbar-color: var(--_cross-browser-scrollbar--thumb-color) var(--_cross-browser-scrollbar--track-color);
167
174
  scrollbar-width: thin;
@@ -112,19 +112,28 @@ at the store's default concurrency of 20 can never push the toast off screen.
112
112
  --_cross-browser-scrollbar--thumb-color: var(--scrollbar--thumb-color, light-dark(#d1d5db, #4b5563));
113
113
  --_cross-browser-scrollbar--track-color: var(--scrollbar--track-color, transparent);
114
114
  }
115
- .upload-progress-toaster__files::-webkit-scrollbar {
116
- width: 6px;
117
- height: 6px;
118
- }
119
- .upload-progress-toaster__files::-webkit-scrollbar-track {
120
- background: var(--_cross-browser-scrollbar--track-color);
121
- border-radius: 100vw;
115
+ .upload-progress-toaster__files {
116
+ --_cross-browser-scrollbar--gutter: 0px;
122
117
  }
123
- .upload-progress-toaster__files::-webkit-scrollbar-thumb {
124
- background: var(--_cross-browser-scrollbar--thumb-color);
125
- border-radius: 100vw;
118
+ @supports selector(::-webkit-scrollbar) {
119
+ .upload-progress-toaster__files {
120
+ scrollbar-color: auto;
121
+ scrollbar-width: auto;
122
+ }
123
+ .upload-progress-toaster__files::-webkit-scrollbar {
124
+ width: 6px;
125
+ height: 6px;
126
+ }
127
+ .upload-progress-toaster__files::-webkit-scrollbar-track {
128
+ background: var(--_cross-browser-scrollbar--track-color);
129
+ border-radius: 100vw;
130
+ }
131
+ .upload-progress-toaster__files::-webkit-scrollbar-thumb {
132
+ background: var(--_cross-browser-scrollbar--thumb-color);
133
+ border-radius: 100vw;
134
+ }
126
135
  }
127
- @supports (scrollbar-color: transparent transparent) {
136
+ @supports not selector(::-webkit-scrollbar) {
128
137
  .upload-progress-toaster__files {
129
138
  scrollbar-color: var(--_cross-browser-scrollbar--thumb-color) var(--_cross-browser-scrollbar--track-color);
130
139
  scrollbar-width: thin;
@@ -111,19 +111,28 @@ dummy-placeholder + post-init bind needed:
111
111
  --_cross-browser-scrollbar--thumb-color: var(--scrollbar--thumb-color, light-dark(#d1d5db, #4b5563));
112
112
  --_cross-browser-scrollbar--track-color: var(--scrollbar--track-color, transparent);
113
113
  }
114
- .grouped-sidebar__sections::-webkit-scrollbar {
115
- width: 6px;
116
- height: 6px;
117
- }
118
- .grouped-sidebar__sections::-webkit-scrollbar-track {
119
- background: var(--_cross-browser-scrollbar--track-color);
120
- border-radius: 100vw;
114
+ .grouped-sidebar__sections {
115
+ --_cross-browser-scrollbar--gutter: 0px;
121
116
  }
122
- .grouped-sidebar__sections::-webkit-scrollbar-thumb {
123
- background: var(--_cross-browser-scrollbar--thumb-color);
124
- border-radius: 100vw;
117
+ @supports selector(::-webkit-scrollbar) {
118
+ .grouped-sidebar__sections {
119
+ scrollbar-color: auto;
120
+ scrollbar-width: auto;
121
+ }
122
+ .grouped-sidebar__sections::-webkit-scrollbar {
123
+ width: 6px;
124
+ height: 6px;
125
+ }
126
+ .grouped-sidebar__sections::-webkit-scrollbar-track {
127
+ background: var(--_cross-browser-scrollbar--track-color);
128
+ border-radius: 100vw;
129
+ }
130
+ .grouped-sidebar__sections::-webkit-scrollbar-thumb {
131
+ background: var(--_cross-browser-scrollbar--thumb-color);
132
+ border-radius: 100vw;
133
+ }
125
134
  }
126
- @supports (scrollbar-color: transparent transparent) {
135
+ @supports not selector(::-webkit-scrollbar) {
127
136
  .grouped-sidebar__sections {
128
137
  scrollbar-color: var(--_cross-browser-scrollbar--thumb-color) var(--_cross-browser-scrollbar--track-color);
129
138
  scrollbar-width: thin;
@@ -70,19 +70,28 @@ routing, or feature gating. Compose with `NavMenuGroup`, `NavMenuHeader`, `NavMe
70
70
  --_cross-browser-scrollbar--thumb-color: var(--sc-kit--color--border--strong);
71
71
  --_cross-browser-scrollbar--track-color: var(--scrollbar--track-color, transparent);
72
72
  }
73
- .nav-menu__body::-webkit-scrollbar {
74
- width: 6px;
75
- height: 6px;
76
- }
77
- .nav-menu__body::-webkit-scrollbar-track {
78
- background: var(--_cross-browser-scrollbar--track-color);
79
- border-radius: 100vw;
73
+ .nav-menu__body {
74
+ --_cross-browser-scrollbar--gutter: 0px;
80
75
  }
81
- .nav-menu__body::-webkit-scrollbar-thumb {
82
- background: var(--_cross-browser-scrollbar--thumb-color);
83
- border-radius: 100vw;
76
+ @supports selector(::-webkit-scrollbar) {
77
+ .nav-menu__body {
78
+ scrollbar-color: auto;
79
+ scrollbar-width: auto;
80
+ }
81
+ .nav-menu__body::-webkit-scrollbar {
82
+ width: 6px;
83
+ height: 6px;
84
+ }
85
+ .nav-menu__body::-webkit-scrollbar-track {
86
+ background: var(--_cross-browser-scrollbar--track-color);
87
+ border-radius: 100vw;
88
+ }
89
+ .nav-menu__body::-webkit-scrollbar-thumb {
90
+ background: var(--_cross-browser-scrollbar--thumb-color);
91
+ border-radius: 100vw;
92
+ }
84
93
  }
85
- @supports (scrollbar-color: transparent transparent) {
94
+ @supports not selector(::-webkit-scrollbar) {
86
95
  .nav-menu__body {
87
96
  scrollbar-color: var(--_cross-browser-scrollbar--thumb-color) var(--_cross-browser-scrollbar--track-color);
88
97
  scrollbar-width: thin;
@@ -135,20 +135,27 @@ A loading `PagePanel` inside a loading layout draws its own spinner and overlay
135
135
  overflow-y: var(--_page-layout--body-overflow, auto);
136
136
  --_cross-browser-scrollbar--thumb-color: var(--sc-kit--color--border);
137
137
  --_cross-browser-scrollbar--track-color: var(--scrollbar--track-color, transparent);
138
+ --_cross-browser-scrollbar--gutter: 0px;
138
139
  }
139
- .page-layout__body::-webkit-scrollbar {
140
- width: 6px;
141
- height: 6px;
142
- }
143
- .page-layout__body::-webkit-scrollbar-track {
144
- background: var(--_cross-browser-scrollbar--track-color);
145
- border-radius: 100vw;
146
- }
147
- .page-layout__body::-webkit-scrollbar-thumb {
148
- background: var(--_cross-browser-scrollbar--thumb-color);
149
- border-radius: 100vw;
140
+ @supports selector(::-webkit-scrollbar) {
141
+ .page-layout__body {
142
+ scrollbar-color: auto;
143
+ scrollbar-width: auto;
144
+ }
145
+ .page-layout__body::-webkit-scrollbar {
146
+ width: 6px;
147
+ height: 6px;
148
+ }
149
+ .page-layout__body::-webkit-scrollbar-track {
150
+ background: var(--_cross-browser-scrollbar--track-color);
151
+ border-radius: 100vw;
152
+ }
153
+ .page-layout__body::-webkit-scrollbar-thumb {
154
+ background: var(--_cross-browser-scrollbar--thumb-color);
155
+ border-radius: 100vw;
156
+ }
150
157
  }
151
- @supports (scrollbar-color: transparent transparent) {
158
+ @supports not selector(::-webkit-scrollbar) {
152
159
  .page-layout__body {
153
160
  scrollbar-color: var(--_cross-browser-scrollbar--thumb-color) var(--_cross-browser-scrollbar--track-color);
154
161
  scrollbar-width: thin;
@@ -158,20 +165,27 @@ A loading `PagePanel` inside a loading layout draws its own spinner and overlay
158
165
  overflow-y: auto;
159
166
  --_cross-browser-scrollbar--thumb-color: var(--sc-kit--color--border);
160
167
  --_cross-browser-scrollbar--track-color: var(--scrollbar--track-color, transparent);
168
+ --_cross-browser-scrollbar--gutter: 0px;
161
169
  }
162
- .page-layout--scrollable::-webkit-scrollbar {
163
- width: 6px;
164
- height: 6px;
165
- }
166
- .page-layout--scrollable::-webkit-scrollbar-track {
167
- background: var(--_cross-browser-scrollbar--track-color);
168
- border-radius: 100vw;
169
- }
170
- .page-layout--scrollable::-webkit-scrollbar-thumb {
171
- background: var(--_cross-browser-scrollbar--thumb-color);
172
- border-radius: 100vw;
170
+ @supports selector(::-webkit-scrollbar) {
171
+ .page-layout--scrollable {
172
+ scrollbar-color: auto;
173
+ scrollbar-width: auto;
174
+ }
175
+ .page-layout--scrollable::-webkit-scrollbar {
176
+ width: 6px;
177
+ height: 6px;
178
+ }
179
+ .page-layout--scrollable::-webkit-scrollbar-track {
180
+ background: var(--_cross-browser-scrollbar--track-color);
181
+ border-radius: 100vw;
182
+ }
183
+ .page-layout--scrollable::-webkit-scrollbar-thumb {
184
+ background: var(--_cross-browser-scrollbar--thumb-color);
185
+ border-radius: 100vw;
186
+ }
173
187
  }
174
- @supports (scrollbar-color: transparent transparent) {
188
+ @supports not selector(::-webkit-scrollbar) {
175
189
  .page-layout--scrollable {
176
190
  scrollbar-color: var(--_cross-browser-scrollbar--thumb-color) var(--_cross-browser-scrollbar--track-color);
177
191
  scrollbar-width: thin;
@@ -145,19 +145,28 @@ line instead of doubling it. The collapse button stays put outside that track.
145
145
  --_cross-browser-scrollbar--thumb-color: var(--sc-kit--color--border--strong);
146
146
  --_cross-browser-scrollbar--track-color: var(--scrollbar--track-color, transparent);
147
147
  }
148
- .page-panel-sidebars__sidebar::-webkit-scrollbar {
149
- width: 6px;
150
- height: 6px;
151
- }
152
- .page-panel-sidebars__sidebar::-webkit-scrollbar-track {
153
- background: var(--_cross-browser-scrollbar--track-color);
154
- border-radius: 100vw;
148
+ .page-panel-sidebars__sidebar {
149
+ --_cross-browser-scrollbar--gutter: 0px;
155
150
  }
156
- .page-panel-sidebars__sidebar::-webkit-scrollbar-thumb {
157
- background: var(--_cross-browser-scrollbar--thumb-color);
158
- border-radius: 100vw;
151
+ @supports selector(::-webkit-scrollbar) {
152
+ .page-panel-sidebars__sidebar {
153
+ scrollbar-color: auto;
154
+ scrollbar-width: auto;
155
+ }
156
+ .page-panel-sidebars__sidebar::-webkit-scrollbar {
157
+ width: 6px;
158
+ height: 6px;
159
+ }
160
+ .page-panel-sidebars__sidebar::-webkit-scrollbar-track {
161
+ background: var(--_cross-browser-scrollbar--track-color);
162
+ border-radius: 100vw;
163
+ }
164
+ .page-panel-sidebars__sidebar::-webkit-scrollbar-thumb {
165
+ background: var(--_cross-browser-scrollbar--thumb-color);
166
+ border-radius: 100vw;
167
+ }
159
168
  }
160
- @supports (scrollbar-color: transparent transparent) {
169
+ @supports not selector(::-webkit-scrollbar) {
161
170
  .page-panel-sidebars__sidebar {
162
171
  scrollbar-color: var(--_cross-browser-scrollbar--thumb-color) var(--_cross-browser-scrollbar--track-color);
163
172
  scrollbar-width: thin;
@@ -181,19 +190,28 @@ line instead of doubling it. The collapse button stays put outside that track.
181
190
  --_cross-browser-scrollbar--thumb-color: var(--sc-kit--color--border--strong);
182
191
  --_cross-browser-scrollbar--track-color: var(--scrollbar--track-color, transparent);
183
192
  }
184
- .page-panel-sidebars__main::-webkit-scrollbar {
185
- width: 6px;
186
- height: 6px;
187
- }
188
- .page-panel-sidebars__main::-webkit-scrollbar-track {
189
- background: var(--_cross-browser-scrollbar--track-color);
190
- border-radius: 100vw;
193
+ .page-panel-sidebars__main {
194
+ --_cross-browser-scrollbar--gutter: 0px;
191
195
  }
192
- .page-panel-sidebars__main::-webkit-scrollbar-thumb {
193
- background: var(--_cross-browser-scrollbar--thumb-color);
194
- border-radius: 100vw;
196
+ @supports selector(::-webkit-scrollbar) {
197
+ .page-panel-sidebars__main {
198
+ scrollbar-color: auto;
199
+ scrollbar-width: auto;
200
+ }
201
+ .page-panel-sidebars__main::-webkit-scrollbar {
202
+ width: 6px;
203
+ height: 6px;
204
+ }
205
+ .page-panel-sidebars__main::-webkit-scrollbar-track {
206
+ background: var(--_cross-browser-scrollbar--track-color);
207
+ border-radius: 100vw;
208
+ }
209
+ .page-panel-sidebars__main::-webkit-scrollbar-thumb {
210
+ background: var(--_cross-browser-scrollbar--thumb-color);
211
+ border-radius: 100vw;
212
+ }
195
213
  }
196
- @supports (scrollbar-color: transparent transparent) {
214
+ @supports not selector(::-webkit-scrollbar) {
197
215
  .page-panel-sidebars__main {
198
216
  scrollbar-color: var(--_cross-browser-scrollbar--thumb-color) var(--_cross-browser-scrollbar--track-color);
199
217
  scrollbar-width: thin;
@@ -469,19 +469,28 @@ to min / max; Enter / Space toggle collapsed.
469
469
  --_cross-browser-scrollbar--thumb-color: var(--sc-kit--color--border--strong);
470
470
  --_cross-browser-scrollbar--track-color: var(--scrollbar--track-color, transparent);
471
471
  }
472
- .page-panel__content::-webkit-scrollbar {
473
- width: 6px;
474
- height: 6px;
475
- }
476
- .page-panel__content::-webkit-scrollbar-track {
477
- background: var(--_cross-browser-scrollbar--track-color);
478
- border-radius: 100vw;
472
+ .page-panel__content {
473
+ --_cross-browser-scrollbar--gutter: 0px;
479
474
  }
480
- .page-panel__content::-webkit-scrollbar-thumb {
481
- background: var(--_cross-browser-scrollbar--thumb-color);
482
- border-radius: 100vw;
475
+ @supports selector(::-webkit-scrollbar) {
476
+ .page-panel__content {
477
+ scrollbar-color: auto;
478
+ scrollbar-width: auto;
479
+ }
480
+ .page-panel__content::-webkit-scrollbar {
481
+ width: 6px;
482
+ height: 6px;
483
+ }
484
+ .page-panel__content::-webkit-scrollbar-track {
485
+ background: var(--_cross-browser-scrollbar--track-color);
486
+ border-radius: 100vw;
487
+ }
488
+ .page-panel__content::-webkit-scrollbar-thumb {
489
+ background: var(--_cross-browser-scrollbar--thumb-color);
490
+ border-radius: 100vw;
491
+ }
483
492
  }
484
- @supports (scrollbar-color: transparent transparent) {
493
+ @supports not selector(::-webkit-scrollbar) {
485
494
  .page-panel__content {
486
495
  scrollbar-color: var(--_cross-browser-scrollbar--thumb-color) var(--_cross-browser-scrollbar--track-color);
487
496
  scrollbar-width: thin;
@@ -399,20 +399,27 @@ Props for keeping the popover open during interaction:
399
399
  overflow: var(--_dd--content-overflow);
400
400
  --_cross-browser-scrollbar--thumb-color: var(--scrollbar--thumb-color, light-dark(#d1d5db, #4b5563));
401
401
  --_cross-browser-scrollbar--track-color: var(--scrollbar--track-color, transparent);
402
+ --_cross-browser-scrollbar--gutter: 0px;
402
403
  }
403
- .popover__panel--styled::-webkit-scrollbar {
404
- width: 6px;
405
- height: 6px;
406
- }
407
- .popover__panel--styled::-webkit-scrollbar-track {
408
- background: var(--_cross-browser-scrollbar--track-color);
409
- border-radius: 100vw;
410
- }
411
- .popover__panel--styled::-webkit-scrollbar-thumb {
412
- background: var(--_cross-browser-scrollbar--thumb-color);
413
- border-radius: 100vw;
404
+ @supports selector(::-webkit-scrollbar) {
405
+ .popover__panel--styled {
406
+ scrollbar-color: auto;
407
+ scrollbar-width: auto;
408
+ }
409
+ .popover__panel--styled::-webkit-scrollbar {
410
+ width: 6px;
411
+ height: 6px;
412
+ }
413
+ .popover__panel--styled::-webkit-scrollbar-track {
414
+ background: var(--_cross-browser-scrollbar--track-color);
415
+ border-radius: 100vw;
416
+ }
417
+ .popover__panel--styled::-webkit-scrollbar-thumb {
418
+ background: var(--_cross-browser-scrollbar--thumb-color);
419
+ border-radius: 100vw;
420
+ }
414
421
  }
415
- @supports (scrollbar-color: transparent transparent) {
422
+ @supports not selector(::-webkit-scrollbar) {
416
423
  .popover__panel--styled {
417
424
  scrollbar-color: var(--_cross-browser-scrollbar--thumb-color) var(--_cross-browser-scrollbar--track-color);
418
425
  scrollbar-width: thin;
@@ -261,6 +261,7 @@ const handlePickRow = (row) => {
261
261
  <SelectListbox
262
262
  triggerEl={rootEl}
263
263
  isOpen={isPanelOpen}
264
+ size={size}
264
265
  rows={rows}
265
266
  highlight={activeIndex}
266
267
  listboxId={listboxId}
@@ -136,6 +136,7 @@ const showClear = $derived(mode.clearable && hasValue && isInteractive && !core.
136
136
  <SelectListbox
137
137
  triggerEl={rootEl}
138
138
  isOpen={core.isOpen}
139
+ size={size}
139
140
  rows={core.rows}
140
141
  highlight={core.highlight}
141
142
  loading={core.loading}
@@ -257,6 +257,7 @@ const handleDndFinalize = (e) => {
257
257
  <SelectListbox
258
258
  triggerEl={rootEl}
259
259
  isOpen={core.isOpen}
260
+ size={size}
260
261
  rows={core.rows}
261
262
  highlight={core.highlight}
262
263
  loading={core.loading}
@@ -11,6 +11,7 @@ export function createSelectCore(config) {
11
11
  let isOpen = $state(false);
12
12
  let query = $state('');
13
13
  let highlight = $state(0);
14
+ let highlightMovedByUser = false;
14
15
  let isFiltering = $state(false);
15
16
  let items = $state.raw([]);
16
17
  let loadToken = 0;
@@ -152,13 +153,28 @@ export function createSelectCore(config) {
152
153
  return out;
153
154
  });
154
155
  const navigableIndices = $derived(getNavigableIndices(rows));
155
- const openPopover = () => {
156
- if (!config.getInteractive() || isOpen) {
157
- return;
156
+ const findSelectedRowIndex = () => {
157
+ const selected = config.getSelectedOptions()[0];
158
+ if (!selected) {
159
+ return navigableIndices[0] ?? 0;
158
160
  }
159
- isOpen = true;
160
- query = '';
161
- isFiltering = false;
161
+ const compare = config.getCompare();
162
+ const idx = rows.findIndex((r) => r.kind === 'option' && compare(r.option.value, selected.value));
163
+ return idx >= 0 ? idx : (navigableIndices[0] ?? 0);
164
+ };
165
+ const moveHighlightByUser = (index) => {
166
+ highlight = index;
167
+ highlightMovedByUser = true;
168
+ };
169
+ const loadAndHighlightSelected = async () => {
170
+ highlight = findSelectedRowIndex();
171
+ highlightMovedByUser = false;
172
+ await runLoad('');
173
+ if (isOpen && !query && !highlightMovedByUser) {
174
+ highlight = findSelectedRowIndex();
175
+ }
176
+ };
177
+ const highlightFirstSelectedAndLoad = () => {
162
178
  const selected = config.getSelectedOptions()[0];
163
179
  if (selected) {
164
180
  const idx = rows.findIndex((r) => r.kind === 'option' && r.option === selected);
@@ -168,6 +184,20 @@ export function createSelectCore(config) {
168
184
  highlight = navigableIndices[0] ?? 0;
169
185
  }
170
186
  void runLoad('');
187
+ };
188
+ const openPopover = () => {
189
+ if (!config.getInteractive() || isOpen) {
190
+ return;
191
+ }
192
+ isOpen = true;
193
+ query = '';
194
+ isFiltering = false;
195
+ if (config.picker === 'single') {
196
+ void loadAndHighlightSelected();
197
+ }
198
+ else {
199
+ highlightFirstSelectedAndLoad();
200
+ }
171
201
  // Clicks land on the trigger root (div role=presentation) — focus the inner input so the
172
202
  // user can start typing immediately without a second click.
173
203
  config.getInputEl()?.focus();
@@ -292,7 +322,7 @@ export function createSelectCore(config) {
292
322
  if (!isOpen) {
293
323
  isOpen = true;
294
324
  }
295
- highlight = navigableIndices[0] ?? 0;
325
+ moveHighlightByUser(navigableIndices[0] ?? 0);
296
326
  debouncedLoad(query);
297
327
  };
298
328
  const handleKeydown = (e) => {
@@ -308,11 +338,11 @@ export function createSelectCore(config) {
308
338
  }
309
339
  if (e.key === 'ArrowDown') {
310
340
  e.preventDefault();
311
- highlight = moveHighlightIndex(navigableIndices, highlight, 1);
341
+ moveHighlightByUser(moveHighlightIndex(navigableIndices, highlight, 1));
312
342
  }
313
343
  else if (e.key === 'ArrowUp') {
314
344
  e.preventDefault();
315
- highlight = moveHighlightIndex(navigableIndices, highlight, -1);
345
+ moveHighlightByUser(moveHighlightIndex(navigableIndices, highlight, -1));
316
346
  }
317
347
  else if (e.key === 'Enter') {
318
348
  e.preventDefault();
@@ -337,7 +367,7 @@ export function createSelectCore(config) {
337
367
  e.preventDefault();
338
368
  isFiltering = true;
339
369
  query = e.key;
340
- highlight = navigableIndices[0] ?? 0;
370
+ moveHighlightByUser(navigableIndices[0] ?? 0);
341
371
  debouncedLoad(query);
342
372
  }
343
373
  };
@@ -381,7 +411,7 @@ export function createSelectCore(config) {
381
411
  closePopover,
382
412
  pickRow,
383
413
  setHighlight(i) {
384
- highlight = i;
414
+ moveHighlightByUser(i);
385
415
  },
386
416
  refresh() {
387
417
  if (isOpen) {