@streamscloud/kit 0.16.2 → 0.18.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 (113) hide show
  1. package/dist/styles/_semantic.scss +3 -0
  2. package/dist/ui/badge/cmp.badge.svelte +4 -0
  3. package/dist/ui/badge/cmp.badge.svelte.d.ts +1 -0
  4. package/dist/ui/button/cmp.button.svelte +6 -2
  5. package/dist/ui/button/cmp.button.svelte.d.ts +1 -1
  6. package/dist/ui/date-picker/cmp.date-picker.svelte +21 -18
  7. package/dist/ui/date-picker/cmp.date-picker.svelte.d.ts +1 -1
  8. package/dist/ui/form-field/cmp.form-field-validatable.svelte +1 -1
  9. package/dist/ui/form-field/cmp.form-field-validatable.svelte.d.ts +1 -1
  10. package/dist/ui/input/cmp.input.svelte +21 -18
  11. package/dist/ui/input/cmp.input.svelte.d.ts +1 -1
  12. package/dist/ui/numeral-input/cmp.numeral-input.svelte +21 -18
  13. package/dist/ui/numeral-input/cmp.numeral-input.svelte.d.ts +1 -1
  14. package/dist/ui/page-toolbar/cmp.reorderable-checkbox-list.svelte +131 -0
  15. package/dist/ui/page-toolbar/cmp.reorderable-checkbox-list.svelte.d.ts +31 -0
  16. package/dist/ui/page-toolbar/cmp.toolbar-checkbox.svelte +14 -0
  17. package/dist/ui/page-toolbar/cmp.toolbar-checkbox.svelte.d.ts +19 -0
  18. package/dist/ui/page-toolbar/cmp.toolbar-divider.svelte +19 -0
  19. package/dist/ui/page-toolbar/cmp.toolbar-divider.svelte.d.ts +35 -0
  20. package/dist/ui/page-toolbar/cmp.toolbar-filter-select.svelte +143 -0
  21. package/dist/ui/page-toolbar/cmp.toolbar-filter-select.svelte.d.ts +68 -0
  22. package/dist/ui/page-toolbar/cmp.toolbar-icon-button.svelte +71 -0
  23. package/dist/ui/page-toolbar/cmp.toolbar-icon-button.svelte.d.ts +32 -0
  24. package/dist/ui/page-toolbar/cmp.toolbar-option.svelte +189 -0
  25. package/dist/ui/page-toolbar/cmp.toolbar-option.svelte.d.ts +47 -0
  26. package/dist/ui/page-toolbar/cmp.toolbar-popover.svelte +23 -8
  27. package/dist/ui/page-toolbar/cmp.toolbar-popover.svelte.d.ts +14 -6
  28. package/dist/ui/page-toolbar/cmp.toolbar-section-title.svelte +46 -0
  29. package/dist/ui/page-toolbar/cmp.toolbar-section-title.svelte.d.ts +24 -0
  30. package/dist/ui/page-toolbar/cmp.toolbar-sort-select.svelte +31 -0
  31. package/dist/ui/page-toolbar/cmp.toolbar-sort-select.svelte.d.ts +44 -0
  32. package/dist/ui/page-toolbar/{cmp.toolbar-switch-item.svelte → cmp.toolbar-switch.svelte} +10 -10
  33. package/dist/ui/page-toolbar/{cmp.toolbar-switch-item.svelte.d.ts → cmp.toolbar-switch.svelte.d.ts} +2 -2
  34. package/dist/ui/page-toolbar/cmp.toolbar-toggle.svelte +14 -0
  35. package/dist/ui/page-toolbar/cmp.toolbar-toggle.svelte.d.ts +19 -0
  36. package/dist/ui/page-toolbar/cmp.toolbar-value-stepper.svelte +4 -1
  37. package/dist/ui/page-toolbar/cmp.toolbar-view-controls.svelte +51 -0
  38. package/dist/ui/page-toolbar/cmp.toolbar-view-controls.svelte.d.ts +27 -0
  39. package/dist/ui/page-toolbar/index.d.ts +12 -7
  40. package/dist/ui/page-toolbar/index.js +11 -6
  41. package/dist/ui/page-toolbar/reorderable-checkbox-list-localization.d.ts +5 -0
  42. package/dist/ui/page-toolbar/reorderable-checkbox-list-localization.js +17 -0
  43. package/dist/ui/page-toolbar/toolbar-filter-select-localization.d.ts +5 -0
  44. package/dist/ui/page-toolbar/toolbar-filter-select-localization.js +20 -0
  45. package/dist/ui/page-toolbar/toolbar-sort-select-localization.d.ts +3 -0
  46. package/dist/ui/page-toolbar/toolbar-sort-select-localization.js +9 -0
  47. package/dist/ui/page-toolbar/toolbar-view-controls-localization.d.ts +5 -0
  48. package/dist/ui/page-toolbar/toolbar-view-controls-localization.js +17 -0
  49. package/dist/ui/page-toolbar/types.d.ts +1 -1
  50. package/dist/ui/rich-text-input/cmp.rich-text-input.svelte +9 -6
  51. package/dist/ui/rich-text-input/cmp.rich-text-input.svelte.d.ts +1 -1
  52. package/dist/ui/segmented-control/cmp.segmented-control.svelte +4 -2
  53. package/dist/ui/segmented-control/cmp.segmented-control.svelte.d.ts +1 -1
  54. package/dist/ui/select/_select-trigger.scss +20 -17
  55. package/dist/ui/select/cmp.singleselect-async.svelte +20 -17
  56. package/dist/ui/select/index.d.ts +1 -0
  57. package/dist/ui/select/index.js +1 -0
  58. package/dist/ui/select/multiselect-base.svelte +21 -18
  59. package/dist/ui/select/select-listbox.svelte +11 -5
  60. package/dist/ui/select/select-listbox.svelte.d.ts +1 -1
  61. package/dist/ui/table/_table-styles.scss +156 -0
  62. package/dist/ui/table/cmp.table-draggable.svelte +338 -0
  63. package/dist/ui/table/cmp.table-draggable.svelte.d.ts +79 -0
  64. package/dist/ui/table/cmp.table.svelte +96 -265
  65. package/dist/ui/table/cmp.table.svelte.d.ts +16 -8
  66. package/dist/ui/table/index.d.ts +1 -0
  67. package/dist/ui/table/index.js +1 -0
  68. package/dist/ui/table/table-cells/index.d.ts +1 -12
  69. package/dist/ui/table/table-cells/index.js +1 -12
  70. package/dist/ui/table/table-cells/table-cell.svelte +77 -0
  71. package/dist/ui/table/table-cells/{table-select-cell.svelte.d.ts → table-cell.svelte.d.ts} +12 -6
  72. package/dist/ui/table/table-column-models.svelte.d.ts +1 -2
  73. package/dist/ui/table/table-column-models.svelte.js +0 -1
  74. package/dist/ui/table/table-columns-manager/cmp.table-columns-manager.svelte +20 -47
  75. package/dist/ui/table/table-columns-manager/cmp.table-columns-manager.svelte.d.ts +3 -7
  76. package/dist/ui/table/table-columns-manager/table-columns-manager-localization.d.ts +1 -1
  77. package/dist/ui/table/table-columns-manager/table-columns-manager-localization.js +7 -7
  78. package/dist/ui/table/table-localization.d.ts +0 -2
  79. package/dist/ui/table/table-localization.js +0 -14
  80. package/dist/ui/table/table-model.svelte.d.ts +2 -3
  81. package/dist/ui/table/table-model.svelte.js +5 -35
  82. package/dist/ui/table/table-view.svelte.d.ts +14 -0
  83. package/dist/ui/table/table-view.svelte.js +32 -0
  84. package/dist/ui/table/types.d.ts +5 -28
  85. package/dist/ui/textarea/cmp.textarea.svelte +17 -14
  86. package/dist/ui/textarea/cmp.textarea.svelte.d.ts +1 -1
  87. package/dist/ui/toggle/cmp.toggle.svelte +32 -26
  88. package/dist/ui/toggle/cmp.toggle.svelte.d.ts +2 -0
  89. package/dist/ui/tree/cmp.tree-node-view.svelte +7 -2
  90. package/dist/ui/tree/cmp.tree.svelte +9 -1
  91. package/dist/ui/tree/cmp.tree.svelte.d.ts +1 -1
  92. package/dist/ui/tree/tree-navigation.svelte.d.ts +2 -0
  93. package/dist/ui/tree/tree-navigation.svelte.js +3 -0
  94. package/dist/ui/validatable/cmp.validatable.svelte +5 -5
  95. package/dist/ui/validatable/cmp.validatable.svelte.d.ts +2 -2
  96. package/dist/ui/validatable/cmp.validation-error.svelte +4 -4
  97. package/dist/ui/validatable/cmp.validation-error.svelte.d.ts +1 -1
  98. package/dist/ui/validatable/{cmp.field-error.svelte → field-frame.svelte} +6 -6
  99. package/dist/ui/validatable/{cmp.field-error.svelte.d.ts → field-frame.svelte.d.ts} +4 -4
  100. package/package.json +1 -1
  101. package/dist/ui/page-toolbar/cmp.reorderable-toggle-list.svelte +0 -153
  102. package/dist/ui/page-toolbar/cmp.reorderable-toggle-list.svelte.d.ts +0 -20
  103. package/dist/ui/page-toolbar/cmp.toolbar-checkbox-item.svelte +0 -19
  104. package/dist/ui/page-toolbar/cmp.toolbar-checkbox-item.svelte.d.ts +0 -12
  105. package/dist/ui/page-toolbar/cmp.toolbar-panel-button.svelte +0 -42
  106. package/dist/ui/page-toolbar/cmp.toolbar-panel-button.svelte.d.ts +0 -20
  107. package/dist/ui/page-toolbar/cmp.toolbar-panel.svelte +0 -57
  108. package/dist/ui/page-toolbar/cmp.toolbar-panel.svelte.d.ts +0 -19
  109. package/dist/ui/page-toolbar/cmp.toolbar-toggle-item.svelte +0 -16
  110. package/dist/ui/page-toolbar/cmp.toolbar-toggle-item.svelte.d.ts +0 -12
  111. package/dist/ui/table/table-cells/table-select-cell.svelte +0 -28
  112. package/dist/ui/table/table-cells/table-text-input-cell.svelte +0 -69
  113. package/dist/ui/table/table-cells/table-text-input-cell.svelte.d.ts +0 -38
