lapikit 0.0.0-insiders.e877f7f → 0.0.0-insiders.e94247e

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 (186) hide show
  1. package/bin/configuration.js +304 -0
  2. package/bin/helper.js +23 -0
  3. package/bin/index.js +41 -0
  4. package/bin/lapikit.js +37 -5
  5. package/bin/legacy.js +34 -0
  6. package/bin/modules/adapter.js +3 -3
  7. package/bin/modules/plugin.js +223 -0
  8. package/bin/presets.js +26 -0
  9. package/bin/prompts.js +100 -0
  10. package/dist/actions/index.d.ts +1 -0
  11. package/dist/actions/index.js +1 -0
  12. package/dist/assets/icons/arrow-down.svelte +12 -0
  13. package/dist/assets/icons/arrow-down.svelte.d.ts +18 -0
  14. package/dist/assets/icons/arrow-up.svelte +12 -0
  15. package/dist/assets/icons/arrow-up.svelte.d.ts +18 -0
  16. package/dist/assets/icons/close-fill.svelte +12 -0
  17. package/dist/assets/icons/close-fill.svelte.d.ts +18 -0
  18. package/dist/assets/icons/loading-fill.svelte +2 -0
  19. package/dist/assets/icons/loading-fill.svelte.d.ts +6 -14
  20. package/dist/colors.css +0 -0
  21. package/dist/components/accordion/accordion.css +113 -0
  22. package/dist/components/accordion/accordion.svelte +155 -0
  23. package/dist/components/accordion/accordion.svelte.d.ts +4 -0
  24. package/dist/components/accordion/accordion.svelte.js +24 -0
  25. package/dist/components/accordion/modules/accordion-item.svelte +94 -0
  26. package/dist/components/accordion/modules/accordion-item.svelte.d.ts +4 -0
  27. package/dist/components/accordion/types.d.ts +33 -0
  28. package/dist/components/accordion/types.js +1 -0
  29. package/dist/components/alert/alert.css +137 -0
  30. package/dist/components/alert/alert.svelte +211 -0
  31. package/dist/components/alert/alert.svelte.d.ts +4 -0
  32. package/dist/components/alert/types.d.ts +28 -0
  33. package/dist/components/alert/types.js +1 -0
  34. package/dist/components/app/app.css +16 -0
  35. package/dist/components/app/app.svelte +55 -3
  36. package/dist/components/appbar/appbar.css +48 -0
  37. package/dist/components/appbar/appbar.svelte +85 -0
  38. package/dist/components/appbar/appbar.svelte.d.ts +4 -0
  39. package/dist/components/appbar/types.d.ts +15 -0
  40. package/dist/components/appbar/types.js +1 -0
  41. package/dist/components/aspect-ratio/aspect-ratio.css +19 -0
  42. package/dist/components/aspect-ratio/aspect-ratio.svelte +66 -0
  43. package/dist/components/aspect-ratio/aspect-ratio.svelte.d.ts +4 -0
  44. package/dist/components/aspect-ratio/types.d.ts +5 -0
  45. package/dist/components/aspect-ratio/types.js +1 -0
  46. package/dist/components/avatar/avatar.css +109 -0
  47. package/dist/components/avatar/avatar.svelte +160 -0
  48. package/dist/components/avatar/avatar.svelte.d.ts +4 -0
  49. package/dist/components/avatar/types.d.ts +22 -0
  50. package/dist/components/avatar/types.js +1 -0
  51. package/dist/components/button/button.css +165 -194
  52. package/dist/components/button/button.svelte +269 -31
  53. package/dist/components/button/button.svelte.d.ts +2 -2
  54. package/dist/components/button/types.d.ts +7 -5
  55. package/dist/components/card/card.css +115 -0
  56. package/dist/components/card/card.svelte +171 -0
  57. package/dist/components/card/card.svelte.d.ts +4 -0
  58. package/dist/components/card/types.d.ts +18 -0
  59. package/dist/components/card/types.js +1 -0
  60. package/dist/components/chip/chip.css +231 -0
  61. package/dist/components/chip/chip.svelte +342 -0
  62. package/dist/components/chip/chip.svelte.d.ts +4 -0
  63. package/dist/components/chip/types.d.ts +32 -0
  64. package/dist/components/chip/types.js +1 -0
  65. package/dist/components/dialog/dialog.css +136 -0
  66. package/dist/components/dialog/dialog.svelte +211 -0
  67. package/dist/components/dialog/dialog.svelte.d.ts +4 -0
  68. package/dist/components/dialog/types.d.ts +24 -0
  69. package/dist/components/dialog/types.js +1 -0
  70. package/dist/components/dropdown/dropdown.css +4 -4
  71. package/dist/components/dropdown/dropdown.svelte +24 -0
  72. package/dist/components/icon/icon.css +16 -11
  73. package/dist/components/icon/icon.svelte +89 -0
  74. package/dist/components/index.d.ts +17 -1
  75. package/dist/components/index.js +17 -1
  76. package/dist/components/list/list.css +221 -0
  77. package/dist/components/list/list.svelte +243 -0
  78. package/dist/components/list/list.svelte.d.ts +4 -0
  79. package/dist/components/list/modules/list-item.svelte +275 -0
  80. package/dist/components/list/modules/list-item.svelte.d.ts +4 -0
  81. package/dist/components/list/types.d.ts +33 -0
  82. package/dist/components/list/types.js +1 -0
  83. package/dist/components/modal/modal.css +145 -0
  84. package/dist/components/modal/modal.svelte +248 -0
  85. package/dist/components/modal/modal.svelte.d.ts +4 -0
  86. package/dist/components/modal/types.d.ts +26 -0
  87. package/dist/components/modal/types.js +1 -0
  88. package/dist/components/popover/popover.css +4 -4
  89. package/dist/components/popover/popover.svelte +24 -0
  90. package/dist/components/separator/separator.css +46 -0
  91. package/dist/components/separator/separator.svelte +85 -0
  92. package/dist/components/separator/separator.svelte.d.ts +4 -0
  93. package/dist/components/separator/types.d.ts +11 -0
  94. package/dist/components/separator/types.js +1 -0
  95. package/dist/components/spacer/spacer.css +3 -0
  96. package/dist/components/spacer/spacer.svelte +12 -0
  97. package/dist/components/spacer/spacer.svelte.d.ts +4 -0
  98. package/dist/components/spacer/types.d.ts +4 -0
  99. package/dist/components/spacer/types.js +1 -0
  100. package/dist/components/textfield/textfield.css +305 -0
  101. package/dist/components/textfield/textfield.svelte +463 -0
  102. package/dist/components/textfield/textfield.svelte.d.ts +4 -0
  103. package/dist/components/textfield/types.d.ts +37 -0
  104. package/dist/components/textfield/types.js +1 -0
  105. package/dist/components/toolbar/toolbar.css +129 -0
  106. package/dist/components/toolbar/toolbar.svelte +182 -0
  107. package/dist/components/toolbar/toolbar.svelte.d.ts +4 -0
  108. package/dist/components/toolbar/types.d.ts +27 -0
  109. package/dist/components/toolbar/types.js +1 -0
  110. package/dist/components/tooltip/tooltip.css +4 -4
  111. package/dist/components/tooltip/tooltip.svelte +127 -0
  112. package/dist/index.d.ts +27 -1
  113. package/dist/index.js +27 -3
  114. package/dist/internal/assets.svelte.d.ts +1 -0
  115. package/dist/internal/assets.svelte.js +13 -0
  116. package/dist/internal/config/presets.d.ts +136 -0
  117. package/dist/internal/config/presets.js +121 -0
  118. package/dist/internal/config/variables.d.ts +20 -0
  119. package/dist/internal/config/variables.js +20 -0
  120. package/dist/internal/core/formatter/component.d.ts +5 -0
  121. package/dist/internal/core/formatter/component.js +63 -0
  122. package/dist/internal/core/formatter/index.d.ts +6 -0
  123. package/dist/internal/core/formatter/index.js +30 -0
  124. package/dist/internal/core/formatter/styles.d.ts +4 -0
  125. package/dist/internal/core/formatter/styles.js +15 -0
  126. package/dist/internal/core/formatter/theme.d.ts +5 -0
  127. package/dist/internal/core/formatter/theme.js +28 -0
  128. package/dist/internal/core/formatter/typography.d.ts +5 -0
  129. package/dist/internal/core/formatter/typography.js +12 -0
  130. package/dist/internal/deepMerge.d.ts +44 -0
  131. package/dist/internal/deepMerge.js +80 -0
  132. package/dist/internal/helpers/parser.d.ts +10 -0
  133. package/dist/internal/helpers/parser.js +92 -0
  134. package/dist/internal/index.d.ts +1 -0
  135. package/dist/internal/index.js +1 -0
  136. package/dist/internal/plugins/vite.d.ts +8 -0
  137. package/dist/internal/plugins/vite.js +25 -0
  138. package/dist/internal/ripple.d.ts +12 -0
  139. package/dist/internal/ripple.js +93 -0
  140. package/dist/internal/scroll.d.ts +1 -0
  141. package/dist/internal/scroll.js +6 -0
  142. package/dist/internal/types/configuration.d.ts +40 -0
  143. package/dist/internal/types/configuration.js +1 -0
  144. package/dist/internal/types/index.d.ts +1 -0
  145. package/dist/internal/types/index.js +1 -0
  146. package/dist/internal/unit.d.ts +1 -0
  147. package/dist/internal/unit.js +11 -0
  148. package/dist/labs/index.d.ts +4 -0
  149. package/dist/labs/index.js +5 -0
  150. package/dist/labs/my-component-style-global.svelte +6 -0
  151. package/dist/labs/my-component-style-global.svelte.d.ts +18 -0
  152. package/dist/labs/my-component-style-import.svelte +15 -0
  153. package/dist/labs/my-component-style-import.svelte.d.ts +18 -0
  154. package/dist/labs/my-component-style-mixed.svelte +23 -0
  155. package/dist/labs/my-component-style-mixed.svelte.d.ts +18 -0
  156. package/dist/labs/my-component.svelte +16 -0
  157. package/dist/labs/my-component.svelte.d.ts +18 -0
  158. package/dist/labs/style-mixed.css +7 -0
  159. package/dist/labs/style.css +7 -0
  160. package/dist/labs.css +25 -0
  161. package/dist/plugin/css.d.ts +1 -0
  162. package/dist/plugin/css.js +73 -0
  163. package/dist/plugin/preset-v2.d.ts +108 -0
  164. package/dist/plugin/preset-v2.js +126 -0
  165. package/dist/plugin/vitejs.d.ts +5 -1
  166. package/dist/plugin/vitejs.js +32 -3
  167. package/dist/preset.js +2 -2
  168. package/dist/stores/breakpoints.d.ts +6 -0
  169. package/dist/stores/breakpoints.js +14 -0
  170. package/dist/stores/components.d.ts +8 -0
  171. package/dist/stores/components.js +26 -0
  172. package/dist/stores/devices.d.ts +6 -0
  173. package/dist/stores/devices.js +9 -0
  174. package/dist/stores/index.d.ts +4 -4
  175. package/dist/stores/index.js +4 -23
  176. package/dist/stores/themes.d.ts +8 -0
  177. package/dist/stores/themes.js +34 -0
  178. package/dist/style/animation.css +42 -0
  179. package/dist/style/css.js +3 -0
  180. package/dist/style/normalize.css +2 -0
  181. package/dist/style/parser/color.js +2 -2
  182. package/dist/style/parser/device.js +31 -19
  183. package/dist/style/variable.css +12 -0
  184. package/dist/utils/convert.d.ts +1 -0
  185. package/dist/utils/convert.js +17 -0
  186. package/package.json +21 -5
