@marianmeres/stuic 3.72.2 → 3.74.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 (31) hide show
  1. package/AGENTS.md +2 -2
  2. package/API.md +30 -0
  3. package/README.md +1 -1
  4. package/dist/components/Book/BookResponsive.svelte +2 -1
  5. package/dist/components/Input/FieldPhoneNumber.svelte +2 -3
  6. package/dist/components/LoginForm/LoginForm.svelte +26 -64
  7. package/dist/components/LoginForm/LoginForm.svelte.d.ts +0 -1
  8. package/dist/components/LoginForm/LoginFormModal.svelte +1 -2
  9. package/dist/components/LoginForm/index.css +12 -29
  10. package/dist/components/LoginOrRegisterForm/LoginOrRegisterForm.svelte +9 -1
  11. package/dist/components/LoginOrRegisterForm/LoginOrRegisterForm.svelte.d.ts +6 -1
  12. package/dist/components/LoginOrRegisterForm/LoginOrRegisterFormModal.svelte +8 -0
  13. package/dist/components/LoginOrRegisterForm/LoginOrRegisterFormModal.svelte.d.ts +5 -0
  14. package/dist/components/LoginOrRegisterForm/index.css +3 -3
  15. package/dist/components/Pill/Pill.svelte +205 -0
  16. package/dist/components/Pill/Pill.svelte.d.ts +51 -0
  17. package/dist/components/Pill/README.md +211 -0
  18. package/dist/components/Pill/index.css +488 -0
  19. package/dist/components/Pill/index.d.ts +1 -0
  20. package/dist/components/Pill/index.js +1 -0
  21. package/dist/components/PricingTable/PricingTable.svelte +0 -2
  22. package/dist/components/RegisterForm/RegisterForm.svelte +1 -23
  23. package/dist/components/RegisterForm/RegisterForm.svelte.d.ts +0 -1
  24. package/dist/components/RegisterForm/RegisterFormModal.svelte +0 -1
  25. package/dist/components/RegisterForm/index.css +6 -16
  26. package/dist/index.css +1 -0
  27. package/dist/index.d.ts +1 -0
  28. package/dist/index.js +1 -0
  29. package/dist/mcp.js +1 -0
  30. package/docs/domains/components.md +2 -1
  31. package/package.json +1 -1
