@placeholderco/placeholder-ui 1.0.3 → 1.0.6

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 (136) hide show
  1. package/LICENSE +26 -26
  2. package/README.md +179 -179
  3. package/dist/display/Alert.svelte +179 -179
  4. package/dist/display/Avatar.svelte +166 -166
  5. package/dist/display/LinkCollection.svelte +161 -161
  6. package/dist/display/Paper.svelte +118 -118
  7. package/dist/form/Autocomplete.svelte +223 -191
  8. package/dist/form/Autocomplete.svelte.d.ts +3 -1
  9. package/dist/form/AutocompleteMulti.svelte +356 -0
  10. package/dist/form/AutocompleteMulti.svelte.d.ts +28 -0
  11. package/dist/form/Checkbox.svelte +201 -201
  12. package/dist/form/Chips.svelte +128 -128
  13. package/dist/form/ComboBox.svelte +158 -158
  14. package/dist/form/ComboBox.svelte.d.ts +1 -1
  15. package/dist/form/ComboBoxItemBuilder.svelte +460 -460
  16. package/dist/form/ComboBoxMulti.svelte +197 -197
  17. package/dist/form/ComboBoxMulti.svelte.d.ts +1 -1
  18. package/dist/form/CronBuilder.svelte +693 -693
  19. package/dist/form/DatePicker.svelte +672 -672
  20. package/dist/form/DateTimePicker.svelte +712 -712
  21. package/dist/form/FileInput.svelte +235 -235
  22. package/dist/form/FormGroup.svelte +68 -68
  23. package/dist/form/Number.svelte +238 -238
  24. package/dist/form/PasswordInput.svelte +252 -252
  25. package/dist/form/RadioGroup.svelte +210 -210
  26. package/dist/form/Rating.svelte +235 -235
  27. package/dist/form/SegmentedControl.svelte +149 -149
  28. package/dist/form/Select.svelte +590 -590
  29. package/dist/form/Select.svelte.d.ts +1 -1
  30. package/dist/form/SelectMulti.svelte +613 -613
  31. package/dist/form/SelectMulti.svelte.d.ts +1 -1
  32. package/dist/form/Slider.svelte +358 -358
  33. package/dist/form/Switch.svelte +147 -147
  34. package/dist/form/TextArea.svelte +148 -148
  35. package/dist/form/Textbox.svelte +228 -228
  36. package/dist/form/TimePicker.svelte +267 -267
  37. package/dist/icon/Icon.svelte +52 -52
  38. package/dist/icon/alert-octagon.svg +5 -5
  39. package/dist/icon/alert-triangle.svg +5 -5
  40. package/dist/icon/archive.svg +1 -1
  41. package/dist/icon/arrow-down.svg +1 -1
  42. package/dist/icon/arrow-left.svg +1 -1
  43. package/dist/icon/arrow-right.svg +1 -1
  44. package/dist/icon/arrow-up.svg +1 -1
  45. package/dist/icon/at.svg +1 -1
  46. package/dist/icon/bell.svg +1 -1
  47. package/dist/icon/bookmark.svg +1 -1
  48. package/dist/icon/calendar.svg +1 -1
  49. package/dist/icon/camera.svg +1 -1
  50. package/dist/icon/chart-bar.svg +1 -1
  51. package/dist/icon/chart-line.svg +1 -1
  52. package/dist/icon/chart-pie.svg +1 -1
  53. package/dist/icon/checkbox.svg +1 -1
  54. package/dist/icon/checklist.svg +1 -1
  55. package/dist/icon/circle-check.svg +1 -1
  56. package/dist/icon/circle-x.svg +1 -1
  57. package/dist/icon/clock.svg +1 -1
  58. package/dist/icon/credit-card.svg +1 -1
  59. package/dist/icon/dots-vertical.svg +1 -1
  60. package/dist/icon/dots.svg +1 -1
  61. package/dist/icon/external-link.svg +1 -1
  62. package/dist/icon/eye-off.svg +1 -1
  63. package/dist/icon/eye.svg +1 -1
  64. package/dist/icon/filter.svg +1 -1
  65. package/dist/icon/fingerprint.svg +1 -1
  66. package/dist/icon/flag.svg +1 -1
  67. package/dist/icon/heart.svg +1 -1
  68. package/dist/icon/home.svg +1 -1
  69. package/dist/icon/key.svg +1 -1
  70. package/dist/icon/list-check.svg +1 -1
  71. package/dist/icon/login.svg +1 -1
  72. package/dist/icon/logout.svg +1 -1
  73. package/dist/icon/map-pin.svg +1 -1
  74. package/dist/icon/maximize.svg +1 -1
  75. package/dist/icon/microphone.svg +1 -1
  76. package/dist/icon/minimize.svg +1 -1
  77. package/dist/icon/note.svg +1 -1
  78. package/dist/icon/player-pause.svg +1 -1
  79. package/dist/icon/printer.svg +1 -1
  80. package/dist/icon/qrcode.svg +1 -1
  81. package/dist/icon/send.svg +1 -1
  82. package/dist/icon/settings.svg +1 -1
  83. package/dist/icon/share.svg +1 -1
  84. package/dist/icon/shopping-cart.svg +1 -1
  85. package/dist/icon/sort-ascending.svg +1 -1
  86. package/dist/icon/sort-descending.svg +1 -1
  87. package/dist/icon/star.svg +1 -1
  88. package/dist/icon/tag.svg +1 -1
  89. package/dist/icon/trending-down.svg +1 -1
  90. package/dist/icon/trending-up.svg +1 -1
  91. package/dist/icon/upload.svg +1 -1
  92. package/dist/icon/volume-off.svg +1 -1
  93. package/dist/icon/volume.svg +1 -1
  94. package/dist/icon/world.svg +1 -1
  95. package/dist/icon/zoom-in.svg +1 -1
  96. package/dist/icon/zoom-out.svg +1 -1
  97. package/dist/index.d.ts +1 -0
  98. package/dist/index.js +1 -0
  99. package/dist/layout/AppShell.svelte +169 -169
  100. package/dist/layout/CustomNavbar.svelte +61 -61
  101. package/dist/layout/Navbar.svelte +206 -206
  102. package/dist/layout/NavbarItemDisplay.svelte +29 -29
  103. package/dist/layout/Sidenav.svelte +712 -712
  104. package/dist/styles/components.css +199 -199
  105. package/dist/styles/dark.css +146 -146
  106. package/dist/styles/index.css +116 -116
  107. package/dist/styles/reset.css +110 -110
  108. package/dist/styles/semantic.css +86 -86
  109. package/dist/styles/tokens.css +203 -197
  110. package/dist/styles/utilities.css +523 -523
  111. package/dist/ui/Accordion.svelte +289 -289
  112. package/dist/ui/ActionIcon.svelte +76 -76
  113. package/dist/ui/Badge.svelte +329 -279
  114. package/dist/ui/Breadcrumbs.svelte +131 -131
  115. package/dist/ui/Button.svelte +432 -370
  116. package/dist/ui/ButtonVariant.d.ts +1 -1
  117. package/dist/ui/Dialog.svelte +307 -307
  118. package/dist/ui/Drawer.svelte +524 -524
  119. package/dist/ui/Dropdown.svelte +97 -97
  120. package/dist/ui/Dropzone.svelte +122 -122
  121. package/dist/ui/Link.svelte +32 -32
  122. package/dist/ui/Loader.svelte +70 -70
  123. package/dist/ui/LoadingOverlay.svelte +53 -53
  124. package/dist/ui/Pagination.svelte +135 -135
  125. package/dist/ui/Popover.svelte +225 -225
  126. package/dist/ui/Progress.svelte +191 -191
  127. package/dist/ui/RingProgress.svelte +141 -141
  128. package/dist/ui/Skeleton.svelte +85 -85
  129. package/dist/ui/Stepper.svelte +355 -355
  130. package/dist/ui/Table.svelte +345 -345
  131. package/dist/ui/Tabs.svelte +146 -146
  132. package/dist/ui/ThemeSwitcher.svelte +39 -39
  133. package/dist/ui/Timeline.svelte +225 -225
  134. package/dist/ui/Toaster.svelte +6 -6
  135. package/dist/ui/Tooltip.svelte +434 -434
  136. package/package.json +14 -14
