@getmicdrop/svelte-components 2.4.0 → 2.6.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 (42) hide show
  1. package/dist/components/Badges/Badge.svelte +139 -14
  2. package/dist/components/Badges/Badge.svelte.d.ts +10 -0
  3. package/dist/components/Badges/Badge.svelte.d.ts.map +1 -1
  4. package/dist/components/Breadcrumb/Breadcrumb.svelte +1 -1
  5. package/dist/components/Button/Button.svelte +135 -3
  6. package/dist/components/Button/Button.svelte.d.ts +2 -0
  7. package/dist/components/Button/Button.svelte.d.ts.map +1 -1
  8. package/dist/components/Card.svelte +2 -2
  9. package/dist/components/Card.svelte.d.ts +2 -2
  10. package/dist/components/Card.svelte.d.ts.map +1 -1
  11. package/dist/components/Checkbox/Checkbox.svelte +32 -58
  12. package/dist/components/Checkbox/Checkbox.svelte.d.ts +12 -0
  13. package/dist/components/Checkbox/Checkbox.svelte.d.ts.map +1 -1
  14. package/dist/components/Dropdown/Dropdown.svelte +78 -14
  15. package/dist/components/Dropdown/Dropdown.svelte.d.ts +2 -0
  16. package/dist/components/Dropdown/Dropdown.svelte.d.ts.map +1 -1
  17. package/dist/components/Dropdown/SelectDropdown.svelte +301 -0
  18. package/dist/components/Dropdown/SelectDropdown.svelte.d.ts +51 -0
  19. package/dist/components/Dropdown/SelectDropdown.svelte.d.ts.map +1 -0
  20. package/dist/components/EmptyState/EmptyState.svelte +80 -0
  21. package/dist/components/EmptyState/EmptyState.svelte.d.ts +37 -0
  22. package/dist/components/EmptyState/EmptyState.svelte.d.ts.map +1 -0
  23. package/dist/components/ErrorDisplay.svelte.d.ts +2 -2
  24. package/dist/components/Input/Input.svelte +6 -1
  25. package/dist/components/Input/Input.svelte.d.ts +10 -6
  26. package/dist/components/Input/Input.svelte.d.ts.map +1 -1
  27. package/dist/components/Input/MultiSelect.svelte.d.ts +2 -2
  28. package/dist/components/Input/Select.svelte.d.ts +2 -2
  29. package/dist/components/Input/Textarea.svelte.d.ts +2 -2
  30. package/dist/components/Layout/PageLayout.svelte +64 -0
  31. package/dist/components/Layout/PageLayout.svelte.d.ts +58 -0
  32. package/dist/components/Layout/PageLayout.svelte.d.ts.map +1 -0
  33. package/dist/components/Modal/StatusModal.svelte.d.ts +2 -2
  34. package/dist/components/Tabs/Tabs.svelte.d.ts +2 -2
  35. package/dist/components/Typography/Typography.svelte +50 -0
  36. package/dist/components/Typography/Typography.svelte.d.ts +48 -0
  37. package/dist/components/Typography/Typography.svelte.d.ts.map +1 -0
  38. package/dist/components/pages/performers/ShowDetails.svelte.d.ts +2 -2
  39. package/dist/components/pages/settings/tabs/CustomImageDropzone.svelte.d.ts +2 -2
  40. package/dist/index.d.ts +4 -0
  41. package/dist/index.js +4 -0
  42. package/package.json +1 -1
@@ -14,9 +14,17 @@
14
14
  export let textColor = null;
15
15
  /** @type {string|null} Custom background color (hex or rgba) */
16
16
  export let bgColor = null;
17
+ /** @type {boolean} Show status dot before text (uses variant color) */
18
+ export let showDot = false;
19
+ /** @type {boolean} Pill mode for counts/notifications (circular, minimal padding) */
20
+ export let pill = false;
21
+ /** @type {"rounded"|"pill"} Border radius style - rounded-rect or full pill */
22
+ export let shape = "rounded";
17
23
 
