@genarou/blazir-icons 1.2.16 → 1.3.2
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.
- package/LICENSE +121 -0
- package/README.md +1206 -0
- package/dist/CustomIcon.svelte +30 -0
- package/dist/CustomIcon.svelte.d.ts +14 -0
- package/dist/Icon.svelte +282 -102
- package/dist/Icon.svelte.d.ts +12 -5
- package/dist/IconBadge.svelte +75 -0
- package/dist/IconBadge.svelte.d.ts +16 -0
- package/dist/IconBase.svelte +89 -57
- package/dist/effects.js +1 -3
- package/dist/icons/Camera.svelte +19 -0
- package/dist/icons/Camera.svelte.d.ts +4 -0
- package/dist/icons/Cards.svelte +19 -0
- package/dist/icons/Cards.svelte.d.ts +4 -0
- package/dist/icons/CloudAlert.svelte +19 -0
- package/dist/icons/CloudAlert.svelte.d.ts +4 -0
- package/dist/icons/CloudCheck.svelte +19 -0
- package/dist/icons/CloudCheck.svelte.d.ts +4 -0
- package/dist/icons/CloudDownload.svelte +19 -0
- package/dist/icons/CloudDownload.svelte.d.ts +4 -0
- package/dist/icons/Colors.svelte +13 -0
- package/dist/icons/Colors.svelte.d.ts +4 -0
- package/dist/icons/CreditCard.svelte +19 -0
- package/dist/icons/CreditCard.svelte.d.ts +4 -0
- package/dist/icons/Desktop.svelte +19 -0
- package/dist/icons/Desktop.svelte.d.ts +4 -0
- package/dist/icons/DoughnutChart.svelte +19 -0
- package/dist/icons/DoughnutChart.svelte.d.ts +4 -0
- package/dist/icons/Earth.svelte +19 -0
- package/dist/icons/Earth.svelte.d.ts +4 -0
- package/dist/icons/Globe.svelte +19 -0
- package/dist/icons/Globe.svelte.d.ts +4 -0
- package/dist/icons/LightHub.svelte +19 -0
- package/dist/icons/LightHub.svelte.d.ts +4 -0
- package/dist/icons/Link.svelte +19 -0
- package/dist/icons/Link.svelte.d.ts +4 -0
- package/dist/icons/More.svelte +13 -0
- package/dist/icons/More.svelte.d.ts +4 -0
- package/dist/icons/Power.svelte +19 -0
- package/dist/icons/Power.svelte.d.ts +4 -0
- package/dist/icons/Receipt.svelte +19 -0
- package/dist/icons/Receipt.svelte.d.ts +4 -0
- package/dist/icons/SharedFolder.svelte +13 -0
- package/dist/icons/SharedFolder.svelte.d.ts +4 -0
- package/dist/icons/Sidebar.svelte +13 -0
- package/dist/icons/Sidebar.svelte.d.ts +4 -0
- package/dist/icons/Sync.svelte +19 -0
- package/dist/icons/Sync.svelte.d.ts +4 -0
- package/dist/icons/Tags.svelte +13 -0
- package/dist/icons/Tags.svelte.d.ts +4 -0
- package/dist/icons/Tools.svelte +20 -0
- package/dist/icons/Tools.svelte.d.ts +4 -0
- package/dist/icons/Upload.svelte +12 -57
- package/dist/icons/Wifi.svelte +19 -0
- package/dist/icons/Wifi.svelte.d.ts +4 -0
- package/dist/icons/lazy-registry.d.ts +21 -0
- package/dist/icons/lazy-registry.js +251 -0
- package/dist/icons/registry.d.ts +146 -129
- package/dist/icons/registry.js +184 -132
- package/dist/icons-api.d.ts +67 -257
- package/dist/icons-api.js +84 -453
- package/dist/index.d.ts +5 -5
- package/dist/index.js +14 -11
- package/dist/plugin/index.d.ts +46 -0
- package/dist/plugin/index.js +327 -0
- package/dist/smart-cache.d.ts +35 -0
- package/dist/smart-cache.js +192 -0
- package/dist/types.d.ts +19 -2
- package/dist/utils/sanitize.d.ts +25 -0
- package/dist/utils/sanitize.js +109 -0
- package/package.json +23 -13
- package/dist/icons/Aws.svelte +0 -19
- package/dist/icons/Aws.svelte.d.ts +0 -4
- package/dist/icons/Facebook.svelte +0 -18
- package/dist/icons/Facebook.svelte.d.ts +0 -4
- package/dist/icons/Golang.svelte +0 -17
- package/dist/icons/Golang.svelte.d.ts +0 -4
- package/dist/icons/Google.svelte +0 -18
- package/dist/icons/Google.svelte.d.ts +0 -4
- package/dist/icons/Paypal.svelte +0 -21
- package/dist/icons/Paypal.svelte.d.ts +0 -4
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { DynamicIconProps } from "./types";
|
|
2
|
+
interface BadgeProps extends DynamicIconProps {
|
|
3
|
+
/** true = punto rojo | number = conteo | string = texto */
|
|
4
|
+
badge?: boolean | number | string;
|
|
5
|
+
/** Color de fondo del badge. Default: rojo */
|
|
6
|
+
badgeColor?: string;
|
|
7
|
+
/** Color del texto del badge. Default: blanco */
|
|
8
|
+
badgeTextColor?: string;
|
|
9
|
+
/** Tamaño del badge en px. Default: 8 (dot) o 16 (con texto) */
|
|
10
|
+
badgeSize?: number;
|
|
11
|
+
/** Posición del badge. Default: top-right */
|
|
12
|
+
badgePosition?: "top-right" | "top-left" | "bottom-right" | "bottom-left";
|
|
13
|
+
}
|
|
14
|
+
declare const IconBadge: import("svelte").Component<BadgeProps, {}, "">;
|
|
15
|
+
type IconBadge = ReturnType<typeof IconBadge>;
|
|
16
|
+
export default IconBadge;
|
package/dist/IconBase.svelte
CHANGED
|
@@ -10,77 +10,102 @@
|
|
|
10
10
|
} from "./utils/defaults.js";
|
|
11
11
|
|
|
12
12
|
// Constantes
|
|
13
|
-
const DEFAULT_MS =
|
|
14
|
-
const DEFAULT_EASING = "
|
|
13
|
+
const DEFAULT_MS = 250;
|
|
14
|
+
const DEFAULT_EASING = "ease";
|
|
15
15
|
const DEFAULT_ICON_COLOR = "var(--icon-fg, var(--ui-muted-fg, currentColor))";
|
|
16
16
|
|
|
17
17
|
const MS_REGEX = /ms$/;
|
|
18
18
|
const S_REGEX = /s$/;
|
|
19
19
|
|
|
20
|
+
// Presets semánticos de velocidad hover
|
|
21
|
+
const HOVER_SPEED_MAP: Record<string, number> = {
|
|
22
|
+
instant: 0,
|
|
23
|
+
fast: 120,
|
|
24
|
+
normal: 250,
|
|
25
|
+
slow: 400,
|
|
26
|
+
sluggish: 600,
|
|
27
|
+
};
|
|
28
|
+
|
|
20
29
|
function normalizeMs(v?: number | string): number {
|
|
21
30
|
if (v == null) return DEFAULT_MS;
|
|
22
31
|
if (typeof v === "number") return v;
|
|
23
32
|
const s = String(v).trim();
|
|
33
|
+
if (s in HOVER_SPEED_MAP) return HOVER_SPEED_MAP[s];
|
|
24
34
|
if (MS_REGEX.test(s)) return parseFloat(s);
|
|
25
35
|
if (S_REGEX.test(s)) return parseFloat(s) * 1000;
|
|
26
36
|
const n = parseFloat(s);
|
|
27
37
|
return Number.isFinite(n) ? n : DEFAULT_MS;
|
|
28
38
|
}
|
|
29
39
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
40
|
+
// UID por instancia — generado UNA SOLA VEZ por componente, nunca en $derived.
|
|
41
|
+
// Antes se generaba dentro de $derived, lo que causaba un UID nuevo cada vez
|
|
42
|
+
// que props.title cambiaba, produciendo IDs inconsistentes en aria-labelledby.
|
|
43
|
+
let _uidCounter = 0;
|
|
44
|
+
const _instanceUid = `bz-${Date.now().toString(36)}-${(_uidCounter++).toString(36)}`;
|
|
34
45
|
|
|
35
46
|
// Props
|
|
36
47
|
const props: IconProps & { mode?: IconMode } = $props();
|
|
37
48
|
|
|
38
49
|
// Hover (nativo + heredado)
|
|
39
50
|
let internalHovered = $state(false);
|
|
51
|
+
let internalPressed = $state(false);
|
|
40
52
|
const isHovered = $derived(
|
|
41
|
-
|
|
53
|
+
!props.disabled &&
|
|
54
|
+
!props.loading &&
|
|
55
|
+
(internalHovered || (props.parentHoverContext?.hovered ?? false))
|
|
42
56
|
);
|
|
57
|
+
const isPressed = $derived(!props.disabled && internalPressed);
|
|
43
58
|
|
|
44
|
-
// Color
|
|
59
|
+
// Color — prioridad: activeColor (pressed) > hoverColor (hover) > color > default
|
|
45
60
|
const effectiveColor = $derived(
|
|
46
|
-
(
|
|
47
|
-
|
|
61
|
+
(isPressed && props.activeColor
|
|
62
|
+
? props.activeColor
|
|
63
|
+
: isHovered && props.hoverColor
|
|
64
|
+
? props.hoverColor
|
|
65
|
+
: props.color) ?? DEFAULT_ICON_COLOR
|
|
48
66
|
);
|
|
49
67
|
|
|
50
68
|
// Mode
|
|
51
69
|
const mode = $derived(props.mode ?? "solid");
|
|
52
70
|
|
|
53
|
-
// Derivados base
|
|
71
|
+
// Derivados base — usando $derived.by donde el cuerpo es complejo
|
|
54
72
|
const klass = $derived(normalizeClass(props));
|
|
55
73
|
const common = $derived(commonDefaults(props));
|
|
56
|
-
|
|
74
|
+
|
|
75
|
+
// propsWithEffectiveColor: evitar reconstruir si color no cambió.
|
|
76
|
+
// $derived.by garantiza que solo re-ejecuta cuando sus deps cambian.
|
|
77
|
+
const propsWithEffectiveColor = $derived.by(() => ({
|
|
78
|
+
...props,
|
|
79
|
+
color: effectiveColor,
|
|
80
|
+
}));
|
|
81
|
+
|
|
57
82
|
const visual = $derived(modeDefaults(mode, propsWithEffectiveColor));
|
|
58
83
|
const timingStyle = $derived(getAnimationStyle(props));
|
|
59
84
|
|
|
60
|
-
// Transiciones
|
|
85
|
+
// Transiciones — hoverSpeed > transitionMs > default
|
|
61
86
|
const hoverMs = $derived(
|
|
62
|
-
normalizeMs(props.transitionMs ?? props.
|
|
63
|
-
);
|
|
64
|
-
const hoverEase = $derived(
|
|
65
|
-
props.transitionEasing ?? props.animationEasing ?? DEFAULT_EASING
|
|
87
|
+
normalizeMs(props.transitionMs ?? props.hoverSpeed)
|
|
66
88
|
);
|
|
89
|
+
const hoverEase = $derived(props.transitionEasing ?? DEFAULT_EASING);
|
|
67
90
|
|
|
68
|
-
// Animaciones continuas
|
|
69
|
-
const spinDuration = $derived(() => {
|
|
91
|
+
// Animaciones continuas — $derived.by idiomático (Svelte 5)
|
|
92
|
+
const spinDuration = $derived.by(() => {
|
|
93
|
+
if (props.loading) return "0.75s"; // loading siempre gira
|
|
70
94
|
if (!props.spin) return null;
|
|
71
95
|
if (props.spin === true) return "1s";
|
|
72
96
|
return typeof props.spin === "number"
|
|
73
97
|
? `${props.spin}ms`
|
|
74
98
|
: String(props.spin);
|
|
75
99
|
});
|
|
100
|
+
|
|
76
101
|
const wantsPulse = $derived(!!props.pulse);
|
|
77
102
|
const wantsBounce = $derived(!!props.bounce);
|
|
78
103
|
const wantsWiggle = $derived(!!props.wiggle);
|
|
79
104
|
const wantsHeartbeat = $derived(!!props.heartbeat);
|
|
80
105
|
const wantsElastic = $derived(!!props.elastic);
|
|
81
106
|
|
|
82
|
-
// ===== Chevron state ⇒ grados
|
|
83
|
-
const effectiveChevronState = $derived(() => {
|
|
107
|
+
// ===== Chevron state ⇒ grados =====
|
|
108
|
+
const effectiveChevronState = $derived.by(() => {
|
|
84
109
|
if (props.chevronState) return props.chevronState;
|
|
85
110
|
if (props.chevronOpen !== undefined) {
|
|
86
111
|
return props.chevronOpen ? "open" : "closed";
|
|
@@ -88,8 +113,8 @@
|
|
|
88
113
|
return undefined;
|
|
89
114
|
});
|
|
90
115
|
|
|
91
|
-
const chevronDeg = $derived((): number | null => {
|
|
92
|
-
switch (effectiveChevronState
|
|
116
|
+
const chevronDeg = $derived.by((): number | null => {
|
|
117
|
+
switch (effectiveChevronState) {
|
|
93
118
|
case "open":
|
|
94
119
|
case "down":
|
|
95
120
|
return 90;
|
|
@@ -107,11 +132,10 @@
|
|
|
107
132
|
|
|
108
133
|
// Clase final
|
|
109
134
|
const finalClass = $derived(
|
|
110
|
-
`bz-icon ${klass}${effectiveChevronState
|
|
135
|
+
`bz-icon ${klass}${effectiveChevronState ? " bz-icon-chevron" : ""}`.trim()
|
|
111
136
|
);
|
|
112
137
|
|
|
113
138
|
// ===== SVG transform (solo rotate/flip declarativos) =====
|
|
114
|
-
// Rot/flip en <g> para no interferir con la transición del <svg>
|
|
115
139
|
function getViewBoxCenter(vb: string) {
|
|
116
140
|
const parts = vb.trim().split(/\s+/);
|
|
117
141
|
const minX = Number(parts[0]);
|
|
@@ -120,12 +144,12 @@
|
|
|
120
144
|
const h = Number(parts[3]);
|
|
121
145
|
return { cx: minX + w / 2, cy: minY + h / 2 };
|
|
122
146
|
}
|
|
147
|
+
|
|
123
148
|
const center = $derived(getViewBoxCenter(common.viewBox));
|
|
124
149
|
|
|
125
|
-
const svgTransform = $derived(() => {
|
|
150
|
+
const svgTransform = $derived.by(() => {
|
|
126
151
|
const cmds: string[] = [];
|
|
127
152
|
|
|
128
|
-
// Rotate (prop)
|
|
129
153
|
if (props.rotate != null) {
|
|
130
154
|
const r =
|
|
131
155
|
typeof props.rotate === "number"
|
|
@@ -134,7 +158,6 @@
|
|
|
134
158
|
if (!isNaN(r)) cmds.push(`rotate(${r} ${center.cx} ${center.cy})`);
|
|
135
159
|
}
|
|
136
160
|
|
|
137
|
-
// Flip (prop)
|
|
138
161
|
if (props.flipH || props.flipV) {
|
|
139
162
|
const sx = props.flipH ? -1 : 1;
|
|
140
163
|
const sy = props.flipV ? -1 : 1;
|
|
@@ -143,48 +166,39 @@
|
|
|
143
166
|
);
|
|
144
167
|
}
|
|
145
168
|
|
|
146
|
-
// ⛔️ OJO: chevron NO va aquí (aquí no hay transición CSS)
|
|
147
169
|
return cmds.length ? cmds.join(" ") : "";
|
|
148
170
|
});
|
|
149
171
|
|
|
150
|
-
// ===== Style inline del <svg>
|
|
151
|
-
const style = $derived(() => {
|
|
172
|
+
// ===== Style inline del <svg> =====
|
|
173
|
+
const style = $derived.by(() => {
|
|
152
174
|
const parts: string[] = [];
|
|
153
175
|
|
|
154
|
-
// estilo previo del usuario
|
|
155
176
|
if (props.style) {
|
|
156
177
|
parts.push(props.style.endsWith(";") ? props.style : `${props.style};`);
|
|
157
178
|
}
|
|
158
179
|
|
|
159
|
-
|
|
180
|
+
if (props.disabled) parts.push("opacity:0.4;pointer-events:none;");
|
|
160
181
|
parts.push(`color:${effectiveColor};`);
|
|
161
182
|
|
|
162
|
-
// Vars de timing (si las hay)
|
|
163
183
|
const tstyle = timingStyle;
|
|
164
184
|
if (tstyle) parts.push(tstyle);
|
|
165
185
|
|
|
166
|
-
// transición para transform/opacidad/stroke/fill
|
|
167
186
|
parts.push(
|
|
168
187
|
`transition:color ${hoverMs}ms ${hoverEase},fill ${hoverMs}ms ${hoverEase},` +
|
|
169
188
|
`stroke ${hoverMs}ms ${hoverEase},transform ${hoverMs}ms ${hoverEase},opacity ${hoverMs}ms ${hoverEase};`
|
|
170
189
|
);
|
|
171
190
|
|
|
172
|
-
|
|
173
|
-
const deg = chevronDeg();
|
|
191
|
+
const deg = chevronDeg;
|
|
174
192
|
if (deg != null) {
|
|
175
193
|
parts.push(`--bz-chevron-rot: rotate(${deg}deg);`);
|
|
176
194
|
} else {
|
|
177
|
-
// mantener consistente
|
|
178
195
|
parts.push(`--bz-chevron-rot: rotate(0deg);`);
|
|
179
196
|
}
|
|
180
197
|
|
|
181
|
-
// Transform del SVG: incluir SIEMPRE la var del chevron al final
|
|
182
|
-
// (puedes añadir más términos aquí si usas CSS-only transforms)
|
|
183
198
|
parts.push(`transform-origin:center;`);
|
|
184
199
|
parts.push(`transform: var(--bz-chevron-rot);`);
|
|
185
200
|
|
|
186
|
-
|
|
187
|
-
const spin = spinDuration();
|
|
201
|
+
const spin = spinDuration;
|
|
188
202
|
if (
|
|
189
203
|
spin ||
|
|
190
204
|
wantsPulse ||
|
|
@@ -212,10 +226,10 @@
|
|
|
212
226
|
return parts.join(" ");
|
|
213
227
|
});
|
|
214
228
|
|
|
215
|
-
// A11y
|
|
229
|
+
// A11y — computedTitleId usa el UID de instancia (estable durante todo el ciclo de vida)
|
|
216
230
|
const ariaHidden = $derived(props.decorative ? "true" : undefined);
|
|
217
231
|
const computedTitleId = $derived(
|
|
218
|
-
props.title ? (props.titleId ?? `bz-icon-title-${
|
|
232
|
+
props.title ? (props.titleId ?? `bz-icon-title-${_instanceUid}`) : undefined
|
|
219
233
|
);
|
|
220
234
|
const ariaLabel = $derived(
|
|
221
235
|
props.decorative ? undefined : props.ariaLabel || undefined
|
|
@@ -228,7 +242,8 @@
|
|
|
228
242
|
const finalSize = $derived(
|
|
229
243
|
typeof common.size === "number" ? `${common.size}px` : common.size
|
|
230
244
|
);
|
|
231
|
-
|
|
245
|
+
|
|
246
|
+
const safeAttrs = $derived.by(() => {
|
|
232
247
|
if (!props.attrs) return {};
|
|
233
248
|
const { width, height, ...rest } = props.attrs as any;
|
|
234
249
|
return rest;
|
|
@@ -238,9 +253,11 @@
|
|
|
238
253
|
let svgRef: SVGSVGElement | null = $state(null);
|
|
239
254
|
let fxLayer: SVGGElement | null = $state(null);
|
|
240
255
|
|
|
241
|
-
// Efectos
|
|
256
|
+
// Efectos — el $effect solo se re-ejecuta cuando fxLayer o las opciones de
|
|
257
|
+
// efectos cambian. Devuelve la función de cleanup para destroy automático.
|
|
242
258
|
$effect(() => {
|
|
243
259
|
if (!fxLayer) return;
|
|
260
|
+
|
|
244
261
|
const effectsOpts: IconEffectOptions = { ...(props.effects ?? {}) };
|
|
245
262
|
const a = props.attrs;
|
|
246
263
|
if (a) {
|
|
@@ -255,22 +272,22 @@
|
|
|
255
272
|
if (a.hoverScale) effectsOpts.hoverScale = a.hoverScale;
|
|
256
273
|
if (a.pressScale) effectsOpts.pressScale = a.pressScale;
|
|
257
274
|
}
|
|
275
|
+
|
|
276
|
+
if (props.tooltip) effectsOpts.tooltip = props.tooltip;
|
|
258
277
|
const controller = iconEffects(fxLayer, effectsOpts);
|
|
259
278
|
return () => controller.destroy();
|
|
260
279
|
});
|
|
261
280
|
|
|
262
|
-
function handleMouseEnter() {
|
|
263
|
-
|
|
264
|
-
}
|
|
265
|
-
function
|
|
266
|
-
internalHovered = false;
|
|
267
|
-
}
|
|
281
|
+
function handleMouseEnter() { internalHovered = true; }
|
|
282
|
+
function handleMouseLeave() { internalHovered = false; internalPressed = false; }
|
|
283
|
+
function handleMouseDown() { internalPressed = true; }
|
|
284
|
+
function handleMouseUp() { internalPressed = false; }
|
|
268
285
|
</script>
|
|
269
286
|
|
|
270
287
|
<svg
|
|
271
288
|
bind:this={svgRef}
|
|
272
289
|
xmlns="http://www.w3.org/2000/svg"
|
|
273
|
-
{...safeAttrs
|
|
290
|
+
{...safeAttrs}
|
|
274
291
|
width={finalSize}
|
|
275
292
|
height={finalSize}
|
|
276
293
|
viewBox={common.viewBox}
|
|
@@ -281,7 +298,7 @@
|
|
|
281
298
|
aria-label={ariaLabel}
|
|
282
299
|
aria-labelledby={ariaLabelledby}
|
|
283
300
|
focusable="false"
|
|
284
|
-
style={style
|
|
301
|
+
style={style}
|
|
285
302
|
fill={visual.fill}
|
|
286
303
|
stroke={visual.stroke}
|
|
287
304
|
stroke-width={visual.strokeWidth}
|
|
@@ -291,10 +308,20 @@
|
|
|
291
308
|
data-testid={props.testId}
|
|
292
309
|
onmouseenter={handleMouseEnter}
|
|
293
310
|
onmouseleave={handleMouseLeave}
|
|
311
|
+
onmousedown={handleMouseDown}
|
|
312
|
+
onmouseup={handleMouseUp}
|
|
294
313
|
>
|
|
295
|
-
{#if props.title}
|
|
296
|
-
|
|
297
|
-
|
|
314
|
+
{#if props.title}
|
|
315
|
+
<title id={computedTitleId}>{props.title}</title>
|
|
316
|
+
{:else if props.tooltip}
|
|
317
|
+
<title>{props.tooltip}</title>
|
|
318
|
+
{/if}
|
|
319
|
+
<g bind:this={fxLayer} transform={svgTransform}>
|
|
320
|
+
{#if props.loading}
|
|
321
|
+
<circle cx="12" cy="12" r="9" fill="none" stroke="currentColor" stroke-width="2.5" stroke-dasharray="42 15" stroke-linecap="round" />
|
|
322
|
+
{:else}
|
|
323
|
+
{@render props.children?.()}
|
|
324
|
+
{/if}
|
|
298
325
|
</g>
|
|
299
326
|
</svg>
|
|
300
327
|
|
|
@@ -321,6 +348,7 @@
|
|
|
321
348
|
transform: rotate(360deg);
|
|
322
349
|
}
|
|
323
350
|
}
|
|
351
|
+
|
|
324
352
|
@keyframes bz-icon-bounce {
|
|
325
353
|
0% {
|
|
326
354
|
transform: translateY(0);
|
|
@@ -332,6 +360,7 @@
|
|
|
332
360
|
transform: translateY(0);
|
|
333
361
|
}
|
|
334
362
|
}
|
|
363
|
+
|
|
335
364
|
@keyframes bz-icon-pulse {
|
|
336
365
|
0%,
|
|
337
366
|
100% {
|
|
@@ -343,6 +372,7 @@
|
|
|
343
372
|
opacity: 0.92;
|
|
344
373
|
}
|
|
345
374
|
}
|
|
375
|
+
|
|
346
376
|
@keyframes bz-icon-wiggle {
|
|
347
377
|
0% {
|
|
348
378
|
transform: rotate(0deg);
|
|
@@ -357,6 +387,7 @@
|
|
|
357
387
|
transform: rotate(0deg);
|
|
358
388
|
}
|
|
359
389
|
}
|
|
390
|
+
|
|
360
391
|
@keyframes bz-icon-elastic {
|
|
361
392
|
0% {
|
|
362
393
|
transform: scale(1);
|
|
@@ -371,6 +402,7 @@
|
|
|
371
402
|
transform: scale(1);
|
|
372
403
|
}
|
|
373
404
|
}
|
|
405
|
+
|
|
374
406
|
@keyframes bz-icon-heartbeat {
|
|
375
407
|
0%,
|
|
376
408
|
100% {
|
package/dist/effects.js
CHANGED
|
@@ -62,9 +62,7 @@ export function iconEffects(node, opts = {}) {
|
|
|
62
62
|
if (target instanceof SVGSVGElement) {
|
|
63
63
|
target.style.pointerEvents = "bounding-box";
|
|
64
64
|
}
|
|
65
|
-
// Setup inicial
|
|
66
|
-
if (opts.tooltip)
|
|
67
|
-
target.setAttribute("title", opts.tooltip);
|
|
65
|
+
// Setup inicial — tooltip lo maneja Icon.svelte via data-bz-tooltip + CSS
|
|
68
66
|
if (opts.cursor && isHTML)
|
|
69
67
|
node.style.cursor = opts.cursor;
|
|
70
68
|
const ms = opts.transitionMs ?? DEFAULTS.transitionMs;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import IconBase from "../IconBase.svelte";
|
|
3
|
+
import type { IconProps } from "../types";
|
|
4
|
+
|
|
5
|
+
const props: IconProps = $props();
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<IconBase
|
|
9
|
+
{...props}
|
|
10
|
+
mode="solid"
|
|
11
|
+
viewBox="0 0 24 24"
|
|
12
|
+
ariaLabel={props.ariaLabel ?? "Globe grid icon"}
|
|
13
|
+
title={props.title ?? ""}
|
|
14
|
+
>
|
|
15
|
+
<path
|
|
16
|
+
fill="currentColor"
|
|
17
|
+
d="M11.4 9h8q-.675-1.725-2.062-2.963T14.15 4.3zm-2.3 2l4-6.9q-.275-.05-.55-.075T12 4q-1.65 0-3.075.625T6.4 6.3zm-4.85 3H9.7l-4-6.9q-.8 1.025-1.25 2.263T4 12q0 .525.063 1.013T4.25 14m5.6 5.7l2.7-4.7H4.6q.675 1.725 2.063 2.963T9.85 19.7M12 20q1.65 0 3.075-.625T17.6 17.7L14.9 13l-4 6.9q.275.05.538.075T12 20m6.3-3.1q.8-1.025 1.25-2.262T20 12q0-.525-.062-1.012T19.75 10H14.3zM12 22q-2.05 0-3.875-.788t-3.187-2.15t-2.15-3.187T2 12q0-2.075.788-3.887t2.15-3.175t3.187-2.15T12 2q2.075 0 3.888.788t3.174 2.15t2.15 3.175T22 12q0 2.05-.788 3.875t-2.15 3.188t-3.175 2.15T12 22"
|
|
18
|
+
/>
|
|
19
|
+
</IconBase>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import IconBase from "../IconBase.svelte";
|
|
3
|
+
import type { IconProps } from "../types";
|
|
4
|
+
|
|
5
|
+
const props: IconProps = $props();
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<IconBase
|
|
9
|
+
{...props}
|
|
10
|
+
mode="solid"
|
|
11
|
+
viewBox="0 0 24 24"
|
|
12
|
+
ariaLabel={props.ariaLabel ?? "Article icon"}
|
|
13
|
+
title={props.title ?? ""}
|
|
14
|
+
>
|
|
15
|
+
<path
|
|
16
|
+
fill="currentColor"
|
|
17
|
+
d="M11 9h6q.425 0 .713-.288T18 8t-.288-.712T17 7h-6.025q-.425 0-.7.288T10 8t.288.713T11 9m0 3h3q.425 0 .713-.288T15 11t-.288-.712T14 10h-3.025q-.425 0-.7.288T10 11t.288.713T11 12m-5.55 8.975Q4.625 21.1 4 20.6t-.75-1.325L2.025 10.35q-.125-.8.388-1.45t1.312-.775H4V14q0 1.65 1.175 2.825T8 18h11q-.2.525-.612.888t-1.013.437zM8 16.1q-.825 0-1.412-.587T6 14.1V5q0-.825.588-1.412T8 3h12q.825 0 1.413.588T22 5v9.1q0 .825-.587 1.413T20 16.1z"
|
|
18
|
+
/>
|
|
19
|
+
</IconBase>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import IconBase from "../IconBase.svelte";
|
|
3
|
+
import type { IconProps } from "../types";
|
|
4
|
+
|
|
5
|
+
const props: IconProps = $props();
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<IconBase
|
|
9
|
+
{...props}
|
|
10
|
+
mode="solid"
|
|
11
|
+
viewBox="0 0 24 24"
|
|
12
|
+
ariaLabel={props.ariaLabel ?? "Cloud warning icon"}
|
|
13
|
+
title={props.title ?? ""}
|
|
14
|
+
>
|
|
15
|
+
<path
|
|
16
|
+
fill="currentColor"
|
|
17
|
+
d="M6.5 20q-2.275 0-3.887-1.575T1 14.575q0-1.95 1.175-3.475T5.25 9.15q.625-2.3 2.5-3.725T12 4q2.925 0 4.963 2.038T19 11q1.725.2 2.863 1.488T23 15.5q0 1.875-1.312 3.188T18.5 20zm6.213-4.288Q13 15.425 13 15t-.288-.712T12 14t-.712.288T11 15t.288.713T12 16t.713-.288m0-3.5Q13 11.926 13 11.5V9q0-.425-.288-.712T12 8t-.712.288T11 9v2.5q0 .425.288.713T12 12.5t.713-.288"
|
|
18
|
+
/>
|
|
19
|
+
</IconBase>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import IconBase from "../IconBase.svelte";
|
|
3
|
+
import type { IconProps } from "../types";
|
|
4
|
+
|
|
5
|
+
const props: IconProps = $props();
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<IconBase
|
|
9
|
+
{...props}
|
|
10
|
+
mode="solid"
|
|
11
|
+
viewBox="0 0 24 24"
|
|
12
|
+
ariaLabel={props.ariaLabel ?? "Cloud check icon"}
|
|
13
|
+
title={props.title ?? ""}
|
|
14
|
+
>
|
|
15
|
+
<path
|
|
16
|
+
fill="currentColor"
|
|
17
|
+
d="m10.325 14.125l-1.4-1.4q-.3-.3-.7-.3t-.7.3t-.3.713t.3.712L9.65 16.3q.3.3.7.3t.7-.3l4.225-4.225q.3-.3.3-.725t-.3-.725t-.725-.3t-.725.3zM6.5 20q-2.275 0-3.887-1.575T1 14.575q0-1.95 1.175-3.475T5.25 9.15q.625-2.3 2.5-3.725T12 4q2.925 0 4.963 2.038T19 11q1.725.2 2.863 1.488T23 15.5q0 1.875-1.312 3.188T18.5 20z"
|
|
18
|
+
/>
|
|
19
|
+
</IconBase>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import IconBase from "../IconBase.svelte";
|
|
3
|
+
import type { IconProps } from "../types";
|
|
4
|
+
|
|
5
|
+
const props: IconProps = $props();
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<IconBase
|
|
9
|
+
{...props}
|
|
10
|
+
mode="solid"
|
|
11
|
+
viewBox="0 0 24 24"
|
|
12
|
+
ariaLabel={props.ariaLabel ?? "Cloud download icon"}
|
|
13
|
+
title={props.title ?? ""}
|
|
14
|
+
>
|
|
15
|
+
<path
|
|
16
|
+
fill="currentColor"
|
|
17
|
+
d="M6.5 20q-2.275 0-3.887-1.575T1 14.575q0-1.95 1.175-3.475T5.25 9.15q.575-2.025 2.138-3.4T11 4.075v8.075l-.9-.875Q9.825 11 9.413 11t-.713.3q-.275.275-.275.7t.275.7l2.6 2.6q.3.3.7.3t.7-.3l2.6-2.6q.275-.275.287-.687T15.3 11.3q-.275-.275-.687-.288t-.713.263l-.9.875V4.075q2.575.35 4.288 2.313T19 11q1.725.2 2.863 1.488T23 15.5q0 1.875-1.312 3.188T18.5 20z"
|
|
18
|
+
/>
|
|
19
|
+
</IconBase>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<!-- src/lib/icons/Palette.svelte -->
|
|
2
|
+
<script lang="ts">
|
|
3
|
+
import IconBase from "../IconBase.svelte";
|
|
4
|
+
import type { IconProps } from "../types";
|
|
5
|
+
const props: IconProps = $props();
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<IconBase {...props} mode="solid" viewBox="0 0 24 24">
|
|
9
|
+
<path
|
|
10
|
+
fill="currentColor"
|
|
11
|
+
d="M12 22q-2.05 0-3.875-.788t-3.187-2.15t-2.15-3.187T2 12q0-2.075.813-3.9t2.2-3.175T8.25 2.788T12.2 2q2 0 3.775.688t3.113 1.9t2.125 2.875T22 11.05q0 2.875-1.75 4.413T16 17h-1.85q-.225 0-.312.125t-.088.275q0 .3.375.863t.375 1.287q0 1.25-.687 1.85T12 22m-4.425-9.425Q8 12.15 8 11.5t-.425-1.075T6.5 10t-1.075.425T5 11.5t.425 1.075T6.5 13t1.075-.425m3-4Q11 8.15 11 7.5t-.425-1.075T9.5 6t-1.075.425T8 7.5t.425 1.075T9.5 9t1.075-.425m5 0Q16 8.15 16 7.5t-.425-1.075T14.5 6t-1.075.425T13 7.5t.425 1.075T14.5 9t1.075-.425m3 4Q19 12.15 19 11.5t-.425-1.075T17.5 10t-1.075.425T16 11.5t.425 1.075T17.5 13t1.075-.425"
|
|
12
|
+
/>
|
|
13
|
+
</IconBase>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import IconBase from "../IconBase.svelte";
|
|
3
|
+
import type { IconProps } from "../types";
|
|
4
|
+
|
|
5
|
+
const props: IconProps = $props();
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<IconBase
|
|
9
|
+
{...props}
|
|
10
|
+
mode="solid"
|
|
11
|
+
viewBox="0 0 24 24"
|
|
12
|
+
ariaLabel={props.ariaLabel ?? "Email icon"}
|
|
13
|
+
title={props.title ?? ""}
|
|
14
|
+
>
|
|
15
|
+
<path
|
|
16
|
+
fill="currentColor"
|
|
17
|
+
d="M4 20q-.825 0-1.412-.587T2 18V6q0-.825.588-1.412T4 4h16q.825 0 1.413.588T22 6v12q0 .825-.587 1.413T20 20zm1-3h10L10 7H5zm8-8h6V7h-6z"
|
|
18
|
+
/>
|
|
19
|
+
</IconBase>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import IconBase from "../IconBase.svelte";
|
|
3
|
+
import type { IconProps } from "../types";
|
|
4
|
+
|
|
5
|
+
const props: IconProps = $props();
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<IconBase
|
|
9
|
+
{...props}
|
|
10
|
+
mode="solid"
|
|
11
|
+
viewBox="0 0 24 24"
|
|
12
|
+
ariaLabel={props.ariaLabel ?? "Monitor icon"}
|
|
13
|
+
title={props.title ?? ""}
|
|
14
|
+
>
|
|
15
|
+
<path
|
|
16
|
+
fill="currentColor"
|
|
17
|
+
d="M1 21v-2h22v2zm3-3q-.825 0-1.412-.587T2 16V5q0-.825.588-1.412T4 3h16q.825 0 1.413.588T22 5v11q0 .825-.587 1.413T20 18zm0-2h16V5H4zm0 0V5z"
|
|
18
|
+
/>
|
|
19
|
+
</IconBase>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import IconBase from "../IconBase.svelte";
|
|
3
|
+
import type { IconProps } from "../types";
|
|
4
|
+
|
|
5
|
+
const props: IconProps = $props();
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<IconBase
|
|
9
|
+
{...props}
|
|
10
|
+
mode="solid"
|
|
11
|
+
viewBox="0 0 24 24"
|
|
12
|
+
ariaLabel={props.ariaLabel ?? "Signal icon"}
|
|
13
|
+
title={props.title ?? ""}
|
|
14
|
+
>
|
|
15
|
+
<path
|
|
16
|
+
fill="currentColor"
|
|
17
|
+
d="M11.025 21.95q-3.85-.375-6.425-3.225T2.025 12T4.6 5.275t6.425-3.225v3q-2.6.35-4.3 2.325T5.025 12t1.7 4.625t4.3 2.325zm2 0v-3q2.35-.3 3.975-1.95t1.975-4h3q-.35 3.575-2.863 6.088t-6.087 2.862M18.975 11Q18.625 8.65 17 7t-3.975-1.95v-3q3.575.35 6.088 2.863T21.975 11z"
|
|
18
|
+
/>
|
|
19
|
+
</IconBase>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import IconBase from "../IconBase.svelte";
|
|
3
|
+
import type { IconProps } from "../types";
|
|
4
|
+
|
|
5
|
+
const props: IconProps = $props();
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<IconBase
|
|
9
|
+
{...props}
|
|
10
|
+
mode="solid"
|
|
11
|
+
viewBox="0 0 24 24"
|
|
12
|
+
ariaLabel={props.ariaLabel ?? "Globe settings icon"}
|
|
13
|
+
title={props.title ?? ""}
|
|
14
|
+
>
|
|
15
|
+
<path
|
|
16
|
+
fill="currentColor"
|
|
17
|
+
d="M12 20q.45 0 .863-.05t.837-.15L12.5 18H9v-1q0-.825.588-1.412T11 15h2v-3h-2q-.425 0-.712-.288T10 11V9h-.45q-.65 0-1.1-.437T8 7.475q0-.225.063-.45T8.25 6.6L9.8 4.325Q7.275 5.05 5.637 7.15T4 12h1v-1q0-.425.288-.712T6 10h2q.425 0 .713.288T9 11v1q0 .425-.288.713T8 13v1q0 .825-.587 1.413T6 16h-.925q1.05 1.8 2.875 2.9T12 20m7.6-5.55q.2-.575.3-1.187T20 12q0-2.8-1.7-4.937T14 4.25V7q.825 0 1.413.588T16 9v2q.475 0 .85.113t.725.462zM12 22q-2.075 0-3.9-.788t-3.175-2.137T2.788 15.9T2 12t.788-3.9t2.137-3.175T8.1 2.788T12 2t3.9.788t3.175 2.137T21.213 8.1T22 12t-.788 3.9t-2.137 3.175t-3.175 2.138T12 22"
|
|
18
|
+
/>
|
|
19
|
+
</IconBase>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import IconBase from "../IconBase.svelte";
|
|
3
|
+
import type { IconProps } from "../types";
|
|
4
|
+
|
|
5
|
+
const props: IconProps = $props();
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<IconBase
|
|
9
|
+
{...props}
|
|
10
|
+
mode="solid"
|
|
11
|
+
viewBox="0 0 24 24"
|
|
12
|
+
ariaLabel={props.ariaLabel ?? "Radar icon"}
|
|
13
|
+
title={props.title ?? ""}
|
|
14
|
+
>
|
|
15
|
+
<path
|
|
16
|
+
fill="currentColor"
|
|
17
|
+
d="M13 21h5v2H6v-2h5v-1.05a10 10 0 0 1-7.684-4.988l1.737-.992A8 8 0 1 0 15.97 3.053l.993-1.737A10 10 0 0 1 22 10c0 5.185-3.946 9.449-9 9.95zm-1-4a7 7 0 1 1 0-14a7 7 0 0 1 0 14"
|
|
18
|
+
/>
|
|
19
|
+
</IconBase>
|