@genarou/blazir-icons 1.3.4 → 1.3.5

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 (68) hide show
  1. package/dist/Icon.svelte +21 -23
  2. package/dist/Icon.svelte.d.ts +5 -5
  3. package/dist/IconLazy.svelte +297 -0
  4. package/dist/IconLazy.svelte.d.ts +22 -0
  5. package/dist/icons/ArrowDown.svelte +18 -0
  6. package/dist/icons/ArrowDown.svelte.d.ts +4 -0
  7. package/dist/icons/ArrowLeft.svelte +18 -0
  8. package/dist/icons/ArrowLeft.svelte.d.ts +4 -0
  9. package/dist/icons/ChevronLeft.svelte +15 -0
  10. package/dist/icons/ChevronLeft.svelte.d.ts +4 -0
  11. package/dist/icons/ChevronRight.svelte +15 -0
  12. package/dist/icons/ChevronRight.svelte.d.ts +4 -0
  13. package/dist/icons/ChevronUp.svelte +15 -0
  14. package/dist/icons/ChevronUp.svelte.d.ts +4 -0
  15. package/dist/icons/CloudUpload.svelte +18 -0
  16. package/dist/icons/CloudUpload.svelte.d.ts +4 -0
  17. package/dist/icons/Code.svelte +18 -0
  18. package/dist/icons/Code.svelte.d.ts +4 -0
  19. package/dist/icons/ExternalLink.svelte +18 -0
  20. package/dist/icons/ExternalLink.svelte.d.ts +4 -0
  21. package/dist/icons/Gift.svelte +21 -0
  22. package/dist/icons/Gift.svelte.d.ts +7 -0
  23. package/dist/icons/Grid.svelte +18 -0
  24. package/dist/icons/Grid.svelte.d.ts +4 -0
  25. package/dist/icons/GripVertical.svelte +18 -0
  26. package/dist/icons/GripVertical.svelte.d.ts +4 -0
  27. package/dist/icons/Layers.svelte +9 -0
  28. package/dist/icons/Layers.svelte.d.ts +4 -0
  29. package/dist/icons/Maximize.svelte +18 -0
  30. package/dist/icons/Maximize.svelte.d.ts +4 -0
  31. package/dist/icons/MicOff.svelte +9 -0
  32. package/dist/icons/MicOff.svelte.d.ts +4 -0
  33. package/dist/icons/Microphone.svelte +9 -0
  34. package/dist/icons/Microphone.svelte.d.ts +4 -0
  35. package/dist/icons/Minimize.svelte +9 -0
  36. package/dist/icons/Minimize.svelte.d.ts +4 -0
  37. package/dist/icons/Percentage.svelte +9 -0
  38. package/dist/icons/Percentage.svelte.d.ts +4 -0
  39. package/dist/icons/Redo.svelte +9 -0
  40. package/dist/icons/Redo.svelte.d.ts +4 -0
  41. package/dist/icons/Sliders.svelte +9 -0
  42. package/dist/icons/Sliders.svelte.d.ts +4 -0
  43. package/dist/icons/Terminal.svelte +21 -0
  44. package/dist/icons/Terminal.svelte.d.ts +7 -0
  45. package/dist/icons/Undo.svelte +9 -0
  46. package/dist/icons/Undo.svelte.d.ts +4 -0
  47. package/dist/icons/UserMinus.svelte +18 -0
  48. package/dist/icons/UserMinus.svelte.d.ts +4 -0
  49. package/dist/icons/UserPlus.svelte +18 -0
  50. package/dist/icons/UserPlus.svelte.d.ts +4 -0
  51. package/dist/icons/Video.svelte +9 -0
  52. package/dist/icons/Video.svelte.d.ts +4 -0
  53. package/dist/icons/Volume.svelte +9 -0
  54. package/dist/icons/Volume.svelte.d.ts +4 -0
  55. package/dist/icons/VolumeOff.svelte +9 -0
  56. package/dist/icons/VolumeOff.svelte.d.ts +4 -0
  57. package/dist/icons/components.d.ts +200 -0
  58. package/dist/icons/components.js +204 -0
  59. package/dist/icons/lazy-registry.js +34 -0
  60. package/dist/icons/registry.d.ts +30 -0
  61. package/dist/icons/registry.js +61 -1
  62. package/dist/icons-api.d.ts +26 -0
  63. package/dist/icons-api.js +34 -0
  64. package/dist/index.d.ts +2 -0
  65. package/dist/index.js +8 -1
  66. package/package.json +58 -53
  67. package/dist/icons/index.d.ts +0 -2
  68. package/dist/icons/index.js +0 -4