@@ -0,0 +1,488 @@
1
+ /* ============================================================================
2
+ PILL COMPONENT TOKENS
3
+ Override globally: :root { --stuic-pill-radius: 4px; }
4
+ Override locally: <Pill style="--stuic-pill-radius: 4px;">
5
+ ============================================================================ */
6
+
7
+ /* prettier-ignore */
8
+ :root {
9
+ /* Component-level customization tokens */
10
+ --stuic-pill-font-family: var(--font-sans);
11
+ --stuic-pill-font-weight: var(--font-weight-medium);
12
+
13
+ /* Focus ring (interactive variants) */
14
+ --stuic-pill-ring-width: 2px;
15
+ --stuic-pill-ring-offset: 0px;
16
+ --stuic-pill-ring-color: var(--stuic-color-ring);
17
+
18
+ /* Layout */
19
+ --stuic-pill-gap: 0.375rem;
20
+
21
+ /* Status dot */
22
+ --stuic-pill-dot-size: 0.5rem;
23
+
24
+ /* Size: sm */
25
+ --stuic-pill-padding-x-sm: 0.5rem;
26
+ --stuic-pill-padding-y-sm: 0.125rem;
27
+ --stuic-pill-font-size-sm: 0.75rem;
28
+ --stuic-pill-min-height-sm: 1.25rem;
29
+
30
+ /* Size: md */
31
+ --stuic-pill-padding-x-md: 0.625rem;
32
+ --stuic-pill-padding-y-md: 0.1875rem;
33
+ --stuic-pill-font-size-md: 0.875rem;
34
+ --stuic-pill-min-height-md: 1.5rem;
35
+
36
+ /* Size: lg */
37
+ --stuic-pill-padding-x-lg: 0.875rem;
38
+ --stuic-pill-padding-y-lg: 0.3125rem;
39
+ --stuic-pill-font-size-lg: 1rem;
40
+ --stuic-pill-min-height-lg: 1.875rem;
41
+ }
42
+
43
+ @layer components {
44
+ /* ============================================================================
45
+ BASE STYLES
46
+ ============================================================================ */
47
+
48
+ .stuic-pill {
49
+ /* Layout */
50
+ display: inline-flex;
51
+ align-items: center;
52
+ justify-content: center;
53
+ gap: var(--stuic-pill-gap);
54
+ vertical-align: middle;
55
+
56
+ /* Typography */
57
+ font-family: var(--stuic-pill-font-family);
58
+ font-weight: var(--stuic-pill-font-weight);
59
+ line-height: 1;
60
+ text-align: center;
61
+ text-decoration: none;
62
+ white-space: nowrap;
63
+
64
+ /* Box model */
65
+ border-width: var(--stuic-pill-border-width, var(--stuic-border-width));
66
+ border-style: solid;
67
+ border-radius: var(--stuic-pill-radius, var(--stuic-radius));
68
+
69
+ /* Interaction */
70
+ user-select: none;
71
+ -webkit-tap-highlight-color: transparent;
72
+ touch-action: manipulation;
73
+ transition:
74
+ background var(--stuic-pill-transition, var(--stuic-transition)),
75
+ color var(--stuic-pill-transition, var(--stuic-transition)),
76
+ border-color var(--stuic-pill-transition, var(--stuic-transition)),
77
+ opacity var(--stuic-pill-transition, var(--stuic-transition));
78
+
79
+ /* Colors - use internal vars set by intent/variant */
80
+ background: var(--_bg);
81
+ color: var(--_text);
82
+ border-color: var(--_border);
83
+ }
84
+
85
+ /* Non-interactive default cursor */
86
+ span.stuic-pill {
87
+ cursor: default;
88
+ }
89
+
90
+ /* Interactive elements */
91
+ a.stuic-pill,
92
+ button.stuic-pill {
93
+ cursor: pointer;
94
+ }
95
+
96
+ /* Focus styles (interactive variants) */
97
+ a.stuic-pill:focus-visible,
98
+ button.stuic-pill:focus-visible {
99
+ outline: var(--stuic-pill-ring-width) solid
100
+ var(--_ring, var(--stuic-pill-ring-color));
101
+ outline-offset: var(--stuic-pill-ring-offset);
102
+ }
103
+
104
+ /* Hover state (interactive variants) */
105
+ a.stuic-pill:hover:not(:disabled),
106
+ button.stuic-pill:hover:not(:disabled) {
107
+ background: var(--_bg-hover);
108
+ color: var(--_text-hover);
109
+ border-color: var(--_border-hover);
110
+ }
111
+
112
+ /* Active state (interactive variants) */
113
+ a.stuic-pill:active:not(:disabled),
114
+ button.stuic-pill:active:not(:disabled) {
115
+ background: var(--_bg-active);
116
+ color: var(--_text-active);
117
+ border-color: var(--_border-active);
118
+ }
119
+
120
+ /* Disabled state */
121
+ .stuic-pill:disabled,
122
+ .stuic-pill[aria-disabled="true"] {
123
+ opacity: 0.5;
124
+ cursor: not-allowed;
125
+ }
126
+
127
+ /* ============================================================================
128
+ SIZE VARIANTS
129
+ ============================================================================ */
130
+
131
+ .stuic-pill[data-size="sm"] {
132
+ padding: var(--stuic-pill-padding-y-sm) var(--stuic-pill-padding-x-sm);
133
+ font-size: var(--stuic-pill-font-size-sm);
134
+ min-height: var(--stuic-pill-min-height-sm);
135
+ }
136
+
137
+ .stuic-pill[data-size="md"] {
138
+ padding: var(--stuic-pill-padding-y-md) var(--stuic-pill-padding-x-md);
139
+ font-size: var(--stuic-pill-font-size-md);
140
+ min-height: var(--stuic-pill-min-height-md);
141
+ }
142
+
143
+ .stuic-pill[data-size="lg"] {
144
+ padding: var(--stuic-pill-padding-y-lg) var(--stuic-pill-padding-x-lg);
145
+ font-size: var(--stuic-pill-font-size-lg);
146
+ min-height: var(--stuic-pill-min-height-lg);
147
+ }
148
+
149
+ /* Dismissible pills: drop vertical padding — the X button already provides
150
+ visual height, extra padding-y just makes them oversized. */
151
+ .stuic-pill[data-dismissible="true"][data-size="sm"],
152
+ .stuic-pill[data-dismissible="true"][data-size="md"],
153
+ .stuic-pill[data-dismissible="true"][data-size="lg"] {
154
+ padding-top: 0;
155
+ padding-bottom: 0;
156
+ }
157
+
158
+ /* ============================================================================
159
+ INTENT COLOR MAPPING
160
+ ============================================================================ */
161
+
162
+ .stuic-pill:not([data-intent]) {
163
+ --_color: var(--stuic-color-muted);
164
+ --_color-hover: var(--stuic-color-muted-hover);
165
+ --_color-active: var(--stuic-color-muted-active);
166
+ --_fg: var(--stuic-color-foreground);
167
+ --_fg-hover: var(--stuic-color-foreground-hover);
168
+ --_fg-active: var(--stuic-color-foreground-active);
169
+ }
170
+
171
+ .stuic-pill[data-intent="primary"] {
172
+ --_color: var(--stuic-color-primary);
173
+ --_color-hover: var(--stuic-color-primary-hover);
174
+ --_color-active: var(--stuic-color-primary-active);
175
+ --_fg: var(--stuic-color-primary-foreground);
176
+ --_fg-hover: var(--stuic-color-primary-foreground-hover);
177
+ --_fg-active: var(--stuic-color-primary-foreground-active);
178
+ }
179
+
180
+ .stuic-pill[data-intent="accent"] {
181
+ --_color: var(--stuic-color-accent);
182
+ --_color-hover: var(--stuic-color-accent-hover);
183
+ --_color-active: var(--stuic-color-accent-active);
184
+ --_fg: var(--stuic-color-accent-foreground);
185
+ --_fg-hover: var(--stuic-color-accent-foreground-hover);
186
+ --_fg-active: var(--stuic-color-accent-foreground-active);
187
+ }
188
+
189
+ .stuic-pill[data-intent="destructive"] {
190
+ --_color: var(--stuic-color-destructive);
191
+ --_color-hover: var(--stuic-color-destructive-hover);
192
+ --_color-active: var(--stuic-color-destructive-active);
193
+ --_fg: var(--stuic-color-destructive-foreground);
194
+ --_fg-hover: var(--stuic-color-destructive-foreground-hover);
195
+ --_fg-active: var(--stuic-color-destructive-foreground-active);
196
+ }
197
+
198
+ .stuic-pill[data-intent="warning"] {
199
+ --_color: var(--stuic-color-warning);
200
+ --_color-hover: var(--stuic-color-warning-hover);
201
+ --_color-active: var(--stuic-color-warning-active);
202
+ --_fg: var(--stuic-color-warning-foreground);
203
+ --_fg-hover: var(--stuic-color-warning-foreground-hover);
204
+ --_fg-active: var(--stuic-color-warning-foreground-active);
205
+ }
206
+
207
+ .stuic-pill[data-intent="success"] {
208
+ --_color: var(--stuic-color-success);
209
+ --_color-hover: var(--stuic-color-success-hover);
210
+ --_color-active: var(--stuic-color-success-active);
211
+ --_fg: var(--stuic-color-success-foreground);
212
+ --_fg-hover: var(--stuic-color-success-foreground-hover);
213
+ --_fg-active: var(--stuic-color-success-foreground-active);
214
+ }
215
+
216
+ /* ============================================================================
217
+ VARIANT STYLES
218
+ ============================================================================ */
219
+
220
+ /* Solid: filled background with contrasting text */
221
+ .stuic-pill[data-variant="solid"] {
222
+ --_bg: var(--_color);
223
+ --_bg-hover: var(--_color-hover);
224
+ --_bg-active: var(--_color-active);
225
+ --_text: var(--_fg);
226
+ --_text-hover: var(--_fg-hover);
227
+ --_text-active: var(--_fg-active);
228
+ --_border: var(--_color);
229
+ --_border-hover: var(--_color-hover);
230
+ --_border-active: var(--_color-active);
231
+ }
232
+
233
+ /* Outline: transparent background with colored border and text */
234
+ .stuic-pill[data-variant="outline"] {
235
+ --_bg: transparent;
236
+ --_bg-hover: color-mix(in srgb, var(--_color) 10%, var(--stuic-color-background));
237
+ --_bg-active: color-mix(in srgb, var(--_color) 20%, var(--stuic-color-background));
238
+ --_text: var(--_color);
239
+ --_text-hover: var(--_color-hover);
240
+ --_text-active: var(--_color-active);
241
+ --_border: var(--_color);
242
+ --_border-hover: var(--_color-hover);
243
+ --_border-active: var(--_color-active);
244
+ }
245
+
246
+ /* Ghost: transparent background, colored text, subtle hover state */
247
+ .stuic-pill[data-variant="ghost"] {
248
+ --_bg: transparent;
249
+ --_bg-hover: color-mix(in srgb, var(--_color) 10%, var(--stuic-color-background));
250
+ --_bg-active: color-mix(in srgb, var(--_color) 20%, var(--stuic-color-background));
251
+ --_text: var(--_color);
252
+ --_text-hover: var(--_color-hover);
253
+ --_text-active: var(--_color-active);
254
+ --_border: transparent;
255
+ --_border-hover: transparent;
256
+ --_border-active: transparent;
257
+ }
258
+
259
+ /* Soft (default): muted background tint with colored text */
260
+ .stuic-pill[data-variant="soft"],
261
+ .stuic-pill:not([data-variant]) {
262
+ --_bg: color-mix(in srgb, var(--_color) 15%, var(--stuic-color-background));
263
+ --_bg-hover: color-mix(in srgb, var(--_color) 25%, var(--stuic-color-background));
264
+ --_bg-active: color-mix(in srgb, var(--_color) 35%, var(--stuic-color-background));
265
+ --_text: var(--_color);
266
+ --_text-hover: var(--_color-hover);
267
+ --_text-active: var(--_color-active);
268
+ --_border: transparent;
269
+ --_border-hover: transparent;
270
+ --_border-active: transparent;
271
+ }
272
+
273
+ /* Link: appears as inline text link, minimal styling */
274
+ .stuic-pill[data-variant="link"] {
275
+ --_bg: transparent;
276
+ --_bg-hover: transparent;
277
+ --_bg-active: transparent;
278
+ --_text: var(--_color);
279
+ --_text-hover: var(--_color-hover);
280
+ --_text-active: var(--_color-active);
281
+ --_border: transparent;
282
+ --_border-hover: transparent;
283
+ --_border-active: transparent;
284
+ text-decoration: underline;
285
+ text-underline-offset: 2px;
286
+ min-height: auto;
287
+ padding: 0;
288
+ }
289
+
290
+ /* ============================================================================
291
+ DEFAULT INTENT OVERRIDES
292
+ The default intent uses neutral role tokens — adjust per variant for legibility.
293
+ ============================================================================ */
294
+
295
+ .stuic-pill:not([data-intent])[data-variant="solid"] {
296
+ --_text: var(--stuic-color-foreground);
297
+ --_text-hover: var(--stuic-color-foreground-hover);
298
+ --_text-active: var(--stuic-color-foreground-active);
299
+ --_border: var(--stuic-color-border-hover);
300
+ --_border-hover: var(--stuic-color-border-active);
301
+ --_border-active: var(--stuic-color-border-active);
302
+ }
303
+
304
+ .stuic-pill:not([data-intent])[data-variant="outline"] {
305
+ --_text: var(--stuic-color-foreground);
306
+ --_text-hover: var(--stuic-color-foreground-hover);
307
+ --_text-active: var(--stuic-color-foreground-active);
308
+ --_border: var(--stuic-color-border-hover);
309
+ --_border-hover: var(--stuic-color-border-hover);
310
+ --_border-active: var(--stuic-color-border-active);
311
+ --_bg-hover: var(--stuic-color-muted-hover);
312
+ --_bg-active: var(--stuic-color-muted-active);
313
+ }
314
+
315
+ .stuic-pill:not([data-intent])[data-variant="ghost"] {
316
+ --_text: var(--stuic-color-foreground);
317
+ --_text-hover: var(--stuic-color-foreground-hover);
318
+ --_text-active: var(--stuic-color-foreground-active);
319
+ --_bg-hover: var(--stuic-color-muted-hover);
320
+ --_bg-active: var(--stuic-color-muted-active);
321
+ }
322
+
323
+ .stuic-pill:not([data-intent])[data-variant="soft"],
324
+ .stuic-pill:not([data-intent]):not([data-variant]) {
325
+ --_bg: var(--stuic-color-muted);
326
+ --_bg-hover: var(--stuic-color-muted-hover);
327
+ --_bg-active: var(--stuic-color-muted-active);
328
+ --_text: var(--stuic-color-foreground);
329
+ --_text-hover: var(--stuic-color-foreground-hover);
330
+ --_text-active: var(--stuic-color-foreground-active);
331
+ }
332
+
333
+ .stuic-pill:not([data-intent])[data-variant="link"] {
334
+ --_text: var(--stuic-color-muted-foreground);
335
+ --_text-hover: var(--stuic-color-foreground-hover);
336
+ --_text-active: var(--stuic-color-foreground-active);
337
+ }
338
+
339
+ /* ============================================================================
340
+ MUTED MODIFIER
341
+ ============================================================================ */
342
+
343
+ .stuic-pill[data-muted="true"] {
344
+ opacity: 0.7;
345
+ }
346
+
347
+ a.stuic-pill[data-muted="true"]:hover:not(:disabled),
348
+ button.stuic-pill[data-muted="true"]:hover:not(:disabled) {
349
+ opacity: 0.85;
350
+ }
351
+
352
+ /* ============================================================================
353
+ ACTIVE (selected) MODIFIER
354
+ Slight emphasis — useful for filter-chip toggleable behavior.
355
+ ============================================================================ */
356
+
357
+ .stuic-pill[data-active="true"][data-variant="outline"],
358
+ .stuic-pill[data-active="true"][data-variant="ghost"],
359
+ .stuic-pill[data-active="true"][data-variant="soft"] {
360
+ --_bg: color-mix(in srgb, var(--_color) 25%, var(--stuic-color-background));
361
+ --_border: var(--_color);
362
+ }
363
+
364
+ .stuic-pill[data-active="true"][data-variant="solid"] {
365
+ --_bg: var(--_color-active);
366
+ --_border: var(--_color-active);
367
+ }
368
+
369
+ /* ============================================================================
370
+ ROUNDED FULL (default)
371
+ ============================================================================ */
372
+
373
+ .stuic-pill[data-rounded-full="true"] {
374
+ --stuic-pill-radius: 9999px;
375
+ }
376
+
377
+ /* ============================================================================
378
+ BLOCK MODIFIER
379
+ Block-level flex (full width) instead of the default inline-flex.
380
+ ============================================================================ */
381
+
382
+ .stuic-pill[data-block="true"] {
383
+ display: flex;
384
+ width: 100%;
385
+ }
386
+
387
+ /* ============================================================================
388
+ STATUS DOT
389
+ ============================================================================ */
390
+
391
+ .stuic-pill-dot {
392
+ display: inline-block;
393
+ width: var(--stuic-pill-dot-size);
394
+ height: var(--stuic-pill-dot-size);
395
+ border-radius: 9999px;
396
+ background: var(--_color);
397
+ flex-shrink: 0;
398
+ }
399
+
400
+ /* On solid variants the bg already IS the intent color — use foreground instead. */
401
+ .stuic-pill[data-variant="solid"] .stuic-pill-dot {
402
+ background: var(--_text);
403
+ }
404
+
405
+ /* ============================================================================
406
+ DISMISSIBLE WRAPPER
407
+ When dismissible, the outer span is the styled pill; inner main + dismiss
408
+ button are siblings. Strip default styling from the inner interactive area.
409
+ ============================================================================ */
410
+
411
+ .stuic-pill[data-dismissible="true"] {
412
+ gap: var(--stuic-pill-gap);
413
+ }
414
+
415
+ .stuic-pill-main {
416
+ display: inline-flex;
417
+ align-items: center;
418
+ justify-content: center;
419
+ gap: var(--stuic-pill-gap);
420
+
421
+ /* Reset native button/anchor defaults */
422
+ appearance: none;
423
+ background: transparent;
424
+ border: 0;
425
+ padding: 0;
426
+ margin: 0;
427
+ font: inherit;
428
+ color: inherit;
429
+ text-decoration: none;
430
+ cursor: pointer;
431
+ line-height: 1;
432
+ }
433
+
434
+ .stuic-pill-main:focus-visible {
435
+ outline: var(--stuic-pill-ring-width) solid
436
+ var(--_ring, var(--stuic-pill-ring-color));
437
+ outline-offset: 2px;
438
+ border-radius: 2px;
439
+ }
440
+
441
+ .stuic-pill-main:disabled {
442
+ cursor: not-allowed;
443
+ }
444
+
445
+ /* Dismiss X button */
446
+ .stuic-pill-dismiss {
447
+ display: inline-flex;
448
+ align-items: center;
449
+ justify-content: center;
450
+ appearance: none;
451
+ background: transparent;
452
+ border: 0;
453
+ padding: 0;
454
+ margin: 0;
455
+ color: inherit;
456
+ cursor: pointer;
457
+ opacity: 0.7;
458
+ transition: opacity var(--stuic-pill-transition, var(--stuic-transition));
459
+ flex-shrink: 0;
460
+ }
461
+
462
+ .stuic-pill-dismiss:hover:not(:disabled) {
463
+ opacity: 1;
464
+ }
465
+
466
+ .stuic-pill-dismiss:focus-visible {
467
+ outline: var(--stuic-pill-ring-width) solid
468
+ var(--_ring, var(--stuic-pill-ring-color));
469
+ outline-offset: 1px;
470
+ border-radius: 9999px;
471
+ }
472
+
473
+ .stuic-pill-dismiss:disabled {
474
+ opacity: 0.4;
475
+ cursor: not-allowed;
476
+ }
477
+
478
+ .stuic-pill-dismiss svg {
479
+ width: 1em;
480
+ height: 1em;
481
+ }
482
+
483
+ /* Tighten dismiss icon size per pill size */
484
+ .stuic-pill[data-size="sm"] .stuic-pill-dismiss svg {
485
+ width: 0.875em;
486
+ height: 0.875em;
487
+ }
488
+ }
@@ -0,0 +1 @@
1
+ export { default as Pill, type Props as PillProps, type PillVariant, type PillSize, } from "./Pill.svelte";
@@ -0,0 +1 @@
1
+ export { default as Pill, } from "./Pill.svelte";
@@ -195,7 +195,6 @@
195
195
  onButtonClick={(i) => {
196
196
  billingPeriod = i === 0 ? "monthly" : "annual";
197
197
  }}