@@ -1,20 +1,23 @@
1
1
  <script lang="ts">
2
2
  import { getAssets } from '../../internal/index.js';
3
- import Icon from '../icon/icon.svelte';
4
- import type { BtnProps } from './types.js';
3
+ import type { ButtonProps } from './types.js';
5
4
 
6
5
  // external
6
+ import { Icon } from '../index.js';
7
7
  import LoadingFill from '../../assets/icons/loading-fill.svelte';
8
+ import { ripple } from '../../internal/ripple.js';
8
9
 
9
10
  let {
10
11
  children,
12
+ prepend,
13
+ append,
11
14
  ref = $bindable(),
12
15
  is = 'button',
13
16
  href,
14
17
  dark,
15
18
  light,
16
19
  active,
17
- variant,
20
+ variant = 'filled',
18
21
  error,
19
22
  info,
20
23
  success,
@@ -25,22 +28,15 @@
25
28
  type = 'button',
26
29
  background,
27
30
  color,
28
- label,
29
31
  loading,
30
32
  rounded,
31
33
  icon,
32
34
  load,
35
+ noRipple,
33
36
  ...rest
34
- }: BtnProps = $props();
37
+ }: ButtonProps = $props();
35
38
 
36
39
  const assets = getAssets();
37
-
38
- $effect(() => {
39
- if (type === 'radio') is = 'input';
40
- if (type === 'checkbox') is = 'input';
41
- if (type === 'submit') is = 'input';
42
- if (type === 'reset') is = 'input';
43
- });
44
40
  </script>
