@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.
- package/README.md +2 -2
- package/dist/core/files/file-decorators.d.ts +3 -0
- package/dist/core/files/file-decorators.js +2 -0
- package/dist/core/files/file-validation-rules.d.ts +3 -8
- package/dist/core/files/file-with-blob-data-helper.d.ts +1 -1
- package/dist/core/files/file-with-blob-data-helper.js +1 -1
- package/dist/core/files/image-resizer.d.ts +17 -29
- package/dist/core/files/image-resizer.js +30 -57
- package/dist/core/files/index.d.ts +4 -4
- package/dist/core/files/index.js +2 -2
- package/dist/core/files/types.d.ts +14 -2
- package/dist/core/files/types.js +1 -10
- package/dist/core/files/upload-media-store.svelte.d.ts +11 -17
- package/dist/core/files/upload-media-store.svelte.js +32 -35
- package/dist/styles/_mixins.scss +71 -17
- package/dist/styles/reset.css +19 -12
- package/dist/ui/ai-panel/cmp.ai-panel.svelte +27 -0
- package/dist/ui/cropper/image-editor-dialog/cmp.image-editor-dialog.svelte +8 -12
- package/dist/ui/cropper/image-editor-dialog/crop-and-resize.d.ts +6 -13
- package/dist/ui/cropper/image-editor-dialog/crop-and-resize.js +6 -18
- package/dist/ui/cropper/image-editor-dialog/open-image-editor-dialog.d.ts +6 -1
- package/dist/ui/cropper/image-editor-dialog/open-image-editor-dialog.js +6 -1
- package/dist/ui/cropper/image-editor-dialog/types.d.ts +8 -5
- package/dist/ui/cropper/img-cropper/img-cropper.svelte.d.ts +6 -2
- package/dist/ui/cropper/img-cropper/img-cropper.svelte.js +18 -11
- package/dist/ui/date-picker/cmp.date-time-picker.svelte +67 -8
- package/dist/ui/date-picker/cmp.date-time-picker.svelte.d.ts +8 -5
- package/dist/ui/date-picker/cmp.time-picker.svelte +3 -2
- package/dist/ui/date-picker/cmp.time-picker.svelte.d.ts +2 -0
- package/dist/ui/dialog/cmp.dialog-container.svelte +19 -12
- package/dist/ui/dialog/cmp.dialog.svelte +19 -12
- package/dist/ui/dialog/layout/cmp.stepper-dialog.svelte +54 -0
- package/dist/ui/emoji-picker/cmp.emoji-panel.svelte +19 -12
- package/dist/ui/file-uploader/cmp.upload-progress-toaster.svelte +20 -11
- package/dist/ui/grouped-sidebar/cmp.grouped-sidebar.svelte +20 -11
- package/dist/ui/navigation/cmp.nav-menu.svelte +20 -11
- package/dist/ui/page-layout/cmp.page-layout.svelte +38 -24
- package/dist/ui/page-layout/cmp.page-panel-sidebars.svelte +40 -22
- package/dist/ui/page-layout/cmp.page-panel.svelte +20 -11
- package/dist/ui/popover/cmp.popover.svelte +19 -12
- package/dist/ui/select/cmp.input-suggest.svelte +1 -0
- package/dist/ui/select/cmp.singleselect-async.svelte +1 -0
- package/dist/ui/select/multiselect-base.svelte +1 -0
- package/dist/ui/select/select-core.svelte.js +41 -11
- package/dist/ui/select/select-listbox.svelte +42 -19
- package/dist/ui/select/select-listbox.svelte.d.ts +5 -3
- package/dist/ui/table/table-core.svelte +19 -12
- package/dist/ui/textarea/cmp.textarea.svelte +20 -11
- 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
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
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
|
|
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
|
|
116
|
-
|
|
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
|
-
|
|
124
|
-
|
|
125
|
-
|
|
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
|
|
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
|
|
115
|
-
|
|
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
|
-
|
|
123
|
-
|
|
124
|
-
|
|
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
|
|
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
|
|
74
|
-
|
|
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
|
-
|
|
82
|
-
|
|
83
|
-
|
|
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
|
|
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
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
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
|
|
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
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
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
|
|
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
|
|
149
|
-
|
|
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
|
-
|
|
157
|
-
|
|
158
|
-
|
|
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
|
|
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
|
|
185
|
-
|
|
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
|
-
|
|
193
|
-
|
|
194
|
-
|
|
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
|
|
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
|
|
473
|
-
|
|
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
|
-
|
|
481
|
-
|
|
482
|
-
|
|
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
|
|
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
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
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
|
|
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;
|
|
@@ -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
|
|
156
|
-
|
|
157
|
-
|
|
156
|
+
const findSelectedRowIndex = () => {
|
|
157
|
+
const selected = config.getSelectedOptions()[0];
|
|
158
|
+
if (!selected) {
|
|
159
|
+
return navigableIndices[0] ?? 0;
|
|
158
160
|
}
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
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
|
-
|
|
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
|
-
|
|
341
|
+
moveHighlightByUser(moveHighlightIndex(navigableIndices, highlight, 1));
|
|
312
342
|
}
|
|
313
343
|
else if (e.key === 'ArrowUp') {
|
|
314
344
|
e.preventDefault();
|
|
315
|
-
|
|
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
|
-
|
|
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
|
-
|
|
414
|
+
moveHighlightByUser(i);
|
|
385
415
|
},
|
|
386
416
|
refresh() {
|
|
387
417
|
if (isOpen) {
|