@uibit/particles 0.1.0

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,21 @@
1
+ import type { Particles as HTMLElementClass } from '@uibit/particles';
2
+ import '@uibit/particles';
3
+ import type { Particle, ParticleHoverEffect, ParticleMode } from '@uibit/particles';
4
+
5
+ declare module '@stencil/core' {
6
+ export namespace JSX {
7
+ interface IntrinsicElements {
8
+ 'uibit-particles': HTMLElementClass & {
9
+ count?: number;
10
+ speed?: number;
11
+ mode?: ParticleMode;
12
+ connect?: boolean;
13
+ connectDistance?: number;
14
+ hoverEffect?: ParticleHoverEffect;
15
+ interactiveRadius?: number;
16
+ _resize?: any;
17
+ _loop?: any;
18
+ };
19
+ }
20
+ }
21
+ }
@@ -0,0 +1,72 @@
1
+ <script lang="ts">
2
+ import '@uibit/particles';
3
+ import type { Particles as HTMLElementClass } from '@uibit/particles';
4
+ import type { Particle, ParticleHoverEffect, ParticleMode } from '@uibit/particles';
5
+
6
+ let {
7
+ count = undefined,
8
+ speed = undefined,
9
+ mode = undefined,
10
+ connect = undefined,
11
+ connectDistance = undefined,
12
+ hoverEffect = undefined,
13
+ interactiveRadius = undefined,
14
+ _resize = undefined,
15
+ _loop = undefined,
16
+ children
17
+ } = $props<{
18
+ children?: any;
19
+ count?: number;
20
+ speed?: number;
21
+ mode?: ParticleMode;
22
+ connect?: boolean;
23
+ connectDistance?: number;
24
+ hoverEffect?: ParticleHoverEffect;
25
+ interactiveRadius?: number;
26
+ _resize?: any;
27
+ _loop?: any;
28
+
29
+ }>();
30
+
31
+ let elementRef: HTMLElementClass | null = $state(null);
32
+
33
+ $effect(() => {
34
+ if (elementRef && count !== undefined) {
35
+ elementRef.count = count;
36
+ }
37
+ if (elementRef && speed !== undefined) {
38
+ elementRef.speed = speed;
39
+ }
40
+ if (elementRef && mode !== undefined) {
41
+ elementRef.mode = mode;
42
+ }
43
+ if (elementRef && connect !== undefined) {
44
+ elementRef.connect = connect;
45
+ }
46
+ if (elementRef && connectDistance !== undefined) {
47
+ elementRef.connectDistance = connectDistance;
48
+ }
49
+ if (elementRef && hoverEffect !== undefined) {
50
+ elementRef.hoverEffect = hoverEffect;
51
+ }
52
+ if (elementRef && interactiveRadius !== undefined) {
53
+ elementRef.interactiveRadius = interactiveRadius;
54
+ }
55
+ if (elementRef && _resize !== undefined) {
56
+ elementRef._resize = _resize;
57
+ }
58
+ if (elementRef && _loop !== undefined) {
59
+ elementRef._loop = _loop;
60
+ }
61
+ });
62
+
63
+ </script>
64
+
65
+ <uibit-particles bind:this={elementRef} {...$$restProps}>
66
+
67
+ {#if children}
68
+ {@render children()}
69
+ {:else}
70
+ <slot />
71
+ {/if}
72
+ </uibit-particles>
@@ -0,0 +1,31 @@
1
+ import { defineComponent, h } from 'vue';
2
+ import type { Particles as HTMLElementClass } from '@uibit/particles';
3
+ import '@uibit/particles';
4
+ import type { Particle, ParticleHoverEffect, ParticleMode } from '@uibit/particles';
5
+
6
+ export const Particles = defineComponent({
7
+ name: 'Particles',
8
+ props: {
9
+ count: { type: [String, Number, Boolean, Array, Object] as any },
10
+ speed: { type: [String, Number, Boolean, Array, Object] as any },
11
+ mode: { type: [String, Number, Boolean, Array, Object] as any },
12
+ connect: { type: [String, Number, Boolean, Array, Object] as any },
13
+ connectDistance: { type: [String, Number, Boolean, Array, Object] as any },
14
+ hoverEffect: { type: [String, Number, Boolean, Array, Object] as any },
15
+ interactiveRadius: { type: [String, Number, Boolean, Array, Object] as any },
16
+ _resize: { type: [String, Number, Boolean, Array, Object] as any },
17
+ _loop: { type: [String, Number, Boolean, Array, Object] as any }
18
+ },
19
+ emits: [],
20
+ setup(props, { slots, emit }) {
21
+ return () => {
22
+ const eventListeners: Record<string, any> = {};
23
+
24
+
25
+ return h('uibit-particles', {
26
+ ...props,
27
+ ...eventListeners
28
+ }, slots.default?.());
29
+ };
30
+ }
31
+ });
@@ -0,0 +1,3 @@
1
+ export { default, Particles } from './particles';
2
+ export type { Particle, ParticleHoverEffect, EffectParticlesConfig } from './types';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACjD,YAAY,EAAE,QAAQ,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export { default, Particles } from './particles';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,60 @@
1
+ import { UIBitElement, ResizeController, LoopController } from '@uibit/core';
2
+ import type { ParticleHoverEffect, ParticleMode } from './types';
3
+ /**
4
+ * An interactive canvas effect element. Creates dynamic background visuals
5
+ * across many modes: particles, abstract art, grids, flow fields, and more.
6
+ *
7
+ * @cssprop [--uibit-particles-color=#6b7280] - Space or comma-separated list of colors
8
+ * @cssprop [--uibit-particles-line-color=#e5e7eb] - Color of connecting lines
9
+ * @cssprop [--uibit-particles-opacity=1] - Opacity of the canvas overlay
10
+ * @cssprop [--uibit-particles-min-size=0.0625rem] - Minimum particle size
11
+ * @cssprop [--uibit-particles-max-size=0.1875rem] - Maximum particle size
12
+ */
13
+ export declare class Particles extends UIBitElement {
14
+ static styles: import("lit").CSSResult;
15
+ /** Number of particles / elements in the field */
16
+ count: number;
17
+ /** Speed multiplier */
18
+ speed: number;
19
+ /**
20
+ * Animation mode.
21
+ * 'float' | 'snow' | 'rain' | 'neural' | 'matrix' |
22
+ * 'wave' | 'vortex' | 'smoke' | 'bubbles' | 'grid' | 'aurora' | 'noise' | 'rings'
23
+ */
24
+ mode: ParticleMode;
25
+ /** Draw constellation lines between nearby particles */
26
+ connect: boolean;
27
+ /** Max distance for connecting lines */
28
+ connectDistance: number;
29
+ /** Hover interaction: 'repel' | 'attract' | 'grab' | 'none' */
30
+ hoverEffect: ParticleHoverEffect;
31
+ /** Radius of the mouse hover interaction zone */
32
+ interactiveRadius: number;
33
+ private _canvas;
34
+ private _particles;
35
+ private _pulses;
36
+ private _mouse;
37
+ private _ctx;
38
+ private _lineColor;
39
+ private _colorCheckTick;
40
+ private _matrixChars;
41
+ private _time;
42
+ protected _resize: ResizeController;
43
+ protected _loop: LoopController;
44
+ firstUpdated(): void;
45
+ updated(changedProperties: Map<PropertyKey, unknown>): void;
46
+ private _resizeCanvas;
47
+ private _setupMouseListeners;
48
+ private _parseColors;
49
+ private _parseSize;
50
+ private _initParticles;
51
+ private _updateAndDraw;
52
+ render(): import("lit").TemplateResult<1>;
53
+ }
54
+ declare global {
55
+ interface HTMLElementTagNameMap {
56
+ 'uibit-particles': Particles;
57
+ }
58
+ }
59
+ export default Particles;
60
+ //# sourceMappingURL=particles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"particles.d.ts","sourceRoot":"","sources":["../src/particles.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG5F,OAAO,KAAK,EAAY,mBAAmB,EAAE,YAAY,EAAgB,MAAM,SAAS,CAAC;AAEzF;;;;;;;;;GASG;AACH,qBACa,SAAU,SAAQ,YAAY;IACzC,MAAM,CAAC,MAAM,0BAAU;IAEvB,kDAAkD;IACtB,KAAK,SAAM;IAEvC,uBAAuB;IACK,KAAK,SAAK;IAEtC;;;;OAIG;IACyB,IAAI,EAAE,YAAY,CAAW;IAEzD,wDAAwD;IAC3B,OAAO,UAAS;IAE7C,wCAAwC;IACmB,eAAe,SAAO;IAEjF,+DAA+D;IACR,WAAW,EAAE,mBAAmB,CAAW;IAElG,iDAAiD;IACY,iBAAiB,SAAO;IAEpE,OAAO,CAAC,OAAO,CAAqB;IAErD,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,MAAM,CAAgE;IAC9E,OAAO,CAAC,IAAI,CAAyC;IACrD,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,KAAK,CAAK;IAElB,SAAS,CAAC,OAAO,mBAKd;IAEH,SAAS,CAAC,KAAK,iBAGZ;IAEH,YAAY,SAOX;IAED,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,QAKnD;IAED,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,oBAAoB;IAY5B,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,cAAc;IAkJtB,OAAO,CAAC,cAAc;IA4WtB,MAAM,oCASL;CACF;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,iBAAiB,EAAE,SAAS,CAAC;KAC9B;CACF;eAEc,SAAS"}