198
- {unstyled}
199
198
  class={classToggleProp}
200
199
  style="
201
200
  width: auto;
@@ -229,7 +228,6 @@
229
228
  class={tierClass}
230
229
  data-highlighted={!unstyled && tier.highlighted ? "" : undefined}
231
230
  data-disabled={!unstyled && tier.disabled ? "" : undefined}
232
- aria-disabled={tier.disabled ? "true" : undefined}
233
231
  role="listitem"
234
232
  >
235
233
  {#if tier.highlighted && tier.highlightedBadge}
@@ -91,8 +91,6 @@
91
91
  unstyled?: boolean;
92
92
  class?: string;
93
93
  el?: HTMLFormElement;
94
-
95
- compact?: boolean;
96
94
  }
97
95
  </script>
98
96
 
@@ -129,7 +127,6 @@
129
127
  unstyled = false,
130
128
  class: classProp,
131
129
  el = $bindable(),
132
- compact,
133
130
  ...rest
134
131
  }: Props = $props();
135
132
 
@@ -194,13 +191,7 @@
194
191
  let _class = $derived(unstyled ? classProp : twMerge("stuic-register-form", classProp));
195
192
  </script>
196
193
 
197
- <form
198
- bind:this={el}
199
- class={_class}
200
- use:onSubmitValidityCheck
201
- {...rest}
202
- data-compact={compact ? "" : undefined}
203
- >
194
+ <form bind:this={el} class={_class} use:onSubmitValidityCheck {...rest}>
204
195
  <!-- General error alert -->
