@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.
- package/dist/components/Badges/Badge.svelte +139 -14
- package/dist/components/Badges/Badge.svelte.d.ts +10 -0
- package/dist/components/Badges/Badge.svelte.d.ts.map +1 -1
- package/dist/components/Breadcrumb/Breadcrumb.svelte +1 -1
- package/dist/components/Button/Button.svelte +135 -3
- package/dist/components/Button/Button.svelte.d.ts +2 -0
- package/dist/components/Button/Button.svelte.d.ts.map +1 -1
- package/dist/components/Card.svelte +2 -2
- package/dist/components/Card.svelte.d.ts +2 -2
- package/dist/components/Card.svelte.d.ts.map +1 -1
- package/dist/components/Checkbox/Checkbox.svelte +32 -58
- package/dist/components/Checkbox/Checkbox.svelte.d.ts +12 -0
- package/dist/components/Checkbox/Checkbox.svelte.d.ts.map +1 -1
- package/dist/components/Dropdown/Dropdown.svelte +78 -14
- package/dist/components/Dropdown/Dropdown.svelte.d.ts +2 -0
- package/dist/components/Dropdown/Dropdown.svelte.d.ts.map +1 -1
- package/dist/components/Dropdown/SelectDropdown.svelte +301 -0
- package/dist/components/Dropdown/SelectDropdown.svelte.d.ts +51 -0
- package/dist/components/Dropdown/SelectDropdown.svelte.d.ts.map +1 -0
- package/dist/components/EmptyState/EmptyState.svelte +80 -0
- package/dist/components/EmptyState/EmptyState.svelte.d.ts +37 -0
- package/dist/components/EmptyState/EmptyState.svelte.d.ts.map +1 -0
- package/dist/components/ErrorDisplay.svelte.d.ts +2 -2
- package/dist/components/Input/Input.svelte +6 -1
- package/dist/components/Input/Input.svelte.d.ts +10 -6
- package/dist/components/Input/Input.svelte.d.ts.map +1 -1
- package/dist/components/Input/MultiSelect.svelte.d.ts +2 -2
- package/dist/components/Input/Select.svelte.d.ts +2 -2
- package/dist/components/Input/Textarea.svelte.d.ts +2 -2
- package/dist/components/Layout/PageLayout.svelte +64 -0
- package/dist/components/Layout/PageLayout.svelte.d.ts +58 -0
- package/dist/components/Layout/PageLayout.svelte.d.ts.map +1 -0
- package/dist/components/Modal/StatusModal.svelte.d.ts +2 -2
- package/dist/components/Tabs/Tabs.svelte.d.ts +2 -2
- package/dist/components/Typography/Typography.svelte +50 -0
- package/dist/components/Typography/Typography.svelte.d.ts +48 -0
- package/dist/components/Typography/Typography.svelte.d.ts.map +1 -0
- package/dist/components/pages/performers/ShowDetails.svelte.d.ts +2 -2
- package/dist/components/pages/settings/tabs/CustomImageDropzone.svelte.d.ts +2 -2
- package/dist/index.d.ts +4 -0
- package/dist/index.js +4 -0
- 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.
|
|
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
|
|
152
|
-
|
|
153
|
-
|
|
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:
|
|
161
|
-
font-size:
|
|
162
|
-
line-height:
|
|
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
|
|
169
|
-
font-size:
|
|
170
|
-
line-height:
|
|
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":"
|
|
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"}
|
|
@@ -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":"
|
|
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-
|
|
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
|
|
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
|
|
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;;;;;;;;
|
|
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
|
-
|
|
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:
|
|
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>
|