45
41
 
46
42
  <svelte:element
@@ -49,33 +45,35 @@
49
45
  {...rest}
50
46
  href={href && !disabled ? href : undefined}
51
47
  class={[
52
- 'kit-btn',
48
+ 'kit-button',
53
49
  light && 'light',
54
50
  dark && 'dark',
55
- size && assets.className('btn', 'size', size),
56
- variant && assets.className('btn', 'variant', variant),
57
- density && assets.className('btn', 'density', density),
58
- error && 'kit-btn--error',
59
- info && 'kit-btn--info',
60
- success && 'kit-btn--success',
61
- warning && 'kit-btn--warning',
62
- disabled && 'kit-btn--disabled',
63
- active && 'kit-btn--active',
64
- loading && 'kit-btn--loading',
65
- icon && 'kit-btn--icon',
51
+ size && assets.className('button', 'size', size),
52
+ variant && assets.className('button', 'variant', variant),
53
+ density && assets.className('button', 'density', density),
54
+ error && 'kit-button--error',
55
+ info && 'kit-button--info',
56
+ success && 'kit-button--success',
57
+ warning && 'kit-button--warning',
58
+ disabled && 'kit-button--disabled',
59
+ active && 'kit-button--active',
60
+ loading && 'kit-button--loading',
61
+ icon && 'kit-button--icon',
66
62
  rest.class
67
63
  ]}
68
64
  tabindex={href && disabled ? -1 : 0}
69
- aria-disabled={href ? disabled : undefined}
70
- aria-label={type !== 'button' ? label : undefined}
71
65
  disabled={href ? undefined : disabled}
72
66
  type={href ? undefined : type}
67
+ use:ripple={{
68
+ component: 'button',
69
+ disabled: noRipple || disabled
70
+ }}
73
71
  style:--base={assets.color(background)}
74
72
  style:--on={assets.color(color)}