package/dist/Icon.svelte CHANGED
@@ -1,37 +1,34 @@
1
1
  <!-- Icon.svelte — Refactored v2 -->
2
2
  <!-- Cache inteligente adaptativo + lazy loading opcional + actions diff -->
3
3
  <script lang="ts">
4
- import type { Component } from 'svelte';
5
- import { coerceSize } from './utils/defaults.js';
6
- import { iconRegistry, type IconName } from './icons/registry.js';
7
- import { iconPresets, iconVariants } from './presets.js';
8
- import type { IconProps } from './types.js';
4
+ import type { Component } from "svelte";
5
+ import { getLoadedIcon, loadIcon } from "./icons/lazy-registry.js";
6
+ import { iconRegistry, type IconName } from "./icons/registry.js";
7
+ import { iconPresets, iconVariants } from "./presets.js";
9
8
  import {
10
- getPresetVariantMerge,
11
9
  arePropsStable,
12
10
  buildStructuralKey,
13
11
  getCachedMergedProps,
12
+ getPresetVariantMerge,
14
13
  setCachedMergedProps,
15
14
  toSizePx,
16
- } from './smart-cache.js';
17
- import {
18
- getLoadedIcon,
19
- loadIcon,
20
- } from './icons/lazy-registry.js';
15
+ } from "./smart-cache.js";
16
+ import type { IconProps } from "./types.js";
17
+ import { coerceSize } from "./utils/defaults.js";
21
18
 
22
19
  // ============================================================================
23
20
  // TIPOS
24
21
  // ============================================================================
25
22
  type ActionFn<T = HTMLElement, P = any> = (
26
23
  node: T,
27
- params?: P
24
+ params?: P,
28
25
  ) => void | { update?: (p?: P) => void; destroy?: () => void };
29
26
 
30
27
  type ActionEntry<T = HTMLElement> = [ActionFn<T, any>, any?];
31
28
  type IconPresetName = keyof typeof iconPresets;
32
29
  type IconVariantName = keyof typeof iconVariants;
33
30
 