@@ -1,370 +1,432 @@
1
- <script lang="ts">
2
- import type { Snippet } from 'svelte';
3
- import Icon from '../icon/Icon.svelte';
4
- import type { ButtonVariant } from './ButtonVariant.js';
5
- import type { ButtonSize } from './ButtonSize.js';
6
- import Loader from './Loader.svelte';
7
-
8
- interface Props {
9
- variant?: ButtonVariant;
10
- size?: ButtonSize;
11
- href?: string;
12
- loading?: boolean;
13
- disabled?: boolean;
14
- effectsDisabled?: boolean;
15
- svg?: string;
16
- rightSvg?: string;
17
- iconSize?: string;
18
- target?: undefined | '_self' | '_blank';
19
- class?: string;
20
- children: Snippet;
21
- onclick?: (event: MouseEvent) => void;
22
- }
23
-
24
- let {
25
- variant = 'primary',
26
- size = 'md',
27
- href = undefined,
28
- loading = false,
29
- disabled = false,
30
- effectsDisabled = false,
31
- svg = undefined,
32
- rightSvg = undefined,
33
- iconSize = '18px',
34
- target = undefined,
35
- class: buttonClass = '',
36
- children,
37
- onclick = () => {}
38
- }: Props = $props();
39
-
40
- let isDisabled = $derived(loading || disabled);
41
- let isLink = $derived(!!href);
42
-
43
- let elClass = $derived(`pui-button ${buttonClass} ${variant} size-${size}${effectsDisabled ? ' effects-disabled' : ''}`);
44
- </script>
45
-
46
- {#snippet buttonContent()}
47
- <div class="button">
48
- {#if loading}
49
- <div class="button-loader" style="height: {iconSize}">
50
- <Loader
51
- class={variant === 'secondary' ? 'text-primary' : 'text-secondary'}
52
- sizeOverride={iconSize}
53
- />
54
- </div>
55
- {:else if svg}
56
- <div class="button-icon">
57
- <Icon {svg} size={iconSize} />
58
- </div>
59
- {/if}
60
- {@render children?.()}
61
- {#if rightSvg}
62
- <div class="button-icon">
63
- <Icon svg={rightSvg} size={iconSize} />
64
- </div>
65
- {/if}
66
- </div>
67
- {/snippet}
68
-
69
- {#if isLink && href && !disabled}
70
- <a {target} class={elClass} {href} {onclick}>
71
- {@render buttonContent?.()}
72
- </a>
73
- {:else}
74
- <button class={elClass} disabled={isDisabled} {onclick}>
75
- {@render buttonContent()}
76
- </button>
77
- {/if}
78
-
79
- <style>
80
- .pui-button {
81
- padding: var(--pui-spacing-2) var(--pui-spacing-4);
82
- border-radius: var(--pui-radius-lg);
83
- cursor: pointer;
84
- transition: all var(--pui-transition-fast) var(--pui-ease-in-out);
85
- }
86
-
87
- .size-xs {
88
- padding: var(--pui-spacing-1) var(--pui-spacing-2);
89
- font-size: var(--pui-font-size-xs);
90
- line-height: var(--pui-line-height-none);
91
- }
92
-
93
- .size-sm {
94
- padding: var(--pui-spacing-1_5) var(--pui-spacing-3);
95
- font-size: var(--pui-font-size-sm);
96
- line-height: var(--pui-line-height-none);
97
- }
98
-
99
- .size-md {
100
- padding: var(--pui-spacing-2) var(--pui-spacing-4);
101
- font-size: var(--pui-font-size-base);
102
- line-height: var(--pui-line-height-tight);
103
- }
104
-
105
- .size-lg {
106
- padding: var(--pui-spacing-2_5) var(--pui-spacing-5);
107
- font-size: var(--pui-font-size-md);
108
- line-height: var(--pui-line-height-tight);
109
- }
110
-
111
- .size-xl {
112
- padding: var(--pui-spacing-3) var(--pui-spacing-6);
113
- font-size: var(--pui-font-size-lg);
114
- line-height: var(--pui-line-height-snug);
115
- }
116
-
117
- :global(.paper-title) .pui-button {
118
- padding: var(--pui-spacing-1_5) var(--pui-spacing-2);
119
- }
120
-
121
- .white {
122
- --button-text-color: var(--pui-color-primary);
123
- --button-bg-color: var(--pui-color-white);
124
- --button-border: 0;
125
- --button-hover-bg-color: var(--pui-color-accent);
126
- --button-active-bg-color: var(--pui-color-accent-light);
127
- --button-outline-color: var(--pui-color-accent);
128
- }
129
-
130
- .muted {
131
- font-weight: var(--pui-font-weight-normal);
132
- box-sizing: border-box;
133
- --button-bg-color: var(--pui-input-bg);
134
- --button-border: 1px solid var(--pui-border-default);
135
- --button-hover-bg-color: var(--pui-color-primary-light);
136
- --button-active-bg-color: var(--pui-color-gray-500);
137
- --button-outline-color: var(--pui-text-primary);
138
- }
139
-
140
- .muted-subtle {
141
- font-weight: var(--pui-font-weight-normal);
142
- box-sizing: border-box;
143
- --button-bg-color: transparent;
144
- --button-hover-bg-color: var(--pui-color-primary-light);
145
- --button-active-bg-color: var(--pui-color-gray-500);
146
- --button-outline-color: var(--pui-text-primary);
147
- }
148
-
149
- .muted-selected {
150
- --button-bg-color: var(--pui-accent-color);
151
- --button-border: 1px solid var(--pui-accent-color);
152
- --button-text-color: var(--pui-color-white);
153
- font-weight: var(--pui-font-weight-normal);
154
- }
155
-
156
- .auto-subtle {
157
- --button-text-color: var(--pui-color-primary);
158
- --button-bg-color: initial;
159
- --button-hover-bg-color: var(--pui-color-primary-light);
160
- --button-hover-text-color: var(--pui-color-primary);
161
- --button-active-bg-color: var(--pui-color-primary);
162
- --button-active-text-color: var(--pui-color-secondary);
163
- --button-outline-color: var(--pui-color-accent);
164
- }
165
-
166
- .danger {
167
- --button-text-color: var(--pui-color-white);
168
- --button-bg-color: var(--pui-color-danger);
169
- --button-hover-bg-color: var(--pui-color-danger-hover);
170
- --button-active-bg-color: var(--pui-color-danger-active);
171
- --button-outline-color: var(--pui-color-accent);
172
-
173
- :global(.loader) {
174
- color: var(--pui-color-white);
175
- }
176
- }
177
-
178
- .danger-subtle {
179
- background-color: initial;
180
- color: var(--pui-text-danger);
181
-
182
- &:hover:not(:disabled) {
183
- background-color: var(--pui-color-danger-subtle);
184
- }
185
-
186
- :global(.loader) {
187
- color: var(--pui-text-danger);
188
- }
189
- }
190
-
191
- .secondary {
192
- --button-text-color: var(--pui-color-primary);
193
- --button-bg-color: var(--pui-color-secondary);
194
- --button-hover-bg-color: var(--pui-color-accent);
195
- --button-active-bg-color: var(--pui-color-accent-light);
196
- --button-outline-color: var(--pui-color-accent);
197
- }
198
-
199
- .secondary-outline {
200
- --button-text-color: var(--pui-color-secondary);
201
- --button-bg-color: initial;
202
- --button-border: 1px solid var(--pui-color-secondary);
203
- --button-hover-text-color: var(--pui-color-accent);
204
- --button-hover-border: 1px solid var(--pui-color-accent);
205
- --button-active-text-color: var(--pui-color-accent-light);
206
- --button-active-border: 1px solid var(--pui-color-accent-light);
207
- --button-outline-color: var(--pui-color-accent);
208
- }
209
-
210
- .secondary-subtle {
211
- --button-text-color: var(--pui-color-secondary);
212
- --button-bg-color: initial;
213
- --button-hover-text-color: var(--pui-color-primary);
214
- --button-hover-bg-color: var(--pui-color-primary-light);
215
- --button-active-text-color: var(--pui-color-white);
216
- --button-active-bg-color: var(--pui-color-secondary-dark);
217
- --button-outline-color: var(--pui-color-accent);
218
- }
219
-
220
- .primary {
221
- --button-bg-color: var(--pui-color-primary);
222
- --button-text-color: var(--pui-color-white);
223
- --button-hover-bg-color: var(--pui-color-primary-light);
224
- --button-active-bg-color: var(--pui-color-primary-dark);
225
- }
226
-
227
- .primary-outline {
228
- --button-text-color: var(--pui-color-primary);
229
- --button-bg-color: initial;
230
- --button-border: 1px solid var(--pui-color-primary);
231
- --button-hover-text-color: var(--pui-color-primary-light);
232
- --button-hover-border: 1px solid var(--pui-color-primary-light);
233
- --button-active-text-color: var(--pui-color-primary-dark);
234
- --button-active-border: 1px solid var(--pui-color-primary-dark);
235
- }
236
-
237
- .primary-subtle {
238
- --button-text-color: var(--pui-color-primary);
239
- --button-bg-color: initial;
240
- --button-hover-text-color: var(--pui-color-white);
241
- --button-hover-bg-color: var(--pui-color-primary);
242
- --button-active-text-color: var(--pui-color-white);
243
- --button-active-bg-color: var(--pui-color-primary-dark);
244
- }
245
-
246
- .accent {
247
- --button-text-color: var(--pui-color-black);
248
- --button-bg-color: var(--pui-color-accent);
249
- --button-hover-bg-color: var(--pui-color-accent-dark);
250
- --button-active-bg-color: var(--pui-color-accent-light);
251
- --button-outline-color: var(--pui-color-accent);
252
- }
253
-
254
- .accent-subtle {
255
- background-color: initial;
256
- color: var(--pui-color-accent-dark);
257
-
258
- &:hover:not(:disabled) {
259
- background-color: rgba(var(--pui-color-accent-rgb), 0.25);
260
- }
261
-
262
- &:focus-visible {
263
- outline-color: var(--pui-color-accent);
264
- }
265
-
266
- :global(.loader) {
267
- color: var(--pui-color-accent-dark);
268
- }
269
- }
270
-
271
- button,
272
- a {
273
- border-color: var(--pui-color-primary);
274
- font-size: var(--pui-font-size-base);
275
- font-weight: var(--pui-font-weight-semibold);
276
- line-height: var(--pui-line-height-tight);
277
- letter-spacing: var(--pui-letter-spacing-wide);
278
- transition:
279
- color var(--pui-transition-fast) var(--pui-ease-in-out),
280
- background-color var(--pui-transition-fast) var(--pui-ease-in-out),
281
- border-color var(--pui-transition-fast) var(--pui-ease-in-out),
282
- box-shadow var(--pui-transition-fast) var(--pui-ease-in-out);
283
-
284
- color: var(--button-text-color);
285
- background-color: var(--button-bg-color);
286
- border: var(--button-border, 0);
287
-
288
- &:hover:not(:disabled, .effects-disabled) {
289
- color: var(--button-hover-text-color, var(--button-text-color));
290
- background-color: var(--button-hover-bg-color, var(--button-bg-color));
291
- border: var(--button-hover-border, var(--button-border, 0));
292
- }
293
-
294
- &:active:not(:disabled, .effects-disabled) {
295
- color: var(--button-active-text-color, var(--button-text-color));
296
- background-color: var(--button-active-bg-color, var(--button-bg-color));
297
- border: var(--button-active-border, var(--button-border, 0));
298
- }
299
-
300
- &:focus-visible {
301
- outline: solid var(--pui-focus-ring-width) var(--button-outline-color, var(--pui-color-secondary-dark));
302
- outline-offset: var(--pui-focus-ring-offset);
303
- }
304
-
305
- &:disabled {
306
- opacity: 50%;
307
- }
308
- }
309
-
310
- :global(.dark) {
311
- .muted {
312
- --button-text-color: var(--pui-color-white);
313
- --button-active-bg-color: var(--pui-color-dark-300);
314
- }
315
-
316
- .muted-subtle {
317
- --button-active-bg-color: var(--pui-color-dark-300);
318
- }
319
-
320
- .muted-selected {
321
- --button-text-color: var(--pui-color-white);
322
- }
323
-
324
- .auto-subtle {
325
- --button-text-color: var(--pui-color-white);
326
- --button-hover-text-color: var(--pui-color-white);
327
- --button-hover-bg-color: var(--pui-color-primary-light);
328
- --button-active-text-color: var(--pui-color-secondary);
329
- --button-active-bg-color: var(--pui-color-primary);
330
- --button-outline-color: var(--pui-color-secondary);
331
- }
332
- }
333
-
334
- .action-icon {
335
- padding: var(--pui-spacing-1);
336
- }
337
-
338
- .action-icon > div {
339
- display: flex;
340
- justify-content: center;
341
- align-items: center;
342
- }
343
-
344
- .input-button {
345
- border-top-left-radius: 0;
346
- border-bottom-left-radius: 0;
347
- padding: 0 var(--pui-spacing-2);
348
- height: 100%;
349
- }
350
-
351
- .button-icon {
352
- display: inline-flex;
353
- align-items: center;
354
- height: 100%;
355
- }
356
-
357
- .button {
358
- display: flex;
359
- align-items: center;
360
- gap: var(--pui-spacing-2);
361
- width: auto;
362
- justify-content: center;
363
- user-select: none;
364
- }
365
-
366
- a.pui-button {
367
- text-decoration: none;
368
- display: inline-flex;
369
- }
370
- </style>
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+ import Icon from '../icon/Icon.svelte';
4
+ import type { ButtonVariant } from './ButtonVariant.js';
5
+ import type { ButtonSize } from './ButtonSize.js';
6
+ import Loader from './Loader.svelte';
7
+
8
+ interface Props {
9
+ variant?: ButtonVariant;
10
+ size?: ButtonSize;
11
+ href?: string;
12
+ loading?: boolean;
13
+ disabled?: boolean;
14
+ effectsDisabled?: boolean;
15
+ svg?: string;
16
+ rightSvg?: string;
17
+ iconSize?: string;
18
+ target?: undefined | '_self' | '_blank';
19
+ class?: string;
20
+ children: Snippet;
21
+ onclick?: (event: MouseEvent) => void;
22
+ }
23
+
24
+ let {
25
+ variant = 'primary',
26
+ size = 'md',
27
+ href = undefined,
28
+ loading = false,
29
+ disabled = false,
30
+ effectsDisabled = false,
31
+ svg = undefined,
32
+ rightSvg = undefined,
33
+ iconSize = '18px',
34
+ target = undefined,
35
+ class: buttonClass = '',
36
+ children,
37
+ onclick = () => {}
38
+ }: Props = $props();
39
+
40
+ let isDisabled = $derived(loading || disabled);
41
+ let isLink = $derived(!!href);
42
+
43
+ let elClass = $derived(`pui-button ${buttonClass} ${variant} size-${size}${effectsDisabled ? ' effects-disabled' : ''}`);
44
+ </script>
45
+
46
+ {#snippet buttonContent()}
47
+ <div class="button">
48
+ {#if loading}
49
+ <div class="button-loader" style="height: {iconSize}">
50
+ <Loader
51
+ class={variant === 'secondary' ? 'text-primary' : 'text-secondary'}
52
+ sizeOverride={iconSize}
53
+ />
54
+ </div>
55
+ {:else if svg}
56
+ <div class="button-icon">
57
+ <Icon {svg} size={iconSize} />
58
+ </div>
59
+ {/if}
60
+ {@render children?.()}
61
+ {#if rightSvg}
62
+ <div class="button-icon">
63
+ <Icon svg={rightSvg} size={iconSize} />
64
+ </div>
65
+ {/if}
66
+ </div>
67
+ {/snippet}
68
+
69
+ {#if isLink && href && !disabled}
70
+ <a {target} class={elClass} {href} {onclick}>
71
+ {@render buttonContent?.()}
72
+ </a>
73
+ {:else}
74
+ <button class={elClass} disabled={isDisabled} {onclick}>
75
+ {@render buttonContent()}
76
+ </button>
77
+ {/if}
78
+
79
+ <style>
80
+ .pui-button {
81
+ padding: var(--pui-spacing-2) var(--pui-spacing-4);
82
+ border-radius: var(--pui-radius-lg);
83
+ cursor: pointer;
84
+ transition: all var(--pui-transition-fast) var(--pui-ease-in-out);
85
+ }
86
+
87
+ .size-xs {
88
+ padding: var(--pui-spacing-1) var(--pui-spacing-2);
89
+ font-size: var(--pui-font-size-xs);
90
+ line-height: var(--pui-line-height-none);
91
+ }
92
+
93
+ .size-sm {
94
+ padding: var(--pui-spacing-1_5) var(--pui-spacing-3);
95
+ font-size: var(--pui-font-size-sm);
96
+ line-height: var(--pui-line-height-none);
97
+ }
98
+
99
+ .size-md {
100
+ padding: var(--pui-spacing-2) var(--pui-spacing-4);
101
+ font-size: var(--pui-font-size-base);
102
+ line-height: var(--pui-line-height-tight);
103
+ }
104
+
105
+ .size-lg {
106
+ padding: var(--pui-spacing-2_5) var(--pui-spacing-5);
107
+ font-size: var(--pui-font-size-md);
108
+ line-height: var(--pui-line-height-tight);
109
+ }
110
+
111
+ .size-xl {
112
+ padding: var(--pui-spacing-3) var(--pui-spacing-6);
113
+ font-size: var(--pui-font-size-lg);
114
+ line-height: var(--pui-line-height-snug);
115
+ }
116
+
117
+ :global(.paper-title) .pui-button {
118
+ padding: var(--pui-spacing-1_5) var(--pui-spacing-2);
119
+ }
120
+
121
+ .white {
122
+ --button-text-color: var(--pui-color-primary);
123
+ --button-bg-color: var(--pui-color-white);
124
+ --button-border: 0;
125
+ --button-hover-bg-color: var(--pui-color-accent);
126
+ --button-active-bg-color: var(--pui-color-accent-light);
127
+ --button-outline-color: var(--pui-color-accent);
128
+ }
129
+
130
+ .muted {
131
+ font-weight: var(--pui-font-weight-normal);
132
+ box-sizing: border-box;
133
+ --button-bg-color: var(--pui-input-bg);
134
+ --button-border: 1px solid var(--pui-border-default);
135
+ --button-hover-bg-color: var(--pui-color-primary-light);
136
+ --button-active-bg-color: var(--pui-color-gray-500);
137
+ --button-outline-color: var(--pui-text-primary);
138
+ }
139
+
140
+ .muted-subtle {
141
+ font-weight: var(--pui-font-weight-normal);
142
+ box-sizing: border-box;
143
+ --button-bg-color: transparent;
144
+ --button-hover-bg-color: var(--pui-color-primary-light);
145
+ --button-active-bg-color: var(--pui-color-gray-500);
146
+ --button-outline-color: var(--pui-text-primary);
147
+ }
148
+
149
+ .muted-selected {
150
+ --button-bg-color: var(--pui-accent-color);
151
+ --button-border: 1px solid var(--pui-accent-color);
152
+ --button-text-color: var(--pui-color-white);
153
+ font-weight: var(--pui-font-weight-normal);
154
+ }
155
+
156
+ .auto-subtle {
157
+ --button-text-color: var(--pui-color-primary);
158
+ --button-bg-color: initial;
159
+ --button-hover-bg-color: var(--pui-color-primary-light);
160
+ --button-hover-text-color: var(--pui-color-primary);
161
+ --button-active-bg-color: var(--pui-color-primary);
162
+ --button-active-text-color: var(--pui-color-secondary);
163
+ --button-outline-color: var(--pui-color-accent);
164
+ }
165
+
166
+ .danger {
167
+ --button-text-color: var(--pui-color-white);
168
+ --button-bg-color: var(--pui-color-danger);
169
+ --button-hover-bg-color: var(--pui-color-danger-hover);
170
+ --button-active-bg-color: var(--pui-color-danger-active);
171
+ --button-outline-color: var(--pui-color-accent);
172
+
173
+ :global(.loader) {
174
+ color: var(--pui-color-white);
175
+ }
176
+ }
177
+
178
+ .danger-subtle {
179
+ background-color: initial;
180
+ color: var(--pui-text-danger);
181
+
182
+ &:hover:not(:disabled) {
183
+ background-color: var(--pui-color-danger-subtle);
184
+ }
185
+
186
+ :global(.loader) {
187
+ color: var(--pui-text-danger);
188
+ }
189
+ }
190
+
191
+ .secondary {
192
+ --button-text-color: var(--pui-color-primary);
193
+ --button-bg-color: var(--pui-color-secondary);
194
+ --button-hover-bg-color: var(--pui-color-accent);
195
+ --button-active-bg-color: var(--pui-color-accent-light);
196
+ --button-outline-color: var(--pui-color-accent);
197
+ }
198
+
199
+ .secondary-outline {
200
+ --button-text-color: var(--pui-color-secondary);
201
+ --button-bg-color: initial;
202
+ --button-border: 1px solid var(--pui-color-secondary);
203
+ --button-hover-text-color: var(--pui-color-accent);
204
+ --button-hover-border: 1px solid var(--pui-color-accent);
205
+ --button-active-text-color: var(--pui-color-accent-light);
206
+ --button-active-border: 1px solid var(--pui-color-accent-light);
207
+ --button-outline-color: var(--pui-color-accent);
208
+ }
209
+
210
+ .secondary-subtle {
211
+ --button-text-color: var(--pui-color-secondary);
212
+ --button-bg-color: initial;
213
+ --button-hover-text-color: var(--pui-color-primary);
214
+ --button-hover-bg-color: var(--pui-color-primary-light);
215
+ --button-active-text-color: var(--pui-color-white);
216
+ --button-active-bg-color: var(--pui-color-secondary-dark);
217
+ --button-outline-color: var(--pui-color-accent);
218
+ }
219
+
220
+ .primary {
221
+ --button-bg-color: var(--pui-color-primary);
222
+ --button-text-color: var(--pui-color-white);
223
+ --button-hover-bg-color: var(--pui-color-primary-light);
224
+ --button-active-bg-color: var(--pui-color-primary-dark);
225
+ }
226
+
227
+ .primary-outline {
228
+ --button-text-color: var(--pui-color-primary);
229
+ --button-bg-color: initial;
230
+ --button-border: 1px solid var(--pui-color-primary);
231
+ --button-hover-text-color: var(--pui-color-primary-light);
232
+ --button-hover-border: 1px solid var(--pui-color-primary-light);
233
+ --button-active-text-color: var(--pui-color-primary-dark);
234
+ --button-active-border: 1px solid var(--pui-color-primary-dark);
235
+ }
236
+
237
+ .primary-subtle {
238
+ --button-text-color: var(--pui-color-primary);
239
+ --button-bg-color: initial;
240
+ --button-hover-text-color: var(--pui-color-white);
241
+ --button-hover-bg-color: var(--pui-color-primary);
242
+ --button-active-text-color: var(--pui-color-white);
243
+ --button-active-bg-color: var(--pui-color-primary-dark);
244
+ }
245
+
246
+ .accent {
247
+ --button-text-color: var(--pui-color-black);
248
+ --button-bg-color: var(--pui-color-accent);
249
+ --button-hover-bg-color: var(--pui-color-accent-dark);
250
+ --button-active-bg-color: var(--pui-color-accent-light);
251
+ --button-outline-color: var(--pui-color-accent);
252
+ }
253
+
254
+ .accent-subtle {
255
+ background-color: initial;
256
+ color: var(--pui-color-accent-dark);
257
+
258
+ &:hover:not(:disabled) {
259
+ background-color: rgba(var(--pui-color-accent-rgb), 0.25);
260
+ }
261
+
262
+ &:focus-visible {
263
+ outline-color: var(--pui-color-accent);
264
+ }
265
+
266
+ :global(.loader) {
267
+ color: var(--pui-color-accent-dark);
268
+ }
269
+ }
270
+
271
+ .success {
272
+ --button-text-color: var(--pui-color-white);
273
+ --button-bg-color: var(--pui-color-success);
274
+ --button-hover-bg-color: var(--pui-color-success-hover);
275
+ --button-active-bg-color: var(--pui-color-success-active);
276
+ --button-outline-color: var(--pui-color-success);
277
+
278
+ :global(.loader) {
279
+ color: var(--pui-color-white);
280
+ }
281
+ }
282
+
283
+ .success-subtle {
284
+ background-color: initial;
285
+ color: var(--pui-color-success);
286
+
287
+ &:hover:not(:disabled) {
288
+ background-color: var(--pui-color-success-subtle);
289
+ }
290
+
291
+ :global(.loader) {
292
+ color: var(--pui-color-success);
293
+ }
294
+ }
295
+
296
+ .warning {
297
+ --button-text-color: var(--pui-color-black);
298
+ --button-bg-color: var(--pui-color-warning);
299
+ --button-hover-bg-color: var(--pui-color-warning-hover);
300
+ --button-active-bg-color: var(--pui-color-warning-active);
301
+ --button-outline-color: var(--pui-color-warning);
302
+
303
+ :global(.loader) {
304
+ color: var(--pui-color-black);
305
+ }
306
+ }
307
+
308
+ .warning-subtle {
309
+ background-color: initial;
310
+ color: var(--pui-color-warning-dark);
311
+
312
+ &:hover:not(:disabled) {
313
+ background-color: var(--pui-color-warning-subtle);
314
+ }
315
+
316
+ :global(.loader) {
317
+ color: var(--pui-color-warning-dark);
318
+ }
319
+ }
320
+
321
+ button,
322
+ a {
323
+ border-color: var(--pui-color-primary);
324
+ font-size: var(--pui-font-size-base);
325
+ font-weight: var(--pui-font-weight-semibold);
326
+ line-height: var(--pui-line-height-tight);
327
+ letter-spacing: var(--pui-letter-spacing-wide);
328
+ transition:
329
+ color var(--pui-transition-fast) var(--pui-ease-in-out),
330
+ background-color var(--pui-transition-fast) var(--pui-ease-in-out),
331
+ border-color var(--pui-transition-fast) var(--pui-ease-in-out),
332
+ box-shadow var(--pui-transition-fast) var(--pui-ease-in-out);
333
+
334
+ color: var(--button-text-color);
335
+ background-color: var(--button-bg-color);
336
+ border: var(--button-border, 0);
337
+
338
+ &:hover:not(:disabled, .effects-disabled) {
339
+ color: var(--button-hover-text-color, var(--button-text-color));
340
+ background-color: var(--button-hover-bg-color, var(--button-bg-color));
341
+ border: var(--button-hover-border, var(--button-border, 0));
342
+ }
343
+
344
+ &:active:not(:disabled, .effects-disabled) {
345
+ color: var(--button-active-text-color, var(--button-text-color));
346
+ background-color: var(--button-active-bg-color, var(--button-bg-color));
347
+ border: var(--button-active-border, var(--button-border, 0));
348
+ }
349
+
350
+ &:focus-visible {
351
+ outline: solid var(--pui-focus-ring-width) var(--button-outline-color, var(--pui-color-secondary-dark));
352
+ outline-offset: var(--pui-focus-ring-offset);
353
+ }
354
+
355
+ &:disabled {
356
+ opacity: 50%;
357
+ }
358
+ }
359
+
360
+ :global(.dark) {
361
+ .muted {
362
+ --button-text-color: var(--pui-color-white);
363
+ --button-active-bg-color: var(--pui-color-dark-300);
364
+ }
365
+
366
+ .muted-subtle {
367
+ --button-active-bg-color: var(--pui-color-dark-300);
368
+ }
369
+
370
+ .muted-selected {
371
+ --button-text-color: var(--pui-color-white);
372
+ }
373
+
374
+ .auto-subtle {
375
+ --button-text-color: var(--pui-color-white);
376
+ --button-hover-text-color: var(--pui-color-white);
377
+ --button-hover-bg-color: var(--pui-color-primary-light);
378
+ --button-active-text-color: var(--pui-color-secondary);
379
+ --button-active-bg-color: var(--pui-color-primary);
380
+ --button-outline-color: var(--pui-color-secondary);
381
+ }
382
+
383
+ .success-subtle {
384
+ &:hover:not(:disabled) {
385
+ background-color: var(--pui-color-success-subtle-dark);
386
+ }
387
+ }
388
+
389
+ .warning-subtle {
390
+ &:hover:not(:disabled) {
391
+ background-color: var(--pui-color-warning-subtle-dark);
392
+ }
393
+ }
394
+ }
395
+
396
+ .action-icon {
397
+ padding: var(--pui-spacing-1);
398
+ }
399
+
400
+ .action-icon > div {
401
+ display: flex;
402
+ justify-content: center;
403
+ align-items: center;
404
+ }
405
+
406
+ .input-button {
407
+ border-top-left-radius: 0;
408
+ border-bottom-left-radius: 0;
409
+ padding: 0 var(--pui-spacing-2);
410
+ height: 100%;
411
+ }
412
+
413
+ .button-icon {
414
+ display: inline-flex;
415
+ align-items: center;
416
+ height: 100%;
417
+ }
418
+
419
+ .button {
420
+ display: flex;
421
+ align-items: center;
422
+ gap: var(--pui-spacing-2);
423
+ width: auto;
424
+ justify-content: center;
425
+ user-select: none;
426
+ }
427
+
428
+ a.pui-button {
429
+ text-decoration: none;
430
+ display: inline-flex;
431
+ }
432
+ </style>