lapikit 0.0.0-insiders.e330f8d → 0.0.0-insiders.fbbc9f6

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,29 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"
2
+ ><defs
3
+ ><linearGradient id="a" x1="50%" x2="50%" y1="5.271%" y2="91.793%"
4
+ ><stop offset="0%" stop-color="currentColor" /><stop
5
+ offset="100%"
6
+ stop-color="currentColor"
7
+ stop-opacity=".55"
8
+ /></linearGradient
9
+ ><linearGradient id="b" x1="50%" x2="50%" y1="15.24%" y2="87.15%"
10
+ ><stop offset="0%" stop-color="currentColor" stop-opacity="0" /><stop
11
+ offset="100%"
12
+ stop-color="currentColor"
13
+ stop-opacity=".55"
14
+ /></linearGradient
15
+ ></defs
16
+ ><g fill="none"
17
+ ><path
18
+ d="M24 0v24H0V0zM12.593 23.258l-.011.002-.071.035-.02.004-.014-.004-.071-.035c-.01-.004-.019-.001-.024.005l-.004.01-.017.428.005.02.01.013.104.074.015.004.012-.004.104-.074.012-.016.004-.017-.017-.427c-.002-.01-.009-.017-.017-.018m.265-.113-.013.002-.185.093-.01.01-.003.011.018.43.005.012.008.007.201.093c.012.004.023 0 .029-.008l.004-.014-.034-.614c-.003-.012-.01-.02-.02-.022m-.715.002a.023.023 0 0 0-.027.006l-.006.014-.034.614c0 .012.007.02.017.024l.015-.002.201-.093.01-.008.004-.011.017-.43-.003-.012-.01-.01z"
19
+ /><path
20
+ fill="url(#a)"
21
+ d="M8.749.021a1.5 1.5 0 0 1 .497 2.958A7.502 7.502 0 0 0 3 10.375a7.5 7.5 0 0 0 7.5 7.5v3c-5.799 0-10.5-4.7-10.5-10.5C0 5.23 3.726.865 8.749.021"
22
+ transform="translate(1.5 1.625)"
23
+ /><path
24
+ fill="url(#b)"
25
+ d="M15.392 2.673a1.5 1.5 0 0 1 2.119-.115A10.475 10.475 0 0 1 21 10.375c0 5.8-4.701 10.5-10.5 10.5v-3a7.5 7.5 0 0 0 5.007-13.084 1.5 1.5 0 0 1-.115-2.118"
26
+ transform="translate(1.5 1.625)"
27
+ /></g
28
+ ></svg
29
+ >
@@ -0,0 +1,26 @@
1
+ export default LoadingFill;
2
+ type LoadingFill = SvelteComponent<{
3
+ [x: string]: never;
4
+ }, {
5
+ [evt: string]: CustomEvent<any>;
6
+ }, {}> & {
7
+ $$bindings?: string | undefined;
8
+ };
9
+ declare const LoadingFill: $$__sveltets_2_IsomorphicComponent<{
10
+ [x: string]: never;
11
+ }, {
12
+ [evt: string]: CustomEvent<any>;
13
+ }, {}, {}, string>;
14
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
15
+ new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
16
+ $$bindings?: Bindings;
17
+ } & Exports;
18
+ (internal: unknown, props: {
19
+ $$events?: Events;
20
+ $$slots?: Slots;
21
+ }): Exports & {
22
+ $set?: any;
23
+ $on?: any;
24
+ };
25
+ z_$$bindings?: Bindings;
26
+ }
@@ -23,6 +23,15 @@
23
23
  border-color: var(--btn-background);
24
24
  }
25
25
 
26
+ .kit-btn .kit-btn-content,
27
+ .kit-btn .kit-btn-loading {
28
+ display: inline-flex;
29
+ align-items: center;
30
+ justify-content: center;
31
+ white-space: nowrap;
32
+ gap: var(--btn-gap);
33
+ }
34
+
26
35
  .kit-btn:active:hover,