34
- interface DynamicIconProps extends Omit<IconProps, 'children'> {
31
+ interface DynamicIconProps extends Omit<IconProps, "children"> {
35
32
  name?: IconName;
36
33
  preset?: IconPresetName;
37
34
  variant?: IconVariantName;
@@ -57,7 +54,7 @@
57
54
  // --- Modo EAGER (default): usa el registry estático ya cargado ---
58
55
  // Mismo comportamiento que antes: sin latencia, sin skeleton en primer render.
59
56
  const _eagerComp = $derived(
60
- iconName ? (iconRegistry[iconName as IconName] ?? null) : null
57
+ iconName ? (iconRegistry[iconName as IconName] ?? null) : null,
61
58
  );
62
59
 
63
60
  // --- Modo LAZY (opt-in): dynamic import() por ícono ---
@@ -82,8 +79,8 @@
82
79
  // Si es el mismo nombre y ya lo cargamos → no hacer nada
83
80
  if (_lazyCurrentName === name && _lazyComp) return;
84
81
 
85
- // Intentar sincrónico primero (caché de íconos ya cargados)
86
- const synced = getLoadedIcon(name) ?? (iconRegistry[name as IconName] ?? null);
82
+ // Intentar sincrónico primero (caché de íconos ya cargados en esta sesión)
83
+ const synced = getLoadedIcon(name);
87
84
  if (synced) {
88
85
  _lazyComp = synced;
89
86
  _lazyCurrentName = name;
@@ -121,7 +118,7 @@
121
118
  // ============================================================================
122
119
  function toMs(v: unknown): string | undefined {
123
120
  if (v == null) return undefined;
124
- return typeof v === 'number' ? `${v}ms` : String(v);
121
+ return typeof v === "number" ? `${v}ms` : String(v);
125
122
  }
126
123
 
127
124
  // ============================================================================
@@ -202,7 +199,7 @@
202
199
  // ATRIBUTOS DEL HOST
203
200
  // ============================================================================
204
201
  const hostClass = $derived(
205
- p.class ? `bz-icon-wrapper ${p.class}` : 'bz-icon-wrapper'
202
+ p.class ? `bz-icon-wrapper ${p.class}` : "bz-icon-wrapper",
206
203
  );
207
204
 
208
205
  const hostStyle = $derived.by(() => {
@@ -296,7 +293,7 @@
296
293
  >
297
294
  {#key mountKey}
298
295
  <!-- svelte-ignore: cast necesario para componentes dinámicos con props genéricas -->
299
- <Comp {...(child as any)} />
296
+ <Comp {...child as any} />
300
297
  {/key}
301
298
  </span>
302
299
  {:else if isLoading}
@@ -330,8 +327,9 @@
330
327
  transform: translateX(-50%);
331
328
  pointer-events: none;
332
329
  opacity: 0;
333
- transition: opacity 0.15s ease var(--bz-tooltip-delay, 0ms),
334
- transform 0.15s ease var(--bz-tooltip-delay, 0ms);
330
+ transition:
331
+ opacity 0.15s ease var(--bz-tooltip-delay, 0ms),
332
+ transform 0.15s ease var(--bz-tooltip-delay, 0ms);
335
333
  z-index: 9999;
336
334
  }
337
335
 
@@ -346,13 +344,13 @@
346
344
  padding: 5px 9px;
347
345
  border-radius: 6px;
348
346
  white-space: nowrap;
349
- box-shadow: 0 2px 8px rgba(0,0,0,0.18);
347
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.18);
350
348
  transform: translateX(-50%) translateY(3px);
351
349
  }
352
350
 
353
351
  /* Flecha del tooltip */
354
352
  .bz-icon-wrapper[data-bz-tooltip]::before {
355
- content: '';
353
+ content: "";
356
354
  border: 5px solid transparent;
357
355
  border-top-color: var(--bz-tooltip-bg, #1a1a1a);
358
356
  bottom: calc(100% + 0px);
@@ -1,7 +1,7 @@
1
- import type { Component } from 'svelte';
2
- import { type IconName } from './icons/registry.js';
3
- import { iconPresets, iconVariants } from './presets.js';
4
- import type { IconProps } from './types.js';
1
+ import type { Component } from "svelte";
2
+ import { type IconName } from "./icons/registry.js";
3
+ import { iconPresets, iconVariants } from "./presets.js";
4
+ import type { IconProps } from "./types.js";
5
5
  type ActionFn<T = HTMLElement, P = any> = (node: T, params?: P) => void | {
6
6
  update?: (p?: P) => void;
7
7
  destroy?: () => void;
@@ -9,7 +9,7 @@ type ActionFn<T = HTMLElement, P = any> = (node: T, params?: P) => void | {
9
9
  type ActionEntry<T = HTMLElement> = [ActionFn<T, any>, any?];
10
10
  type IconPresetName = keyof typeof iconPresets;
11
11
  type IconVariantName = keyof typeof iconVariants;
12
- interface DynamicIconProps extends Omit<IconProps, 'children'> {
12
+ interface DynamicIconProps extends Omit<IconProps, "children"> {
13
13
  name?: IconName;
14
14
  preset?: IconPresetName;
15
15
  variant?: IconVariantName;
@@ -0,0 +1,297 @@
1
+ <!-- IconLazy.svelte
2
+ Variante zero-bundle del componente dinámico.
3
+ NO importa iconRegistry en runtime — cada ícono se code-splitea
4
+ en su propio chunk por el bundler via dynamic import().
5
+ Úsalo cuando el nombre del ícono se decide en runtime y quieres
6
+ que solo los iconos realmente usados entren al bundle.
7
+ -->
8
+ <script lang="ts">
9
+ import type { Component } from "svelte";
10
+ import { coerceSize } from "./utils/defaults.js";
11
+ // import type → TypeScript lo borra en compilación, cero runtime dep sobre registry
12
+ import { getLoadedIcon, loadIcon } from "./icons/lazy-registry.js";
13
+ import type { IconName } from "./icons/registry.js";
14
+ import { iconPresets, iconVariants } from "./presets.js";
15
+ import {
16
+ arePropsStable,
17
+ buildStructuralKey,
18
+ getCachedMergedProps,
19
+ getPresetVariantMerge,
20
+ setCachedMergedProps,
21
+ toSizePx,
22
+ } from "./smart-cache.js";
23
+ import type { IconProps } from "./types.js";
24
+
25
+ type ActionFn<T = HTMLElement, P = any> = (
26
+ node: T,
27
+ params?: P,
28
+ ) => void | { update?: (p?: P) => void; destroy?: () => void };
29
+
30
+ type ActionEntry<T = HTMLElement> = [ActionFn<T, any>, any?];
31
+ type IconPresetName = keyof typeof iconPresets;
32
+ type IconVariantName = keyof typeof iconVariants;
33
+
34
+ interface LazyIconProps extends Omit<IconProps, "children"> {
35
+ name?: IconName;
36
+ preset?: IconPresetName;
37
+ variant?: IconVariantName;
38
+ class?: string;
39
+ style?: string;
40
+ actions?: ActionEntry[];
41
+ }
42
+
43
+ const p: LazyIconProps = $props();
44
+
45
+ const iconName = $derived(p.name ?? null);
46
+
47
+ // Resolución lazy — solo dynamic import(), nunca el registry estático
48
+ let _comp = $state<Component | null>(null);
49
+ let _loading = $state(false);
50
+ let _currentName = $state<string | null>(null);
51
+
52
+ $effect(() => {
53
+ const name = iconName;
54
+
55
+ if (!name) {
56
+ _comp = null;
57
+ _currentName = null;
58
+ _loading = false;
59
+ return;
60
+ }
61
+
62
+ if (_currentName === name && _comp) return;
63
+
64
+ // Caché en memoria de iconos ya cargados en esta sesión → render síncrono
65
+ const cached = getLoadedIcon(name);
66
+ if (cached) {
67
+ _comp = cached;
68
+ _currentName = name;
69
+ _loading = false;
70
+ return;
71
+ }
72
+
73
+ // Dynamic import — el bundler genera un chunk separado por ícono
74
+ _loading = true;
75
+ _currentName = name;
76
+ loadIcon(name).then((comp) => {
77
+ if (_currentName === name) {
78
+ _comp = comp;
79
+ _loading = false;
80
+ }
81
+ });
82
+ });
83
+
84
+ // PascalCase alias requerido por Svelte para usar como tag de componente
85
+ const Comp = $derived(_comp);
86
+
87
+ const baseProps = $derived(getPresetVariantMerge(p.preset, p.variant));
88
+
89
+ function toMs(v: unknown): string | undefined {
90
+ if (v == null) return undefined;
91
+ return typeof v === "number" ? `${v}ms` : String(v);
92
+ }
93
+
94
+ const child = $derived.by((): IconProps => {
95
+ const {
96
+ class: _cls,
97
+ style: _sty,
98
+ actions: _act,
99
+ preset: _pre,
100
+ variant: _var,
101
+ name: _nm,
102
+ ...userProps
103
+ } = p;
104
+
105
+ const stable = arePropsStable(userProps as Record<string, unknown>);
106
+
107
+ if (stable) {
108
+ const key = buildStructuralKey(userProps as Record<string, unknown>);
109
+ const cached = getCachedMergedProps(key);
110
+ if (cached) return cached;
111
+
112
+ const merged: any = { ...baseProps, ...userProps };
113
+ if (merged.animationDuration !== undefined)
114
+ merged.animationDuration = toMs(merged.animationDuration);
115
+ if (merged.animationDelay !== undefined)
116
+ merged.animationDelay = toMs(merged.animationDelay);
117
+
118
+ const result = Object.freeze(merged) as unknown as IconProps;
119
+ setCachedMergedProps(key, result as Readonly<IconProps>);
120
+ return result;
121
+ }
122
+
123
+ const merged: any = { ...baseProps, ...userProps };
124
+ if (merged.animationDuration !== undefined)
125
+ merged.animationDuration = toMs(merged.animationDuration);
126
+ if (merged.animationDelay !== undefined)
127
+ merged.animationDelay = toMs(merged.animationDelay);
128
+ return merged as IconProps;
129
+ });
130
+
131
+ const boxSize = $derived.by(() => {
132
+ const rawSize = (p as any).size ?? (baseProps as any).size;
133
+ return toSizePx(coerceSize(rawSize, 24));
134
+ });
135
+
136
+ const hostClass = $derived(
137
+ p.class ? `bz-icon-wrapper ${p.class}` : "bz-icon-wrapper",
138
+ );
139
+
140
+ const hostStyle = $derived.by(() => {
141
+ const sz = boxSize;
142
+ const base = `--bz-icon-size:${sz};width:${sz};height:${sz};inline-size:${sz};block-size:${sz};`;
143
+ return p.style ? base + p.style : base;
144
+ });
145
+
146
+ let mountKey = $state(0);
147
+ function onLazyMount() {
148
+ mountKey++;
149
+ }
150
+
151
+ function applyActions(node: HTMLElement, entries: ActionEntry[] = []) {
152
+ if (!entries?.length) return { update() {}, destroy() {} };
153
+
154
+ let prevEntries: ActionEntry[] = entries;
155
+ let handles = entries
156
+ .map(([fn, params]) => fn?.(node, params))
157
+ .filter(Boolean);
158
+
159
+ return {
160
+ update(next: ActionEntry[] = []) {
161
+ if (!next?.length) {
162
+ handles.forEach((h) => h?.destroy?.());
163
+ handles = [];
164
+ prevEntries = [];
165
+ return;
166
+ }
167
+ if (next.length === prevEntries.length) {
168
+ let sameFns = true;
169
+ for (let i = 0; i < next.length; i++) {
170
+ if (next[i][0] !== prevEntries[i][0]) {
171
+ sameFns = false;
172
+ break;
173
+ }
174
+ }
175
+ if (sameFns) {
176
+ handles.forEach((h, i) => h?.update?.(next[i][1]));
177
+ prevEntries = next;
178
+ return;
179
+ }
180
+ }
181
+ handles.forEach((h) => h?.destroy?.());
182
+ prevEntries = next;
183
+ handles = next
184
+ .map(([fn, params]) => fn?.(node, params))
185
+ .filter(Boolean);
186
+ },
187
+ destroy() {
188
+ handles.forEach((h) => h?.destroy?.());
189
+ handles = [];
190
+ prevEntries = [];
191
+ },
192
+ };
193
+ }
194
+ </script>
195
+
196
+ {#if Comp}
197
+ <span
198
+ class={hostClass}
199
+ style={p.tooltipDelay != null
200
+ ? `${hostStyle};--bz-tooltip-delay:${p.tooltipDelay}ms`
201
+ : hostStyle}
202
+ data-bz-tooltip={p.tooltip || undefined}
203
+ use:applyActions={p.actions ?? []}
204
+ onlazyMount={onLazyMount}
205
+ >
206
+ {#key mountKey}
207
+ <Comp {...child as any} />
208
+ {/key}
209
+ </span>
210
+ {:else if _loading}
211
+ <span class="bz-icon-skeleton" aria-hidden="true"></span>
212
+ {:else if iconName}
213
+ <span class="bz-icon-error" data-icon={iconName}
214
+ >⚠️ Icon not found: {iconName}</span
215
+ >
216
+ {:else}
217
+ <span class="bz-icon-skeleton" aria-hidden="true"></span>
218
+ {/if}
219
+
220
+ <style>
221
+ .bz-icon-wrapper {
222
+ cursor: pointer;
223
+ display: inline-flex;
224
+ align-items: center;
225
+ justify-content: center;
226
+ position: relative;
227
+ pointer-events: auto;
228
+ contain: layout style;
229
+ content-visibility: auto;
230
+ }
231
+
232
+ .bz-icon-wrapper[data-bz-tooltip]::before,
233
+ .bz-icon-wrapper[data-bz-tooltip]::after {
234
+ position: absolute;
235
+ bottom: calc(100% + 8px);
236
+ left: 50%;
237
+ transform: translateX(-50%);
238
+ pointer-events: none;
239
+ opacity: 0;
240
+ transition:
241
+ opacity 0.15s ease var(--bz-tooltip-delay, 0ms),
242
+ transform 0.15s ease var(--bz-tooltip-delay, 0ms);
243
+ z-index: 9999;
244
+ }
245
+
246
+ .bz-icon-wrapper[data-bz-tooltip]::after {
247
+ content: attr(data-bz-tooltip);
248
+ background: var(--bz-tooltip-bg, #1a1a1a);
249
+ color: var(--bz-tooltip-color, #fff);
250
+ font-size: 11px;
251
+ font-weight: 500;
252
+ line-height: 1.4;
253
+ padding: 5px 9px;
254
+ border-radius: 6px;
255
+ white-space: nowrap;
256
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.18);
257
+ transform: translateX(-50%) translateY(3px);
258
+ }
259
+
260
+ .bz-icon-wrapper[data-bz-tooltip]::before {
261
+ content: "";
262
+ border: 5px solid transparent;
263
+ border-top-color: var(--bz-tooltip-bg, #1a1a1a);
264
+ bottom: calc(100% + 0px);
265
+ transform: translateX(-50%) translateY(3px);
266
+ }
267
+
268
+ .bz-icon-wrapper[data-bz-tooltip]:hover::after,
269
+ .bz-icon-wrapper[data-bz-tooltip]:hover::before {
270
+ opacity: 1;
271
+ transform: translateX(-50%) translateY(0);
272
+ }
273
+
274
+ .bz-icon-wrapper :global(svg) {
275
+ pointer-events: bounding-box !important;
276
+ }
277
+ .bz-icon-wrapper :global(svg *) {
278
+ pointer-events: none !important;
279
+ }
280
+
281
+ .bz-icon-skeleton {
282
+ width: 100%;
283
+ height: 100%;
284
+ border-radius: var(--ui-radius, 0.25rem);
285
+ background: color-mix(in oklab, currentColor 12%, transparent);
286
+ opacity: 0.5;
287
+ }
288
+
289
+ .bz-icon-error {
290
+ display: inline-block;
291
+ background: var(--danger-color, #ef4444);
292
+ color: var(--danger-foreground, #fff);
293
+ font-size: 0.75rem;
294
+ border-radius: var(--ui-radius, 0.25rem);
295
+ font-weight: 600;
296
+ }
297
+ </style>
@@ -0,0 +1,22 @@
1
+ import type { Component } from "svelte";
2
+ import type { IconName } from "./icons/registry.js";
3
+ import { iconPresets, iconVariants } from "./presets.js";
4
+ import type { IconProps } from "./types.js";
5
+ type ActionFn<T = HTMLElement, P = any> = (node: T, params?: P) => void | {
6
+ update?: (p?: P) => void;
7
+ destroy?: () => void;
8
+ };
9
+ type ActionEntry<T = HTMLElement> = [ActionFn<T, any>, any?];
10
+ type IconPresetName = keyof typeof iconPresets;
11
+ type IconVariantName = keyof typeof iconVariants;
12
+ interface LazyIconProps extends Omit<IconProps, "children"> {
13
+ name?: IconName;
14
+ preset?: IconPresetName;
15
+ variant?: IconVariantName;
16
+ class?: string;
17
+ style?: string;
18
+ actions?: ActionEntry[];
19
+ }
20
+ declare const IconLazy: Component<LazyIconProps, {}, "">;
21
+ type IconLazy = ReturnType<typeof IconLazy>;
22
+ export default IconLazy;
@@ -0,0 +1,18 @@
1
+ <script lang="ts">
2
+ import IconBase from "../IconBase.svelte";
3
+ import type { IconProps } from "../types";
4
+ const props: IconProps = $props();
5
+ </script>
6
+
7
+ <IconBase
8
+ {...props}
9
+ mode="solid"
10
+ viewBox="0 0 24 24"
11
+ ariaLabel={props.ariaLabel ?? "Arrow down"}
12
+ title={props.title ?? ""}
13
+ >
14
+ <path
15
+ fill="currentColor"
16
+ d="M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z"
17
+ />
18
+ </IconBase>
@@ -0,0 +1,4 @@
1
+ import type { IconProps } from "../types";
2
+ declare const ArrowDown: import("svelte").Component<IconProps, {}, "">;
3
+ type ArrowDown = ReturnType<typeof ArrowDown>;
4
+ export default ArrowDown;
@@ -0,0 +1,18 @@
1
+ <script lang="ts">
2
+ import IconBase from "../IconBase.svelte";
3
+ import type { IconProps } from "../types";
4
+ const props: IconProps = $props();
5
+ </script>
6
+
7
+ <IconBase
8
+ {...props}
9
+ mode="solid"
10
+ viewBox="0 0 24 24"
11
+ ariaLabel={props.ariaLabel ?? "Arrow left"}
12
+ title={props.title ?? ""}
13
+ >
14
+ <path
15
+ fill="currentColor"
16
+ d="M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z"
17
+ />
18
+ </IconBase>
@@ -0,0 +1,4 @@
1
+ import type { IconProps } from "../types";
2
+ declare const ArrowLeft: import("svelte").Component<IconProps, {}, "">;
3
+ type ArrowLeft = ReturnType<typeof ArrowLeft>;
4
+ export default ArrowLeft;
@@ -0,0 +1,15 @@
1
+ <script lang="ts">
2
+ import IconBase from "../IconBase.svelte";
3
+ import type { IconProps } from "../types";
4
+ const props: IconProps = $props();
5
+ </script>
6
+
7
+ <IconBase
8
+ {...props}
9
+ mode="solid"
10
+ viewBox="0 0 32 32"
11
+ ariaLabel={props.ariaLabel ?? "Chevron left"}
12
+ title={props.title ?? ""}
13
+ >
14
+ <path d="M10 16 20 6l1.4 1.4-8.6 8.6 8.6 8.6L20 26z" />
15
+ </IconBase>
@@ -0,0 +1,4 @@
1
+ import type { IconProps } from "../types";
2
+ declare const ChevronLeft: import("svelte").Component<IconProps, {}, "">;
3
+ type ChevronLeft = ReturnType<typeof ChevronLeft>;
4
+ export default ChevronLeft;
@@ -0,0 +1,15 @@
1
+ <script lang="ts">
2
+ import IconBase from "../IconBase.svelte";
3
+ import type { IconProps } from "../types";
4
+ const props: IconProps = $props();
5
+ </script>
6
+
7
+ <IconBase
8
+ {...props}
9
+ mode="solid"
10
+ viewBox="0 0 32 32"
11
+ ariaLabel={props.ariaLabel ?? "Chevron right"}
12
+ title={props.title ?? ""}
13
+ >
14
+ <path d="M22 16 12 26l-1.4-1.4 8.6-8.6-8.6-8.6L12 6z" />
15
+ </IconBase>
@@ -0,0 +1,4 @@
1
+ import type { IconProps } from "../types";
2
+ declare const ChevronRight: import("svelte").Component<IconProps, {}, "">;
3
+ type ChevronRight = ReturnType<typeof ChevronRight>;
4
+ export default ChevronRight;
@@ -0,0 +1,15 @@
1
+ <script lang="ts">
2
+ import IconBase from "../IconBase.svelte";
3
+ import type { IconProps } from "../types";
4
+ const props: IconProps = $props();
5
+ </script>
6
+
7
+ <IconBase
8
+ {...props}
9
+ mode="solid"
10
+ viewBox="0 0 32 32"
11
+ ariaLabel={props.ariaLabel ?? "Chevron up"}
12
+ title={props.title ?? ""}
13
+ >
14
+ <path d="M16 10 6 20l1.4 1.4 8.6-8.6 8.6 8.6L26 20z" />
15
+ </IconBase>
@@ -0,0 +1,4 @@
1
+ import type { IconProps } from "../types";
2
+ declare const ChevronUp: import("svelte").Component<IconProps, {}, "">;
3
+ type ChevronUp = ReturnType<typeof ChevronUp>;
4
+ export default ChevronUp;
@@ -0,0 +1,18 @@
1
+ <script lang="ts">
2
+ import IconBase from "../IconBase.svelte";
3
+ import type { IconProps } from "../types";
4
+ const props: IconProps = $props();
5
+ </script>
6
+
7
+ <IconBase
8
+ {...props}
9
+ mode="solid"
10
+ viewBox="0 0 24 24"
11
+ ariaLabel={props.ariaLabel ?? "Cloud upload"}
12
+ title={props.title ?? ""}
13
+ >
14
+ <path
15
+ fill="currentColor"
16
+ d="M19.35 10.04A7.49 7.49 0 0 0 12 4C9.11 4 6.6 5.64 5.35 8.04A5.994 5.994 0 0 0 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96zM14 13v4h-4v-4H7l5-5 5 5h-3z"
17
+ />
18
+ </IconBase>
@@ -0,0 +1,4 @@
1
+ import type { IconProps } from "../types";
2
+ declare const CloudUpload: import("svelte").Component<IconProps, {}, "">;
3
+ type CloudUpload = ReturnType<typeof CloudUpload>;
4
+ export default CloudUpload;
@@ -0,0 +1,18 @@
1
+ <script lang="ts">
2
+ import IconBase from "../IconBase.svelte";
3
+ import type { IconProps } from "../types";
4
+ const props: IconProps = $props();
5
+ </script>
6
+
7
+ <IconBase
8
+ {...props}
9
+ mode="solid"
10
+ viewBox="0 0 24 24"
11
+ ariaLabel={props.ariaLabel ?? "Code"}
12
+ title={props.title ?? ""}
13
+ >
14
+ <path
15
+ fill="currentColor"
16
+ d="M9.4 16.6L4.8 12l4.6-4.6L8 6l-6 6 6 6 1.4-1.4zm5.2 0l4.6-4.6-4.6-4.6L16 6l6 6-6 6-1.4-1.4z"
17
+ />
18
+ </IconBase>
@@ -0,0 +1,4 @@
1
+ import type { IconProps } from "../types";
2
+ declare const Code: import("svelte").Component<IconProps, {}, "">;
3
+ type Code = ReturnType<typeof Code>;
4
+ export default Code;
@@ -0,0 +1,18 @@
1
+ <script lang="ts">
2
+ import IconBase from "../IconBase.svelte";
3
+ import type { IconProps } from "../types";
4
+ const props: IconProps = $props();
5
+ </script>
6
+
7
+ <IconBase
8
+ {...props}
9
+ mode="solid"
10
+ viewBox="0 0 24 24"
11
+ ariaLabel={props.ariaLabel ?? "External link"}
12
+ title={props.title ?? ""}
13
+ >
14
+ <path
15
+ fill="currentColor"
16
+ d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"
17
+ />
18
+ </IconBase>
@@ -0,0 +1,4 @@
1
+ import type { IconProps } from "../types";
2
+ declare const ExternalLink: import("svelte").Component<IconProps, {}, "">;
3
+ type ExternalLink = ReturnType<typeof ExternalLink>;
4
+ export default ExternalLink;
@@ -0,0 +1,21 @@
1
+ <script lang="ts">
2
+ import IconBase from "../IconBase.svelte";
3
+ import type { IconMode, IconProps } from "../types.js";
4
+
5
+ const props: IconProps & { mode?: IconMode } = $props();
6
+ </script>
7
+
8
+ <IconBase
9
+ {...props}
10
+ mode="solid"
11
+ viewBox="0 0 24 24"
12
+ ariaLabel={props.ariaLabel ?? "Regalo"}
13
+ title={props.title ?? "Gift"}
14
+ >
15
+ {#snippet children()}
16
+ <path
17
+ fill="currentColor"
18
+ d="M4 20v-9q-.825 0-1.412-.587T2 9V7q0-.825.588-1.412T4 5h3.2q-.125-.225-.162-.475T7 4q0-1.25.875-2.125T10 1q.575 0 1.075.213T12 1.8q.425-.4.925-.6T14 1q1.25 0 2.125.875T17 4q0 .275-.05.513T16.8 5H20q.825 0 1.413.588T22 7v2q0 .825-.587 1.413T20 11v9q0 .825-.587 1.413T18 22H6q-.825 0-1.412-.587T4 20m9.288-16.713Q13 3.575 13 4t.288.713T14 5t.713-.288T15 4t-.288-.712T14 3t-.712.288M9 4q0 .425.288.713T10 5t.713-.288T11 4t-.288-.712T10 3t-.712.288T9 4M4 7v2h7V7zm7 13v-9H6v9zm2 0h5v-9h-5zm7-11V7h-7v2z"
19
+ />
20
+ {/snippet}
21
+ </IconBase>