@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
@@ -6,7 +6,7 @@ import IconCheckboxChecked from '@fluentui/svg-icons/icons/checkbox_checked_16_f
6
6
  import IconCheckboxIndeterminate from '@fluentui/svg-icons/icons/checkbox_indeterminate_16_filled.svg?raw';
7
7
  import IconCheckboxUnchecked from '@fluentui/svg-icons/icons/checkbox_unchecked_16_regular.svg?raw';
8
8
  import IconCheckmark from '@fluentui/svg-icons/icons/checkmark_16_regular.svg?raw';
9
- let { triggerEl, isOpen, rows, highlight, loading = false, listboxId, matchTriggerWidth = true, selectedDisplay = 'checkmark', optionSnippet, headerSnippet, bodySnippet, hideCreateRows = false, createPrefix, suppressEmpty = false, on } = $props();
9
+ let { triggerEl, isOpen, rows, highlight, loading = false, size = 'md', listboxId, matchTriggerWidth = true, selectedDisplay = 'checkmark', optionSnippet, headerSnippet, bodySnippet, hideCreateRows = false, createPrefix, suppressEmpty = false, on } = $props();
10
10
  const localization = new SelectListboxLocalization();
11
11
  // rows keep their index into the full `rows` array — `highlight` and row ids are core-side indices,
12
12
  // so filtering without preserving them shifts every row by one and Enter acts on the wrong row