27
36
  .kit-btn:active:focus {
28
37
  animation: button-click 0s ease-out;
@@ -33,59 +42,82 @@
33
42
  .kit-btn[breakpoint]kit-btn--size-xs {
34
43
  --btn-height: 1.75rem;
35
44
  --btn-multiplier-y: 2;
45
+ --btn-gap: 0.25rem;
36
46
  font-size: 0.75rem;
37
- gap: 0.25rem;
47
+ gap: var(--btn-gap);
38
48
  }
39
49
 
40
50
  .kit-btn[breakpoint]kit-btn--size-sm {
41
51
  --btn-height: 2rem;
42
52
  --btn-multiplier-y: 3;
53
+ --btn-gap: 0.5rem;
43
54
  font-size: 0.875rem;
44
- gap: 0.5rem;
55
+ gap: var(--btn-gap);
45
56
  }
46
57
 
47
58
  .kit-btn[breakpoint]kit-btn--size-md {
48
59
  --btn-height: 2.25rem;
49
60
  --btn-multiplier-y: 4;
61
+ --btn-gap: 0.5rem;
50
62
  font-size: 0.875rem;
51
- gap: 0.5rem;
63
+ gap: var(--btn-gap);
52
64
  }
53
65
 
54
66
  .kit-btn[breakpoint]kit-btn--size-lg {
55
67
  --btn-height: 2.5rem;
56
68
  --btn-multiplier-y: 5;
69
+ --btn-gap: 0.5rem;
57
70
  font-size: 1rem;
58
- gap: 0.5rem;
71
+ gap: var(--btn-gap);
59
72
  }
60
73
 
61
74
  .kit-btn[breakpoint]kit-btn--size-xl {
62
75
  --btn-height: 2.75rem;
63
76
  --btn-multiplier-y: 6;
77
+ --btn-gap: 0.675rem;
64
78
  font-size: 1.125rem;
65
- gap: 0.675rem;
79
+ gap: var(--btn-gap);
66
80
  }
67
81
 
68
82
  /* density */
69
- .kit-btn[breakpoint]kit-btn--density-default {
83
+ .kit-btn:not(.kit-btn--icon)[breakpoint]kit-btn--density-default {
70
84
  height: calc(var(--btn-height));
71
85
  min-width: calc(var(--btn-height));
72
86
  --btn-spacing-x: 0;
73
87
  --btn-spacing-y: calc(var(--kit-spacing) * var(--btn-multiplier-y));
74
88
  }
89
+ .kit-btn.kit-btn--icon[breakpoint]kit-btn--density-default {
90
+ height: calc(var(--btn-height));
91
+ width: calc(var(--btn-height));
92
+ --btn-spacing-x: 0;
93
+ --btn-spacing-y: 0;
94
+ }
75
95
 
76
- .kit-btn[breakpoint]kit-btn--density-compact {
96
+ .kit-btn:not(.kit-btn--icon)[breakpoint]kit-btn--density-compact {
77
97
  height: calc(var(--btn-height) - 0.25rem);
78
98
  min-width: calc(var(--btn-height - 0.25rem));
79
99
  --btn-spacing-x: 0;
80
100
  --btn-spacing-y: calc(var(--kit-spacing) * var(--btn-multiplier-y) - 0.25rem);
81
101
  }
102
+ .kit-btn.kit-btn--icon[breakpoint]kit-btn--density-compact {
103
+ height: calc(var(--btn-height) - 0.25rem);
104
+ width: calc(var(--btn-height) - 0.25rem);
105
+ --btn-spacing-x: 0;
106
+ --btn-spacing-y: 0;
107
+ }
82
108
 
83
- .kit-btn[breakpoint]kit-btn--density-comfortable {
109
+ .kit-btn:not(.kit-btn--icon)[breakpoint]kit-btn--density-comfortable {
84
110
  height: calc(var(--btn-height) + 0.25rem);
85
111
  min-width: calc(var(--btn-height) + 0.25rem);
86
112
  --btn-spacing-x: 0;
87
113
  --btn-spacing-y: calc(var(--kit-spacing) * var(--btn-multiplier-y) + 0.25rem);
88
114
  }
115
+ .kit-btn.kit-btn--icon[breakpoint]kit-btn--density-comfortable {
116
+ height: calc(var(--btn-height) + 0.25rem);
117
+ width: calc(var(--btn-height) + 0.25rem);
118
+ --btn-spacing-x: 0;
119
+ --btn-spacing-y: 0;
120
+ }
89
121
 
90
122
  /* variant */
91
123
  .kit-btn[breakpoint]kit-btn--variant-outline {
@@ -233,8 +265,12 @@ input.kit-btn[disabled] {
233
265
  }
234
266
  .kit-btn.kit-btn--loading > .kit-btn-content {
235
267
  color: transparent;
268
+ opacity: 0;
236
269
  }
237
270
  .kit-btn.kit-btn--loading > .kit-btn-loading {
238
271
  position: absolute;
239
272
  min-width: fit-content;
240
273
  }
274
+ .kit-btn.kit-btn--loading > .kit-btn-loading .kit-icon-load {
275
+ animation: icon-rotate 1s ease-out infinite;
276
+ }
@@ -1,7 +1,11 @@
1
1
  <script lang="ts">
2
2
  import { getAssets } from '../../internal/index.js';
3
+ import Icon from '../icon/icon.svelte';
3
4
  import type { BtnProps } from './types.js';
4
5
 
6
+ // external
7
+ import LoadingFill from '../../assets/icons/loading-fill.svelte';
8
+
5
9
  let {
6
10
  children,
7
11
  ref = $bindable(),
@@ -24,6 +28,8 @@
24
28
  label,
25
29
  loading,
26
30
  rounded,
31
+ icon,
32
+ load,
27
33
  ...rest
28
34
  }: BtnProps = $props();
29
35
 
@@ -56,6 +62,7 @@
56
62
  disabled && 'kit-btn--disabled',
57
63
  active && 'kit-btn--active',
58
64
  loading && 'kit-btn--loading',
65
+ icon && 'kit-btn--icon',
59
66
  rest.class
60
67
  ]}
61
68
  tabindex={href && disabled ? -1 : 0}
@@ -69,7 +76,13 @@
69
76
  >
70
77
  {#if loading}
71
78
  <div class="kit-btn-loading">
72
- <div>loading ...</div>
79
+ {#if load}
80
+ {@render load?.()}
81
+ {:else}
82
+ <Icon class="kit-icon-load">
83
+ <LoadingFill />
84
+ </Icon>
85
+ {/if}
73
86
  </div>
74
87
  {/if}
75
88
 
@@ -1,4 +1,5 @@
1
1
  import type { Component } from '../../internal/types.js';
2
+ import type { Snippet } from 'svelte';
2
3
  export interface BtnProps extends Component {
3
4
  ref?: HTMLElement | null;
4
5
  is?: 'button' | 'a' | 'input';
@@ -21,4 +22,6 @@ export interface BtnProps extends Component {
21
22
  };
22
23
  type?: 'button' | 'submit' | 'reset' | 'radio' | 'checkbox';
23
24
  label?: string;
25
+ icon?: boolean;
26
+ load?: Snippet;
24
27
  }
@@ -0,0 +1,76 @@
1
+ .kit-icon {
2
+ --icon-size: 1rem;
3
+ --icon-color: var(--base, var(--kit-on-neutral));
4
+
5
+ display: inline-flex;
6
+ align-items: center;
7
+ justify-content: center;
8
+ transition: color 0.5s;
9
+ text-indent: 0;
10
+ }
11
+
12
+ .kit-icon:before {
13
+ font-size: calc(var(--icon-size-multiplier) * var(--icon-size));
14
+ color: var(--icon-color);
15
+ }
16
+
17
+ .kit-icon svg {
18
+ color: var(--icon-color);
19
+ }
20
+
21
+ .kit-icon svg,
22
+ .kit-icon img {
23
+ width: calc(var(--icon-size-multiplier) * var(--icon-size));
24
+ height: calc(var(--icon-size-multiplier) * var(--icon-size));
25
+ }
26
+
27
+ /* size */
28
+ .kit-icon[breakpoint]kit-icon--size-xs {
29
+ --icon-size-multiplier: 0.875;
30
+ }
31
+
32
+ .kit-icon[breakpoint]kit-icon--size-sm {
33
+ --icon-size-multiplier: 1;
34
+ }
35
+
36
+ .kit-icon[breakpoint]kit-icon--size-md {
37
+ --icon-size-multiplier: 1.125;
38
+ }
39
+
40
+ .kit-icon[breakpoint]kit-icon--size-lg {
41
+ --icon-size-multiplier: 1.25;
42
+ }
43
+
44
+ .kit-icon[breakpoint]kit-icon--size-xl {
45
+ --icon-size-multiplier: 1.5;
46
+ }
47
+
48
+ /* state */
49
+ .kit-icon.kit-icon--info {
50
+ --base: var(--kit-info);
51
+ }
52
+ .kit-icon.kit-icon--success {
53
+ --base: var(--kit-success);
54
+ }
55
+ .kit-icon.kit-icon--warning {
56
+ --base: var(--kit-warning);
57
+ }
58
+ .kit-icon.kit-icon--error {
59
+ --base: var(--kit-error);
60
+ }
61
+
62
+ /* disabled */
63
+ .kit-icon.kit-icon--disabled {
64
+ -webkit-user-select: none;
65
+ user-select: none;
66
+ pointer-events: none;
67
+ }
68
+
69
+ .kit-icon.kit-icon--disabled img {
70
+ opacity: 0.38;
71
+ }
72
+
73
+ .kit-icon.kit-icon--disabled svg,
74
+ .kit-icon.kit-icon--disabled:before {
75
+ color: color-mix(in oklab, var(--icon-color) 40%, transparent) !important;
76
+ }
@@ -0,0 +1,49 @@
1
+ <script lang="ts">
2
+ import { getAssets } from '../../internal/assets.svelte.js';
3
+ import type { IconProps } from './types.js';
4
+ let {
5
+ children,
6
+ ref = $bindable(),
7
+ is = 'i',
8
+ light,
9
+ dark,
10
+ icon,
11
+ size = 'md',
12
+ error,
13
+ info,
14
+ success,
15
+ warning,
16
+ disabled,
17
+ alt,
18
+ color,
19
+ ...rest
20
+ }: IconProps = $props();
21
+
22
+ const assets = getAssets();
23
+ </script>
24
+
25
+ <svelte:element
26
+ this={icon && icon.includes('/') ? 'div' : is}
27
+ bind:this={ref}
28
+ {...rest}
29
+ class={[
30
+ 'kit-icon',
31
+ icon && !icon.includes('/') && icon,
32
+ light && 'light',
33
+ dark && 'dark',
34
+ info && 'kit-icon--info',
35
+ success && 'kit-icon--success',
36
+ warning && 'kit-icon--warning',
37
+ error && 'kit-icon--error',
38
+ disabled && 'kit-icon--disabled',
39
+ size && assets.className('icon', 'size', size),
40
+ rest.class
41
+ ]}
42
+ style:--base={assets.color(color)}
43
+ >
44
+ {#if icon && icon.includes('/')}
45
+ <img src={icon} {alt} />
46
+ {:else}
47
+ {@render children?.()}
48
+ {/if}
49
+ </svelte:element>
@@ -0,0 +1,4 @@
1
+ import type { IconProps } from './types.js';
2
+ declare const Icon: import("svelte").Component<IconProps, {}, "ref">;
3
+ type Icon = ReturnType<typeof Icon>;
4
+ export default Icon;
@@ -0,0 +1,16 @@
1
+ import type { Component } from '../../internal/types.js';
2
+ export interface IconProps extends Component {
3
+ ref?: HTMLElement | null;
4
+ is?: 'i' | 'div';
5
+ dark?: boolean;
6
+ light?: boolean;
7
+ error?: boolean;
8
+ info?: boolean;
9
+ warning?: boolean;
10
+ success?: boolean;
11
+ disabled?: boolean;
12
+ color?: string;
13
+ size?: string | {
14
+ [key: string]: string;
15
+ };
16
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -1,2 +1,3 @@
1
1
  export { default as App } from './app/app.svelte';
2
2
  export { default as Btn } from './button/button.svelte';
3
+ export { default as Icon } from './icon/icon.svelte';
@@ -1,3 +1,4 @@
1
1
  // components
2
2
  export { default as App } from './app/app.svelte';
3
3
  export { default as Btn } from './button/button.svelte';
4
+ export { default as Icon } from './icon/icon.svelte';
@@ -9,3 +9,12 @@
9
9
  transform: scale(1);
10
10
  }
11
11
  }
12
+
13
+ @keyframes icon-rotate {
14
+ 0% {
15
+ transform: rotate(10deg);
16
+ }
17
+ 100% {
18
+ transform: rotate(380deg);
19
+ }
20
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lapikit",
3
- "version": "0.0.0-insiders.e330f8d",
3
+ "version": "0.0.0-insiders.fbbc9f6",
4
4
  "license": "MIT",
5
5
  "publishConfig": {
6
6
  "access": "public"