75
73
  style:--shape={assets.shape(rounded)}
76
74
  >
77
75
  {#if loading}
78
- <div class="kit-btn-loading">
76
+ <div class="kit-button-loading">
79
77
  {#if load}
80
78
  {@render load?.()}
81
79
  {:else}
@@ -86,9 +84,249 @@
86
84
  </div>
87
85
  {/if}
88
86
 
89
- {#if !label}
90
- <span class="kit-btn-content">
91
- {@render children?.()}
92
- </span>
87
+ {#if prepend}
88
+ <div class="kit-button-prepend">
89
+ {@render prepend?.()}
90
+ </div>
91
+ {/if}
92
+
93
+ <div class="kit-button-content">
94
+ {@render children?.()}
95
+ </div>
96
+
97
+ {#if append}
98
+ <div class="kit-button-append">
99
+ {@render append?.()}
100
+ </div>
93
101
  {/if}
94
102
  </svelte:element>
103
+
104
+ <style>/* root */
105
+ .kit-button {
106
+ --button-color: var(--on, var(--kit-on-container));
107
+ --button-background: var(--base, var(--kit-container));
108
+ --button-radius: var(--shape, var(--kit-radius-md));
109
+ }
110
+ .kit-button {
111
+ position: relative;
112
+ cursor: pointer;
113
+ border: none;
114
+ outline: none;
115
+ padding-top: var(--button-spacing-x);
116
+ padding-bottom: var(--button-spacing-x);
117
+ padding-right: var(--button-spacing-y);
118
+ padding-left: var(--button-spacing-y);
119
+ border-radius: var(--button-radius);
120
+ color: var(--button-color);
121
+ font-weight: 500;
122
+ text-decoration: none;
123
+ }
124
+ .kit-button,
125
+ .kit-button .kit-button-content,
126
+ .kit-button .kit-button-append,
127
+ .kit-button .kit-button-prepend,
128
+ .kit-button .kit-button-loading {
129
+ display: inline-flex;
130
+ align-items: center;
131
+ justify-content: center;
132
+ white-space: nowrap;
133
+ gap: calc(var(--prism-spacing) * var(--button-multiplier-gap));
134
+ font-size: calc(var(--prism-spacing) * var(--button-multiplier-font-size));
135
+ }
136
+ .kit-button::after {
137
+ content: '';
138
+ position: absolute;
139
+ inset: 0;
140
+ background-color: currentColor;
141
+ opacity: 0;
142
+ transition: opacity 150ms ease;
143
+ pointer-events: none;
144
+ border-radius: inherit;
145
+ }
146
+ .kit-button:hover::after {
147
+ opacity: 0.08;
148
+ }
149
+ .kit-button:active::after {
150
+ opacity: 0.12;
151
+ }
152
+ .kit-button:focus-visible::after {
153
+ opacity: 0.12;
154
+ }
155
+ /* size */
156
+ .kit-button[breakpoint]kit-button--size-xs {
157
+ --button-multiplier-x: 12;
158
+ --button-multiplier-y: 2;
159
+ --button-multiplier-gap: 2;
160
+ --button-multiplier-font-size: 6;
161
+ }
162
+ .kit-button[breakpoint]kit-button--size-xs .kit-icon[class*='kit-icon--size-md'] {
163
+ --icon-multiplier-parent-size: 7;
164
+ }
165
+ .kit-button[breakpoint]kit-button--size-sm {
166
+ --button-multiplier-x: 16;
167
+ --button-multiplier-y: 3;
168
+ --button-multiplier-gap: 4;
169
+ --button-multiplier-font-size: 7;
170
+ }
171
+ .kit-button[breakpoint]kit-button--size-sm .kit-icon[class*='kit-icon--size-md'] {
172
+ --icon-multiplier-parent-size: 8;
173
+ }
174
+ .kit-button[breakpoint]kit-button--size-md {
175
+ --button-multiplier-x: 20;
176
+ --button-multiplier-y: 4;
177
+ --button-multiplier-gap: 4;
178
+ --button-multiplier-font-size: 8;
179
+ }
180
+ .kit-button[breakpoint]kit-button--size-md .kit-icon[class*='kit-icon--size-md'] {
181
+ --icon-multiplier-parent-size: 9;
182
+ }
183
+ .kit-button[breakpoint]kit-button--size-lg {
184
+ --button-multiplier-x: 24;
185
+ --button-multiplier-y: 5;
186
+ --button-multiplier-gap: 4;
187
+ --button-multiplier-font-size: 9;
188
+ }
189
+ .kit-button[breakpoint]kit-button--size-lg .kit-icon[class*='kit-icon--size-md'] {
190
+ --icon-multiplier-parent-size: 10;
191
+ }
192
+ .kit-button[breakpoint]kit-button--size-xl {
193
+ --button-multiplier-x: 28;
194
+ --button-multiplier-y: 6;
195
+ --button-multiplier-gap: 5;
196
+ --button-multiplier-font-size: 10;
197
+ }
198
+ .kit-button[breakpoint]kit-button--size-xl .kit-icon[class*='kit-icon--size-md'] {
199
+ --icon-multiplier-parent-size: 11;
200
+ }
201
+ /* density */
202
+ .kit-button:not(.kit-button--icon)[breakpoint]kit-button--density-default {
203
+ height: calc(var(--prism-spacing) * var(--button-multiplier-x));
204
+ --button-spacing-x: 0;
205
+ --button-spacing-y: calc(var(--prism-spacing) * var(--button-multiplier-y));
206
+ }
207
+ .kit-button.kit-button--icon[breakpoint]kit-button--density-default {
208
+ height: calc(var(--prism-spacing) * var(--button-multiplier-x));
209
+ width: calc(var(--prism-spacing) * var(--button-multiplier-x));
210
+ --button-spacing-x: 0;
211
+ --button-spacing-y: 0;
212
+ }
213
+ .kit-button:not(.kit-button--icon)[breakpoint]kit-button--density-compact {
214
+ height: calc(var(--prism-spacing) * var(--button-multiplier-x) - 0.25rem);
215
+ --button-spacing-x: 0;
216
+ --button-spacing-y: calc(var(--prism-spacing) * var(--button-multiplier-y) - 0.25rem);
217
+ }
218
+ .kit-button.kit-button--icon[breakpoint]kit-button--density-compact {
219
+ height: calc(var(--prism-spacing) * var(--button-multiplier-x) - 0.25rem);
220
+ width: calc(var(--prism-spacing) * var(--button-multiplier-x) - 0.25rem);
221
+ --button-spacing-x: 0;
222
+ --button-spacing-y: 0;
223
+ }
224
+ .kit-button:not(.kit-button--icon)[breakpoint]kit-button--density-comfortable {
225
+ height: calc(var(--prism-spacing) * var(--button-multiplier-x) + 0.25rem);
226
+ --button-spacing-x: 0;
227
+ --button-spacing-y: calc(var(--prism-spacing) * var(--button-multiplier-y) + 0.25rem);
228
+ }
229
+ .kit-button.kit-button--icon[breakpoint]kit-button--density-comfortable {
230
+ height: calc(var(--prism-spacing) * var(--button-multiplier-x) + 0.25rem);
231
+ width: calc(var(--prism-spacing) * var(--button-multiplier-x) + 0.25rem);
232
+ --button-spacing-x: 0;
233
+ --button-spacing-y: 0;
234
+ }
235
+ /* variant */
236
+ .kit-button[breakpoint]kit-button--variant-filled {
237
+ background-color: var(--button-background);
238
+ }
239
+ .kit-button[breakpoint]kit-button--variant-outline {
240
+ --button-color: var(--on, var(--kit-on-container));
241
+ background-color: var(--button-background);
242
+ }
243
+ .kit-button[breakpoint]kit-button--variant-outline::before {
244
+ content: '';
245
+ position: absolute;
246
+ inset: 0;
247
+ border: 1px solid currentColor;
248
+ pointer-events: none;
249
+ border-radius: inherit;
250
+ }
251
+ .kit-button[breakpoint]kit-button--variant-text {
252
+ --button-color: var(--base, var(--kit-on-container));
253
+ background-color: transparent;
254
+ border: none;
255
+ }
256
+ /* state */
257
+ .kit-button.kit-button--info[class*='button--variant-filled'] {
258
+ --on: var(--kit-on-info);
259
+ --base: var(--kit-info);
260
+ }
261
+ .kit-button.kit-button--info[class*='button--variant-']:not([class*='variant-filled']) {
262
+ --base: var(--kit-info);
263
+ }
264
+ .kit-button.kit-button--success[class*='button--variant-filled'] {
265
+ --on: var(--kit-on-success);
266
+ --base: var(--kit-success);
267
+ }
268
+ .kit-button.kit-button--success[class*='button--variant-']:not([class*='variant-filled']) {
269
+ --base: var(--kit-success);
270
+ }
271
+ .kit-button.kit-button--warning[class*='button--variant-filled'] {
272
+ --on: var(--kit-on-warning);
273
+ --base: var(--kit-warning);
274
+ }
275
+ .kit-button.kit-button--warning[class*='button--variant-']:not([class*='variant-filled']) {
276
+ --base: var(--kit-warning);
277
+ }
278
+ .kit-button.kit-button--error[class*='button--variant-filled'] {
279
+ --on: var(--kit-on-error);
280
+ --base: var(--kit-error);
281
+ }
282
+ .kit-button.kit-button--error[class*='button--variant-']:not([class*='variant-filled']) {
283
+ --base: var(--kit-error);
284
+ }
285
+ /* events */
286
+ .kit-button[class*='button--variant-filled']:active,
287
+ .kit-button.kit-button--active[class*='button--variant-filled'] {
288
+ background-color: color-mix(in oklab, var(--button-background) 90%, var(--kit-scrim));
289
+ }
290
+ .kit-button.kit-button--active[class*='button--variant-']:not([class*='variant-filled']):active,
291
+ .kit-button.kit-button--active[class*='button--variant-']:not([class*='variant-filled']) {
292
+ background-color: color-mix(in oklab, currentColor 15%, transparent);
293
+ }
294
+ /* icon */
295
+ .kit-button i::before,
296
+ .kit-button .kit-icon {
297
+ --base-parent: var(--button-color);
298
+ }
299
+ /* disabled */
300
+ .kit-button.kit-button--disabled,
301
+ .kit-button[disabled],
302
+ .kit-button.kit-button--loading {
303
+ pointer-events: none;
304
+ user-select: none;
305
+ cursor: default;
306
+ }
307
+ .kit-button[class*='button--variant-filled'].kit-button--disabled {
308
+ color: color-mix(in oklab, var(--button-color) 40%, transparent) !important;
309
+ background-color: color-mix(in oklab, var(--button-background) 70%, transparent) !important;
310
+ }
311
+ .kit-button[class*='button--variant-filled'].kit-button--disabled i:before {
312
+ color: color-mix(in oklab, var(--button-color) 40%, transparent) !important;
313
+ }
314
+ .kit-button[class*='button--variant-']:not([class*='variant-filled']).kit-button--disabled,
315
+ .kit-button[class*='button--variant-']:not([class*='variant-filled']).kit-button--disabled
316
+ i::before {
317
+ color: color-mix(in oklab, var(--button-background) 40%, transparent) !important;
318
+ }
319
+ /* loading */
320
+ .kit-button.kit-button--loading > .kit-button-content,
321
+ .kit-button.kit-button--loading > .kit-button-append,
322
+ .kit-button.kit-button--loading > .kit-button-prepend {
323
+ visibility: hidden;
324
+ }
325
+ .kit-button.kit-button--loading > .kit-button-loading {
326
+ position: absolute;
327
+ min-width: fit-content;
328
+ }
329
+ .kit-button.kit-button--loading > .kit-button-loading .kit-icon-load {
330
+ animation: icon-rotate 1s ease-out infinite;
331
+ }
332
+ </style>
@@ -1,4 +1,4 @@
1
- import type { BtnProps } from './types.js';
2
- declare const Button: import("svelte").Component<BtnProps, {}, "ref">;
1
+ import type { ButtonProps } from './types.js';
2
+ declare const Button: import("svelte").Component<ButtonProps, {}, "ref">;
3
3
  type Button = ReturnType<typeof Button>;
4
4
  export default Button;
@@ -1,12 +1,12 @@
1
1
  import type { Component } from '../../internal/types.js';
2
2
  import type { Snippet } from 'svelte';
3
- export interface BtnProps extends Component {
3
+ export interface ButtonProps extends Component {
4
4
  ref?: HTMLElement | null;
5
- is?: 'button' | 'a' | 'input';
5
+ is?: 'button' | 'a';
6
6
  dark?: boolean;
7
7
  light?: boolean;
8
8
  href?: string;
9
- variant?: 'outline' | 'text' | 'dash' | 'link';
9
+ variant?: 'outline' | 'text' | 'filled';
10
10
  density?: 'compact' | 'comfortable' | 'default';
11
11
  active?: boolean;
12
12
  loading?: boolean;
@@ -20,8 +20,10 @@ export interface BtnProps extends Component {
20
20
  size?: string | {
21
21
  [key: string]: string;
22
22
  };
23
- type?: 'button' | 'submit' | 'reset' | 'radio' | 'checkbox';
24
- label?: string;
23
+ type?: 'button' | 'submit' | 'reset';
25
24
  icon?: boolean;
26
25
  load?: Snippet;
26
+ append?: Snippet;
27
+ prepend?: Snippet;
28
+ noRipple?: boolean;
27
29
  }
@@ -0,0 +1,115 @@
1
+ /* root */
2
+ .kit-card {
3
+ --card-color: var(--on, var(--kit-on-surface));
4
+ --card-background: var(--base, var(--kit-surface));
5
+ --card-radius: var(--shape, var(--kit-radius-md));
6
+ }
7
+
8
+ .kit-card {
9
+ position: relative;
10
+ display: flex;
11
+ flex-direction: column;
12
+ text-align: start;
13
+ overflow: hidden;
14
+ /* transition:
15
+ color 0.5s,
16
+ background-color 0.5s; */
17
+ padding-top: var(--card-spacing-x);
18
+ padding-bottom: var(--card-spacing-x);
19
+ padding-right: var(--card-spacing-y);
20
+ padding-left: var(--card-spacing-y);
21
+ border-radius: var(--card-radius);
22
+ font-weight: 500;
23
+ color: var(--card-color);
24
+ text-decoration: none;
25
+ }
26
+
27
+ .kit-card.kit-card--clickable {
28
+ cursor: pointer;
29
+ }
30
+
31
+ .kit-card.kit-card--clickable::after {
32
+ content: '';
33
+ position: absolute;
34
+ inset: 0;
35
+ background-color: currentColor;
36
+ opacity: 0;
37
+ transition: opacity 150ms ease;
38
+ pointer-events: none;
39
+ border-radius: inherit;
40
+ }
41
+ .kit-card.kit-card--clickable:hover::after {
42
+ opacity: 0.08;
43
+ }
44
+ .kit-card.kit-card--clickable:active::after {
45
+ opacity: 0.12;
46
+ }
47
+ .kit-card.kit-card--clickable:focus-visible::after {
48
+ opacity: 0.12;
49
+ }
50
+
51
+ /* density */
52
+ .kit-card[breakpoint]kit-card--density-default {
53
+ --card-spacing-x: calc(var(--prism-spacing) * 2);
54
+ --card-spacing-y: calc(var(--prism-spacing) * 2);
55
+ }
56
+ .kit-card[breakpoint]kit-card--density-compact {
57
+ --card-spacing-x: 0;
58
+ --card-spacing-y: 0;
59
+ }
60
+ .kit-card[breakpoint]kit-card--density-comfortable {
61
+ --card-spacing-x: calc(var(--prism-spacing) * 4);
62
+ --card-spacing-y: calc(var(--prism-spacing) * 4);
63
+ }
64
+
65
+ /* variant */
66
+ .kit-card[breakpoint]kit-card--variant-filled {
67
+ background-color: var(--card-background);
68
+ }
69
+
70
+ .kit-card[breakpoint]kit-card--variant-outline {
71
+ --card-color: var(--base, var(--kit-on-surface));
72
+ background-color: transparent;
73
+ }
74
+ .kit-card[breakpoint]kit-card--variant-outline::before {
75
+ content: '';
76
+ position: absolute;
77
+ inset: 0;
78
+ border: 1px solid currentColor;
79
+ pointer-events: none;
80
+ border-radius: inherit;
81
+ }
82
+
83
+ .kit-card[breakpoint]kit-card--variant-text {
84
+ --card-color: var(--base, var(--kit-on-surface));
85
+ background-color: transparent;
86
+ border: none;
87
+ }
88
+
89
+ /* events */
90
+ .kit-card[class*='card--variant-filled'].kit-card--clickable:active,
91
+ .kit-card.kit-card--active[class*='card--variant-filled'].kit-card--clickable {
92
+ background-color: color-mix(in oklab, var(--card-background) 90%, var(--kit-scrim));
93
+ }
94
+ .kit-card.kit-card--active[class*='card--variant-']:not(
95
+ [class*='variant-filled']
96
+ ).kit-card--clickable:active,
97
+ .kit-card.kit-card--active[class*='card--variant-']:not(
98
+ [class*='variant-filled']
99
+ ).kit-card--clickable {
100
+ background-color: color-mix(in oklab, currentColor 15%, transparent);
101
+ }
102
+
103
+ /* disabled */
104
+ .kit-card.kit-card--disabled,
105
+ .kit-card[disabled],
106
+ .kit-card:disabled {
107
+ pointer-events: none;
108
+ user-select: none;
109
+ opacity: 0.6;
110
+ }
111
+ .kit-card.kit-card--disabled > *,
112
+ .kit-card[disabled] > *,
113
+ .kit-card:disabled > * {
114
+ opacity: 0.6;
115
+ }
@@ -0,0 +1,171 @@
1
+ <script lang="ts">
2
+ import { getAssets } from '../../internal/index.js';
3
+ import type { CardProps } from './types.js';
4
+
5
+ // external
6
+ import { ripple } from '../../internal/ripple.js';
7
+
8
+ let {
9
+ children,
10
+ ref = $bindable(),
11
+ is = 'div',
12
+ href,
13
+ dark,
14
+ light,
15
+ active,
16
+ density = 'default',
17
+ variant = 'filled',
18
+ disabled,
19
+ rounded,
20
+ color,
21
+ background,
22
+ noRipple,
23
+ ...rest
24
+ }: CardProps = $props();
25
+
26
+ const assets = getAssets();
27
+ let isClickable: boolean = $state(false);
28
+
29
+ $effect(() => {
30
+ const refProps = { ...rest };
31
+ if (href) is = 'a';
32
+ if (refProps?.onclick || href || is === 'a') isClickable = true;
33
+ else isClickable = false;
34
+ });
35
+ </script>
36
+
37
+ <svelte:element
38
+ this={is}
39
+ bind:this={ref}
40
+ {...rest}
41
+ href={href && !disabled ? href : undefined}
42
+ class={[
43
+ 'kit-card',
44
+ light && 'light',
45
+ dark && 'dark',
46
+ variant && assets.className('card', 'variant', variant),
47
+ density && assets.className('card', 'density', density),
48
+ isClickable && 'kit-card--clickable',
49
+ active && 'kit-card--active',
50
+ disabled && 'kit-card--disabled',
51
+ rest.class
52
+ ]}
53
+ disabled={href ? undefined : disabled}
54
+ use:ripple={{
55
+ component: 'card',
56
+ disabled: noRipple || disabled || !isClickable
57
+ }}
58
+ style:--base={assets.color(background)}
59
+ style:--on={assets.color(color)}
60
+ style:--shape={assets.shape(rounded)}
61
+ >
62
+ {@render children?.()}
63
+ </svelte:element>
64
+
65
+ <style>/* root */
66
+ .kit-card {
67
+ --card-color: var(--on, var(--kit-on-surface));
68
+ --card-background: var(--base, var(--kit-surface));
69
+ --card-radius: var(--shape, var(--kit-radius-md));
70
+ }
71
+ .kit-card {
72
+ position: relative;
73
+ display: flex;
74
+ flex-direction: column;
75
+ text-align: start;
76
+ overflow: hidden;
77
+ /* transition:
78
+ color 0.5s,
79
+ background-color 0.5s; */
80
+ padding-top: var(--card-spacing-x);
81
+ padding-bottom: var(--card-spacing-x);
82
+ padding-right: var(--card-spacing-y);
83
+ padding-left: var(--card-spacing-y);
84
+ border-radius: var(--card-radius);
85
+ font-weight: 500;
86
+ color: var(--card-color);
87
+ text-decoration: none;
88
+ }
89
+ .kit-card.kit-card--clickable {
90
+ cursor: pointer;
91
+ }
92
+ .kit-card.kit-card--clickable::after {
93
+ content: '';
94
+ position: absolute;
95
+ inset: 0;
96
+ background-color: currentColor;
97
+ opacity: 0;
98
+ transition: opacity 150ms ease;
99
+ pointer-events: none;
100
+ border-radius: inherit;
101
+ }
102
+ .kit-card.kit-card--clickable:hover::after {
103
+ opacity: 0.08;
104
+ }
105
+ .kit-card.kit-card--clickable:active::after {
106
+ opacity: 0.12;
107
+ }
108
+ .kit-card.kit-card--clickable:focus-visible::after {
109
+ opacity: 0.12;
110
+ }
111
+ /* density */
112
+ .kit-card[breakpoint]kit-card--density-default {
113
+ --card-spacing-x: calc(var(--prism-spacing) * 2);
114
+ --card-spacing-y: calc(var(--prism-spacing) * 2);
115
+ }
116
+ .kit-card[breakpoint]kit-card--density-compact {
117
+ --card-spacing-x: 0;
118
+ --card-spacing-y: 0;
119
+ }
120
+ .kit-card[breakpoint]kit-card--density-comfortable {
121
+ --card-spacing-x: calc(var(--prism-spacing) * 4);
122
+ --card-spacing-y: calc(var(--prism-spacing) * 4);
123
+ }
124
+ /* variant */
125
+ .kit-card[breakpoint]kit-card--variant-filled {
126
+ background-color: var(--card-background);
127
+ }
128
+ .kit-card[breakpoint]kit-card--variant-outline {
129
+ --card-color: var(--base, var(--kit-on-surface));
130
+ background-color: transparent;
131
+ }
132
+ .kit-card[breakpoint]kit-card--variant-outline::before {
133
+ content: '';
134
+ position: absolute;
135
+ inset: 0;
136
+ border: 1px solid currentColor;
137
+ pointer-events: none;
138
+ border-radius: inherit;
139
+ }
140
+ .kit-card[breakpoint]kit-card--variant-text {
141
+ --card-color: var(--base, var(--kit-on-surface));
142
+ background-color: transparent;
143
+ border: none;
144
+ }
145
+ /* events */
146
+ .kit-card[class*='card--variant-filled'].kit-card--clickable:active,
147
+ .kit-card.kit-card--active[class*='card--variant-filled'].kit-card--clickable {
148
+ background-color: color-mix(in oklab, var(--card-background) 90%, var(--kit-scrim));
149
+ }
150
+ .kit-card.kit-card--active[class*='card--variant-']:not(
151
+ [class*='variant-filled']
152
+ ).kit-card--clickable:active,
153
+ .kit-card.kit-card--active[class*='card--variant-']:not(
154
+ [class*='variant-filled']
155
+ ).kit-card--clickable {
156
+ background-color: color-mix(in oklab, currentColor 15%, transparent);
157
+ }
158
+ /* disabled */
159
+ .kit-card.kit-card--disabled,
160
+ .kit-card[disabled],
161
+ .kit-card:disabled {
162
+ pointer-events: none;
163
+ user-select: none;
164
+ opacity: 0.6;
165
+ }
166
+ .kit-card.kit-card--disabled > *,
167
+ .kit-card[disabled] > *,
168
+ .kit-card:disabled > * {
169
+ opacity: 0.6;
170
+ }
171
+ </style>
@@ -0,0 +1,4 @@
1
+ import type { CardProps } from './types.js';
2
+ declare const Card: import("svelte").Component<CardProps, {}, "ref">;
3
+ type Card = ReturnType<typeof Card>;
4
+ export default Card;
@@ -0,0 +1,18 @@
1
+ import type { Component } from '../../internal/types.js';
2
+ type Density = 'compact' | 'comfortable' | 'default';
3
+ export interface CardProps extends Component {
4
+ is?: 'a' | 'button' | 'div';
5
+ dark?: boolean;
6
+ light?: boolean;
7
+ href?: string;
8
+ variant?: 'outline' | 'text' | 'filled';
9
+ density?: Density | {
10
+ [key: string]: Density;
11
+ };
12
+ active?: boolean;
13
+ disabled?: boolean;
14
+ rounded?: string;
15
+ color?: string;
16
+ background?: string;
17
+ }
18
+ export {};
@@ -0,0 +1 @@
1
+ export {};