@@ -121,6 +121,9 @@
121
121
  --sc-kit--radius--pill: 999px;
122
122
  --sc-kit--radius--circle: 50%;
123
123
 
124
+ --sc-kit--field--border-radius--sm: var(--sc-kit--radius--sm); // 4px
125
+ --sc-kit--field--border-radius--md: var(--sc-kit--radius--md); // 6px
126
+
124
127
  // ============================================================
125
128
  // TYPOGRAPHY
126
129
  // ============================================================
@@ -22,6 +22,7 @@ Pill-shaped status indicator. Use `solid` for stronger emphasis, `soft` (default
22
22
  | `--sc-kit--badge--padding-inline` | Horizontal padding | `0.875rem 0.75rem` |
23
23
  | `--sc-kit--badge--border-radius` | Corner radius | `var(--sc-kit--radius--pill)` |
24
24
  | `--sc-kit--badge--font-size` | Content font size | per size |
25
+ | `--sc-kit--badge--icon-size` | Leading icon size | per size (14 / 16px) |
25
26
  | `--sc-kit--badge--font-weight` | Font weight | `var(--sc-kit--font-weight--medium)` |
26
27
  | `--sc-kit--badge--gap` | Gap between children | `6px` |
27
28
  -->
@@ -48,6 +49,7 @@ Pill-shaped status indicator. Use `solid` for stronger emphasis, `soft` (default
48
49
  display: inline-flex;
49
50
  align-items: center;
50
51
  flex-shrink: 0;
52
+ --sc-kit--icon--size: var(--_badge--icon-size);
51
53
  }
52
54
  .badge__content {
53
55
  min-width: 0;
@@ -63,10 +65,12 @@ Pill-shaped status indicator. Use `solid` for stronger emphasis, `soft` (default
63
65
  .badge--sm {
64
66
  --_badge--height: var(--sc-kit--badge--height, 1.25rem);
65
67
  --_badge--font-size: var(--sc-kit--badge--font-size, 0.625rem);
68
+ --_badge--icon-size: var(--sc-kit--badge--icon-size, 0.875rem);
66
69
  }
67
70
  .badge--md {
68
71
  --_badge--height: var(--sc-kit--badge--height, 1.5rem);
69
72
  --_badge--font-size: var(--sc-kit--badge--font-size, var(--sc-kit--font-size--xs));
73
+ --_badge--icon-size: var(--sc-kit--badge--icon-size, 1rem);
70
74
  }
71
75
  .badge--neutral-soft {
72
76
  --_badge--color: var(--sc-kit--badge--color, var(--sc-kit--color--text--secondary));
@@ -26,6 +26,7 @@ type Props = {
26
26
  * | `--sc-kit--badge--padding-inline` | Horizontal padding | `0.875rem 0.75rem` |
27
27
  * | `--sc-kit--badge--border-radius` | Corner radius | `var(--sc-kit--radius--pill)` |
28
28
  * | `--sc-kit--badge--font-size` | Content font size | per size |
29
+ * | `--sc-kit--badge--icon-size` | Leading icon size | per size (14 / 16px) |
29
30
  * | `--sc-kit--badge--font-weight` | Font weight | `var(--sc-kit--font-weight--medium)` |
30
31
  * | `--sc-kit--badge--gap` | Gap between children | `6px` |
31
32
  */
@@ -111,7 +111,7 @@ Pass `type="anchor"` to render as `<a>` with `href`, or `type="presentational"`
111
111
  | `--sc-kit--button--padding-inline` | Inline (horizontal) padding | per size |
112
112
  | `--sc-kit--button--font-size` | Label font size | per size |
113
113
  | `--sc-kit--button--gap` | Gap between icon and label | per size |
114
- | `--sc-kit--button--border-radius` | Corner rounding | `var(--sc-kit--radius--md)` |
114
+ | `--sc-kit--button--border-radius` | Corner rounding | per size — `xs`/`sm` 4px, `md`/`lg` 6px |
115
115
  | `--sc-kit--button--font-weight` | Font weight | `var(--sc-kit--font-weight--regular)` |
116
116
  | `--sc-kit--button--width` | Explicit width | `fit-content` |
117
117
  | `--sc-kit--button--min-width` | Minimum width | `0` |
@@ -134,7 +134,7 @@ Pass `type="anchor"` to render as `<a>` with `href`, or `type="presentational"`
134
134
  --_btn--width: var(--sc-kit--button--width, fit-content);
135
135
  --_btn--min-width: var(--sc-kit--button--min-width, 0);
136
136
  --_btn--max-width: var(--sc-kit--button--max-width, 100%);
137
- --_btn--border-radius: var(--sc-kit--button--border-radius, var(--sc-kit--radius--md));
137
+ --_btn--border-radius: var(--sc-kit--button--border-radius, var(--_btn--size-border-radius, var(--sc-kit--field--border-radius--md)));
138
138
  --_btn--font-weight: var(--sc-kit--button--font-weight, var(--sc-kit--font-weight--regular));
139
139
  box-sizing: border-box;
140
140
  display: flex;
@@ -207,6 +207,7 @@ Pass `type="anchor"` to render as `<a>` with `href`, or `type="presentational"`
207
207
  --_btn--size-font-size: var(--sc-kit--font-size--xs);
208
208
  --_btn--size-gap: var(--sc-kit--space--1);
209
209
  --_btn--size-icon-size: var(--sc-kit--field--icon--size--xs);
210
+ --_btn--size-border-radius: var(--sc-kit--field--border-radius--sm);
210
211
  }
211
212
  .btn--sm {
212
213
  --_btn--size-height: 1.75rem;
@@ -214,6 +215,7 @@ Pass `type="anchor"` to render as `<a>` with `href`, or `type="presentational"`
214
215
  --_btn--size-font-size: var(--sc-kit--font-size--sm);
215
216
  --_btn--size-gap: var(--sc-kit--space--1);
216
217
  --_btn--size-icon-size: var(--sc-kit--field--icon--size--sm);
218
+ --_btn--size-border-radius: var(--sc-kit--field--border-radius--sm);
217
219
  }
218
220
  .btn--md {
219
221
  --_btn--size-height: 2rem;
@@ -221,6 +223,7 @@ Pass `type="anchor"` to render as `<a>` with `href`, or `type="presentational"`
221
223
  --_btn--size-font-size: var(--sc-kit--font-size--md);
222
224
  --_btn--size-gap: var(--sc-kit--space--2);
223
225
  --_btn--size-icon-size: var(--sc-kit--field--icon--size--md);
226
+ --_btn--size-border-radius: var(--sc-kit--field--border-radius--md);
224
227
  }
225
228
  .btn--lg {
226
229
  --_btn--size-height: 2.5rem;
@@ -228,6 +231,7 @@ Pass `type="anchor"` to render as `<a>` with `href`, or `type="presentational"`
228
231
  --_btn--size-font-size: var(--sc-kit--font-size--lg);
229
232
  --_btn--size-gap: var(--sc-kit--space--2);
230
233
  --_btn--size-icon-size: var(--sc-kit--field--icon--size--lg);
234
+ --_btn--size-border-radius: var(--sc-kit--field--border-radius--md);
231
235
  }
232
236
  .btn--icon-only {
233
237
  --sc-kit--button--padding-inline: 0;
@@ -68,7 +68,7 @@ type Props = ButtonModeProps | AnchorModeProps | PresentationalModeProps;
68
68
  * | `--sc-kit--button--padding-inline` | Inline (horizontal) padding | per size |
69
69
  * | `--sc-kit--button--font-size` | Label font size | per size |
70
70
  * | `--sc-kit--button--gap` | Gap between icon and label | per size |
71
- * | `--sc-kit--button--border-radius` | Corner rounding | `var(--sc-kit--radius--md)` |
71
+ * | `--sc-kit--button--border-radius` | Corner rounding | per size — `xs`/`sm` 4px, `md`/`lg` 6px |
72
72
  * | `--sc-kit--button--font-weight` | Font weight | `var(--sc-kit--font-weight--regular)` |
73
73
  * | `--sc-kit--button--width` | Explicit width | `fit-content` |
74
74
  * | `--sc-kit--button--min-width` | Minimum width | `0` |
@@ -187,7 +187,7 @@ DatePicker — single-day calendar picker built on Floating UI for positioning.
187
187
  | `--sc-kit--date-picker--background--disabled` | Trigger background when disabled | `var(--sc-kit--color--bg--field-alt)` |
188
188
  | `--sc-kit--date-picker--border-color` | Trigger border color | `var(--sc-kit--color--border--field)` |
189
189
  | `--sc-kit--date-picker--border-color--error` | Trigger border color in error state | `var(--sc-kit--color--danger)` |
190
- | `--sc-kit--date-picker--border-radius` | Trigger border radius | `var(--sc-kit--radius--sm)` |
190
+ | `--sc-kit--date-picker--border-radius` | Trigger border radius | per size — `sm` 4px, `md`/`lg` 6px |
191
191
  | `--sc-kit--date-picker--underline-color` | Inset bottom-underline indicator (transparent default, accent when open, danger on error) | `transparent` |
192
192
  | `--sc-kit--date-picker--font-size` | Trigger font size | per size |
193
193
  | `--sc-kit--date-picker--color` | Trigger text color | `var(--sc-kit--color--text--primary)` |
@@ -199,21 +199,21 @@ DatePicker — single-day calendar picker built on Floating UI for positioning.
199
199
  <style>@charset "UTF-8";
200
200
  .date-picker {
201
201
  /* TRIGGER — public CSS API resolved with defaults (this block IS the API documentation) */
202
- --_dp--height: var(--sc-kit--date-picker--height, var(--sc-kit--field--height--md));
203
- --_dp--padding-inline: var(--sc-kit--date-picker--padding-inline, var(--sc-kit--field--padding-inline--md));
202
+ --_dp--height: var(--sc-kit--date-picker--height, var(--_dp--size-height, var(--sc-kit--field--height--md)));
203
+ --_dp--padding-inline: var(--sc-kit--date-picker--padding-inline, var(--_dp--size-padding-inline, var(--sc-kit--field--padding-inline--md)));
204
204
  --_dp--gap: var(--sc-kit--date-picker--gap, var(--sc-kit--space--2));
205
205
  --_dp--width: var(--sc-kit--date-picker--width, 100%);
206
206
  --_dp--background: var(--sc-kit--date-picker--background, var(--sc-kit--color--bg--field));
207
207
  --_dp--background-disabled: var(--sc-kit--date-picker--background--disabled, var(--sc-kit--color--bg--field-alt));
208
208
  --_dp--border-color: var(--sc-kit--date-picker--border-color, var(--sc-kit--color--border--field));
209
209
  --_dp--border-color-error: var(--sc-kit--date-picker--border-color--error, var(--sc-kit--color--danger));
210
- --_dp--border-radius: var(--sc-kit--date-picker--border-radius, var(--sc-kit--radius--sm));
210
+ --_dp--border-radius: var(--sc-kit--date-picker--border-radius, var(--_dp--size-border-radius, var(--sc-kit--field--border-radius--md)));
211
211
  --_dp--underline-color: var(--sc-kit--date-picker--underline-color, transparent);
212
- --_dp--font-size: var(--sc-kit--date-picker--font-size, var(--sc-kit--font-size--md));
212
+ --_dp--font-size: var(--sc-kit--date-picker--font-size, var(--_dp--size-font-size, var(--sc-kit--font-size--md)));
213
213
  --_dp--color: var(--sc-kit--date-picker--color, var(--sc-kit--color--text--primary));
214
214
  --_dp--placeholder-color: var(--sc-kit--date-picker--placeholder--color, var(--sc-kit--color--text--placeholder));
215
215
  --_dp--icon-color: var(--sc-kit--date-picker--icon--color, var(--sc-kit--color--text--muted));
216
- --_dp--icon-size: var(--sc-kit--date-picker--icon--size, var(--sc-kit--field--icon--size--md));
216
+ --_dp--icon-size: var(--sc-kit--date-picker--icon--size, var(--_dp--size-icon-size, var(--sc-kit--field--icon--size--md)));
217
217
  --_--input-affordance--opacity: 0;
218
218
  --_--input-affordance--scale: 0;
219
219
  }
@@ -232,22 +232,25 @@ DatePicker — single-day calendar picker built on Floating UI for positioning.
232
232
  --_--input-affordance--scale: 1;
233
233
  }
234
234
  .date-picker--sm {
235
- --sc-kit--date-picker--height: var(--sc-kit--field--height--sm);
236
- --sc-kit--date-picker--padding-inline: var(--sc-kit--field--padding-inline--sm);
237
- --sc-kit--date-picker--font-size: var(--sc-kit--font-size--sm);
238
- --sc-kit--date-picker--icon--size: var(--sc-kit--field--icon--size--sm);
235
+ --_dp--size-height: var(--sc-kit--field--height--sm);
236
+ --_dp--size-padding-inline: var(--sc-kit--field--padding-inline--sm);
237
+ --_dp--size-font-size: var(--sc-kit--font-size--sm);
238
+ --_dp--size-icon-size: var(--sc-kit--field--icon--size--sm);
239
+ --_dp--size-border-radius: var(--sc-kit--field--border-radius--sm);
239
240
  }
240
241
  .date-picker--md {
241
- --sc-kit--date-picker--height: var(--sc-kit--field--height--md);
242
- --sc-kit--date-picker--padding-inline: var(--sc-kit--field--padding-inline--md);
243
- --sc-kit--date-picker--font-size: var(--sc-kit--font-size--md);
244
- --sc-kit--date-picker--icon--size: var(--sc-kit--field--icon--size--md);
242
+ --_dp--size-height: var(--sc-kit--field--height--md);
243
+ --_dp--size-padding-inline: var(--sc-kit--field--padding-inline--md);
244
+ --_dp--size-font-size: var(--sc-kit--font-size--md);
245
+ --_dp--size-icon-size: var(--sc-kit--field--icon--size--md);
246
+ --_dp--size-border-radius: var(--sc-kit--field--border-radius--md);
245
247
  }
246
248
  .date-picker--lg {
247
- --sc-kit--date-picker--height: var(--sc-kit--field--height--lg);
248
- --sc-kit--date-picker--padding-inline: var(--sc-kit--field--padding-inline--lg);
249
- --sc-kit--date-picker--font-size: var(--sc-kit--font-size--lg);
250
- --sc-kit--date-picker--icon--size: var(--sc-kit--field--icon--size--lg);
249
+ --_dp--size-height: var(--sc-kit--field--height--lg);
250
+ --_dp--size-padding-inline: var(--sc-kit--field--padding-inline--lg);
251
+ --_dp--size-font-size: var(--sc-kit--font-size--lg);
252
+ --_dp--size-icon-size: var(--sc-kit--field--icon--size--lg);
253
+ --_dp--size-border-radius: var(--sc-kit--field--border-radius--md);
251
254
  }
252
255
  .date-picker--open {
253
256
  --sc-kit--date-picker--underline-color: var(--sc-kit--color--accent);
@@ -69,7 +69,7 @@ type Props = ClearableProps | RequiredProps;
69
69
  * | `--sc-kit--date-picker--background--disabled` | Trigger background when disabled | `var(--sc-kit--color--bg--field-alt)` |
70
70
  * | `--sc-kit--date-picker--border-color` | Trigger border color | `var(--sc-kit--color--border--field)` |
71
71
  * | `--sc-kit--date-picker--border-color--error` | Trigger border color in error state | `var(--sc-kit--color--danger)` |
72
- * | `--sc-kit--date-picker--border-radius` | Trigger border radius | `var(--sc-kit--radius--sm)` |
72
+ * | `--sc-kit--date-picker--border-radius` | Trigger border radius | per size — `sm` 4px, `md`/`lg` 6px |
73
73
  * | `--sc-kit--date-picker--underline-color` | Inset bottom-underline indicator (transparent default, accent when open, danger on error) | `transparent` |
74
74
  * | `--sc-kit--date-picker--font-size` | Trigger font size | per size |
75
75
  * | `--sc-kit--date-picker--color` | Trigger text color | `var(--sc-kit--color--text--primary)` |
@@ -1,6 +1,6 @@
1
1
  <script lang="ts" generics="T extends Record<string, unknown>, K extends keyof T & string">import { Validatable } from '../validatable';
2
2
  import { default as FormField } from './cmp.form-field.svelte';
3
- let { handler, name, label, required = false, validateOn, debounceMs, disableTouchedTracking, reserveErrorSpace, on, children } = $props();
3
+ let { handler, name, label, required = false, validateOn, debounceMs, disableTouchedTracking, reserveErrorSpace = false, on, children } = $props();
4
4
  </script>
5
5
 
6
6
  <FormField label={label} required={required}>
@@ -17,7 +17,7 @@ declare function $$render<T extends Record<string, unknown>, K extends keyof T &
17
17
  debounceMs?: number;
18
18
  /** Show errors before the field has been touched. Forwarded to `<Validatable>`. @default false */
19
19
  disableTouchedTracking?: boolean;
20
- /** Reserve space below the field so a toggling error doesn't shift layout. Forwarded to `<Validatable>`. @default true */
20
+ /** Reserve space below the field so a toggling error doesn't shift layout. Forwarded to `<Validatable>` (whose own default is `true`). @default false */
21
21
  reserveErrorSpace?: boolean;
22
22
  /** Extra consumer callbacks. Forwarded to `<Validatable>`. */
23
23
  on?: {
@@ -161,7 +161,7 @@ or the clear button (see `HandleInput`'s availability pill).
161
161
  | `--sc-kit--input--border-color` | Border color | `var(--sc-kit--color--border--field)` |
162
162
  | `--sc-kit--input--border-color--hover` | Border color on hover | `var(--sc-kit--color--border--strong)` |
163
163
  | `--sc-kit--input--border-color--error` | Border color in error state | `var(--sc-kit--color--danger)` |
164
- | `--sc-kit--input--border-radius` | Border radius | `var(--sc-kit--radius--sm)` |
164
+ | `--sc-kit--input--border-radius` | Border radius | per size — `sm` 4px, `md`/`lg` 6px |
165
165
  | `--sc-kit--input--underline-color` | Inset bottom-underline indicator (transparent default, accent on focus-within, danger on error) | `transparent` |
166
166
  | `--sc-kit--input--font-size` | Text font size | per size |
167
167
  | `--sc-kit--input--color` | Text color | `var(--sc-kit--color--text--primary)` |
@@ -172,8 +172,8 @@ or the clear button (see `HandleInput`'s availability pill).
172
172
 
173
173
  <style>.input {
174
174
  /* Public CSS API resolved with defaults (this block IS the API documentation) */
175
- --_in--height: var(--sc-kit--input--height, var(--sc-kit--field--height--md));
176
- --_in--padding-inline: var(--sc-kit--input--padding-inline, var(--sc-kit--field--padding-inline--md));
175
+ --_in--height: var(--sc-kit--input--height, var(--_in--size-height, var(--sc-kit--field--height--md)));
176
+ --_in--padding-inline: var(--sc-kit--input--padding-inline, var(--_in--size-padding-inline, var(--sc-kit--field--padding-inline--md)));
177
177
  --_in--gap: var(--sc-kit--input--gap, var(--sc-kit--space--2));
178
178
  --_in--width: var(--sc-kit--input--width, 100%);
179
179
  --_in--background: var(--sc-kit--input--background, var(--sc-kit--color--bg--field));
@@ -181,13 +181,13 @@ or the clear button (see `HandleInput`'s availability pill).
181
181
  --_in--border-color: var(--sc-kit--input--border-color, var(--sc-kit--color--border--field));
182
182
  --_in--border-color-hover: var(--sc-kit--input--border-color--hover, var(--sc-kit--color--border--strong));
183
183
  --_in--border-color-error: var(--sc-kit--input--border-color--error, var(--sc-kit--color--danger));
184
- --_in--border-radius: var(--sc-kit--input--border-radius, var(--sc-kit--radius--sm));
184
+ --_in--border-radius: var(--sc-kit--input--border-radius, var(--_in--size-border-radius, var(--sc-kit--field--border-radius--md)));
185
185
  --_in--underline-color: var(--sc-kit--input--underline-color, transparent);
186
- --_in--font-size: var(--sc-kit--input--font-size, var(--sc-kit--font-size--md));
186
+ --_in--font-size: var(--sc-kit--input--font-size, var(--_in--size-font-size, var(--sc-kit--font-size--md)));
187
187
  --_in--color: var(--sc-kit--input--color, var(--sc-kit--color--text--primary));
188
188
  --_in--placeholder-color: var(--sc-kit--input--placeholder--color, var(--sc-kit--color--text--placeholder));
189
189
  --_in--icon-color: var(--sc-kit--input--icon--color, var(--sc-kit--color--text--muted));
190
- --_in--icon-size: var(--sc-kit--input--icon--size, var(--sc-kit--field--icon--size--md));
190
+ --_in--icon-size: var(--sc-kit--input--icon--size, var(--_in--size-icon-size, var(--sc-kit--field--icon--size--md)));
191
191
  --_--input-affordance--opacity: 0;
192
192
  --_--input-affordance--scale: 0;
193
193
  }
@@ -225,22 +225,25 @@ or the clear button (see `HandleInput`'s availability pill).
225
225
  transition: background-color var(--sc-kit--duration--base) var(--sc-kit--ease--default);
226
226
  }
227
227
  .input--sm {
228
- --sc-kit--input--height: var(--sc-kit--field--height--sm);
229
- --sc-kit--input--padding-inline: var(--sc-kit--field--padding-inline--sm);
230
- --sc-kit--input--font-size: var(--sc-kit--font-size--sm);
231
- --sc-kit--input--icon--size: var(--sc-kit--field--icon--size--sm);
228
+ --_in--size-height: var(--sc-kit--field--height--sm);
229
+ --_in--size-padding-inline: var(--sc-kit--field--padding-inline--sm);
230
+ --_in--size-font-size: var(--sc-kit--font-size--sm);
231
+ --_in--size-icon-size: var(--sc-kit--field--icon--size--sm);
232
+ --_in--size-border-radius: var(--sc-kit--field--border-radius--sm);
232
233
  }
233
234
  .input--md {
234
- --sc-kit--input--height: var(--sc-kit--field--height--md);
235
- --sc-kit--input--padding-inline: var(--sc-kit--field--padding-inline--md);
236
- --sc-kit--input--font-size: var(--sc-kit--font-size--md);
237
- --sc-kit--input--icon--size: var(--sc-kit--field--icon--size--md);
235
+ --_in--size-height: var(--sc-kit--field--height--md);
236
+ --_in--size-padding-inline: var(--sc-kit--field--padding-inline--md);
237
+ --_in--size-font-size: var(--sc-kit--font-size--md);
238
+ --_in--size-icon-size: var(--sc-kit--field--icon--size--md);
239
+ --_in--size-border-radius: var(--sc-kit--field--border-radius--md);
238
240
  }
239
241
  .input--lg {
240
- --sc-kit--input--height: var(--sc-kit--field--height--lg);
241
- --sc-kit--input--padding-inline: var(--sc-kit--field--padding-inline--lg);
242
- --sc-kit--input--font-size: var(--sc-kit--font-size--lg);
243
- --sc-kit--input--icon--size: var(--sc-kit--field--icon--size--lg);
242
+ --_in--size-height: var(--sc-kit--field--height--lg);
243
+ --_in--size-padding-inline: var(--sc-kit--field--padding-inline--lg);
244
+ --_in--size-font-size: var(--sc-kit--font-size--lg);
245
+ --_in--size-icon-size: var(--sc-kit--field--icon--size--lg);
246
+ --_in--size-border-radius: var(--sc-kit--field--border-radius--md);
244
247
  }
245
248
  .input:where(:hover:not(:focus-within)) {
246
249
  --sc-kit--input--border-color: var(--_in--border-color-hover);
@@ -22,7 +22,7 @@ import type { InputProps } from './types';
22
22
  * | `--sc-kit--input--border-color` | Border color | `var(--sc-kit--color--border--field)` |
23
23
  * | `--sc-kit--input--border-color--hover` | Border color on hover | `var(--sc-kit--color--border--strong)` |
24
24
  * | `--sc-kit--input--border-color--error` | Border color in error state | `var(--sc-kit--color--danger)` |
25
- * | `--sc-kit--input--border-radius` | Border radius | `var(--sc-kit--radius--sm)` |
25
+ * | `--sc-kit--input--border-radius` | Border radius | per size — `sm` 4px, `md`/`lg` 6px |
26
26
  * | `--sc-kit--input--underline-color` | Inset bottom-underline indicator (transparent default, accent on focus-within, danger on error) | `transparent` |
27
27
  * | `--sc-kit--input--font-size` | Text font size | per size |
28
28
  * | `--sc-kit--input--color` | Text color | `var(--sc-kit--color--text--primary)` |
@@ -197,7 +197,7 @@ requires a non-null value. CSS API mirrors `Input` for visual-language compatibi
197
197
  | `--sc-kit--numeral-input--border-color` | Border color | `var(--sc-kit--color--border--field)` |
198
198
  | `--sc-kit--numeral-input--border-color--hover` | Border color on hover | `var(--sc-kit--color--border--strong)` |
199
199
  | `--sc-kit--numeral-input--border-color--error` | Border color in error state | `var(--sc-kit--color--danger)` |
200
- | `--sc-kit--numeral-input--border-radius` | Border radius | `var(--sc-kit--radius--sm)` |
200
+ | `--sc-kit--numeral-input--border-radius` | Border radius | per size — `sm` 4px, `md`/`lg` 6px |
201
201
  | `--sc-kit--numeral-input--underline-color` | Inset bottom-underline indicator | `transparent` |
202
202
  | `--sc-kit--numeral-input--font-size` | Text font size | per size |
203
203
  | `--sc-kit--numeral-input--color` | Text color | `var(--sc-kit--color--text--primary)` |
@@ -207,8 +207,8 @@ requires a non-null value. CSS API mirrors `Input` for visual-language compatibi
207
207
  -->
208
208
 
209
209
  <style>.numeral-input {
210
- --_ni--height: var(--sc-kit--numeral-input--height, var(--sc-kit--field--height--md));
211
- --_ni--padding-inline: var(--sc-kit--numeral-input--padding-inline, var(--sc-kit--field--padding-inline--md));
210
+ --_ni--height: var(--sc-kit--numeral-input--height, var(--_ni--size-height, var(--sc-kit--field--height--md)));
211
+ --_ni--padding-inline: var(--sc-kit--numeral-input--padding-inline, var(--_ni--size-padding-inline, var(--sc-kit--field--padding-inline--md)));
212
212
  --_ni--gap: var(--sc-kit--numeral-input--gap, var(--sc-kit--space--2));
213
213
  --_ni--width: var(--sc-kit--numeral-input--width, 100%);
214
214
  --_ni--background: var(--sc-kit--numeral-input--background, var(--sc-kit--color--bg--field));
@@ -216,13 +216,13 @@ requires a non-null value. CSS API mirrors `Input` for visual-language compatibi
216
216
  --_ni--border-color: var(--sc-kit--numeral-input--border-color, var(--sc-kit--color--border--field));
217
217
  --_ni--border-color-hover: var(--sc-kit--numeral-input--border-color--hover, var(--sc-kit--color--border--strong));
218
218
  --_ni--border-color-error: var(--sc-kit--numeral-input--border-color--error, var(--sc-kit--color--danger));
219
- --_ni--border-radius: var(--sc-kit--numeral-input--border-radius, var(--sc-kit--radius--sm));
219
+ --_ni--border-radius: var(--sc-kit--numeral-input--border-radius, var(--_ni--size-border-radius, var(--sc-kit--field--border-radius--md)));
220
220
  --_ni--underline-color: var(--sc-kit--numeral-input--underline-color, transparent);
221
- --_ni--font-size: var(--sc-kit--numeral-input--font-size, var(--sc-kit--font-size--md));
221
+ --_ni--font-size: var(--sc-kit--numeral-input--font-size, var(--_ni--size-font-size, var(--sc-kit--font-size--md)));
222
222
  --_ni--color: var(--sc-kit--numeral-input--color, var(--sc-kit--color--text--primary));
223
223
  --_ni--placeholder-color: var(--sc-kit--numeral-input--placeholder--color, var(--sc-kit--color--text--placeholder));
224
224
  --_ni--icon-color: var(--sc-kit--numeral-input--icon--color, var(--sc-kit--color--text--muted));
225
- --_ni--icon-size: var(--sc-kit--numeral-input--icon--size, var(--sc-kit--field--icon--size--md));
225
+ --_ni--icon-size: var(--sc-kit--numeral-input--icon--size, var(--_ni--size-icon-size, var(--sc-kit--field--icon--size--md)));
226
226
  --_--input-affordance--opacity: 0;
227
227
  --_--input-affordance--scale: 0;
228
228
  }
@@ -249,22 +249,25 @@ requires a non-null value. CSS API mirrors `Input` for visual-language compatibi
249
249
  transition: background-color var(--sc-kit--duration--base) var(--sc-kit--ease--default), border-color var(--sc-kit--duration--base) var(--sc-kit--ease--default), color var(--sc-kit--duration--base) var(--sc-kit--ease--default), box-shadow var(--sc-kit--duration--base) var(--sc-kit--ease--default);
250
250
  }
251
251
  .numeral-input--sm {
252
- --sc-kit--numeral-input--height: var(--sc-kit--field--height--sm);
253
- --sc-kit--numeral-input--padding-inline: var(--sc-kit--field--padding-inline--sm);
254
- --sc-kit--numeral-input--font-size: var(--sc-kit--font-size--sm);
255
- --sc-kit--numeral-input--icon--size: var(--sc-kit--field--icon--size--sm);
252
+ --_ni--size-height: var(--sc-kit--field--height--sm);
253
+ --_ni--size-padding-inline: var(--sc-kit--field--padding-inline--sm);
254
+ --_ni--size-font-size: var(--sc-kit--font-size--sm);
255
+ --_ni--size-icon-size: var(--sc-kit--field--icon--size--sm);
256
+ --_ni--size-border-radius: var(--sc-kit--field--border-radius--sm);
256
257
  }
257
258
  .numeral-input--md {
258
- --sc-kit--numeral-input--height: var(--sc-kit--field--height--md);
259
- --sc-kit--numeral-input--padding-inline: var(--sc-kit--field--padding-inline--md);
260
- --sc-kit--numeral-input--font-size: var(--sc-kit--font-size--md);
261
- --sc-kit--numeral-input--icon--size: var(--sc-kit--field--icon--size--md);
259
+ --_ni--size-height: var(--sc-kit--field--height--md);
260
+ --_ni--size-padding-inline: var(--sc-kit--field--padding-inline--md);
261
+ --_ni--size-font-size: var(--sc-kit--font-size--md);
262
+ --_ni--size-icon-size: var(--sc-kit--field--icon--size--md);
263
+ --_ni--size-border-radius: var(--sc-kit--field--border-radius--md);
262
264
  }
263
265
  .numeral-input--lg {
264
- --sc-kit--numeral-input--height: var(--sc-kit--field--height--lg);
265
- --sc-kit--numeral-input--padding-inline: var(--sc-kit--field--padding-inline--lg);
266
- --sc-kit--numeral-input--font-size: var(--sc-kit--font-size--lg);
267
- --sc-kit--numeral-input--icon--size: var(--sc-kit--field--icon--size--lg);
266
+ --_ni--size-height: var(--sc-kit--field--height--lg);
267
+ --_ni--size-padding-inline: var(--sc-kit--field--padding-inline--lg);
268
+ --_ni--size-font-size: var(--sc-kit--font-size--lg);
269
+ --_ni--size-icon-size: var(--sc-kit--field--icon--size--lg);
270
+ --_ni--size-border-radius: var(--sc-kit--field--border-radius--md);
268
271
  }
269
272
  .numeral-input:where(:hover:not(:focus-within)) {
270
273
  --sc-kit--numeral-input--border-color: var(--_ni--border-color-hover);
@@ -81,7 +81,7 @@ type Props = ClearableProps | RequiredProps;
81
81
  * | `--sc-kit--numeral-input--border-color` | Border color | `var(--sc-kit--color--border--field)` |
82
82
  * | `--sc-kit--numeral-input--border-color--hover` | Border color on hover | `var(--sc-kit--color--border--strong)` |
83
83
  * | `--sc-kit--numeral-input--border-color--error` | Border color in error state | `var(--sc-kit--color--danger)` |
84
- * | `--sc-kit--numeral-input--border-radius` | Border radius | `var(--sc-kit--radius--sm)` |
84
+ * | `--sc-kit--numeral-input--border-radius` | Border radius | per size — `sm` 4px, `md`/`lg` 6px |
85
85
  * | `--sc-kit--numeral-input--underline-color` | Inset bottom-underline indicator | `transparent` |
86
86
  * | `--sc-kit--numeral-input--font-size` | Text font size | per size |
87
87
  * | `--sc-kit--numeral-input--color` | Text color | `var(--sc-kit--color--text--primary)` |
@@ -0,0 +1,131 @@
1
+ <script lang="ts">import { Icon } from '../icon';
2
+ import ToolbarDivider from './cmp.toolbar-divider.svelte';
3
+ import ToolbarOption from './cmp.toolbar-option.svelte';
4
+ import ToolbarSectionTitle from './cmp.toolbar-section-title.svelte';
5
+ import { ReorderableCheckboxListLocalization } from './reorderable-checkbox-list-localization';
6
+ import IconReorderDotsVertical from '@fluentui/svg-icons/icons/re_order_dots_vertical_20_regular.svg?raw';
7
+ import { flip } from 'svelte/animate';
8
+ import { dndzone } from 'svelte-dnd-action';
9
+ let { items, title, standard, size = 'md', showClearAll = true, on } = $props();
10
+ const localization = new ReorderableCheckboxListLocalization();
11
+ const reorderableItems = $derived(items.filter((i) => !i.fixed));
12
+ const fixedItems = $derived(items.filter((i) => i.fixed));
13
+ const toReorderable = ({ id, label, enabled }) => ({ id, label, enabled });
14
+ const toFixed = ({ id, label, enabled, fixed }) => ({ id, label, enabled, fixed });
15
+ let dndItems = $state.raw([]);
16
+ $effect(() => {
17
+ dndItems = reorderableItems.map(toReorderable);
18
+ });
19
+ const flipDurationMs = 200;
20
+ const emitChange = (reordered) => {
21
+ on.change([...fixedItems.map(toFixed), ...reordered.map(toReorderable)]);
22
+ };
23
+ const handleConsider = (e) => {
24
+ dndItems = e.detail.items;
25
+ };
26
+ const handleFinalize = (e) => {
27
+ emitChange(e.detail.items);
28
+ };
29
+ const handleToggle = (id, enabled) => {
30
+ emitChange(dndItems.map((i) => (i.id === id ? { ...i, enabled } : i)));
31
+ };
32
+ const handleFixedToggle = (id, enabled) => {
33
+ const updatedFixed = fixedItems.map((item) => toFixed(item.id === id ? { ...item, enabled } : item));
34
+ on.change([...updatedFixed, ...dndItems.map(toReorderable)]);
35
+ };
36
+ const anyEnabled = $derived(items.some((i) => i.enabled));
37
+ const clearAll = () => {
38
+ on.change([...fixedItems.map((item) => toFixed({ ...item, enabled: false })), ...dndItems.map((item) => toReorderable({ ...item, enabled: false }))]);
39
+ };
40
+ const allEnabled = $derived(items.length > 0 && items.every((i) => i.enabled));
41
+ const matchesStandard = $derived(!!standard && items.length === standard.length && items.every((item, idx) => item.id === standard[idx].id && item.enabled === standard[idx].enabled));
42
+ const standardCoversAll = $derived(!!standard && standard.length > 0 && standard.every((i) => i.enabled));
43
+ const selectStandard = () => {
44
+ if (standard) {
45
+ on.change(standard.map((item) => (item.fixed ? toFixed(item) : toReorderable(item))));
46
+ }
47
+ };
48
+ const enableAll = () => {
49
+ on.change([...fixedItems.map((item) => toFixed({ ...item, enabled: true })), ...dndItems.map((item) => toReorderable({ ...item, enabled: true }))]);
50
+ };
51
+ </script>
52
+
53
+ <div class="reorderable-checkbox-list">
54
+ {#if standard}
55
+ <ToolbarOption size={size} selectable={{ selected: matchesStandard, display: 'checkmark' }} on={{ click: selectStandard }}
56
+ >{localization.standard}</ToolbarOption>
57
+ {#if !standardCoversAll}
58
+ <ToolbarOption size={size} selectable={{ selected: allEnabled, display: 'checkmark' }} on={{ click: enableAll }}>{localization.allFields}</ToolbarOption>
59
+ {/if}
60
+ {/if}
61
+ {#if title}
62
+ <ToolbarSectionTitle>{title}</ToolbarSectionTitle>
63
+ {/if}
64
+ {#each fixedItems as item (item.id)}
65
+ <ToolbarOption size={size} selectable={{ selected: item.enabled, display: 'checkbox' }} on={{ click: () => handleFixedToggle(item.id, !item.enabled) }}>
66
+ {#snippet prepend()}
67
+ <span class="reorderable-checkbox-list__handle reorderable-checkbox-list__handle--hidden" aria-hidden="true"
68
+ ><Icon src={IconReorderDotsVertical} /></span>
69
+ {/snippet}
70
+ {item.label}
71
+ </ToolbarOption>
72
+ {/each}
73
+ <div
74
+ class="reorderable-checkbox-list__dnd"
75
+ use:dndzone={{ items: dndItems, dropTargetStyle: {}, flipDurationMs, morphDisabled: true }}
76
+ onconsider={handleConsider}
77
+ onfinalize={handleFinalize}>
78
+ {#each dndItems as item (item.id)}
79
+ <div class="reorderable-checkbox-list__item" animate:flip={{ duration: flipDurationMs }}>
80
+ <ToolbarOption size={size} selectable={{ selected: item.enabled, display: 'checkbox' }} on={{ click: () => handleToggle(item.id, !item.enabled) }}>
81
+ {#snippet prepend()}
82
+ <span class="reorderable-checkbox-list__handle"><Icon src={IconReorderDotsVertical} /></span>
83
+ {/snippet}
84
+ {item.label}
85
+ </ToolbarOption>
86
+ </div>
87
+ {/each}
88
+ </div>
89
+ {#if showClearAll && anyEnabled}
90
+ <ToolbarDivider />
91
+ <ToolbarOption size={size} variant="muted" on={{ click: clearAll }}>{localization.clearAll}</ToolbarOption>
92
+ {/if}
93
+ </div>
94
+
95
+ <!--
96
+ @component
97
+ A reorderable checklist: each row is a draggable `ToolbarOption` checkbox preceded by a left drag handle.
98
+ Clicking a row toggles its `enabled`; dragging reorders. Items flagged `fixed` render above the drag zone
99
+ with a hidden handle (non-reorderable, still toggleable). Pass `title` for a section header, and `standard`
100
+ (a canonical order + enabled reference) to render `Standard` / `All fields` preset rows with auto-detected
101
+ active state. A default `Clear all` footer shows while any item is enabled — set `showClearAll={false}` to
102
+ remove it.
103
+
104
+ ### CSS Custom Properties
105
+ | Property | Description | Default |
106
+ |---|---|---|
107
+ | `--sc-kit--reorderable-checkbox-list--handle--color` | Drag handle icon color | `var(--sc-kit--color--text--muted)` |
108
+ -->
109
+
110
+ <style>.reorderable-checkbox-list {
111
+ --_rcl--handle--color: var(--sc-kit--reorderable-checkbox-list--handle--color, var(--sc-kit--color--text--muted));
112
+ display: flex;
113
+ flex-direction: column;
114
+ }
115
+ .reorderable-checkbox-list__dnd {
116
+ display: flex;
117
+ flex-direction: column;
118
+ }
119
+ .reorderable-checkbox-list__handle {
120
+ --sc-kit--icon--size: 1rem;
121
+ --sc-kit--icon--color: var(--_rcl--handle--color);
122
+ display: inline-flex;
123
+ align-items: center;
124
+ cursor: grab;
125
+ }
126
+ .reorderable-checkbox-list__handle:active {
127
+ cursor: grabbing;
128
+ }
129
+ .reorderable-checkbox-list__handle--hidden {
130
+ visibility: hidden;
131
+ }</style>
@@ -0,0 +1,31 @@
1
+ import type { ReorderableCheckboxItem } from './types';
2
+ type Props = {
3
+ items: ReorderableCheckboxItem[];
4
+ /** Optional section title above the list. */
5
+ title?: string;
6
+ /** Reference `Standard` config (canonical order + enabled). When set, `Standard` / `All fields` preset rows render on top with auto-detected active state. */
7
+ standard?: ReorderableCheckboxItem[];
8
+ /** Row size preset — forwarded to `ToolbarOption`. @default 'md' */
9
+ size?: 'sm' | 'md';
10
+ /** Show the default `Clear all` footer (unchecks every item) while something is enabled. @default true */
11
+ showClearAll?: boolean;
12
+ on: {
13
+ change: (items: ReorderableCheckboxItem[]) => void;
14
+ };
15
+ };
16
+ /**
17
+ * A reorderable checklist: each row is a draggable `ToolbarOption` checkbox preceded by a left drag handle.
18
+ * Clicking a row toggles its `enabled`; dragging reorders. Items flagged `fixed` render above the drag zone
19
+ * with a hidden handle (non-reorderable, still toggleable). Pass `title` for a section header, and `standard`
20
+ * (a canonical order + enabled reference) to render `Standard` / `All fields` preset rows with auto-detected
21
+ * active state. A default `Clear all` footer shows while any item is enabled — set `showClearAll={false}` to
22
+ * remove it.
23
+ *
24
+ * ### CSS Custom Properties
25
+ * | Property | Description | Default |
26
+ * |---|---|---|
27
+ * | `--sc-kit--reorderable-checkbox-list--handle--color` | Drag handle icon color | `var(--sc-kit--color--text--muted)` |
28
+ */
29
+ declare const Cmp: import("svelte").Component<Props, {}, "">;
30
+ type Cmp = ReturnType<typeof Cmp>;
31
+ export default Cmp;
@@ -0,0 +1,14 @@
1
+ <script lang="ts">import ToolbarOption from './cmp.toolbar-option.svelte';
2
+ const { checked, size = 'md', disabled = false, children, on } = $props();
3
+ </script>
4
+
5
+ <ToolbarOption size={size} disabled={disabled} selectable={{ selected: checked, display: 'checkbox' }} on={{ click: () => on?.change?.(!checked) }}>
6
+ {@render children()}
7
+ </ToolbarOption>
8
+
9
+ <!--
10
+ @component
11
+ A checkbox row for toolbar dropdowns — a thin wrapper over `ToolbarOption` with a leading checkbox
12
+ glyph. The whole row is the click target; clicking toggles `checked` through `on.change`. Styling and
13
+ sizing come from `ToolbarOption`.
14
+ -->
@@ -0,0 +1,19 @@
1
+ import type { Snippet } from 'svelte';
2
+ type Props = {
3
+ checked: boolean;
4
+ /** Row density — forwarded to `ToolbarOption`. @default 'md' */
5
+ size?: 'sm' | 'md';
6
+ disabled?: boolean;
7
+ children: Snippet;
8
+ on?: {
9
+ change?: (value: boolean) => void;
10
+ };
11
+ };
12
+ /**
13
+ * A checkbox row for toolbar dropdowns — a thin wrapper over `ToolbarOption` with a leading checkbox
14
+ * glyph. The whole row is the click target; clicking toggles `checked` through `on.change`. Styling and
15
+ * sizing come from `ToolbarOption`.
16
+ */
17
+ declare const Cmp: import("svelte").Component<Props, {}, "">;
18
+ type Cmp = ReturnType<typeof Cmp>;
19
+ export default Cmp;
@@ -0,0 +1,19 @@
1
+ <div class="toolbar-divider"></div>
2
+
3
+ <!--
4
+ @component
5
+ A thin horizontal separator for toolbar dropdown panels — use between option groups or above a
6
+ footer. Compose it freely inside a `ToolbarFilterSelect` footer snippet.
7
+
8
+ ### CSS Custom Properties
9
+ | Property | Description | Default |
10
+ |---|---|---|
11
+ | `--sc-kit--toolbar-divider--color` | Line color | `var(--sc-kit--color--border)` |
12
+ -->
13
+
14
+ <style>.toolbar-divider {
15
+ flex-shrink: 0;
16
+ block-size: 1px;
17
+ margin: var(--sc-kit--space--1) var(--sc-kit--space--2);
18
+ background: var(--sc-kit--toolbar-divider--color, var(--sc-kit--color--border));
19
+ }</style>