18
24
  $: sizeClass = (() => {
19
25
  switch (size) {
26
+ case "xs":
27
+ return "badge-xs";
20
28
  case "small":
21
29
  return "badge-sm";
22
30
  case "medium":
@@ -28,6 +36,8 @@
28
36
  }
29
37
  })();
30
38
 
39
+ $: shapeClass = pill ? "badge-pill" : (shape === "pill" ? "badge-shape-pill" : "badge-shape-rounded");
40
+
31
41
  // Handle tier numbers (1-5) as variants
32
42
  $: normalizedVariant = (() => {
33
43
  if (typeof variant === "number" || !isNaN(Number(variant))) {
@@ -73,6 +83,20 @@
73
83
  return "badge-error";
74
84
  case "info":
75
85
  return "badge-info";
86
+ // Search result type variants
87
+ case "event":
88
+ return "badge-event-type";
89
+ case "venue":
90
+ return "badge-venue";
91
+ case "user":
92
+ return "badge-user";
93
+ case "order":
94
+ return "badge-order";
95
+ case "performer":
96
+ return "badge-performer";
97
+ // Notification count
98
+ case "notification":
99
+ return "badge-notification";
76
100
  // Tier variants (for lineup position badges)
77
101
  case "tier-1":
78
102
  return "badge-tier-1";
@@ -119,21 +143,32 @@
119
143
  sizeClass,
120
144
  variantClass,
121
145
  eventClass,
146
+ shapeClass,
122
147
  className
123
148
  )}
124
149
  style={customStyle}
125
150
  on:click={(e) => dispatch("click", e)}
126
151
  >
152
+ {#if showDot}
153
+ <span class="badge-dot"></span>
154
+ {/if}
155
+ <slot name="leftIcon" />
127
156
  <slot />
128
157
  </div>
129
158
 
130
159
  <!--
131
160
  Usage: <Badge variant="host">Host</Badge>
132
161
 
162
+ With icon: <Badge variant="success"><CheckIcon slot="leftIcon" />Verified</Badge>
163
+ With dot: <Badge variant="success" showDot>On Sale</Badge>
164
+
133
165
  Role variants: host, headliner, feature, special-guest, opener, guest, teacher, assistant
134
166
  Status variants: success, warning, error, info, neutral
135
167
  Tier variants: 1, 2, 3, 4, 5 (pass as number or string)
136
168
  Event types: event="square" or event="circle"
169
+ Sizes: xs, small, medium, large
170
+ Shape: shape="rounded" (default, rounded-rect) or shape="pill" (full pill)
171
+ Pill mode: pill={true} for notification counts (circular, minimal padding)
137
172
  Custom colors: textColor="#hex" bgColor="rgba(...)"
138
173
  -->
139
174
 
@@ -141,37 +176,95 @@
141
176
  /* Base badge styles */
142
177
  .badge {
143
178
  cursor: pointer;
144
- gap: 0.25rem;
179
+ gap: 0.375rem;
145
180
  display: inline-flex;
146
181
  align-items: center;
147
182
  }
148
183
 
184
+ /* Status dot */
185
+ .badge-dot {
186
+ width: 6px;
187
+ height: 6px;
188
+ border-radius: 9999px;
189
+ background-color: currentColor;
190
+ flex-shrink: 0;
191
+ }
192
+
149
193
  /* Size variants */
194
+ .badge-xs {
195
+ padding: 2px 6px;
196
+ font-size: 10px;
197
+ line-height: 12px;
198
+ font-weight: 500;
199
+ }
200
+
150
201
  .badge-sm {
151
- padding-left: 2px;
152
- padding-right: 2px;
153
- font-size: 7px;
154
- line-height: 7px;
155
- border-radius: 4px;
202
+ padding: 2px 8px;
203
+ font-size: 11px;
204
+ line-height: 14px;
156
205
  font-weight: 500;
157
206
  }
158
207
 
159
208
  .badge-md {
160
- padding: 2px 8.5px;
161
- font-size: 10px;
162
- line-height: 14px;
163
- border-radius: 6px;
209
+ padding: 4px 10px;
210
+ font-size: 12px;
211
+ line-height: 16px;
164
212
  font-weight: 600;
165
213
  }
166
214
 
167
215
  .badge-lg {
168
- padding: 6px 15.5px;
169
- font-size: 0.875rem;
170
- line-height: 14px;
171
- border-radius: 6px;
216
+ padding: 6px 14px;
217
+ font-size: 14px;
218
+ line-height: 18px;
172
219
  font-weight: 500;
173
220
  }
174
221
 
222
+ /* Shape variants - rounded-rect is default */
223
+ .badge-shape-rounded {
224
+ border-radius: 4px;
225
+ }
226
+
227
+ /* Full pill shape */
228
+ .badge-shape-pill {
229
+ border-radius: 9999px;
230
+ }
231
+
232
+ /* Pill mode for counts/notifications */
233
+ .badge-pill {
234
+ border-radius: 9999px;
235
+ min-width: 20px;
236
+ height: 20px;
237
+ padding: 0 6px;
238
+ font-size: 11px;
239
+ line-height: 20px;
240
+ font-weight: 600;
241
+ justify-content: center;
242
+ }
243
+
244
+ .badge-pill.badge-xs {
245
+ min-width: 16px;
246
+ height: 16px;
247
+ padding: 0 4px;
248
+ font-size: 10px;
249
+ line-height: 16px;
250
+ }
251
+
252
+ .badge-pill.badge-sm {
253
+ min-width: 18px;
254
+ height: 18px;
255
+ padding: 0 5px;
256
+ font-size: 10px;
257
+ line-height: 18px;
258
+ }
259
+
260
+ .badge-pill.badge-lg {
261
+ min-width: 24px;
262
+ height: 24px;
263
+ padding: 0 8px;
264
+ font-size: 12px;
265
+ line-height: 24px;
266
+ }
267
+
175
268
  /* Role variants */
176
269
  .badge-host {
177
270
  color: #dc2626;
@@ -239,6 +332,38 @@
239
332
  background-color: #f9fafb;
240
333
  }
241
334
 
335
+ /* Search result type variants */
336
+ .badge-event-type {
337
+ color: #1e40af;
338
+ background-color: #dbeafe;
339
+ }
340
+
341
+ .badge-venue {
342
+ color: #166534;
343
+ background-color: #dcfce7;
344
+ }
345
+
346
+ .badge-user {
347
+ color: #7e22ce;
348
+ background-color: #f3e8ff;
349
+ }
350
+
351
+ .badge-order {
352
+ color: #c2410c;
353
+ background-color: #ffedd5;
354
+ }
355
+
356
+ .badge-performer {
357
+ color: #be185d;
358
+ background-color: #fce7f3;
359
+ }
360
+
361
+ /* Notification count variant */
362
+ .badge-notification {
363
+ color: #ffffff;
364
+ background-color: #ef4444;
365
+ }
366
+
242
367
  /* Tier variants (lineup position badges) - colors match local frontend implementation */
243
368
  .badge-tier-1 {
244
369
  color: rgba(108, 43, 217, 1);
@@ -1,36 +1,46 @@
1
1
  export default Badge;
2
2
  type Badge = SvelteComponent<$$__sveltets_2_PropsWithChildren<{
3
+ pill?: boolean | undefined;
3
4
  size?: string | undefined;
4
5
  className?: string | undefined;
5
6
  variant?: string | number | undefined;
6
7
  event?: string | null | undefined;
7
8
  textColor?: string | null | undefined;
8
9
  bgColor?: string | null | undefined;
10
+ showDot?: boolean | undefined;
11
+ shape?: "rounded" | "pill" | undefined;
9
12
  }, {
13
+ leftIcon: {};
10
14
  default: {};
11
15
  }>, {
12
16
  click: CustomEvent<any>;
13
17
  } & {
14
18
  [evt: string]: CustomEvent<any>;
15
19
  }, {
20
+ leftIcon: {};
16
21
  default: {};
17
22
  }> & {
18
23
  $$bindings?: string | undefined;
19
24
  };
20
25
  declare const Badge: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_PropsWithChildren<{
26
+ pill?: boolean | undefined;
21
27
  size?: string | undefined;
22
28
  className?: string | undefined;
23
29
  variant?: string | number | undefined;
24
30
  event?: string | null | undefined;
25
31
  textColor?: string | null | undefined;
26
32
  bgColor?: string | null | undefined;
33
+ showDot?: boolean | undefined;
34
+ shape?: "rounded" | "pill" | undefined;
27
35
  }, {
36
+ leftIcon: {};
28
37
  default: {};
29
38
  }>, {
30
39
  click: CustomEvent<any>;
31
40
  } & {
32
41
  [evt: string]: CustomEvent<any>;
33
42
  }, {
43
+ leftIcon: {};
34
44
  default: {};
35
45
  }, {}, string>;
36
46
  type $$__sveltets_2_PropsWithChildren<Props, Slots> = Props & (Slots extends {
@@ -1 +1 @@
1
- {"version":3,"file":"Badge.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/Badges/Badge.svelte.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AA2JA;;;;;;;;;;;;;;;eAAqL;sCAT/I,KAAK,EAAE,KAAK;;;;;6CALL,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,OAAO,OAAO,QAAQ;IAC3L,cAAc,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,WAAW,OAAO,SAAS,KAAK,GAAG;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAC9G,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"Badge.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/Badges/Badge.svelte.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AA2LA;;;;;;;;;;;;;;;;;;;;eAA8M;sCATxK,KAAK,EAAE,KAAK;;;;;6CALL,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,OAAO,OAAO,QAAQ;IAC3L,cAAc,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,WAAW,OAAO,SAAS,KAAK,GAAG;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAC9G,eAAe,QAAQ,CAAC"}
@@ -65,7 +65,7 @@
65
65
  {/if}
66
66
 
67
67
  {#if title || subtitle}
68
- <div class="pl-1 mb-2 md:pl-6 flex flex-col gap-1">
68
+ <div class="pl-1 mb-4 md:pl-6 flex flex-col gap-1">
69
69
  {#if title}
70
70
  <h1 class="text-[32px] font-semibold text-text-primary text-start">
71
71
  {title}
@@ -12,9 +12,10 @@
12
12
  import { classNames } from "../../utils/utils.js";
13
13
 
14
14
  // New clean API
15
- export let variant = "blue-solid"; // blue-solid, blue-outline, gray-outline, red-solid, red-outline, red-text, gray-text
15
+ export let variant = "blue-solid"; // blue-solid, blue-outline, gray-outline, red-solid, red-outline, red-text, gray-text, icon, toggle
16
16
  export let size = ""; // full, full-md-auto, lg, md, sm, xs, nav, half
17
17
  export let minWidth = ""; // sm (100px), action (150px), modal (130px)
18
+ export let shape = ""; // circle (for toggle pills)
18
19
  export let disabled = false;
19
20
  export let loading = false;
20
21
  export let success = false;
@@ -23,7 +24,7 @@
23
24
  export let beforeIcon = null;
24
25
  export let afterIcon = null;
25
26
  export let responsive = false; // Enable lift/press microinteraction
26
- export let active = false; // For nav items - shows selected/current page state
27
+ export let active = false; // For nav items and toggle buttons - shows selected/current page state
27
28
  export let href = null; // If provided, renders as <a> instead of <button>
28
29
  export let justify = ""; // between (for list-item style with icon on right)
29
30
 
@@ -32,6 +33,22 @@
32
33
 
33
34
  // Size classes
34
35
  $: sizeClass = (() => {
36
+ // Icon variant uses different sizing
37
+ if (variant === "icon") {
38
+ switch (size) {
39
+ case "lg":
40
+ return "p-3 min-h-0";
41
+ case "md":
42
+ return "p-2.5 min-h-0";
43
+ case "sm":
44
+ return "p-2 min-h-0";
45
+ case "xs":
46
+ return "p-1.5 min-h-0";
47
+ default:
48
+ return "p-2 min-h-0"; // Default to sm for icon buttons
49
+ }
50
+ }
51
+
35
52
  switch (size) {
36
53
  case "full":
37
54
  return "w-full";
@@ -70,6 +87,16 @@
70
87
  }
71
88
  })();
72
89
 
90
+ // Shape classes
91
+ $: shapeClass = (() => {
92
+ switch (shape) {
93
+ case "circle":
94
+ return "!rounded-full !w-8 !h-8 !min-h-[32px] !p-0";
95
+ default:
96
+ return "";
97
+ }
98
+ })();
99
+
73
100
  // Variant classes with consistent hover/active states
74
101
  $: variantClass = (() => {
75
102
  if (success) return "btn-success";
@@ -89,6 +116,10 @@
89
116
  return "btn-red-text";
90
117
  case "gray-text":
91
118
  return "btn-gray-text";
119
+ case "icon":
120
+ return "btn-icon";
121
+ case "toggle":
122
+ return "btn-toggle";
92
123
  default:
93
124
  return "btn-blue-solid";
94
125
  }
@@ -111,6 +142,10 @@
111
142
  return "text-red-600";
112
143
  case "gray-text":
113
144
  return "text-Text-Tartiary";
145
+ case "icon":
146
+ return ""; // Icon buttons inherit text color from className or use default gray
147
+ case "toggle":
148
+ return ""; // Handled by toggle variant states
114
149
  default:
115
150
  return "text-white";
116
151
  }
@@ -131,11 +166,12 @@
131
166
  href ? "no-underline hover:no-underline" : "",
132
167
  sizeClass,
133
168
  minWidthClass,
169
+ shapeClass,
134
170
  variantClass,
135
171
  textClass,
136
172
  disabledClass,
137
173
  responsive && !disabled ? "btn-responsive" : "",
138
- active ? "btn-active" : "",
174
+ active && (variant === "gray-text" || variant === "toggle") ? "btn-active" : "",
139
175
  justifyClass,
140
176
  className
141
177
  );
@@ -248,6 +284,7 @@
248
284
  --tw-border-opacity: 1;
249
285
  border-color: rgb(29 78 216 / var(--tw-border-opacity, 1));
250
286
  background-color: transparent;
287
+ color: #1d4ed8; /* blue-700 for light mode */
251
288
  }
252
289
  .btn-blue-outline:hover:not(:disabled) {
253
290
  --tw-bg-opacity: 1;
@@ -436,6 +473,94 @@
436
473
  background-color: #374151;
437
474
  }
438
475
 
476
+ /* ============================================
477
+ ICON VARIANT
478
+ Minimal icon-only buttons (info, close, delete)
479
+ ============================================ */
480
+ .btn-icon {
481
+ border-color: transparent;
482
+ background-color: transparent;
483
+ --tw-shadow: 0 0 #0000;
484
+ --tw-shadow-colored: 0 0 #0000;
485
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
486
+ }
487
+ .btn-icon:hover:not(:disabled) {
488
+ background-color: hsl(var(--BG-Tertiary));
489
+ }
490
+ .btn-icon:active:not(:disabled) {
491
+ background-color: hsl(var(--BG-Quaternary));
492
+ }
493
+
494
+ /* Dark mode overrides for icon button */
495
+ :global(.dark) .btn-icon,
496
+ :global(.performer-portal.dark) .btn-icon {
497
+ background-color: transparent;
498
+ }
499
+ :global(.dark) .btn-icon:hover,
500
+ :global(.performer-portal.dark) .btn-icon:hover {
501
+ background-color: #1f2937;
502
+ }
503
+ :global(.dark) .btn-icon:active,
504
+ :global(.performer-portal.dark) .btn-icon:active {
505
+ background-color: #374151;
506
+ }
507
+
508
+ /* ============================================
509
+ TOGGLE VARIANT
510
+ For toggle pills (day-of-week selectors, etc.)
511
+ ============================================ */
512
+ .btn-toggle {
513
+ border-width: 1px;
514
+ border-color: hsl(var(--sidebar-border));
515
+ background-color: hsl(var(--BG-Tertiary));
516
+ color: hsl(var(--Text-Secondary));
517
+ }
518
+ .btn-toggle:hover:not(:disabled) {
519
+ background-color: hsl(var(--BG-Quaternary));
520
+ }
521
+ .btn-toggle:active:not(:disabled) {
522
+ background-color: hsl(var(--BG-Quaternary));
523
+ }
524
+
525
+ /* Active state for toggle buttons */
526
+ .btn-toggle.btn-active {
527
+ --tw-border-opacity: 1;
528
+ border-color: rgb(2 132 254 / var(--tw-border-opacity, 1));
529
+ --tw-bg-opacity: 1;
530
+ background-color: rgb(2 132 254 / var(--tw-bg-opacity, 1));
531
+ --tw-text-opacity: 1;
532
+ color: rgb(255 255 255 / var(--tw-text-opacity, 1));
533
+ }
534
+ .btn-toggle.btn-active:hover:not(:disabled) {
535
+ --tw-border-opacity: 1;
536
+ border-color: rgb(30 64 175 / var(--tw-border-opacity, 1));
537
+ --tw-bg-opacity: 1;
538
+ background-color: rgb(30 64 175 / var(--tw-bg-opacity, 1));
539
+ }
540
+
541
+ /* Dark mode overrides for toggle button */
542
+ :global(.dark) .btn-toggle,
543
+ :global(.performer-portal.dark) .btn-toggle {
544
+ background-color: #1f2937;
545
+ color: #9ca3af;
546
+ border-color: #374151;
547
+ }
548
+ :global(.dark) .btn-toggle:hover,
549
+ :global(.performer-portal.dark) .btn-toggle:hover {
550
+ background-color: #374151;
551
+ }
552
+ :global(.dark) .btn-toggle.btn-active,
553
+ :global(.performer-portal.dark) .btn-toggle.btn-active {
554
+ background-color: #3b82f6;
555
+ color: white;
556
+ border-color: #3b82f6;
557
+ }
558
+ :global(.dark) .btn-toggle.btn-active:hover,
559
+ :global(.performer-portal.dark) .btn-toggle.btn-active:hover {
560
+ background-color: #2563eb;
561
+ border-color: #2563eb;
562
+ }
563
+
439
564
  /* ============================================
440
565
  ACTIVE STATE (for nav items)
441
566
  Shows selected/current page state
@@ -608,6 +733,13 @@
608
733
  white-space: nowrap;
609
734
  }
610
735
 
736
+ /* Default icon sizing for SVGs in buttons - !important to override inline Tailwind classes */
737
+ .btn-content :global(svg) {
738
+ width: 1rem !important; /* 16px - w-4 */
739
+ height: 1rem !important; /* 16px - h-4 */
740
+ flex-shrink: 0;
741
+ }
742
+
611
743
  @media (min-width: 640px) {
612
744
  .btn-content {
613
745
  gap: 0.5rem; /* 8px - matches gap-2 on sm+ screens */
@@ -4,6 +4,7 @@ type Button = SvelteComponent<$$__sveltets_2_PropsWithChildren<{
4
4
  size?: string | undefined;
5
5
  className?: string | undefined;
6
6
  variant?: string | undefined;
7
+ shape?: string | undefined;
7
8
  success?: boolean | undefined;
8
9
  minWidth?: string | undefined;
9
10
  disabled?: boolean | undefined;
@@ -34,6 +35,7 @@ declare const Button: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_PropsWit
34
35
  size?: string | undefined;
35
36
  className?: string | undefined;
36
37
  variant?: string | undefined;
38
+ shape?: string | undefined;
37
39
  success?: boolean | undefined;
38
40
  minWidth?: string | undefined;
39
41
  disabled?: boolean | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"Button.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/Button/Button.svelte.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmNA;;;;;;;;;;;;;;;;;;;;;;;;;;;eAAyR;sCATnP,KAAK,EAAE,KAAK;;;;;6CALL,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,OAAO,OAAO,QAAQ;IAC3L,cAAc,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,WAAW,OAAO,SAAS,KAAK,GAAG;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAC9G,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"Button.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/Button/Button.svelte.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuPA;;;;;;;;;;;;;;;;;;;;;;;;;;;;eAAiS;sCAT3P,KAAK,EAAE,KAAK;;;;;6CALL,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,OAAO,OAAO,QAAQ;IAC3L,cAAc,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,WAAW,OAAO,SAAS,KAAK,GAAG;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAC9G,eAAe,QAAQ,CAAC"}
@@ -1,9 +1,9 @@
1
1
  <script>
2
- export let className;
2
+ export let className = '';
3
3
  </script>
4
4
 
5
5
  <section
6
- class={`w-full bg-bg-primary p-3.5 sm:p-4 md:p-5 md:shadow md:rounded-lg ${className}`}
6
+ class={`w-full bg-bg-primary p-6 shadow rounded-[16px] ${className}`}
7
7
  >
8
8
  <slot />
9
9
  </section>
@@ -1,6 +1,6 @@
1
1
  export default Card;
2
2
  type Card = SvelteComponent<$$__sveltets_2_PropsWithChildren<{
3
- className: any;
3
+ className?: string | undefined;
4
4
  }, {
5
5
  default: {};
6
6
  }>, {
@@ -11,7 +11,7 @@ type Card = SvelteComponent<$$__sveltets_2_PropsWithChildren<{
11
11
  $$bindings?: string | undefined;
12
12
  };
13
13
  declare const Card: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_PropsWithChildren<{
14
- className: any;
14
+ className?: string | undefined;
15
15
  }, {
16
16
  default: {};
17
17
  }>, {
@@ -1 +1 @@
1
- {"version":3,"file":"Card.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/components/Card.svelte.js"],"names":[],"mappings":";;;;;;;;;;;;AA2BA;;;;;;;;eAAsH;sCAThF,KAAK,EAAE,KAAK;;;;;6CALL,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,OAAO,OAAO,QAAQ;IAC3L,cAAc,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,WAAW,OAAO,SAAS,KAAK,GAAG;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAC9G,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"Card.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/components/Card.svelte.js"],"names":[],"mappings":";;;;;;;;;;;;AA2BA;;;;;;;;eAAqI;sCAT/F,KAAK,EAAE,KAAK;;;;;6CALL,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,OAAO,OAAO,QAAQ;IAC3L,cAAc,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,WAAW,OAAO,SAAS,KAAK,GAAG;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAC9G,eAAe,QAAQ,CAAC"}
@@ -9,6 +9,8 @@
9
9
  export let name = "";
10
10
  /** @type {boolean} Whether the checkbox is disabled */
11
11
  export let disabled = false;
12
+ /** @type {string} Color variant */
13
+ export let color = "primary";
12
14
  /** @type {string} Additional CSS classes */
13
15
  let className = "";
14
16
  export { className as class };
@@ -19,6 +21,23 @@
19
21
  checked = event.target.checked;
20
22
  dispatch("change", { checked, value });
21
23
  }
24
+
25
+ // Color classes matching flowbite-svelte
26
+ const colorClasses = {
27
+ primary: "text-primary-600 focus:ring-primary-500 dark:focus:ring-primary-600",
28
+ red: "text-red-600 focus:ring-red-500 dark:focus:ring-red-600",
29
+ green: "text-green-600 focus:ring-green-500 dark:focus:ring-green-600",
30
+ blue: "text-blue-600 focus:ring-blue-500 dark:focus:ring-blue-600"
31
+ };
32
+
33
+ $: inputClasses = [
34
+ "w-4 h-4 rounded",
35
+ "bg-gray-100 border-gray-300",
36
+ "dark:bg-gray-700 dark:border-gray-600 dark:ring-offset-gray-800",
37
+ "focus:ring-2",
38
+ colorClasses[color] || colorClasses.primary,
39
+ disabled ? "cursor-not-allowed opacity-50" : "cursor-pointer"
40
+ ].join(" ");
22
41
  </script>
23
42
 
24
43
  <label class="checkbox {className}" class:checkbox--disabled={disabled}>
@@ -29,13 +48,13 @@
29
48
  {disabled}
30
49
  bind:checked
31
50
  on:change={handleChange}
32
- class="checkbox__input"
51
+ on:click
52
+ on:focus
53
+ on:blur
54
+ on:keydown
55
+ on:keyup
56
+ class={inputClasses}
33
57
  />
34
- <span class="checkbox__box">
35
- <svg class="checkbox__check" viewBox="0 0 12 10" fill="none" xmlns="http://www.w3.org/2000/svg">
36
- <path d="M1 5L4.5 8.5L11 1" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
37
- </svg>
38
- </span>
39
58
  {#if $$slots.default}
40
59
  <span class="checkbox__label">
41
60
  <slot />
@@ -46,7 +65,7 @@
46
65
  <style>
47
66
  .checkbox {
48
67
  display: inline-flex;
49
- align-items: flex-start;
68
+ align-items: center;
50
69
  gap: 0.5rem;
51
70
  cursor: pointer;
52
71
  -webkit-user-select: none;
@@ -56,61 +75,16 @@
56
75
 
57
76
  .checkbox--disabled {
58
77
  cursor: not-allowed;
59
- opacity: 0.5;
60
- }
61
-
62
- .checkbox__input {
63
- position: absolute;
64
- opacity: 0;
65
- width: 0;
66
- height: 0;
67
- }
68
-
69
- .checkbox__box {
70
- flex-shrink: 0;
71
- width: 1.125rem;
72
- height: 1.125rem;
73
- border: 2px solid hsl(var(--Stroke-Primary, 220 13% 85%));
74
- border-radius: 0.25rem;
75
- background-color: hsl(var(--BG-Primary, 0 0% 100%));
76
- display: flex;
77
- align-items: center;
78
- justify-content: center;
79
- transition: all 0.15s ease;
80
- margin-top: 0.1875rem; /* Align with text baseline */
81
- }
82
-
83
- .checkbox__check {
84
- width: 0.75rem;
85
- height: 0.75rem;
86
- color: white;
87
- opacity: 0;
88
- transform: scale(0.5);
89
- transition: all 0.15s ease;
90
- }
91
-
92
- .checkbox__input:checked + .checkbox__box {
93
- background-color: hsl(var(--Brand-Primary, 221 83% 53%));
94
- border-color: hsl(var(--Brand-Primary, 221 83% 53%));
95
- }
96
-
97
- .checkbox__input:checked + .checkbox__box .checkbox__check {
98
- opacity: 1;
99
- transform: scale(1);
100
- }
101
-
102
- .checkbox__input:focus-visible + .checkbox__box {
103
- outline: 2px solid hsl(var(--Brand-Primary, 221 83% 53%));
104
- outline-offset: 2px;
105
- }
106
-
107
- .checkbox__input:disabled + .checkbox__box {
108
- background-color: hsl(var(--BG-Secondary, 220 14% 96%));
109
78
  }
110
79
 
111
80
  .checkbox__label {
112
- color: hsl(var(--Text-Primary, 220 13% 13%));
113
81
  font-size: 0.875rem;
114
82
  line-height: 1.5;
83
+ color: var(--text-primary, #1f2937);
84
+ }
85
+
86
+ :global(.dark) .checkbox__label,
87
+ :global(.micdrop.dark) .checkbox__label {
88
+ color: #f3f4f6;
115
89
  }
116
90
  </style>