205
196
  <DismissibleMessage message={error} intent="destructive" onDismiss={false} />
206
197
 
@@ -217,7 +208,6 @@
217
208
  required={cfg.required}
218
209
  name={`register-extra-${cfg.name}`}
219
210
  labelLeftBreakpoint={0}
220
- class={compact ? "mb-4" : ""}
221
211
  validate={{
222
212
  customValidator() {
223
213
  return fieldError(cfg.name) || "";
@@ -243,7 +233,6 @@
243
233
  required
244
234
  name="register-email"
245
235
  labelLeftBreakpoint={0}
246
- class={compact ? "mb-4" : ""}
247
236
  validate={{
248
237
  customValidator() {
249
238
  return fieldError("email") || "";
@@ -263,7 +252,6 @@
263
252
  minlength={passwordMinLength}
264
253
  name="register-password"
265
254
  labelLeftBreakpoint={0}
266
- class={compact ? "mb-4" : ""}
267
255
  validate={{
268
256
  customValidator() {
269
257
  return fieldError("password") || "";
@@ -284,7 +272,6 @@
284
272
  minlength={passwordMinLength}
285
273
  name="register-password-confirm"
286
274
  labelLeftBreakpoint={0}
287
- class={compact ? "mb-4" : ""}
288
275
  validate={{
289
276
  customValidator() {
290
277
  return fieldError("passwordConfirm") || "";
@@ -306,7 +293,6 @@
306
293
  required={cfg.required}
307
294
  name={`register-extra-${cfg.name}`}
308
295
  labelLeftBreakpoint={0}
309
- class={compact ? "mb-4" : ""}
310
296
  validate={{
311
297
  customValidator() {
312
298
  return fieldError(cfg.name) || "";
@@ -324,14 +310,6 @@
324
310
  <!-- CTA -->
325
311
  {#if submitButton}
326
312
  {@render submitButton({ isSubmitting, disabled: isSubmitting })}
327
- {:else if compact}
328
- <div class={unstyled ? undefined : "stuic-register-form-compact-cta"}>
329
- <Button intent="primary" type="submit" disabled={isSubmitting} class="block">
330
- {isSubmitting
331
- ? (submittingLabel ?? t("register_form.submitting"))
332
- : (submitLabel ?? t("register_form.submit"))}
333
- </Button>
334
- </div>
335
313
  {:else}
336
314
  <div class={unstyled ? undefined : "stuic-register-form-submit"}>
337
315
  <Button intent="primary" type="submit" disabled={isSubmitting} class="w-full">
@@ -70,7 +70,6 @@ export interface Props extends Omit<HTMLAttributes<HTMLFormElement>, "children">
70
70
  unstyled?: boolean;
71
71
  class?: string;
72
72
  el?: HTMLFormElement;
73
- compact?: boolean;
74
73
  }
75
74
  declare const RegisterForm: import("svelte").Component<Props, {}, "el" | "formData">;
76
75
  type RegisterForm = ReturnType<typeof RegisterForm>;
@@ -206,7 +206,6 @@
206
206
  t={tProp}
207
207
  {unstyled}
208
208
  class={classForm}
209
- compact
210
209
  />
211
210
  </div>
212
211
  </Modal>
@@ -20,7 +20,8 @@
20
20
  }
21
21
 
22
22
  .stuic-register-form-submit {
23
- margin-top: 1rem;
23
+ margin-top: 1.5rem;
24
+ margin-bottom: 1.5rem;
24
25
  }
25
26
 
26
27
  /* Social login container */
@@ -51,20 +52,9 @@
51
52
  flex-direction: column;
52
53
  gap: var(--stuic-register-form-social-gap);
53
54
  }
55
+ }
54
56
 
55
- .stuic-register-form-compact-cta {
56
- display: flex;
57
- align-items: center;
58
- margin-top: 0.5rem;
59
- gap: 2rem;
60
- }
61
-
62
- .stuic-register-form[data-compact] {
63
- .stuic-register-form-submit {
64
- margin-top: 0.5rem;
65
- }
66
- .stuic-button {
67
- flex: 1;
68
- }
69
- }
57
+ /* Tighten default FieldInput bottom margin (mb-8 → 1rem) inside the form */
58
+ .stuic-register-form .stuic-input {
59
+ margin-bottom: 1rem;
70
60
  }
package/dist/index.css CHANGED
@@ -84,6 +84,7 @@ In practice:
84
84
  @import "./components/Nav/index.css";
85
85
  @import "./components/Notifications/index.css";
86
86
  @import "./components/OtpInput/index.css";
87
+ @import "./components/Pill/index.css";
87
88
  @import "./components/PricingTable/index.css";
88
89
  @import "./components/Progress/index.css";
89
90
  @import "./components/Separator/index.css";
package/dist/index.d.ts CHANGED
@@ -60,6 +60,7 @@ export * from "./components/ModalDialog/index.js";
60
60
  export * from "./components/Nav/index.js";
61
61
  export * from "./components/Notifications/index.js";
62
62
  export * from "./components/OtpInput/index.js";
63
+ export * from "./components/Pill/index.js";
63
64
  export * from "./components/PricingTable/index.js";
64
65
  export * from "./components/Progress/index.js";
65
66
  export * from "./components/Separator/index.js";
package/dist/index.js CHANGED
@@ -61,6 +61,7 @@ export * from "./components/ModalDialog/index.js";
61
61
  export * from "./components/Nav/index.js";
62
62
  export * from "./components/Notifications/index.js";
63
63
  export * from "./components/OtpInput/index.js";
64
+ export * from "./components/Pill/index.js";
64
65
  export * from "./components/PricingTable/index.js";
65
66
  export * from "./components/Progress/index.js";
66
67
  export * from "./components/Separator/index.js";
package/dist/mcp.js CHANGED
@@ -1,3 +1,4 @@
1
+ // @ts-nocheck - Deno-style imports for @marianmeres/mcp-server discovery
1
2
  import { z } from "npm:zod";
2
3
  import { generateThemeCss } from "./utils/design-tokens.js";
3
4
  import { hexToOklch, hexToRgb } from "./utils/colors.js";
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## Overview
4
4
 
5
- 55 Svelte 5 component directories with consistent API patterns. All use runes-based reactivity.
5
+ 56 Svelte 5 component directories with consistent API patterns. All use runes-based reactivity.
6
6
 
7
7
  ## Component Categories
8
8
 
@@ -72,6 +72,7 @@
72
72
  | Component | Purpose |
73
73
  | --------------- | ------------------------------------------------------------------- |
74
74
  | Avatar | User avatars with fallback |
75
+ | Pill | Inline rounded badge/tag/chip (intent + variant + size, dismissible, dot, polymorphic span/a/button) |
75
76
  | KbdShortcut | Keyboard shortcut hints |
76
77
  | Carousel | Image/content slider with snap, keyboard nav, wheel scroll, arrows |
77
78
  | ListItemButton | List item with actions |