bref-ui 0.0.2 → 0.0.4

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.
@@ -0,0 +1,332 @@
1
+ <script lang="ts">
2
+ import type { SvelteHTMLElements } from 'svelte/elements';
3
+ import type { ButtonProps } from './types.js';
4
+ import Icon from '../icon/icon.svelte';
5
+
6
+ const {
7
+ label,
8
+ size = 'medium',
9
+ color = 'primary',
10
+ variant = 'filled',
11
+ disabled = false,
12
+ wide = false,
13
+ icon,
14
+ onClick,
15
+ ...rest
16
+ }: ButtonProps & SvelteHTMLElements['button'] = $props();
17
+ </script>
18
+
19
+ <button {...rest} class={`${size} ${color} ${variant}`} class:wide {disabled} onclick={onClick}>
20
+ {#if icon}
21
+ <Icon
22
+ name={icon.name}
23
+ contrastMode={variant === 'filled'}
24
+ {color}
25
+ filled={icon.filled}
26
+ ariaLabel={icon.ariaLabel}
27
+ {size}
28
+ />
29
+ {/if}
30
+ <span>{label}</span>
31
+ </button>
32
+
33
+ <style>
34
+ button {
35
+ display: inline-flex;
36
+ align-items: center;
37
+ justify-content: center;
38
+ gap: 0.5em;
39
+ border: none;
40
+ cursor: pointer;
41
+ font-weight: 500;
42
+ transition:
43
+ background-color 0.15s ease,
44
+ transform 0.08s cubic-bezier(0.34, 1.56, 0.64, 1);
45
+ }
46
+ span {
47
+ cursor: inherit;
48
+ color: inherit;
49
+ display: inline-block;
50
+ }
51
+
52
+ button:disabled {
53
+ opacity: 0.5;
54
+ cursor: not-allowed;
55
+ }
56
+
57
+ button:not(:disabled):active {
58
+ transform: scale(0.98);
59
+ }
60
+
61
+ .wide {
62
+ width: 100%;
63
+ }
64
+
65
+ /* Sizes */
66
+ .x-small {
67
+ padding: 0.25rem 0.5rem;
68
+ font-size: 0.75rem;
69
+ border-radius: calc(var(--border-radius) * 0.75);
70
+ }
71
+ .small {
72
+ padding: 0.375rem 0.75rem;
73
+ font-size: 0.875rem;
74
+ border-radius: calc(var(--border-radius));
75
+ }
76
+ .medium {
77
+ padding: 0.5rem 1rem;
78
+ font-size: 1rem;
79
+ border-radius: calc(var(--border-radius) * 1.25);
80
+ }
81
+ .large {
82
+ padding: 0.625rem 1.25rem;
83
+ font-size: 1.125rem;
84
+ border-radius: calc(var(--border-radius) * 1.5);
85
+ }
86
+ .x-large {
87
+ padding: 0.75rem 1.5rem;
88
+ font-size: 1.25rem;
89
+ border-radius: calc(var(--border-radius) * 2);
90
+ }
91
+
92
+ /* Filled variant */
93
+ .filled.primary {
94
+ background-color: var(--color-primary);
95
+ color: var(--color-primary-contrast);
96
+ }
97
+ .filled.primary:not(:disabled):hover {
98
+ background-color: color-mix(in oklch, var(--color-primary) 85%, var(--hover-mix));
99
+ }
100
+ .filled.primary:not(:disabled):active {
101
+ background-color: color-mix(in oklch, var(--color-primary) 70%, var(--hover-mix));
102
+ }
103
+ .filled.secondary {
104
+ background-color: var(--color-secondary);
105
+ color: var(--color-secondary-contrast);
106
+ }
107
+ .filled.secondary:not(:disabled):hover {
108
+ background-color: color-mix(in oklch, var(--color-secondary) 85%, var(--hover-mix));
109
+ }
110
+ .filled.secondary:not(:disabled):active {
111
+ background-color: color-mix(in oklch, var(--color-secondary) 70%, var(--hover-mix));
112
+ }
113
+ .filled.success {
114
+ background-color: var(--color-success);
115
+ color: var(--color-success-contrast);
116
+ }
117
+ .filled.success:not(:disabled):hover {
118
+ background-color: color-mix(in oklch, var(--color-success) 85%, var(--hover-mix));
119
+ }
120
+ .filled.success:not(:disabled):active {
121
+ background-color: color-mix(in oklch, var(--color-success) 70%, var(--hover-mix));
122
+ }
123
+ .filled.warning {
124
+ background-color: var(--color-warning);
125
+ color: var(--color-warning-contrast);
126
+ }
127
+ .filled.warning:not(:disabled):hover {
128
+ background-color: color-mix(in oklch, var(--color-warning) 85%, var(--hover-mix));
129
+ }
130
+ .filled.warning:not(:disabled):active {
131
+ background-color: color-mix(in oklch, var(--color-warning) 70%, var(--hover-mix));
132
+ }
133
+ .filled.danger {
134
+ background-color: var(--color-danger);
135
+ color: var(--color-danger-contrast);
136
+ }
137
+ .filled.danger:not(:disabled):hover {
138
+ background-color: color-mix(in oklch, var(--color-danger) 85%, var(--hover-mix));
139
+ }
140
+ .filled.danger:not(:disabled):active {
141
+ background-color: color-mix(in oklch, var(--color-danger) 70%, var(--hover-mix));
142
+ }
143
+ .filled.info {
144
+ background-color: var(--color-info);
145
+ color: var(--color-info-contrast);
146
+ }
147
+ .filled.info:not(:disabled):hover {
148
+ background-color: color-mix(in oklch, var(--color-info) 85%, var(--hover-mix));
149
+ }
150
+ .filled.info:not(:disabled):active {
151
+ background-color: color-mix(in oklch, var(--color-info) 70%, var(--hover-mix));
152
+ }
153
+ .filled.foreground {
154
+ background-color: var(--color-foreground);
155
+ color: var(--color-background);
156
+ }
157
+ .filled.foreground:not(:disabled):hover {
158
+ background-color: color-mix(in oklch, var(--color-foreground) 85%, var(--hover-mix));
159
+ }
160
+ .filled.foreground:not(:disabled):active {
161
+ background-color: color-mix(in oklch, var(--color-foreground) 70%, var(--hover-mix));
162
+ }
163
+ .filled.background {
164
+ background-color: var(--color-background);
165
+ color: var(--color-foreground);
166
+ }
167
+ .filled.background:not(:disabled):hover {
168
+ background-color: color-mix(in oklch, var(--color-background) 85%, var(--hover-mix));
169
+ }
170
+ .filled.background:not(:disabled):active {
171
+ background-color: color-mix(in oklch, var(--color-background) 70%, var(--hover-mix));
172
+ }
173
+
174
+ /* Soft variant */
175
+ .soft.primary {
176
+ background-color: var(--color-primary-soft);
177
+ color: var(--color-primary);
178
+ }
179
+ .soft.primary:not(:disabled):hover {
180
+ background-color: color-mix(in oklch, var(--color-primary-soft) 85%, var(--hover-mix));
181
+ }
182
+ .soft.primary:not(:disabled):active {
183
+ background-color: color-mix(in oklch, var(--color-primary-soft) 70%, var(--hover-mix));
184
+ }
185
+ .soft.secondary {
186
+ background-color: var(--color-secondary-soft);
187
+ color: var(--color-secondary);
188
+ }
189
+ .soft.secondary:not(:disabled):hover {
190
+ background-color: color-mix(in oklch, var(--color-secondary-soft) 85%, var(--hover-mix));
191
+ }
192
+ .soft.secondary:not(:disabled):active {
193
+ background-color: color-mix(in oklch, var(--color-secondary-soft) 70%, var(--hover-mix));
194
+ }
195
+ .soft.success {
196
+ background-color: var(--color-success-soft);
197
+ color: var(--color-success);
198
+ }
199
+ .soft.success:not(:disabled):hover {
200
+ background-color: color-mix(in oklch, var(--color-success-soft) 85%, var(--hover-mix));
201
+ }
202
+ .soft.success:not(:disabled):active {
203
+ background-color: color-mix(in oklch, var(--color-success-soft) 70%, var(--hover-mix));
204
+ }
205
+ .soft.warning {
206
+ background-color: var(--color-warning-soft);
207
+ color: var(--color-warning);
208
+ }
209
+ .soft.warning:not(:disabled):hover {
210
+ background-color: color-mix(in oklch, var(--color-warning-soft) 85%, var(--hover-mix));
211
+ }
212
+ .soft.warning:not(:disabled):active {
213
+ background-color: color-mix(in oklch, var(--color-warning-soft) 70%, var(--hover-mix));
214
+ }
215
+ .soft.danger {
216
+ background-color: var(--color-danger-soft);
217
+ color: var(--color-danger);
218
+ }
219
+ .soft.danger:not(:disabled):hover {
220
+ background-color: color-mix(in oklch, var(--color-danger-soft) 85%, var(--hover-mix));
221
+ }
222
+ .soft.danger:not(:disabled):active {
223
+ background-color: color-mix(in oklch, var(--color-danger-soft) 70%, var(--hover-mix));
224
+ }
225
+ .soft.info {
226
+ background-color: var(--color-info-soft);
227
+ color: var(--color-info);
228
+ }
229
+ .soft.info:not(:disabled):hover {
230
+ background-color: color-mix(in oklch, var(--color-info-soft) 85%, var(--hover-mix));
231
+ }
232
+ .soft.info:not(:disabled):active {
233
+ background-color: color-mix(in oklch, var(--color-info-soft) 70%, var(--hover-mix));
234
+ }
235
+ .soft.foreground {
236
+ background-color: var(--color-foreground-soft);
237
+ color: var(--color-foreground);
238
+ }
239
+ .soft.foreground:not(:disabled):hover {
240
+ background-color: color-mix(in oklch, var(--color-foreground-soft) 85%, var(--hover-mix));
241
+ }
242
+ .soft.foreground:not(:disabled):active {
243
+ background-color: color-mix(in oklch, var(--color-foreground-soft) 70%, var(--hover-mix));
244
+ }
245
+ .soft.background {
246
+ background-color: var(--color-background-soft);
247
+ color: var(--color-background);
248
+ }
249
+ .soft.background:not(:disabled):hover {
250
+ background-color: color-mix(in oklch, var(--color-background-soft) 85%, var(--hover-mix));
251
+ }
252
+ .soft.background:not(:disabled):active {
253
+ background-color: color-mix(in oklch, var(--color-background-soft) 70%, var(--hover-mix));
254
+ }
255
+
256
+ /* Ghost variant */
257
+ .ghost {
258
+ background-color: transparent;
259
+ }
260
+ .ghost.primary {
261
+ color: var(--color-primary);
262
+ }
263
+ .ghost.primary:not(:disabled):hover {
264
+ background-color: color-mix(in srgb, var(--color-primary-soft) 50%, transparent);
265
+ }
266
+ .ghost.primary:not(:disabled):active {
267
+ background-color: var(--color-primary-soft);
268
+ }
269
+ .ghost.secondary {
270
+ color: var(--color-secondary);
271
+ }
272
+ .ghost.secondary:not(:disabled):hover {
273
+ background-color: color-mix(in srgb, var(--color-secondary-soft) 50%, transparent);
274
+ }
275
+ .ghost.secondary:not(:disabled):active {
276
+ background-color: var(--color-secondary-soft);
277
+ }
278
+ .ghost.success {
279
+ color: var(--color-success);
280
+ }
281
+ .ghost.success:not(:disabled):hover {
282
+ background-color: color-mix(in srgb, var(--color-success-soft) 50%, transparent);
283
+ }
284
+ .ghost.success:not(:disabled):active {
285
+ background-color: var(--color-success-soft);
286
+ }
287
+ .ghost.warning {
288
+ color: var(--color-warning);
289
+ }
290
+ .ghost.warning:not(:disabled):hover {
291
+ background-color: color-mix(in srgb, var(--color-warning-soft) 50%, transparent);
292
+ }
293
+ .ghost.warning:not(:disabled):active {
294
+ background-color: var(--color-warning-soft);
295
+ }
296
+ .ghost.danger {
297
+ color: var(--color-danger);
298
+ }
299
+ .ghost.danger:not(:disabled):hover {
300
+ background-color: color-mix(in srgb, var(--color-danger-soft) 50%, transparent);
301
+ }
302
+ .ghost.danger:not(:disabled):active {
303
+ background-color: var(--color-danger-soft);
304
+ }
305
+ .ghost.info {
306
+ color: var(--color-info);
307
+ }
308
+ .ghost.info:not(:disabled):hover {
309
+ background-color: color-mix(in srgb, var(--color-info-soft) 50%, transparent);
310
+ }
311
+ .ghost.info:not(:disabled):active {
312
+ background-color: var(--color-info-soft);
313
+ }
314
+ .ghost.foreground {
315
+ color: var(--color-foreground);
316
+ }
317
+ .ghost.foreground:not(:disabled):hover {
318
+ background-color: color-mix(in srgb, var(--color-foreground-soft) 50%, transparent);
319
+ }
320
+ .ghost.foreground:not(:disabled):active {
321
+ background-color: var(--color-foreground-soft);
322
+ }
323
+ .ghost.background {
324
+ color: var(--color-background);
325
+ }
326
+ .ghost.background:not(:disabled):hover {
327
+ background-color: color-mix(in srgb, var(--color-background-soft) 50%, transparent);
328
+ }
329
+ .ghost.background:not(:disabled):active {
330
+ background-color: var(--color-background-soft);
331
+ }
332
+ </style>
@@ -0,0 +1,6 @@
1
+ import type { SvelteHTMLElements } from 'svelte/elements';
2
+ import type { ButtonProps } from './types.ts';
3
+ type $$ComponentProps = ButtonProps & SvelteHTMLElements['button'];
4
+ declare const Button: import("svelte").Component<$$ComponentProps, {}, "">;
5
+ type Button = ReturnType<typeof Button>;
6
+ export default Button;
@@ -0,0 +1,316 @@
1
+ <script lang="ts">
2
+ import type { SvelteHTMLElements } from 'svelte/elements';
3
+ import type { IconButtonProps } from './types.js';
4
+ import Icon from '../icon/icon.svelte';
5
+
6
+ const {
7
+ name,
8
+ filled,
9
+ ariaLabel,
10
+ size = 'medium',
11
+ color = 'primary',
12
+ variant = 'filled',
13
+ disabled = false,
14
+ rounded = false,
15
+ onClick,
16
+ ...rest
17
+ }: IconButtonProps & SvelteHTMLElements['button'] = $props();
18
+ </script>
19
+
20
+ <button {...rest} class={`${size} ${color} ${variant}`} class:rounded {disabled} onclick={onClick}>
21
+ <Icon {name} contrastMode={variant === 'filled'} {color} {filled} {ariaLabel} {size} />
22
+ </button>
23
+
24
+ <style>
25
+ button {
26
+ display: inline-flex;
27
+ align-items: center;
28
+ justify-content: center;
29
+ border: none;
30
+ cursor: pointer;
31
+ transition:
32
+ background-color 0.15s ease,
33
+ transform 0.08s cubic-bezier(0.34, 1.56, 0.64, 1);
34
+ }
35
+
36
+ button:disabled {
37
+ opacity: 0.5;
38
+ cursor: not-allowed;
39
+ }
40
+
41
+ button:not(:disabled):active {
42
+ transform: scale(0.95);
43
+ }
44
+
45
+ /* Sizes */
46
+ .x-small {
47
+ width: 1.5rem;
48
+ height: 1.5rem;
49
+ border-radius: calc(var(--border-radius) * 0.75);
50
+ }
51
+ .small {
52
+ width: 2rem;
53
+ height: 2rem;
54
+ border-radius: calc(var(--border-radius));
55
+ }
56
+ .medium {
57
+ width: 2.5rem;
58
+ height: 2.5rem;
59
+ border-radius: calc(var(--border-radius) * 1.25);
60
+ }
61
+ .large {
62
+ width: 3rem;
63
+ height: 3rem;
64
+ border-radius: calc(var(--border-radius) * 1.5);
65
+ }
66
+ .x-large {
67
+ width: 4rem;
68
+ height: 4rem;
69
+ border-radius: calc(var(--border-radius) * 2);
70
+ }
71
+
72
+ .rounded {
73
+ border-radius: 50%;
74
+ }
75
+
76
+ /* Filled variant */
77
+ .filled.primary {
78
+ background-color: var(--color-primary);
79
+ color: var(--color-primary-contrast);
80
+ }
81
+ .filled.primary:not(:disabled):hover {
82
+ background-color: color-mix(in oklch, var(--color-primary) 85%, var(--hover-mix));
83
+ }
84
+ .filled.primary:not(:disabled):active {
85
+ background-color: color-mix(in oklch, var(--color-primary) 70%, var(--hover-mix));
86
+ }
87
+ .filled.secondary {
88
+ background-color: var(--color-secondary);
89
+ color: var(--color-secondary-contrast);
90
+ }
91
+ .filled.secondary:not(:disabled):hover {
92
+ background-color: color-mix(in oklch, var(--color-secondary) 85%, var(--hover-mix));
93
+ }
94
+ .filled.secondary:not(:disabled):active {
95
+ background-color: color-mix(in oklch, var(--color-secondary) 70%, var(--hover-mix));
96
+ }
97
+ .filled.success {
98
+ background-color: var(--color-success);
99
+ color: var(--color-success-contrast);
100
+ }
101
+ .filled.success:not(:disabled):hover {
102
+ background-color: color-mix(in oklch, var(--color-success) 85%, var(--hover-mix));
103
+ }
104
+ .filled.success:not(:disabled):active {
105
+ background-color: color-mix(in oklch, var(--color-success) 70%, var(--hover-mix));
106
+ }
107
+ .filled.warning {
108
+ background-color: var(--color-warning);
109
+ color: var(--color-warning-contrast);
110
+ }
111
+ .filled.warning:not(:disabled):hover {
112
+ background-color: color-mix(in oklch, var(--color-warning) 85%, var(--hover-mix));
113
+ }
114
+ .filled.warning:not(:disabled):active {
115
+ background-color: color-mix(in oklch, var(--color-warning) 70%, var(--hover-mix));
116
+ }
117
+ .filled.danger {
118
+ background-color: var(--color-danger);
119
+ color: var(--color-danger-contrast);
120
+ }
121
+ .filled.danger:not(:disabled):hover {
122
+ background-color: color-mix(in oklch, var(--color-danger) 85%, var(--hover-mix));
123
+ }
124
+ .filled.danger:not(:disabled):active {
125
+ background-color: color-mix(in oklch, var(--color-danger) 70%, var(--hover-mix));
126
+ }
127
+ .filled.info {
128
+ background-color: var(--color-info);
129
+ color: var(--color-info-contrast);
130
+ }
131
+ .filled.info:not(:disabled):hover {
132
+ background-color: color-mix(in oklch, var(--color-info) 85%, var(--hover-mix));
133
+ }
134
+ .filled.info:not(:disabled):active {
135
+ background-color: color-mix(in oklch, var(--color-info) 70%, var(--hover-mix));
136
+ }
137
+ .filled.foreground {
138
+ background-color: var(--color-foreground);
139
+ color: var(--color-background);
140
+ }
141
+ .filled.foreground:not(:disabled):hover {
142
+ background-color: color-mix(in oklch, var(--color-foreground) 85%, var(--hover-mix));
143
+ }
144
+ .filled.foreground:not(:disabled):active {
145
+ background-color: color-mix(in oklch, var(--color-foreground) 70%, var(--hover-mix));
146
+ }
147
+ .filled.background {
148
+ background-color: var(--color-background);
149
+ color: var(--color-foreground);
150
+ }
151
+ .filled.background:not(:disabled):hover {
152
+ background-color: color-mix(in oklch, var(--color-background) 85%, var(--hover-mix));
153
+ }
154
+ .filled.background:not(:disabled):active {
155
+ background-color: color-mix(in oklch, var(--color-background) 70%, var(--hover-mix));
156
+ }
157
+
158
+ /* Soft variant */
159
+ .soft.primary {
160
+ background-color: var(--color-primary-soft);
161
+ color: var(--color-primary);
162
+ }
163
+ .soft.primary:not(:disabled):hover {
164
+ background-color: color-mix(in oklch, var(--color-primary-soft) 85%, var(--hover-mix));
165
+ }
166
+ .soft.primary:not(:disabled):active {
167
+ background-color: color-mix(in oklch, var(--color-primary-soft) 70%, var(--hover-mix));
168
+ }
169
+ .soft.secondary {
170
+ background-color: var(--color-secondary-soft);
171
+ color: var(--color-secondary);
172
+ }
173
+ .soft.secondary:not(:disabled):hover {
174
+ background-color: color-mix(in oklch, var(--color-secondary-soft) 85%, var(--hover-mix));
175
+ }
176
+ .soft.secondary:not(:disabled):active {
177
+ background-color: color-mix(in oklch, var(--color-secondary-soft) 70%, var(--hover-mix));
178
+ }
179
+ .soft.success {
180
+ background-color: var(--color-success-soft);
181
+ color: var(--color-success);
182
+ }
183
+ .soft.success:not(:disabled):hover {
184
+ background-color: color-mix(in oklch, var(--color-success-soft) 85%, var(--hover-mix));
185
+ }
186
+ .soft.success:not(:disabled):active {
187
+ background-color: color-mix(in oklch, var(--color-success-soft) 70%, var(--hover-mix));
188
+ }
189
+ .soft.warning {
190
+ background-color: var(--color-warning-soft);
191
+ color: var(--color-warning);
192
+ }
193
+ .soft.warning:not(:disabled):hover {
194
+ background-color: color-mix(in oklch, var(--color-warning-soft) 85%, var(--hover-mix));
195
+ }
196
+ .soft.warning:not(:disabled):active {
197
+ background-color: color-mix(in oklch, var(--color-warning-soft) 70%, var(--hover-mix));
198
+ }
199
+ .soft.danger {
200
+ background-color: var(--color-danger-soft);
201
+ color: var(--color-danger);
202
+ }
203
+ .soft.danger:not(:disabled):hover {
204
+ background-color: color-mix(in oklch, var(--color-danger-soft) 85%, var(--hover-mix));
205
+ }
206
+ .soft.danger:not(:disabled):active {
207
+ background-color: color-mix(in oklch, var(--color-danger-soft) 70%, var(--hover-mix));
208
+ }
209
+ .soft.info {
210
+ background-color: var(--color-info-soft);
211
+ color: var(--color-info);
212
+ }
213
+ .soft.info:not(:disabled):hover {
214
+ background-color: color-mix(in oklch, var(--color-info-soft) 85%, var(--hover-mix));
215
+ }
216
+ .soft.info:not(:disabled):active {
217
+ background-color: color-mix(in oklch, var(--color-info-soft) 70%, var(--hover-mix));
218
+ }
219
+ .soft.foreground {
220
+ background-color: var(--color-foreground-soft);
221
+ color: var(--color-foreground);
222
+ }
223
+ .soft.foreground:not(:disabled):hover {
224
+ background-color: color-mix(in oklch, var(--color-foreground-soft) 85%, var(--hover-mix));
225
+ }
226
+ .soft.foreground:not(:disabled):active {
227
+ background-color: color-mix(in oklch, var(--color-foreground-soft) 70%, var(--hover-mix));
228
+ }
229
+ .soft.background {
230
+ background-color: var(--color-background-soft);
231
+ color: var(--color-background);
232
+ }
233
+ .soft.background:not(:disabled):hover {
234
+ background-color: color-mix(in oklch, var(--color-background-soft) 85%, var(--hover-mix));
235
+ }
236
+ .soft.background:not(:disabled):active {
237
+ background-color: color-mix(in oklch, var(--color-background-soft) 70%, var(--hover-mix));
238
+ }
239
+
240
+ /* Ghost variant */
241
+ .ghost {
242
+ background-color: transparent;
243
+ }
244
+ .ghost.primary {
245
+ color: var(--color-primary);
246
+ }
247
+ .ghost.primary:not(:disabled):hover {
248
+ background-color: color-mix(in srgb, var(--color-primary-soft) 50%, transparent);
249
+ }
250
+ .ghost.primary:not(:disabled):active {
251
+ background-color: var(--color-primary-soft);
252
+ }
253
+ .ghost.secondary {
254
+ color: var(--color-secondary);
255
+ }
256
+ .ghost.secondary:not(:disabled):hover {
257
+ background-color: color-mix(in srgb, var(--color-secondary-soft) 50%, transparent);
258
+ }
259
+ .ghost.secondary:not(:disabled):active {
260
+ background-color: var(--color-secondary-soft);
261
+ }
262
+ .ghost.success {
263
+ color: var(--color-success);
264
+ }
265
+ .ghost.success:not(:disabled):hover {
266
+ background-color: color-mix(in srgb, var(--color-success-soft) 50%, transparent);
267
+ }
268
+ .ghost.success:not(:disabled):active {
269
+ background-color: var(--color-success-soft);
270
+ }
271
+ .ghost.warning {
272
+ color: var(--color-warning);
273
+ }
274
+ .ghost.warning:not(:disabled):hover {
275
+ background-color: color-mix(in srgb, var(--color-warning-soft) 50%, transparent);
276
+ }
277
+ .ghost.warning:not(:disabled):active {
278
+ background-color: var(--color-warning-soft);
279
+ }
280
+ .ghost.danger {
281
+ color: var(--color-danger);
282
+ }
283
+ .ghost.danger:not(:disabled):hover {
284
+ background-color: color-mix(in srgb, var(--color-danger-soft) 50%, transparent);
285
+ }
286
+ .ghost.danger:not(:disabled):active {
287
+ background-color: var(--color-danger-soft);
288
+ }
289
+ .ghost.info {
290
+ color: var(--color-info);
291
+ }
292
+ .ghost.info:not(:disabled):hover {
293
+ background-color: color-mix(in srgb, var(--color-info-soft) 50%, transparent);
294
+ }
295
+ .ghost.info:not(:disabled):active {
296
+ background-color: var(--color-info-soft);
297
+ }
298
+ .ghost.foreground {
299
+ color: var(--color-foreground);
300
+ }
301
+ .ghost.foreground:not(:disabled):hover {
302
+ background-color: color-mix(in srgb, var(--color-foreground-soft) 50%, transparent);
303
+ }
304
+ .ghost.foreground:not(:disabled):active {
305
+ background-color: var(--color-foreground-soft);
306
+ }
307
+ .ghost.background {
308
+ color: var(--color-background);
309
+ }
310
+ .ghost.background:not(:disabled):hover {
311
+ background-color: color-mix(in srgb, var(--color-background-soft) 50%, transparent);
312
+ }
313
+ .ghost.background:not(:disabled):active {
314
+ background-color: var(--color-background-soft);
315
+ }
316
+ </style>
@@ -0,0 +1,6 @@
1
+ import type { SvelteHTMLElements } from 'svelte/elements';
2
+ import type { IconButtonProps } from './types.ts';
3
+ type $$ComponentProps = IconButtonProps & SvelteHTMLElements['button'];
4
+ declare const IconButton: import("svelte").Component<$$ComponentProps, {}, "">;
5
+ type IconButton = ReturnType<typeof IconButton>;
6
+ export default IconButton;
@@ -0,0 +1,2 @@
1
+ export * from './icon-button.svelte';
2
+ export * from './types.ts';
@@ -0,0 +1,2 @@
1
+ export * from './icon-button.svelte';
2
+ export * from "./types.js";
@@ -0,0 +1,17 @@
1
+ import type { IconProps } from '../icon/types.ts';
2
+ import type { Color, Size, Variant } from '../types.ts';
3
+ export interface BaseButtonProps {
4
+ size?: Size;
5
+ color?: Color;
6
+ disabled?: boolean;
7
+ onClick: () => void;
8
+ variant?: Variant;
9
+ }
10
+ export interface IconButtonProps extends BaseButtonProps, Pick<IconProps, 'name' | 'filled' | 'ariaLabel'> {
11
+ rounded?: boolean;
12
+ }
13
+ export interface ButtonProps extends BaseButtonProps {
14
+ label: string;
15
+ wide?: boolean;
16
+ icon?: Pick<IconProps, 'name' | 'filled' | 'ariaLabel'>;
17
+ }
@@ -0,0 +1 @@
1
+ export {};