@@ -115,7 +115,7 @@ $effect(() => {
115
115
  {#if isOpen && (hasRows || showEmpty)}
116
116
  <div
117
117
  bind:this={panelEl}
118
- class="select-listbox select-listbox--display-{selectedDisplay}"
118
+ class="select-listbox select-listbox--{size} select-listbox--display-{selectedDisplay}"
119
119
  role="listbox"
120
120
  id={listboxId}
121
121
  tabindex="-1"
@@ -237,10 +237,10 @@ dismiss events upward. Floating UI handles placement with autoUpdate on scroll/r
237
237
  | `--sc-kit--select--panel--border-color` | Panel border | `var(--sc-kit--color--border)` |
238
238
  | `--sc-kit--select--panel--border-radius` | Panel radius | `var(--sc-kit--radius--md)` |
239
239
  | `--sc-kit--select--panel--box-shadow` | Panel shadow | `var(--sc-kit--shadow--lg)` |
240
- | `--sc-kit--select--panel--font-size` | Option / group / empty-state text size | `var(--sc-kit--font-size--md)` |
240
+ | `--sc-kit--select--panel--font-size` | Option / group / empty-state text size | per size — `var(--sc-kit--font-size--{sm,md,lg})` |
241
241
  | `--sc-kit--select--panel--max-height` | Panel max height | `18rem` |
242
- | `--sc-kit--select--panel--padding` | Panel inner padding | `var(--sc-kit--space--1)` |
243
- | `--sc-kit--select--option--height` | Option row height | `var(--sc-kit--field--height--md)` (32px) |
242
+ | `--sc-kit--select--panel--padding` | Panel inner padding; in Chrome / Safari the 4px scrollbar takes its share of the end side | `var(--sc-kit--space--1)` |
243
+ | `--sc-kit--select--option--height` | Option row height | per size — `var(--sc-kit--field--height--{sm,md,lg})` |
244
244
  | `--sc-kit--select--option--padding-inline` | Option horizontal padding | `var(--sc-kit--space--3)` |
245
245
  | `--sc-kit--select--option--background--active` | Active / focused row background | `var(--sc-kit--color--accent--softer)` |
246
246
  | `--sc-kit--select--option--color` | Row text color | `var(--sc-kit--color--text--primary)` |
@@ -257,8 +257,8 @@ dismiss events upward. Floating UI handles placement with autoUpdate on scroll/r
257
257
  --_lb--box-shadow: var(--sc-kit--select--panel--box-shadow, var(--sc-kit--shadow--lg));
258
258
  --_lb--max-height: var(--sc-kit--select--panel--max-height, 18rem);
259
259
  --_lb--padding: var(--sc-kit--select--panel--padding, var(--sc-kit--space--1));
260
- --_lb--font-size: var(--sc-kit--select--panel--font-size, var(--sc-kit--font-size--md));
261
- --_lb--row-height: var(--sc-kit--select--option--height, var(--sc-kit--field--height--md));
260
+ --_lb--font-size: var(--sc-kit--select--panel--font-size, var(--_lb--size-font-size, var(--sc-kit--font-size--md)));
261
+ --_lb--row-height: var(--sc-kit--select--option--height, var(--_lb--size-row-height, var(--sc-kit--field--height--md)));
262
262
  --_lb--row-padding-inline: var(--sc-kit--select--option--padding-inline, var(--sc-kit--space--3));
263
263
  --_lb--row-background-active: var(--sc-kit--select--option--background--active, var(--sc-kit--color--accent--softer));
264
264
  --_lb--row-color: var(--sc-kit--select--option--color, var(--sc-kit--color--text--primary));
@@ -278,28 +278,51 @@ dismiss events upward. Floating UI handles placement with autoUpdate on scroll/r
278
278
  box-shadow: var(--_lb--box-shadow);
279
279
  max-height: var(--_lb--max-height);
280
280
  padding: var(--_lb--padding);
281
+ padding-inline-start: max(var(--_lb--padding), var(--_cross-browser-scrollbar--gutter, 0px));
282
+ padding-inline-end: max(0px, var(--_lb--padding) - var(--_cross-browser-scrollbar--gutter, 0px));
281
283
  overflow-y: auto;
282
284
  --_cross-browser-scrollbar--thumb-color: var(--scrollbar--thumb-color, light-dark(#d1d5db, #4b5563));
283
285
  --_cross-browser-scrollbar--track-color: var(--scrollbar--track-color, transparent);
286
+ --_cross-browser-scrollbar--gutter: 0px;
284
287
  }
285
- .select-listbox::-webkit-scrollbar {
286
- width: 6px;
287
- height: 6px;
288
- }
289
- .select-listbox::-webkit-scrollbar-track {
290
- background: var(--_cross-browser-scrollbar--track-color);
291
- border-radius: 100vw;
292
- }
293
- .select-listbox::-webkit-scrollbar-thumb {
294
- background: var(--_cross-browser-scrollbar--thumb-color);
295
- border-radius: 100vw;
288
+ @supports selector(::-webkit-scrollbar) {
289
+ .select-listbox {
290
+ scrollbar-color: auto;
291
+ scrollbar-width: auto;
292
+ }
293
+ .select-listbox::-webkit-scrollbar {
294
+ width: 4px;
295
+ height: 4px;
296
+ }
297
+ .select-listbox::-webkit-scrollbar-track {
298
+ background: var(--_cross-browser-scrollbar--track-color);
299
+ border-radius: 100vw;
300
+ }
301
+ .select-listbox::-webkit-scrollbar-thumb {
302
+ background: var(--_cross-browser-scrollbar--thumb-color);
303
+ border-radius: 100vw;
304
+ }
296
305
  }
297
- @supports (scrollbar-color: transparent transparent) {
306
+ @supports not selector(::-webkit-scrollbar) {
298
307
  .select-listbox {
299
308
  scrollbar-color: var(--_cross-browser-scrollbar--thumb-color) var(--_cross-browser-scrollbar--track-color);
300
309
  scrollbar-width: thin;
301
310
  }
302
311
  }
312
+ @supports selector(::-webkit-scrollbar) {
313
+ .select-listbox {
314
+ --_cross-browser-scrollbar--gutter: 4px;
315
+ overflow-y: scroll;
316
+ }
317
+ }
318
+ .select-listbox--sm {
319
+ --_lb--size-font-size: var(--sc-kit--font-size--sm);
320
+ --_lb--size-row-height: var(--sc-kit--field--height--sm);
321
+ }
322
+ .select-listbox--lg {
323
+ --_lb--size-font-size: var(--sc-kit--font-size--lg);
324
+ --_lb--size-row-height: var(--sc-kit--field--height--lg);
325
+ }
303
326
  .select-listbox__row {
304
327
  display: flex;
305
328
  align-items: center;
@@ -9,6 +9,8 @@ declare function $$render<T>(): {
9
9
  /** Index into `rows` — highlighted row gets the active background and scrolls into view. */
10
10
  highlight: number;
11
11
  loading?: boolean;
12
+ /** Field size the rows follow (font size + row height). @default 'md' */
13
+ size?: "sm" | "md" | "lg";
12
14
  /** Stable id for aria-controls + aria-activedescendant. */
13
15
  listboxId: string;
14
16
  /** When true, panel width equals trigger width. @default true */
@@ -79,10 +81,10 @@ interface $$IsomorphicComponent {
79
81
  * | `--sc-kit--select--panel--border-color` | Panel border | `var(--sc-kit--color--border)` |
80
82
  * | `--sc-kit--select--panel--border-radius` | Panel radius | `var(--sc-kit--radius--md)` |
81
83
  * | `--sc-kit--select--panel--box-shadow` | Panel shadow | `var(--sc-kit--shadow--lg)` |
82
- * | `--sc-kit--select--panel--font-size` | Option / group / empty-state text size | `var(--sc-kit--font-size--md)` |
84
+ * | `--sc-kit--select--panel--font-size` | Option / group / empty-state text size | per size — `var(--sc-kit--font-size--{sm,md,lg})` |
83
85
  * | `--sc-kit--select--panel--max-height` | Panel max height | `18rem` |
84
- * | `--sc-kit--select--panel--padding` | Panel inner padding | `var(--sc-kit--space--1)` |
85
- * | `--sc-kit--select--option--height` | Option row height | `var(--sc-kit--field--height--md)` (32px) |
86
+ * | `--sc-kit--select--panel--padding` | Panel inner padding; in Chrome / Safari the 4px scrollbar takes its share of the end side | `var(--sc-kit--space--1)` |
87
+ * | `--sc-kit--select--option--height` | Option row height | per size — `var(--sc-kit--field--height--{sm,md,lg})` |
86
88
  * | `--sc-kit--select--option--padding-inline` | Option horizontal padding | `var(--sc-kit--space--3)` |
87
89
  * | `--sc-kit--select--option--background--active` | Active / focused row background | `var(--sc-kit--color--accent--softer)` |
88
90
  * | `--sc-kit--select--option--color` | Row text color | `var(--sc-kit--color--text--primary)` |
@@ -290,20 +290,27 @@ Not exported from `index.ts` — for kit-internal use only.
290
290
  overflow: auto;
291
291
  --_cross-browser-scrollbar--thumb-color: var(--scrollbar--thumb-color, light-dark(#d1d5db, #4b5563));
292
292
  --_cross-browser-scrollbar--track-color: var(--scrollbar--track-color, transparent);
293
+ --_cross-browser-scrollbar--gutter: 0px;
293
294
  }
294
- .table-container__scroll::-webkit-scrollbar {
295
- width: 6px;
296
- height: 6px;
297
- }
298
- .table-container__scroll::-webkit-scrollbar-track {
299
- background: var(--_cross-browser-scrollbar--track-color);
300
- border-radius: 100vw;
301
- }
302
- .table-container__scroll::-webkit-scrollbar-thumb {
303
- background: var(--_cross-browser-scrollbar--thumb-color);
304
- border-radius: 100vw;
295
+ @supports selector(::-webkit-scrollbar) {
296
+ .table-container__scroll {
297
+ scrollbar-color: auto;
298
+ scrollbar-width: auto;
299
+ }
300
+ .table-container__scroll::-webkit-scrollbar {
301
+ width: 6px;
302
+ height: 6px;
303
+ }
304
+ .table-container__scroll::-webkit-scrollbar-track {
305
+ background: var(--_cross-browser-scrollbar--track-color);
306
+ border-radius: 100vw;
307
+ }
308
+ .table-container__scroll::-webkit-scrollbar-thumb {
309
+ background: var(--_cross-browser-scrollbar--thumb-color);
310
+ border-radius: 100vw;
311
+ }
305
312
  }
306
- @supports (scrollbar-color: transparent transparent) {
313
+ @supports not selector(::-webkit-scrollbar) {
307
314
  .table-container__scroll {
308
315
  scrollbar-color: var(--_cross-browser-scrollbar--thumb-color) var(--_cross-browser-scrollbar--track-color);
309
316
  scrollbar-width: thin;
@@ -285,19 +285,28 @@ what the field shows. Blank lines inside the text are left alone. Typing is unto
285
285
  --_cross-browser-scrollbar--thumb-color: var(--sc-kit--color--border--strong);
286
286
  --_cross-browser-scrollbar--track-color: var(--scrollbar--track-color, transparent);
287
287
  }
288
- .textarea__el::-webkit-scrollbar {
289
- width: 6px;
290
- height: 6px;
291
- }
292
- .textarea__el::-webkit-scrollbar-track {
293
- background: var(--_cross-browser-scrollbar--track-color);
294
- border-radius: 100vw;
288
+ .textarea__el {
289
+ --_cross-browser-scrollbar--gutter: 0px;
295
290
  }
296
- .textarea__el::-webkit-scrollbar-thumb {
297
- background: var(--_cross-browser-scrollbar--thumb-color);
298
- border-radius: 100vw;
291
+ @supports selector(::-webkit-scrollbar) {
292
+ .textarea__el {
293
+ scrollbar-color: auto;
294
+ scrollbar-width: auto;
295
+ }
296
+ .textarea__el::-webkit-scrollbar {
297
+ width: 6px;
298
+ height: 6px;
299
+ }
300
+ .textarea__el::-webkit-scrollbar-track {
301
+ background: var(--_cross-browser-scrollbar--track-color);
302
+ border-radius: 100vw;
303
+ }
304
+ .textarea__el::-webkit-scrollbar-thumb {
305
+ background: var(--_cross-browser-scrollbar--thumb-color);
306
+ border-radius: 100vw;
307
+ }
299
308
  }
300
- @supports (scrollbar-color: transparent transparent) {
309
+ @supports not selector(::-webkit-scrollbar) {
301
310
  .textarea__el {
302
311
  scrollbar-color: var(--_cross-browser-scrollbar--thumb-color) var(--_cross-browser-scrollbar--track-color);
303
312
  scrollbar-width: thin;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@streamscloud/kit",
3
- "version": "0.85.1",
3
+ "version": "0.87.0",
4
4
  "author": "StreamsCloud",
5
5
  "repository": {
6
6
  "type": "git",
@@ -9,18 +9,15 @@
9
9
  "type": "module",
10
10
  "scripts": {
11
11
  "dev": "vite dev --port 3011 --host",
12
- "build": "svelte-package --tsconfig ./tsconfig.app.json && npm run build:css && prettier --write --plugin prettier-plugin-svelte . && eslint --fix .",
12
+ "build": "npm run check && svelte-package --tsconfig ./tsconfig.app.json && npm run build:css",
13
13
  "build:css": "sass dist/styles/_normalize.scss dist/styles/normalize.css --no-source-map && sass dist/styles/_reset.scss dist/styles/reset.css --no-source-map",
14
14
  "publish:prod": "npm run build && npm publish --access public --tag latest",
15
15
  "version:dev": "node -e \"const p=require('./package.json');p.version=p.version.split('-')[0]+'-'+Date.now();require('fs').writeFileSync('package.json',JSON.stringify(p,null,2)+'\\n')\"",
16
16
  "publish:dev": "npm run build && npm run version:dev && npm publish --tag next && git checkout -- package.json",
17
17
  "pack": "npm run build && npm pack",
18
18
  "preview": "vite preview",
19
- "check": "svelte-check --tsconfig ./tsconfig.app.json && tsc -p tsconfig.node.json",
20
- "check:strict": "svelte-check --tsconfig ./tsconfig.app.json --fail-on-warnings --output machine && eslint . --format codeframe --max-warnings 0 && prettier --check --plugin prettier-plugin-svelte --cache .",
21
- "lint": "prettier --check --plugin prettier-plugin-svelte . && eslint .",
22
- "lint-format": "prettier --write --plugin prettier-plugin-svelte . && eslint --fix .",
23
- "format": "prettier --write --plugin prettier-plugin-svelte ."
19
+ "check": "svelte-check --tsconfig ./tsconfig.app.json --fail-on-warnings --output machine && tsc -p tsconfig.node.json && eslint . --format codeframe --max-warnings 0 && prettier --check --plugin prettier-plugin-svelte --cache .",
20
+ "lint:fix": "eslint --fix . && prettier --write --plugin prettier-plugin-svelte ."
24
21
  },
25
22
  "files": [
26
23
  "dist"