ngwr 15.1.0 → 15.2.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.
- package/bits/aurora/styles/_rules.scss +11 -0
- package/bits/dot-grid/styles/_rules.scss +9 -1
- package/bits/iridescence/iridescence.scss +1 -0
- package/bits/iridescence/styles/_index.scss +8 -0
- package/bits/iridescence/styles/_rules.scss +72 -0
- package/bits/marquee/styles/_rules.scss +7 -3
- package/bits/ripple-grid/styles/_rules.scss +10 -2
- package/bits/spotlight-card/styles/_rules.scss +7 -4
- package/bits/star-border/styles/_rules.scss +5 -2
- package/bits/threads/styles/_rules.scss +9 -1
- package/bits/waves/styles/_rules.scss +8 -1
- package/charts/candlestick-chart/styles/_index.scss +2 -2
- package/fesm2022/ngwr-affix.mjs +3 -3
- package/fesm2022/ngwr-alert.mjs +3 -3
- package/fesm2022/ngwr-anchor.mjs +3 -3
- package/fesm2022/ngwr-avatar.mjs +3 -3
- package/fesm2022/ngwr-back-top.mjs +3 -3
- package/fesm2022/ngwr-badge.mjs +6 -6
- package/fesm2022/ngwr-bits-aurora.mjs +30 -38
- package/fesm2022/ngwr-bits-aurora.mjs.map +1 -1
- package/fesm2022/ngwr-bits-blur-text.mjs +3 -3
- package/fesm2022/ngwr-bits-border-glow-testing.mjs.map +1 -1
- package/fesm2022/ngwr-bits-border-glow.mjs +11 -5
- package/fesm2022/ngwr-bits-border-glow.mjs.map +1 -1
- package/fesm2022/ngwr-bits-circular-text.mjs +3 -3
- package/fesm2022/ngwr-bits-click-spark.mjs +3 -3
- package/fesm2022/ngwr-bits-confetti.mjs +3 -3
- package/fesm2022/ngwr-bits-decrypt-text.mjs +3 -3
- package/fesm2022/ngwr-bits-dot-grid.mjs +12 -9
- package/fesm2022/ngwr-bits-dot-grid.mjs.map +1 -1
- package/fesm2022/ngwr-bits-falling-text.mjs +3 -3
- package/fesm2022/ngwr-bits-fuzzy-text.mjs +3 -3
- package/fesm2022/ngwr-bits-glitch-text.mjs +3 -3
- package/fesm2022/ngwr-bits-gradient-text.mjs +3 -3
- package/fesm2022/ngwr-bits-iridescence-testing.mjs +31 -0
- package/fesm2022/ngwr-bits-iridescence-testing.mjs.map +1 -0
- package/fesm2022/ngwr-bits-iridescence.mjs +591 -0
- package/fesm2022/ngwr-bits-iridescence.mjs.map +1 -0
- package/fesm2022/ngwr-bits-marquee-testing.mjs +1 -1
- package/fesm2022/ngwr-bits-marquee-testing.mjs.map +1 -1
- package/fesm2022/ngwr-bits-marquee.mjs +7 -7
- package/fesm2022/ngwr-bits-marquee.mjs.map +1 -1
- package/fesm2022/ngwr-bits-ripple-grid.mjs +8 -11
- package/fesm2022/ngwr-bits-ripple-grid.mjs.map +1 -1
- package/fesm2022/ngwr-bits-rotating-text.mjs +3 -3
- package/fesm2022/ngwr-bits-shiny-text.mjs +6 -6
- package/fesm2022/ngwr-bits-splash-cursor.mjs +3 -3
- package/fesm2022/ngwr-bits-split-text.mjs +3 -3
- package/fesm2022/ngwr-bits-spotlight-card-testing.mjs +1 -1
- package/fesm2022/ngwr-bits-spotlight-card-testing.mjs.map +1 -1
- package/fesm2022/ngwr-bits-spotlight-card.mjs +10 -10
- package/fesm2022/ngwr-bits-spotlight-card.mjs.map +1 -1
- package/fesm2022/ngwr-bits-star-border-testing.mjs +1 -1
- package/fesm2022/ngwr-bits-star-border-testing.mjs.map +1 -1
- package/fesm2022/ngwr-bits-star-border.mjs +7 -7
- package/fesm2022/ngwr-bits-star-border.mjs.map +1 -1
- package/fesm2022/ngwr-bits-threads.mjs +17 -12
- package/fesm2022/ngwr-bits-threads.mjs.map +1 -1
- package/fesm2022/ngwr-bits-tilt-card.mjs +6 -6
- package/fesm2022/ngwr-bits-typewriter.mjs +3 -3
- package/fesm2022/ngwr-bits-waves.mjs +15 -11
- package/fesm2022/ngwr-bits-waves.mjs.map +1 -1
- package/fesm2022/ngwr-breadcrumbs.mjs +6 -6
- package/fesm2022/ngwr-burger.mjs +3 -3
- package/fesm2022/ngwr-button.mjs +6 -6
- package/fesm2022/ngwr-calendar.mjs +3 -3
- package/fesm2022/ngwr-card.mjs +9 -9
- package/fesm2022/ngwr-carousel.mjs +6 -6
- package/fesm2022/ngwr-cascader.mjs +3 -3
- package/fesm2022/ngwr-charts-bar-chart.mjs +3 -3
- package/fesm2022/ngwr-charts-boxplot-chart.mjs +3 -3
- package/fesm2022/ngwr-charts-bullet-chart.mjs +3 -3
- package/fesm2022/ngwr-charts-calendar-heatmap.mjs +3 -3
- package/fesm2022/ngwr-charts-candlestick-chart.mjs +7 -7
- package/fesm2022/ngwr-charts-candlestick-chart.mjs.map +1 -1
- package/fesm2022/ngwr-charts-chart-legend.mjs +6 -6
- package/fesm2022/ngwr-charts-core.mjs +3 -3
- package/fesm2022/ngwr-charts-donut-chart.mjs +3 -3
- package/fesm2022/ngwr-charts-funnel-chart.mjs +3 -3
- package/fesm2022/ngwr-charts-gauge.mjs +3 -3
- package/fesm2022/ngwr-charts-heatmap-chart.mjs +3 -3
- package/fesm2022/ngwr-charts-line-chart.mjs +3 -3
- package/fesm2022/ngwr-charts-meter-group.mjs +3 -3
- package/fesm2022/ngwr-charts-radar-chart.mjs +3 -3
- package/fesm2022/ngwr-charts-scatter-chart.mjs +3 -3
- package/fesm2022/ngwr-charts-sparkline.mjs +3 -3
- package/fesm2022/ngwr-charts-treemap-chart.mjs +3 -3
- package/fesm2022/ngwr-charts-waterfall-chart.mjs +3 -3
- package/fesm2022/ngwr-checkbox.mjs +6 -6
- package/fesm2022/ngwr-clipboard.mjs +3 -3
- package/fesm2022/ngwr-collapse.mjs +9 -9
- package/fesm2022/ngwr-color-picker.mjs +6 -6
- package/fesm2022/ngwr-command-palette.mjs +3 -3
- package/fesm2022/ngwr-compare.mjs +3 -3
- package/fesm2022/ngwr-context-menu.mjs +12 -12
- package/fesm2022/ngwr-cookie.mjs +3 -3
- package/fesm2022/ngwr-counter.mjs +6 -6
- package/fesm2022/ngwr-date-picker.mjs +21 -21
- package/fesm2022/ngwr-date.mjs +6 -6
- package/fesm2022/ngwr-density.mjs +6 -6
- package/fesm2022/ngwr-descriptions.mjs +6 -6
- package/fesm2022/ngwr-dialog.mjs +15 -15
- package/fesm2022/ngwr-directives.mjs +12 -12
- package/fesm2022/ngwr-divider.mjs +3 -3
- package/fesm2022/ngwr-drawer.mjs +18 -18
- package/fesm2022/ngwr-dropdown.mjs +9 -9
- package/fesm2022/ngwr-editor.mjs +3 -3
- package/fesm2022/ngwr-empty.mjs +3 -3
- package/fesm2022/ngwr-event-calendar.mjs +6 -6
- package/fesm2022/ngwr-file-upload.mjs +3 -3
- package/fesm2022/ngwr-form.mjs +9 -9
- package/fesm2022/ngwr-graph.mjs +6 -6
- package/fesm2022/ngwr-hotkey.mjs +6 -6
- package/fesm2022/ngwr-i18n.mjs +9 -9
- package/fesm2022/ngwr-icon.mjs +6 -6
- package/fesm2022/ngwr-image-cropper.mjs +3 -3
- package/fesm2022/ngwr-input-number.mjs +3 -3
- package/fesm2022/ngwr-input-otp.mjs +3 -3
- package/fesm2022/ngwr-input.mjs +15 -15
- package/fesm2022/ngwr-keyboard.mjs +3 -3
- package/fesm2022/ngwr-knob.mjs +3 -3
- package/fesm2022/ngwr-layout.mjs +15 -15
- package/fesm2022/ngwr-lightbox.mjs +3 -3
- package/fesm2022/ngwr-list.mjs +6 -6
- package/fesm2022/ngwr-loading-bar.mjs +6 -6
- package/fesm2022/ngwr-mention.mjs +6 -6
- package/fesm2022/ngwr-meta.mjs +6 -6
- package/fesm2022/ngwr-overlay.mjs +6 -6
- package/fesm2022/ngwr-page-header.mjs +3 -3
- package/fesm2022/ngwr-pagination.mjs +3 -3
- package/fesm2022/ngwr-pipes.mjs +21 -21
- package/fesm2022/ngwr-platform.mjs +6 -6
- package/fesm2022/ngwr-popconfirm.mjs +6 -6
- package/fesm2022/ngwr-popover.mjs +12 -12
- package/fesm2022/ngwr-progress.mjs +3 -3
- package/fesm2022/ngwr-pull-to-refresh.mjs +3 -3
- package/fesm2022/ngwr-qr.mjs +4 -3
- package/fesm2022/ngwr-qr.mjs.map +1 -1
- package/fesm2022/ngwr-radio.mjs +6 -6
- package/fesm2022/ngwr-rating.mjs +3 -3
- package/fesm2022/ngwr-result.mjs +12 -12
- package/fesm2022/ngwr-schema-form.mjs +3 -3
- package/fesm2022/ngwr-scroll.mjs +3 -3
- package/fesm2022/ngwr-segmented.mjs +3 -3
- package/fesm2022/ngwr-select.mjs +12 -12
- package/fesm2022/ngwr-sidebar.mjs +3 -3
- package/fesm2022/ngwr-skeleton.mjs +3 -3
- package/fesm2022/ngwr-slider.mjs +3 -3
- package/fesm2022/ngwr-sortable-list.mjs +9 -9
- package/fesm2022/ngwr-speed-dial.mjs +3 -3
- package/fesm2022/ngwr-spinner.mjs +3 -3
- package/fesm2022/ngwr-splitter.mjs +3 -3
- package/fesm2022/ngwr-statistic.mjs +9 -9
- package/fesm2022/ngwr-stepper.mjs +6 -6
- package/fesm2022/ngwr-storage.mjs +3 -3
- package/fesm2022/ngwr-switch.mjs +3 -3
- package/fesm2022/ngwr-table.mjs +18 -18
- package/fesm2022/ngwr-tabs-router.mjs +3 -3
- package/fesm2022/ngwr-tabs.mjs +6 -6
- package/fesm2022/ngwr-textarea.mjs +3 -3
- package/fesm2022/ngwr-theme.mjs +3 -3
- package/fesm2022/ngwr-timeline.mjs +6 -6
- package/fesm2022/ngwr-toast.mjs +9 -9
- package/fesm2022/ngwr-toolbar.mjs +3 -3
- package/fesm2022/ngwr-tour.mjs +6 -6
- package/fesm2022/ngwr-transfer.mjs +3 -3
- package/fesm2022/ngwr-tree.mjs +3 -3
- package/fesm2022/ngwr-typography.mjs +3 -3
- package/fesm2022/ngwr-utils.mjs +31 -1
- package/fesm2022/ngwr-utils.mjs.map +1 -1
- package/fesm2022/ngwr-version.mjs +1 -1
- package/fesm2022/ngwr-version.mjs.map +1 -1
- package/fesm2022/ngwr-virtual-scroll.mjs +3 -3
- package/fesm2022/ngwr-window.mjs +12 -12
- package/llms-full.txt +12 -1
- package/mcp/server.js +15 -1
- package/mcp/tools.js +3 -3
- package/package.json +10 -1
- package/schematics/ng-add/index.js +2 -2
- package/schematics/use/symbol-map.json +1 -0
- package/skills/ngwr/SKILL.md +1 -1
- package/skills/ngwr/references/catalog.md +2 -0
- package/types/ngwr-bits-aurora.d.ts +11 -0
- package/types/ngwr-bits-border-glow-testing.d.ts +5 -6
- package/types/ngwr-bits-border-glow.d.ts +5 -1
- package/types/ngwr-bits-dot-grid.d.ts +7 -2
- package/types/ngwr-bits-iridescence-testing.d.ts +85 -0
- package/types/ngwr-bits-iridescence.d.ts +244 -0
- package/types/ngwr-bits-ripple-grid.d.ts +4 -7
- package/types/ngwr-bits-splash-cursor.d.ts +0 -1
- package/types/ngwr-bits-spotlight-card-testing.d.ts +3 -1
- package/types/ngwr-bits-star-border-testing.d.ts +7 -7
- package/types/ngwr-bits-threads.d.ts +11 -8
- package/types/ngwr-bits-waves.d.ts +6 -3
- package/types/ngwr-charts-core.d.ts +0 -10
- package/types/ngwr-color-picker.d.ts +0 -21
- package/types/ngwr-dropdown.d.ts +0 -52
- package/types/ngwr-editor.d.ts +2 -84
- package/types/ngwr-i18n.d.ts +0 -15
- package/types/ngwr-mention.d.ts +0 -13
- package/types/ngwr-popconfirm.d.ts +0 -33
- package/types/ngwr-popover.d.ts +0 -51
- package/types/ngwr-tour.d.ts +0 -2
- package/types/ngwr-utils.d.ts +49 -7
- package/types/ngwr-version.d.ts +1 -1
- package/types/ngwr-window.d.ts +0 -56
|
@@ -88,7 +88,7 @@ var WrTilt = class WrTilt {
|
|
|
88
88
|
}
|
|
89
89
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
90
90
|
minVersion: "12.0.0",
|
|
91
|
-
version: "22.2.
|
|
91
|
+
version: "22.2.4",
|
|
92
92
|
ngImport: i0,
|
|
93
93
|
type: WrTilt,
|
|
94
94
|
deps: [],
|
|
@@ -96,7 +96,7 @@ var WrTilt = class WrTilt {
|
|
|
96
96
|
});
|
|
97
97
|
static ɵdir = i0.ɵɵngDeclareDirective({
|
|
98
98
|
minVersion: "17.1.0",
|
|
99
|
-
version: "22.2.
|
|
99
|
+
version: "22.2.4",
|
|
100
100
|
type: WrTilt,
|
|
101
101
|
isStandalone: true,
|
|
102
102
|
selector: "[wrTilt]",
|
|
@@ -139,7 +139,7 @@ var WrTilt = class WrTilt {
|
|
|
139
139
|
};
|
|
140
140
|
i0.ɵɵngDeclareClassMetadata({
|
|
141
141
|
minVersion: "12.0.0",
|
|
142
|
-
version: "22.2.
|
|
142
|
+
version: "22.2.4",
|
|
143
143
|
ngImport: i0,
|
|
144
144
|
type: WrTilt,
|
|
145
145
|
decorators: [{
|
|
@@ -197,7 +197,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
197
197
|
var WrTiltCard = class WrTiltCard {
|
|
198
198
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
199
199
|
minVersion: "12.0.0",
|
|
200
|
-
version: "22.2.
|
|
200
|
+
version: "22.2.4",
|
|
201
201
|
ngImport: i0,
|
|
202
202
|
type: WrTiltCard,
|
|
203
203
|
deps: [],
|
|
@@ -205,7 +205,7 @@ var WrTiltCard = class WrTiltCard {
|
|
|
205
205
|
});
|
|
206
206
|
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
207
207
|
minVersion: "14.0.0",
|
|
208
|
-
version: "22.2.
|
|
208
|
+
version: "22.2.4",
|
|
209
209
|
type: WrTiltCard,
|
|
210
210
|
isStandalone: true,
|
|
211
211
|
selector: "wr-tilt-card",
|
|
@@ -232,7 +232,7 @@ var WrTiltCard = class WrTiltCard {
|
|
|
232
232
|
};
|
|
233
233
|
i0.ɵɵngDeclareClassMetadata({
|
|
234
234
|
minVersion: "12.0.0",
|
|
235
|
-
version: "22.2.
|
|
235
|
+
version: "22.2.4",
|
|
236
236
|
ngImport: i0,
|
|
237
237
|
type: WrTiltCard,
|
|
238
238
|
decorators: [{
|
|
@@ -184,7 +184,7 @@ var WrTypewriter = class WrTypewriter {
|
|
|
184
184
|
}
|
|
185
185
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
186
186
|
minVersion: "12.0.0",
|
|
187
|
-
version: "22.2.
|
|
187
|
+
version: "22.2.4",
|
|
188
188
|
ngImport: i0,
|
|
189
189
|
type: WrTypewriter,
|
|
190
190
|
deps: [],
|
|
@@ -192,7 +192,7 @@ var WrTypewriter = class WrTypewriter {
|
|
|
192
192
|
});
|
|
193
193
|
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
194
194
|
minVersion: "17.0.0",
|
|
195
|
-
version: "22.2.
|
|
195
|
+
version: "22.2.4",
|
|
196
196
|
type: WrTypewriter,
|
|
197
197
|
isStandalone: true,
|
|
198
198
|
selector: "wr-typewriter",
|
|
@@ -319,7 +319,7 @@ var WrTypewriter = class WrTypewriter {
|
|
|
319
319
|
};
|
|
320
320
|
i0.ɵɵngDeclareClassMetadata({
|
|
321
321
|
minVersion: "12.0.0",
|
|
322
|
-
version: "22.2.
|
|
322
|
+
version: "22.2.4",
|
|
323
323
|
ngImport: i0,
|
|
324
324
|
type: WrTypewriter,
|
|
325
325
|
decorators: [{
|
|
@@ -388,7 +388,6 @@ var WrWaves = class WrWaves {
|
|
|
388
388
|
height: 0
|
|
389
389
|
};
|
|
390
390
|
ratio = 0;
|
|
391
|
-
lastTime = -1;
|
|
392
391
|
mouse = {
|
|
393
392
|
x: -10,
|
|
394
393
|
y: 0,
|
|
@@ -404,6 +403,7 @@ var WrWaves = class WrWaves {
|
|
|
404
403
|
rafId = 0;
|
|
405
404
|
painted = signal(false, ...ngDevMode ? [{ debugName: "painted" }] : /* istanbul ignore next */ []);
|
|
406
405
|
booted = signal(false, ...ngDevMode ? [{ debugName: "booted" }] : /* istanbul ignore next */ []);
|
|
406
|
+
hasBox = signal(false, ...ngDevMode ? [{ debugName: "hasBox" }] : /* istanbul ignore next */ []);
|
|
407
407
|
constructor() {
|
|
408
408
|
if (!this.isBrowser) return;
|
|
409
409
|
afterNextRender(() => this.zone.runOutsideAngular(() => this.boot()));
|
|
@@ -427,6 +427,7 @@ var WrWaves = class WrWaves {
|
|
|
427
427
|
});
|
|
428
428
|
return;
|
|
429
429
|
}
|
|
430
|
+
if (!this.hasBox()) return;
|
|
430
431
|
onCleanup(this.zone.runOutsideAngular(() => this.animate()));
|
|
431
432
|
});
|
|
432
433
|
}
|
|
@@ -462,7 +463,11 @@ var WrWaves = class WrWaves {
|
|
|
462
463
|
cancelAnimationFrame(this.rafId);
|
|
463
464
|
this.rafId = 0;
|
|
464
465
|
};
|
|
465
|
-
const io = typeof IntersectionObserver === "undefined" ? null : new IntersectionObserver((entries) =>
|
|
466
|
+
const io = typeof IntersectionObserver === "undefined" ? null : new IntersectionObserver((entries) => {
|
|
467
|
+
const { isIntersecting, intersectionRatio } = entries[entries.length - 1];
|
|
468
|
+
if (isIntersecting && intersectionRatio > 0) run();
|
|
469
|
+
else halt();
|
|
470
|
+
}, { threshold: [0, 1e-9] });
|
|
466
471
|
if (io) io.observe(this.host.nativeElement);
|
|
467
472
|
else run();
|
|
468
473
|
return () => {
|
|
@@ -470,7 +475,6 @@ var WrWaves = class WrWaves {
|
|
|
470
475
|
window.removeEventListener("touchmove", onTouchMove);
|
|
471
476
|
io?.disconnect();
|
|
472
477
|
halt();
|
|
473
|
-
this.lastTime = -1;
|
|
474
478
|
};
|
|
475
479
|
}
|
|
476
480
|
resize(width, height) {
|
|
@@ -478,7 +482,7 @@ var WrWaves = class WrWaves {
|
|
|
478
482
|
if (!this.fit(width, height)) return;
|
|
479
483
|
if (moved) {
|
|
480
484
|
this.setLines();
|
|
481
|
-
if (this.
|
|
485
|
+
if (!this.platform.prefersReducedMotion()) this.drift(performance.now());
|
|
482
486
|
}
|
|
483
487
|
this.drawLines();
|
|
484
488
|
}
|
|
@@ -492,6 +496,7 @@ var WrWaves = class WrWaves {
|
|
|
492
496
|
height
|
|
493
497
|
};
|
|
494
498
|
this.ratio = ratio;
|
|
499
|
+
this.hasBox.set(width > 0 && height > 0);
|
|
495
500
|
const canvas = this.canvasRef().nativeElement;
|
|
496
501
|
canvas.width = Math.round(width * ratio);
|
|
497
502
|
canvas.height = Math.round(height * ratio);
|
|
@@ -541,7 +546,6 @@ var WrWaves = class WrWaves {
|
|
|
541
546
|
mouse.lx = mouse.x;
|
|
542
547
|
mouse.ly = mouse.y;
|
|
543
548
|
mouse.a = Math.atan2(dy, dx);
|
|
544
|
-
this.lastTime = time;
|
|
545
549
|
this.movePoints(time);
|
|
546
550
|
this.drawLines();
|
|
547
551
|
this.rafId = requestAnimationFrame((t) => this.tick(t));
|
|
@@ -614,7 +618,7 @@ var WrWaves = class WrWaves {
|
|
|
614
618
|
ctx.stroke();
|
|
615
619
|
}
|
|
616
620
|
resolveLineColor() {
|
|
617
|
-
const expression = this.lineColor() ?? "var(--wr-waves-line-color)";
|
|
621
|
+
const expression = (this.lineColor() ?? "").trim() || "var(--wr-waves-line-color)";
|
|
618
622
|
return resolveCssColor(this.canvasRef().nativeElement, expression, "rgba(15, 23, 42, 0.12)");
|
|
619
623
|
}
|
|
620
624
|
updateMouse(x, y) {
|
|
@@ -632,7 +636,7 @@ var WrWaves = class WrWaves {
|
|
|
632
636
|
}
|
|
633
637
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
634
638
|
minVersion: "12.0.0",
|
|
635
|
-
version: "22.2.
|
|
639
|
+
version: "22.2.4",
|
|
636
640
|
ngImport: i0,
|
|
637
641
|
type: WrWaves,
|
|
638
642
|
deps: [],
|
|
@@ -640,7 +644,7 @@ var WrWaves = class WrWaves {
|
|
|
640
644
|
});
|
|
641
645
|
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
642
646
|
minVersion: "17.2.0",
|
|
643
|
-
version: "22.2.
|
|
647
|
+
version: "22.2.4",
|
|
644
648
|
type: WrWaves,
|
|
645
649
|
isStandalone: true,
|
|
646
650
|
selector: "wr-waves",
|
|
@@ -741,13 +745,13 @@ var WrWaves = class WrWaves {
|
|
|
741
745
|
ngImport: i0,
|
|
742
746
|
template: "<canvas #canvas class=\"wr-waves__canvas\" aria-hidden=\"true\"></canvas>",
|
|
743
747
|
isInline: true,
|
|
744
|
-
styles: [".wr-waves{--wr-waves-line-color: light-dark( color-mix(in srgb, var(--wr-color-on-surface) 12%, transparent), rgb(255 255 255 / 14%) );--wr-waves-x-gap: 10px;position:absolute;inset:0;display:block;margin:0;padding:0;overflow:hidden;background-image:repeating-linear-gradient(to right,var(--wr-waves-line-color) 0 1px,transparent 1px var(--wr-waves-x-gap))}.wr-waves--painted{background-image:none}.wr-waves__canvas{display:block;width:100%;height:100%}\n"],
|
|
748
|
+
styles: [".wr-waves{--wr-waves-line-color: light-dark( color-mix(in srgb, var(--wr-color-on-surface) 12%, transparent), rgb(255 255 255 / 14%) );--wr-waves-x-gap: 10px;position:absolute;inset:0;display:block;margin:0;padding:0;overflow:hidden;background-image:repeating-linear-gradient(to right,var(--wr-waves-line-color) 0 1px,transparent 1px var(--wr-waves-x-gap))}.wr-waves--painted{background-image:none}.wr-waves__canvas{display:block;width:100%;height:100%}@media(forced-colors:active){.wr-waves__canvas{forced-color-adjust:none}}\n"],
|
|
745
749
|
encapsulation: i0.ViewEncapsulation.None
|
|
746
750
|
});
|
|
747
751
|
};
|
|
748
752
|
i0.ɵɵngDeclareClassMetadata({
|
|
749
753
|
minVersion: "12.0.0",
|
|
750
|
-
version: "22.2.
|
|
754
|
+
version: "22.2.4",
|
|
751
755
|
ngImport: i0,
|
|
752
756
|
type: WrWaves,
|
|
753
757
|
decorators: [{
|
|
@@ -762,7 +766,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
762
766
|
"[style.--wr-waves-x-gap.px]": "xGap()",
|
|
763
767
|
"[class.wr-waves--painted]": "painted()"
|
|
764
768
|
},
|
|
765
|
-
styles: [".wr-waves{--wr-waves-line-color: light-dark( color-mix(in srgb, var(--wr-color-on-surface) 12%, transparent), rgb(255 255 255 / 14%) );--wr-waves-x-gap: 10px;position:absolute;inset:0;display:block;margin:0;padding:0;overflow:hidden;background-image:repeating-linear-gradient(to right,var(--wr-waves-line-color) 0 1px,transparent 1px var(--wr-waves-x-gap))}.wr-waves--painted{background-image:none}.wr-waves__canvas{display:block;width:100%;height:100%}\n"]
|
|
769
|
+
styles: [".wr-waves{--wr-waves-line-color: light-dark( color-mix(in srgb, var(--wr-color-on-surface) 12%, transparent), rgb(255 255 255 / 14%) );--wr-waves-x-gap: 10px;position:absolute;inset:0;display:block;margin:0;padding:0;overflow:hidden;background-image:repeating-linear-gradient(to right,var(--wr-waves-line-color) 0 1px,transparent 1px var(--wr-waves-x-gap))}.wr-waves--painted{background-image:none}.wr-waves__canvas{display:block;width:100%;height:100%}@media(forced-colors:active){.wr-waves__canvas{forced-color-adjust:none}}\n"]
|
|
766
770
|
}]
|
|
767
771
|
}],
|
|
768
772
|
ctorParameters: () => [],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngwr-bits-waves.mjs","names":[],"sources":["../../../projects/lib/bits/waves/waves.ts"],"sourcesContent":["/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n *\n * Angular adaptation of the Waves background by David Haz / reactbits.dev.\n * Original: https://www.reactbits.dev/backgrounds/waves\n *\n * A grid of vertical lines drawn on a 2D canvas. Each point drifts on\n * perlin noise and is pushed around by the pointer with a spring\n * (tension + friction) pulling it back to rest. Each line is drawn as\n * quadratic curves through the points' midpoints, not as straight segments.\n */\n\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n Component,\n DestroyRef,\n ElementRef,\n NgZone,\n PLATFORM_ID,\n ViewEncapsulation,\n afterNextRender,\n effect,\n inject,\n input,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\n\nimport { WrPlatform } from 'ngwr/platform';\nimport { numAttr, resolveCssColor, watchColorScheme } from 'ngwr/utils';\n\n// Perlin noise (Stefan Gustavson's reference permutation)\n/* eslint-disable no-bitwise -- permutation-table hashing is inherently bitwise */\n\nclass Grad {\n constructor(\n private readonly x: number,\n private readonly y: number\n ) {}\n\n dot2(x: number, y: number): number {\n return this.x * x + this.y * y;\n }\n}\n\nconst GRAD3: readonly Grad[] = [\n new Grad(1, 1),\n new Grad(-1, 1),\n new Grad(1, -1),\n new Grad(-1, -1),\n new Grad(1, 0),\n new Grad(-1, 0),\n new Grad(1, 0),\n new Grad(-1, 0),\n new Grad(0, 1),\n new Grad(0, -1),\n new Grad(0, 1),\n new Grad(0, -1),\n];\n\n// prettier-ignore\nconst P: readonly number[] = [\n 151, 160, 137, 91, 90, 15, 131, 13, 201, 95, 96, 53, 194, 233, 7, 225, 140, 36, 103, 30, 69, 142, 8, 99, 37, 240,\n 21, 10, 23, 190, 6, 148, 247, 120, 234, 75, 0, 26, 197, 62, 94, 252, 219, 203, 117, 35, 11, 32, 57, 177, 33, 88,\n 237, 149, 56, 87, 174, 20, 125, 136, 171, 168, 68, 175, 74, 165, 71, 134, 139, 48, 27, 166, 77, 146, 158, 231, 83,\n 111, 229, 122, 60, 211, 133, 230, 220, 105, 92, 41, 55, 46, 245, 40, 244, 102, 143, 54, 65, 25, 63, 161, 1, 216,\n 80, 73, 209, 76, 132, 187, 208, 89, 18, 169, 200, 196, 135, 130, 116, 188, 159, 86, 164, 100, 109, 198, 173, 186,\n 3, 64, 52, 217, 226, 250, 124, 123, 5, 202, 38, 147, 118, 126, 255, 82, 85, 212, 207, 206, 59, 227, 47, 16, 58,\n 17, 182, 189, 28, 42, 223, 183, 170, 213, 119, 248, 152, 2, 44, 154, 163, 70, 221, 153, 101, 155, 167, 43, 172, 9,\n 129, 22, 39, 253, 19, 98, 108, 110, 79, 113, 224, 232, 178, 185, 112, 104, 218, 246, 97, 228, 251, 34, 242, 193,\n 238, 210, 144, 12, 191, 179, 162, 241, 81, 51, 145, 235, 249, 14, 239, 107, 49, 192, 214, 31, 181, 199, 106, 157,\n 184, 84, 204, 176, 115, 121, 50, 45, 127, 4, 150, 254, 138, 236, 205, 93, 222, 114, 67, 29, 24, 72, 243, 141, 128,\n 195, 78, 66, 215, 61, 156, 180,\n];\n\nclass Noise {\n private readonly perm = new Array<number>(512);\n private readonly gradP = new Array<Grad>(512);\n\n constructor(seed: number) {\n if (seed > 0 && seed < 1) seed *= 65536;\n seed = Math.floor(seed);\n if (seed < 256) seed |= seed << 8;\n for (let i = 0; i < 256; i++) {\n const v = i & 1 ? P[i] ^ (seed & 255) : P[i] ^ ((seed >> 8) & 255);\n this.perm[i] = this.perm[i + 256] = v;\n this.gradP[i] = this.gradP[i + 256] = GRAD3[v % 12];\n }\n }\n\n private fade(t: number): number {\n return t * t * t * (t * (t * 6 - 15) + 10);\n }\n\n private lerp(a: number, b: number, t: number): number {\n return (1 - t) * a + t * b;\n }\n\n perlin2(x: number, y: number): number {\n let gx = Math.floor(x);\n let gy = Math.floor(y);\n x -= gx;\n y -= gy;\n gx &= 255;\n gy &= 255;\n const n00 = this.gradP[gx + this.perm[gy]].dot2(x, y);\n const n01 = this.gradP[gx + this.perm[gy + 1]].dot2(x, y - 1);\n const n10 = this.gradP[gx + 1 + this.perm[gy]].dot2(x - 1, y);\n const n11 = this.gradP[gx + 1 + this.perm[gy + 1]].dot2(x - 1, y - 1);\n const u = this.fade(x);\n return this.lerp(this.lerp(n00, n10, u), this.lerp(n01, n11, u), this.fade(y));\n }\n}\n\n/* eslint-enable no-bitwise */\n// Component\n\ninterface WavePoint {\n x: number;\n y: number;\n wave: { x: number; y: number };\n cursor: { x: number; y: number; vx: number; vy: number };\n}\n\n/**\n * Wave-field background — a grid of lines drifting on perlin noise,\n * nudged by the pointer. Fills its nearest positioned ancestor; put it\n * behind hero copy or section content.\n *\n * Colours are theme-aware by default: a soft dark line on light surfaces,\n * a faint white line on dark — override with `[lineColor]`.\n *\n * @example\n * ```html\n * <section style=\"position: relative\">\n * <wr-waves />\n * <h1>Hero copy above the waves</h1>\n * </section>\n * ```\n *\n * @see https://ngwr.dev/bits/waves\n */\n/**\n * The most bitmap pixels the canvas is backed with. The field is redrawn every\n * frame, so the backing store is a per-frame cost: a 1280-wide hero keeps the\n * full 2x (about 2.3 MP), and a wider one steps down toward 1x instead of\n * growing to a 3456-pixel-wide bitmap on a large retina window.\n */\nconst MAX_CANVAS_PIXELS = 2_500_000;\n\n@Component({\n selector: 'wr-waves',\n template: '<canvas #canvas class=\"wr-waves__canvas\" aria-hidden=\"true\"></canvas>',\n styleUrl: './waves.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'wr-waves',\n '[style.background-color]': 'backgroundColor()',\n // Feeds the CSS stand-in grid (see waves.scss) so it matches the real\n // spacing, and switches it off the moment the canvas has painted.\n '[style.--wr-waves-x-gap.px]': 'xGap()',\n '[class.wr-waves--painted]': 'painted()',\n },\n})\nexport class WrWaves {\n /** Line stroke colour, any CSS colour. When unset, the theme decides. */\n readonly lineColor = input<string | null>(null);\n\n /** Background fill behind the lines. @default 'transparent' */\n readonly backgroundColor = input('transparent');\n\n /** Horizontal noise drift per ms. @default 0.0125 */\n readonly waveSpeedX = input(0.0125, { transform: numAttr(0.0125) });\n\n /** Vertical noise drift per ms. @default 0.005 */\n readonly waveSpeedY = input(0.005, { transform: numAttr(0.005) });\n\n /** Horizontal wave amplitude in px. @default 32 */\n readonly waveAmpX = input(32, { transform: numAttr(32) });\n\n /** Vertical wave amplitude in px. @default 16 */\n readonly waveAmpY = input(16, { transform: numAttr(16) });\n\n /** Horizontal gap between lines in px. @default 10 */\n readonly xGap = input(10, { transform: numAttr(10) });\n\n /** Vertical gap between points on a line in px. @default 32 */\n readonly yGap = input(32, { transform: numAttr(32) });\n\n /** Velocity damping of the cursor spring, 0..1. @default 0.925 */\n readonly friction = input(0.925, { transform: numAttr(0.925) });\n\n /** Pull-back strength of the cursor spring. @default 0.005 */\n readonly tension = input(0.005, { transform: numAttr(0.005) });\n\n /** Max px a point can be dragged from rest. @default 100 */\n readonly maxCursorMove = input(100, { transform: numAttr(100) });\n\n private readonly canvasRef = viewChild.required<ElementRef<HTMLCanvasElement>>('canvas');\n\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly zone = inject(NgZone);\n private readonly destroyRef = inject(DestroyRef);\n private readonly platform = inject(WrPlatform);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n private ctx: CanvasRenderingContext2D | null = null;\n private readonly noise = new Noise(Math.random());\n private lines: WavePoint[][] = [];\n /** The host's layout box, in CSS pixels before any transform: what the grid is laid out in. */\n private box = { width: 0, height: 0 };\n /** Bitmap pixels per CSS pixel the canvas is backed at; 0 until the first fit. */\n private ratio = 0;\n /** The time of the frame the loop last drew, or -1 while no loop has drawn. */\n private lastTime = -1;\n private readonly mouse = { x: -10, y: 0, lx: 0, ly: 0, sx: 0, sy: 0, v: 0, vs: 0, a: 0, set: false };\n private rafId = 0;\n\n /**\n * Flips once the canvas has drawn, which retires the CSS stand-in grid.\n *\n * A canvas cannot be prerendered, so on an SSR'd or prerendered page this\n * element is simply blank until the bundle has loaded and hydration has run —\n * measured at ~2.8s on ngwr.dev's own home page. The stylesheet paints a static\n * grid of the same colour and pitch in the meantime, straight from the\n * prerendered HTML, and this hands over to the real thing.\n */\n protected readonly painted = signal(false);\n\n /** Flips once `boot()` has a context and a grid — the motion half waits for it. */\n private readonly booted = signal(false);\n\n constructor() {\n if (!this.isBrowser) return;\n\n afterNextRender(() => this.zone.runOutsideAngular(() => this.boot()));\n\n // Re-seed the grid when geometry inputs change. The bitmap is left alone,\n // so the next frame draws over the old grid rather than over a blank canvas.\n effect(() => {\n this.xGap();\n this.yGap();\n if (!this.ctx) return;\n this.setLines();\n // And paint it, when there is no frame loop to. Under\n // `prefers-reduced-motion` the grid is drawn once and no frame follows,\n // so a later gap change rebuilt the grid and left it undrawn — with\n // `.wr-waves--painted` already on the host, so the element stayed\n // visible and empty.\n if (this.platform.prefersReducedMotion()) this.drawLines();\n });\n\n // The still grid keeps the line colour it was drawn with, so a scheme switch\n // under reduced motion re-resolves it and draws the grid again. The loop\n // needs no help: every frame it draws resolves the colour afresh.\n watchColorScheme(() => {\n if (this.booted() && this.platform.prefersReducedMotion()) this.drawLines();\n });\n\n // Motion or a still grid, decided live: a preference switched while the page\n // is open used to keep the field drifting until a reload, because `boot()`\n // read it once.\n effect(onCleanup => {\n if (!this.booted()) return;\n if (this.platform.prefersReducedMotion()) {\n // One static, undisturbed grid — no drift, no loop, no pointer\n // reactivity. Repainted when the line colour changes, since there is\n // no next frame to pick it up.\n this.lineColor();\n untracked(() => {\n this.setLines();\n this.drawLines();\n });\n return;\n }\n onCleanup(this.zone.runOutsideAngular(() => this.animate()));\n });\n }\n\n // Setup\n\n private boot(): void {\n const canvas = this.canvasRef().nativeElement;\n this.ctx = canvas.getContext('2d');\n if (!this.ctx) return;\n\n // `clientWidth` and not `getBoundingClientRect()`: the rect is the box after\n // transforms, and no observer hears of a transform, so a field booted inside\n // a dialog's scale-in kept a bitmap 96% of its box, stretched by CSS once\n // the animation ended. The observer's first entry follows with the exact,\n // sub-pixel size.\n const hostEl = this.host.nativeElement;\n this.fit(hostEl.clientWidth, hostEl.clientHeight);\n this.setLines();\n\n // The box is the observer's to follow, transforms excluded. A window resize\n // is for the pixel ratio, which browser zoom and a move to another screen\n // change with no box change at all.\n const onResize = (): void => this.resize(this.box.width, this.box.height);\n window.addEventListener('resize', onResize);\n const ro = new ResizeObserver(entries => {\n const rect = entries[entries.length - 1]?.contentRect;\n if (rect) this.resize(rect.width, rect.height);\n });\n ro.observe(hostEl);\n this.destroyRef.onDestroy(() => {\n window.removeEventListener('resize', onResize);\n ro.disconnect();\n });\n this.booted.set(true);\n }\n\n /** Start the drift and the pointer reactivity; returns what stops both. */\n private animate(): () => void {\n const onMouseMove = (e: MouseEvent): void => this.updateMouse(e.clientX, e.clientY);\n const onTouchMove = (e: TouchEvent): void => this.updateMouse(e.touches[0].clientX, e.touches[0].clientY);\n\n window.addEventListener('mousemove', onMouseMove);\n window.addEventListener('touchmove', onTouchMove, { passive: true });\n\n const run = (): void => {\n if (this.rafId === 0) this.rafId = requestAnimationFrame(t => this.tick(t));\n };\n const halt = (): void => {\n cancelAnimationFrame(this.rafId);\n this.rafId = 0;\n };\n // Off screen the field stops asking for frames: it is decoration, and a\n // canvas redrawn out of sight still costs the browser a frame every frame.\n // Firefox on a wide retina window showed it: scrolled back up, the page\n // above the fold stayed blank for seconds until this loop and the pixel\n // budget below went in. Without an observer (jsdom) it simply runs.\n const io =\n typeof IntersectionObserver === 'undefined'\n ? null\n : new IntersectionObserver(entries => (entries[entries.length - 1].isIntersecting ? run() : halt()));\n if (io) io.observe(this.host.nativeElement);\n else run();\n\n return () => {\n window.removeEventListener('mousemove', onMouseMove);\n window.removeEventListener('touchmove', onTouchMove);\n io?.disconnect();\n halt();\n // The still grid that follows is undisturbed: no drift to carry over.\n this.lastTime = -1;\n };\n }\n\n /** Fit the canvas to a new box or pixel ratio and, when that cleared it, repaint at once. */\n private resize(width: number, height: number): void {\n const moved = width !== this.box.width || height !== this.box.height;\n if (!this.fit(width, height)) return;\n if (moved) {\n this.setLines();\n // Re-seeded points sit at rest. A drifting field puts them where the last\n // frame had the drift, or the repaint below shows straight lines for a frame.\n if (this.lastTime >= 0) this.drift(this.lastTime);\n }\n // Observer entries arrive after the frame's own callbacks and before its\n // paint, and the fit cleared the bitmap, so a repaint left to the next frame\n // would leave this one blank: a resize drag flickered every frame.\n this.drawLines();\n }\n\n /**\n * Back the canvas for a `width` × `height` box, in CSS pixels, at the screen's\n * pixel ratio. Returns whether anything changed: writing `canvas.width` clears\n * the bitmap even to the value it already has, so an unchanged box is left alone.\n */\n private fit(width: number, height: number): boolean {\n // Backed at the screen's pixel ratio. A bitmap the size of the CSS box is\n // upscaled on a 2x screen, which smears every 1px line across two device\n // pixels and steps its curves. Capped at 2: the field repaints every frame,\n // and a 3x phone would push half as many pixels again for no visible gain.\n // Capped again by `MAX_CANVAS_PIXELS`, never below 1.\n const area = width * height;\n const budget = area > 0 ? Math.sqrt(MAX_CANVAS_PIXELS / area) : 2;\n const ratio = Math.max(1, Math.min(window.devicePixelRatio || 1, 2, budget));\n if (width === this.box.width && height === this.box.height && ratio === this.ratio) return false;\n\n this.box = { width, height };\n this.ratio = ratio;\n const canvas = this.canvasRef().nativeElement;\n canvas.width = Math.round(width * ratio);\n canvas.height = Math.round(height * ratio);\n // Resizing the bitmap resets the context, transform included, so the scale\n // goes on afterwards. Every coordinate below stays in CSS pixels.\n this.ctx?.setTransform(ratio, 0, 0, ratio, 0, 0);\n return true;\n }\n\n private setLines(): void {\n const { width, height } = this.box;\n this.lines = [];\n const oWidth = width + 200;\n const oHeight = height + 30;\n const xGap = this.xGap();\n const yGap = this.yGap();\n const totalLines = Math.ceil(oWidth / xGap);\n const totalPoints = Math.ceil(oHeight / yGap);\n const xStart = (width - xGap * totalLines) / 2;\n const yStart = (height - yGap * totalPoints) / 2;\n for (let i = 0; i <= totalLines; i++) {\n const pts: WavePoint[] = [];\n for (let j = 0; j <= totalPoints; j++) {\n pts.push({\n x: xStart + xGap * i,\n y: yStart + yGap * j,\n wave: { x: 0, y: 0 },\n cursor: { x: 0, y: 0, vx: 0, vy: 0 },\n });\n }\n this.lines.push(pts);\n }\n }\n\n // Frame loop\n\n private tick(time: number): void {\n const mouse = this.mouse;\n mouse.sx += (mouse.x - mouse.sx) * 0.1;\n mouse.sy += (mouse.y - mouse.sy) * 0.1;\n const dx = mouse.x - mouse.lx;\n const dy = mouse.y - mouse.ly;\n const d = Math.hypot(dx, dy);\n mouse.v = d;\n mouse.vs += (d - mouse.vs) * 0.1;\n mouse.vs = Math.min(100, mouse.vs);\n mouse.lx = mouse.x;\n mouse.ly = mouse.y;\n mouse.a = Math.atan2(dy, dx);\n\n this.lastTime = time;\n this.movePoints(time);\n this.drawLines();\n this.rafId = requestAnimationFrame(t => this.tick(t));\n }\n\n /** Put every point where the noise drifts it at `time`. */\n private drift(time: number): void {\n const waveSpeedX = this.waveSpeedX();\n const waveSpeedY = this.waveSpeedY();\n const waveAmpX = this.waveAmpX();\n const waveAmpY = this.waveAmpY();\n\n for (const pts of this.lines) {\n for (const p of pts) {\n const move = this.noise.perlin2((p.x + time * waveSpeedX) * 0.002, (p.y + time * waveSpeedY) * 0.0015) * 12;\n p.wave.x = Math.cos(move) * waveAmpX;\n p.wave.y = Math.sin(move) * waveAmpY;\n }\n }\n }\n\n private movePoints(time: number): void {\n this.drift(time);\n\n const mouse = this.mouse;\n const friction = this.friction();\n const tension = this.tension();\n const maxCursorMove = this.maxCursorMove();\n\n for (const pts of this.lines) {\n for (const p of pts) {\n const dx = p.x - mouse.sx;\n const dy = p.y - mouse.sy;\n const dist = Math.hypot(dx, dy);\n const l = Math.max(175, mouse.vs);\n if (dist < l) {\n const s = 1 - dist / l;\n const f = Math.cos(dist * 0.001) * s;\n p.cursor.vx += Math.cos(mouse.a) * f * l * mouse.vs * 0.00065;\n p.cursor.vy += Math.sin(mouse.a) * f * l * mouse.vs * 0.00065;\n }\n\n p.cursor.vx += (0 - p.cursor.x) * tension;\n p.cursor.vy += (0 - p.cursor.y) * tension;\n p.cursor.vx *= friction;\n p.cursor.vy *= friction;\n p.cursor.x += p.cursor.vx * 2;\n p.cursor.y += p.cursor.vy * 2;\n p.cursor.x = Math.min(maxCursorMove, Math.max(-maxCursorMove, p.cursor.x));\n p.cursor.y = Math.min(maxCursorMove, Math.max(-maxCursorMove, p.cursor.y));\n }\n }\n }\n\n private moved(point: WavePoint, withCursor: boolean): { x: number; y: number } {\n const x = point.x + point.wave.x + (withCursor ? point.cursor.x : 0);\n const y = point.y + point.wave.y + (withCursor ? point.cursor.y : 0);\n return { x: Math.round(x * 10) / 10, y: Math.round(y * 10) / 10 };\n }\n\n private drawLines(): void {\n const ctx = this.ctx;\n if (!ctx) return;\n // Retire the CSS stand-in: from here the canvas has real pixels. Set inside\n // the draw rather than at the end of `boot()` so it can never switch the\n // fallback off before something has actually been painted. Runs outside\n // Angular (the rAF loop does), so `signal.set` schedules the one host-binding\n // update it needs; every later call is a no-op on an unchanged value.\n if (!this.painted()) this.painted.set(true);\n const { width, height } = this.box;\n ctx.clearRect(0, 0, width, height);\n ctx.beginPath();\n ctx.strokeStyle = this.resolveLineColor();\n for (const points of this.lines) {\n // Both ends stay where the grid put them, as they did when each line was\n // a polyline; only the interior follows the pointer.\n const last = points.length - 1;\n const path = points.map((p, idx) => this.moved(p, idx > 0 && idx < last));\n // A curve through the MIDPOINTS, with each grid point as its control.\n // Joining the points themselves with `lineTo` put a corner at every one,\n // and at the default 32px pitch they read as a jagged line. Consecutive\n // curves share a tangent at the midpoint between them, so the line bends\n // without a kink anywhere and still passes near every point.\n ctx.moveTo(path[0].x, path[0].y);\n for (let i = 1; i < last; i++) {\n const p = path[i];\n const next = path[i + 1];\n ctx.quadraticCurveTo(p.x, p.y, (p.x + next.x) / 2, (p.y + next.y) / 2);\n }\n ctx.lineTo(path[last].x, path[last].y);\n }\n ctx.stroke();\n }\n\n /**\n * Explicit input wins; otherwise the theme's `--wr-waves-line-color`. Either\n * is resolved through the cascade before it reaches `strokeStyle`, which\n * reads neither a custom property nor the `light-dark()` the hook holds.\n * Called on every draw, so a colour-scheme change lands on the next frame.\n */\n private resolveLineColor(): string {\n const expression = this.lineColor() ?? 'var(--wr-waves-line-color)';\n return resolveCssColor(this.canvasRef().nativeElement, expression, 'rgba(15, 23, 42, 0.12)');\n }\n\n private updateMouse(x: number, y: number): void {\n // Re-read the box each move — cheaper than tracking scroll, and the\n // host is usually a hero that rarely reflows mid-gesture. The rect is the\n // box as drawn, after any transform on the host or an ancestor, and the\n // grid is laid out in the box before them, so the pointer is scaled back.\n const rect = this.host.nativeElement.getBoundingClientRect();\n const mouse = this.mouse;\n mouse.x = (x - rect.left) * (rect.width > 0 ? this.box.width / rect.width : 1);\n mouse.y = (y - rect.top) * (rect.height > 0 ? this.box.height / rect.height : 1);\n if (!mouse.set) {\n mouse.sx = mouse.x;\n mouse.sy = mouse.y;\n mouse.lx = mouse.x;\n mouse.ly = mouse.y;\n mouse.set = true;\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngwr-bits-waves.mjs","names":[],"sources":["../../../projects/lib/bits/waves/waves.ts"],"sourcesContent":["/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n *\n * Angular adaptation of the Waves background by David Haz / reactbits.dev.\n * Original: https://www.reactbits.dev/backgrounds/waves\n *\n * A grid of vertical lines drawn on a 2D canvas. Each point drifts on\n * perlin noise and is pushed around by the pointer with a spring\n * (tension + friction) pulling it back to rest. Each line is drawn as\n * quadratic curves through the points' midpoints, not as straight segments.\n */\n\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n Component,\n DestroyRef,\n ElementRef,\n NgZone,\n PLATFORM_ID,\n ViewEncapsulation,\n afterNextRender,\n effect,\n inject,\n input,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\n\nimport { WrPlatform } from 'ngwr/platform';\nimport { numAttr, resolveCssColor, watchColorScheme } from 'ngwr/utils';\n\n// Perlin noise (Stefan Gustavson's reference permutation)\n/* eslint-disable no-bitwise -- permutation-table hashing is inherently bitwise */\n\nclass Grad {\n constructor(\n private readonly x: number,\n private readonly y: number\n ) {}\n\n dot2(x: number, y: number): number {\n return this.x * x + this.y * y;\n }\n}\n\nconst GRAD3: readonly Grad[] = [\n new Grad(1, 1),\n new Grad(-1, 1),\n new Grad(1, -1),\n new Grad(-1, -1),\n new Grad(1, 0),\n new Grad(-1, 0),\n new Grad(1, 0),\n new Grad(-1, 0),\n new Grad(0, 1),\n new Grad(0, -1),\n new Grad(0, 1),\n new Grad(0, -1),\n];\n\n// prettier-ignore\nconst P: readonly number[] = [\n 151, 160, 137, 91, 90, 15, 131, 13, 201, 95, 96, 53, 194, 233, 7, 225, 140, 36, 103, 30, 69, 142, 8, 99, 37, 240,\n 21, 10, 23, 190, 6, 148, 247, 120, 234, 75, 0, 26, 197, 62, 94, 252, 219, 203, 117, 35, 11, 32, 57, 177, 33, 88,\n 237, 149, 56, 87, 174, 20, 125, 136, 171, 168, 68, 175, 74, 165, 71, 134, 139, 48, 27, 166, 77, 146, 158, 231, 83,\n 111, 229, 122, 60, 211, 133, 230, 220, 105, 92, 41, 55, 46, 245, 40, 244, 102, 143, 54, 65, 25, 63, 161, 1, 216,\n 80, 73, 209, 76, 132, 187, 208, 89, 18, 169, 200, 196, 135, 130, 116, 188, 159, 86, 164, 100, 109, 198, 173, 186,\n 3, 64, 52, 217, 226, 250, 124, 123, 5, 202, 38, 147, 118, 126, 255, 82, 85, 212, 207, 206, 59, 227, 47, 16, 58,\n 17, 182, 189, 28, 42, 223, 183, 170, 213, 119, 248, 152, 2, 44, 154, 163, 70, 221, 153, 101, 155, 167, 43, 172, 9,\n 129, 22, 39, 253, 19, 98, 108, 110, 79, 113, 224, 232, 178, 185, 112, 104, 218, 246, 97, 228, 251, 34, 242, 193,\n 238, 210, 144, 12, 191, 179, 162, 241, 81, 51, 145, 235, 249, 14, 239, 107, 49, 192, 214, 31, 181, 199, 106, 157,\n 184, 84, 204, 176, 115, 121, 50, 45, 127, 4, 150, 254, 138, 236, 205, 93, 222, 114, 67, 29, 24, 72, 243, 141, 128,\n 195, 78, 66, 215, 61, 156, 180,\n];\n\nclass Noise {\n private readonly perm = new Array<number>(512);\n private readonly gradP = new Array<Grad>(512);\n\n constructor(seed: number) {\n if (seed > 0 && seed < 1) seed *= 65536;\n seed = Math.floor(seed);\n if (seed < 256) seed |= seed << 8;\n for (let i = 0; i < 256; i++) {\n const v = i & 1 ? P[i] ^ (seed & 255) : P[i] ^ ((seed >> 8) & 255);\n this.perm[i] = this.perm[i + 256] = v;\n this.gradP[i] = this.gradP[i + 256] = GRAD3[v % 12];\n }\n }\n\n private fade(t: number): number {\n return t * t * t * (t * (t * 6 - 15) + 10);\n }\n\n private lerp(a: number, b: number, t: number): number {\n return (1 - t) * a + t * b;\n }\n\n perlin2(x: number, y: number): number {\n let gx = Math.floor(x);\n let gy = Math.floor(y);\n x -= gx;\n y -= gy;\n gx &= 255;\n gy &= 255;\n const n00 = this.gradP[gx + this.perm[gy]].dot2(x, y);\n const n01 = this.gradP[gx + this.perm[gy + 1]].dot2(x, y - 1);\n const n10 = this.gradP[gx + 1 + this.perm[gy]].dot2(x - 1, y);\n const n11 = this.gradP[gx + 1 + this.perm[gy + 1]].dot2(x - 1, y - 1);\n const u = this.fade(x);\n return this.lerp(this.lerp(n00, n10, u), this.lerp(n01, n11, u), this.fade(y));\n }\n}\n\n/* eslint-enable no-bitwise */\n// Component\n\ninterface WavePoint {\n x: number;\n y: number;\n wave: { x: number; y: number };\n cursor: { x: number; y: number; vx: number; vy: number };\n}\n\n/**\n * Wave-field background — a grid of lines drifting on perlin noise,\n * nudged by the pointer. Fills its nearest positioned ancestor; put it\n * behind hero copy or section content.\n *\n * Colours are theme-aware by default: a soft dark line on light surfaces,\n * a faint white line on dark — override with `[lineColor]`.\n *\n * @example\n * ```html\n * <section style=\"position: relative\">\n * <wr-waves />\n * <h1>Hero copy above the waves</h1>\n * </section>\n * ```\n *\n * @see https://ngwr.dev/bits/waves\n */\n/**\n * The most bitmap pixels the canvas is backed with. The field is redrawn every\n * frame, so the backing store is a per-frame cost: a 1280-wide hero keeps the\n * full 2x (about 2.3 MP), and a wider one steps down toward 1x instead of\n * growing to a 3456-pixel-wide bitmap on a large retina window.\n */\nconst MAX_CANVAS_PIXELS = 2_500_000;\n\n@Component({\n selector: 'wr-waves',\n template: '<canvas #canvas class=\"wr-waves__canvas\" aria-hidden=\"true\"></canvas>',\n styleUrl: './waves.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'wr-waves',\n '[style.background-color]': 'backgroundColor()',\n // Feeds the CSS stand-in grid (see waves.scss) so it matches the real\n // spacing, and switches it off the moment the canvas has painted.\n '[style.--wr-waves-x-gap.px]': 'xGap()',\n '[class.wr-waves--painted]': 'painted()',\n },\n})\nexport class WrWaves {\n /** Line stroke colour, any CSS colour. When unset, empty or blank, `--wr-waves-line-color` decides. */\n readonly lineColor = input<string | null>(null);\n\n /** Background fill behind the lines. @default 'transparent' */\n readonly backgroundColor = input('transparent');\n\n /** Horizontal noise drift per ms. @default 0.0125 */\n readonly waveSpeedX = input(0.0125, { transform: numAttr(0.0125) });\n\n /** Vertical noise drift per ms. @default 0.005 */\n readonly waveSpeedY = input(0.005, { transform: numAttr(0.005) });\n\n /** Horizontal wave amplitude in px. @default 32 */\n readonly waveAmpX = input(32, { transform: numAttr(32) });\n\n /** Vertical wave amplitude in px. @default 16 */\n readonly waveAmpY = input(16, { transform: numAttr(16) });\n\n /** Horizontal gap between lines in px. @default 10 */\n readonly xGap = input(10, { transform: numAttr(10) });\n\n /** Vertical gap between points on a line in px. @default 32 */\n readonly yGap = input(32, { transform: numAttr(32) });\n\n /** Velocity damping of the cursor spring, 0..1. @default 0.925 */\n readonly friction = input(0.925, { transform: numAttr(0.925) });\n\n /** Pull-back strength of the cursor spring. @default 0.005 */\n readonly tension = input(0.005, { transform: numAttr(0.005) });\n\n /** Max px a point can be dragged from rest. @default 100 */\n readonly maxCursorMove = input(100, { transform: numAttr(100) });\n\n private readonly canvasRef = viewChild.required<ElementRef<HTMLCanvasElement>>('canvas');\n\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly zone = inject(NgZone);\n private readonly destroyRef = inject(DestroyRef);\n private readonly platform = inject(WrPlatform);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n private ctx: CanvasRenderingContext2D | null = null;\n private readonly noise = new Noise(Math.random());\n private lines: WavePoint[][] = [];\n /** The host's layout box, in CSS pixels before any transform: what the grid is laid out in. */\n private box = { width: 0, height: 0 };\n /** Bitmap pixels per CSS pixel the canvas is backed at; 0 until the first fit. */\n private ratio = 0;\n private readonly mouse = { x: -10, y: 0, lx: 0, ly: 0, sx: 0, sy: 0, v: 0, vs: 0, a: 0, set: false };\n private rafId = 0;\n\n /**\n * Flips once the canvas has drawn, which retires the CSS stand-in grid.\n *\n * A canvas cannot be prerendered, so on an SSR'd or prerendered page this\n * element is simply blank until the bundle has loaded and hydration has run —\n * measured at ~2.8s on ngwr.dev's own home page. The stylesheet paints a static\n * grid of the same colour and pitch in the meantime, straight from the\n * prerendered HTML, and this hands over to the real thing.\n */\n protected readonly painted = signal(false);\n\n /** Flips once `boot()` has a context and a grid — the motion half waits for it. */\n private readonly booted = signal(false);\n\n /**\n * Whether the box has an area. The intersection observer calls a zero-area host\n * intersecting and sends no entry when it gains a size, so this reads the box instead.\n */\n private readonly hasBox = signal(false);\n\n constructor() {\n if (!this.isBrowser) return;\n\n afterNextRender(() => this.zone.runOutsideAngular(() => this.boot()));\n\n // Re-seed the grid when geometry inputs change. The bitmap is left alone,\n // so the next frame draws over the old grid rather than over a blank canvas.\n effect(() => {\n this.xGap();\n this.yGap();\n if (!this.ctx) return;\n this.setLines();\n // And paint it, when there is no frame loop to. Under\n // `prefers-reduced-motion` the grid is drawn once and no frame follows,\n // so a later gap change rebuilt the grid and left it undrawn — with\n // `.wr-waves--painted` already on the host, so the element stayed\n // visible and empty.\n if (this.platform.prefersReducedMotion()) this.drawLines();\n });\n\n // The still grid keeps the line colour it was drawn with, so a scheme switch\n // under reduced motion re-resolves it and draws the grid again. The loop\n // needs no help: every frame it draws resolves the colour afresh.\n watchColorScheme(() => {\n if (this.booted() && this.platform.prefersReducedMotion()) this.drawLines();\n });\n\n // Motion or a still grid, decided live: a preference switched while the page\n // is open used to keep the field drifting until a reload, because `boot()`\n // read it once.\n effect(onCleanup => {\n if (!this.booted()) return;\n if (this.platform.prefersReducedMotion()) {\n // One static, undisturbed grid — no drift, no loop, no pointer\n // reactivity. Repainted when the line colour changes, since there is\n // no next frame to pick it up.\n this.lineColor();\n untracked(() => {\n this.setLines();\n this.drawLines();\n });\n return;\n }\n if (!this.hasBox()) return;\n onCleanup(this.zone.runOutsideAngular(() => this.animate()));\n });\n }\n\n // Setup\n\n private boot(): void {\n const canvas = this.canvasRef().nativeElement;\n this.ctx = canvas.getContext('2d');\n if (!this.ctx) return;\n\n // `clientWidth` and not `getBoundingClientRect()`: the rect is the box after\n // transforms, and no observer hears of a transform, so a field booted inside\n // a dialog's scale-in kept a bitmap 96% of its box, stretched by CSS once\n // the animation ended. The observer's first entry follows with the exact,\n // sub-pixel size.\n const hostEl = this.host.nativeElement;\n this.fit(hostEl.clientWidth, hostEl.clientHeight);\n this.setLines();\n\n // The box is the observer's to follow, transforms excluded. A window resize\n // is for the pixel ratio, which browser zoom and a move to another screen\n // change with no box change at all.\n const onResize = (): void => this.resize(this.box.width, this.box.height);\n window.addEventListener('resize', onResize);\n const ro = new ResizeObserver(entries => {\n const rect = entries[entries.length - 1]?.contentRect;\n if (rect) this.resize(rect.width, rect.height);\n });\n ro.observe(hostEl);\n this.destroyRef.onDestroy(() => {\n window.removeEventListener('resize', onResize);\n ro.disconnect();\n });\n this.booted.set(true);\n }\n\n /** Start the drift and the pointer reactivity; returns what stops both. */\n private animate(): () => void {\n const onMouseMove = (e: MouseEvent): void => this.updateMouse(e.clientX, e.clientY);\n const onTouchMove = (e: TouchEvent): void => this.updateMouse(e.touches[0].clientX, e.touches[0].clientY);\n\n window.addEventListener('mousemove', onMouseMove);\n window.addEventListener('touchmove', onTouchMove, { passive: true });\n\n const run = (): void => {\n if (this.rafId === 0) this.rafId = requestAnimationFrame(t => this.tick(t));\n };\n const halt = (): void => {\n cancelAnimationFrame(this.rafId);\n this.rafId = 0;\n };\n // Off screen the field stops asking for frames: it is decoration, and a\n // canvas redrawn out of sight still costs the browser a frame every frame.\n // Firefox on a wide retina window showed it: scrolled back up, the page\n // above the fold stayed blank for seconds until this loop and the pixel\n // budget below went in. Without an observer (jsdom) it simply runs. A box\n // flush against a zero-height clip intersects with nothing showing, and only a\n // second threshold reports the clip moving. It sits below any real ratio, or a\n // clip closing on a transition steps from under it to 0 without crossing anything.\n const io =\n typeof IntersectionObserver === 'undefined'\n ? null\n : new IntersectionObserver(\n entries => {\n const { isIntersecting, intersectionRatio } = entries[entries.length - 1];\n if (isIntersecting && intersectionRatio > 0) run();\n else halt();\n },\n { threshold: [0, 1e-9] }\n );\n if (io) io.observe(this.host.nativeElement);\n else run();\n\n return () => {\n window.removeEventListener('mousemove', onMouseMove);\n window.removeEventListener('touchmove', onTouchMove);\n io?.disconnect();\n halt();\n };\n }\n\n /** Fit the canvas to a new box or pixel ratio and, when that cleared it, repaint at once. */\n private resize(width: number, height: number): void {\n const moved = width !== this.box.width || height !== this.box.height;\n if (!this.fit(width, height)) return;\n if (moved) {\n this.setLines();\n // Re-seeded points sit at rest. A drifting field puts them where the next\n // frame will, or the repaint below shows straight lines until it comes.\n if (!this.platform.prefersReducedMotion()) this.drift(performance.now());\n }\n // Observer entries arrive after the frame's own callbacks and before its\n // paint, and the fit cleared the bitmap, so a repaint left to the next frame\n // would leave this one blank: a resize drag flickered every frame.\n this.drawLines();\n }\n\n /**\n * Back the canvas for a `width` × `height` box, in CSS pixels, at the screen's\n * pixel ratio. Returns whether anything changed: writing `canvas.width` clears\n * the bitmap even to the value it already has, so an unchanged box is left alone.\n */\n private fit(width: number, height: number): boolean {\n // Backed at the screen's pixel ratio. A bitmap the size of the CSS box is\n // upscaled on a 2x screen, which smears every 1px line across two device\n // pixels and steps its curves. Capped at 2: the field repaints every frame,\n // and a 3x phone would push half as many pixels again for no visible gain.\n // Capped again by `MAX_CANVAS_PIXELS`, never below 1.\n const area = width * height;\n const budget = area > 0 ? Math.sqrt(MAX_CANVAS_PIXELS / area) : 2;\n const ratio = Math.max(1, Math.min(window.devicePixelRatio || 1, 2, budget));\n if (width === this.box.width && height === this.box.height && ratio === this.ratio) return false;\n\n this.box = { width, height };\n this.ratio = ratio;\n this.hasBox.set(width > 0 && height > 0);\n const canvas = this.canvasRef().nativeElement;\n canvas.width = Math.round(width * ratio);\n canvas.height = Math.round(height * ratio);\n // Resizing the bitmap resets the context, transform included, so the scale\n // goes on afterwards. Every coordinate below stays in CSS pixels.\n this.ctx?.setTransform(ratio, 0, 0, ratio, 0, 0);\n return true;\n }\n\n private setLines(): void {\n const { width, height } = this.box;\n this.lines = [];\n const oWidth = width + 200;\n const oHeight = height + 30;\n const xGap = this.xGap();\n const yGap = this.yGap();\n const totalLines = Math.ceil(oWidth / xGap);\n const totalPoints = Math.ceil(oHeight / yGap);\n const xStart = (width - xGap * totalLines) / 2;\n const yStart = (height - yGap * totalPoints) / 2;\n for (let i = 0; i <= totalLines; i++) {\n const pts: WavePoint[] = [];\n for (let j = 0; j <= totalPoints; j++) {\n pts.push({\n x: xStart + xGap * i,\n y: yStart + yGap * j,\n wave: { x: 0, y: 0 },\n cursor: { x: 0, y: 0, vx: 0, vy: 0 },\n });\n }\n this.lines.push(pts);\n }\n }\n\n // Frame loop\n\n private tick(time: number): void {\n const mouse = this.mouse;\n mouse.sx += (mouse.x - mouse.sx) * 0.1;\n mouse.sy += (mouse.y - mouse.sy) * 0.1;\n const dx = mouse.x - mouse.lx;\n const dy = mouse.y - mouse.ly;\n const d = Math.hypot(dx, dy);\n mouse.v = d;\n mouse.vs += (d - mouse.vs) * 0.1;\n mouse.vs = Math.min(100, mouse.vs);\n mouse.lx = mouse.x;\n mouse.ly = mouse.y;\n mouse.a = Math.atan2(dy, dx);\n\n this.movePoints(time);\n this.drawLines();\n this.rafId = requestAnimationFrame(t => this.tick(t));\n }\n\n /** Put every point where the noise drifts it at `time`. */\n private drift(time: number): void {\n const waveSpeedX = this.waveSpeedX();\n const waveSpeedY = this.waveSpeedY();\n const waveAmpX = this.waveAmpX();\n const waveAmpY = this.waveAmpY();\n\n for (const pts of this.lines) {\n for (const p of pts) {\n const move = this.noise.perlin2((p.x + time * waveSpeedX) * 0.002, (p.y + time * waveSpeedY) * 0.0015) * 12;\n p.wave.x = Math.cos(move) * waveAmpX;\n p.wave.y = Math.sin(move) * waveAmpY;\n }\n }\n }\n\n private movePoints(time: number): void {\n this.drift(time);\n\n const mouse = this.mouse;\n const friction = this.friction();\n const tension = this.tension();\n const maxCursorMove = this.maxCursorMove();\n\n for (const pts of this.lines) {\n for (const p of pts) {\n const dx = p.x - mouse.sx;\n const dy = p.y - mouse.sy;\n const dist = Math.hypot(dx, dy);\n const l = Math.max(175, mouse.vs);\n if (dist < l) {\n const s = 1 - dist / l;\n const f = Math.cos(dist * 0.001) * s;\n p.cursor.vx += Math.cos(mouse.a) * f * l * mouse.vs * 0.00065;\n p.cursor.vy += Math.sin(mouse.a) * f * l * mouse.vs * 0.00065;\n }\n\n p.cursor.vx += (0 - p.cursor.x) * tension;\n p.cursor.vy += (0 - p.cursor.y) * tension;\n p.cursor.vx *= friction;\n p.cursor.vy *= friction;\n p.cursor.x += p.cursor.vx * 2;\n p.cursor.y += p.cursor.vy * 2;\n p.cursor.x = Math.min(maxCursorMove, Math.max(-maxCursorMove, p.cursor.x));\n p.cursor.y = Math.min(maxCursorMove, Math.max(-maxCursorMove, p.cursor.y));\n }\n }\n }\n\n private moved(point: WavePoint, withCursor: boolean): { x: number; y: number } {\n const x = point.x + point.wave.x + (withCursor ? point.cursor.x : 0);\n const y = point.y + point.wave.y + (withCursor ? point.cursor.y : 0);\n return { x: Math.round(x * 10) / 10, y: Math.round(y * 10) / 10 };\n }\n\n private drawLines(): void {\n const ctx = this.ctx;\n if (!ctx) return;\n // Retire the CSS stand-in: from here the canvas has real pixels. Set inside\n // the draw rather than at the end of `boot()` so it can never switch the\n // fallback off before something has actually been painted. Runs outside\n // Angular (the rAF loop does), so `signal.set` schedules the one host-binding\n // update it needs; every later call is a no-op on an unchanged value.\n if (!this.painted()) this.painted.set(true);\n const { width, height } = this.box;\n ctx.clearRect(0, 0, width, height);\n ctx.beginPath();\n ctx.strokeStyle = this.resolveLineColor();\n for (const points of this.lines) {\n // Both ends stay where the grid put them, as they did when each line was\n // a polyline; only the interior follows the pointer.\n const last = points.length - 1;\n const path = points.map((p, idx) => this.moved(p, idx > 0 && idx < last));\n // A curve through the MIDPOINTS, with each grid point as its control.\n // Joining the points themselves with `lineTo` put a corner at every one,\n // and at the default 32px pitch they read as a jagged line. Consecutive\n // curves share a tangent at the midpoint between them, so the line bends\n // without a kink anywhere and still passes near every point.\n ctx.moveTo(path[0].x, path[0].y);\n for (let i = 1; i < last; i++) {\n const p = path[i];\n const next = path[i + 1];\n ctx.quadraticCurveTo(p.x, p.y, (p.x + next.x) / 2, (p.y + next.y) / 2);\n }\n ctx.lineTo(path[last].x, path[last].y);\n }\n ctx.stroke();\n }\n\n /**\n * Explicit input wins; otherwise the theme's `--wr-waves-line-color`. Either\n * is resolved through the cascade before it reaches `strokeStyle`, which\n * reads neither a custom property nor the `light-dark()` the hook holds.\n * Called on every draw, so a colour-scheme change lands on the next frame.\n */\n private resolveLineColor(): string {\n const expression = (this.lineColor() ?? '').trim() || 'var(--wr-waves-line-color)';\n return resolveCssColor(this.canvasRef().nativeElement, expression, 'rgba(15, 23, 42, 0.12)');\n }\n\n private updateMouse(x: number, y: number): void {\n // Re-read the box each move — cheaper than tracking scroll, and the\n // host is usually a hero that rarely reflows mid-gesture. The rect is the\n // box as drawn, after any transform on the host or an ancestor, and the\n // grid is laid out in the box before them, so the pointer is scaled back.\n const rect = this.host.nativeElement.getBoundingClientRect();\n const mouse = this.mouse;\n mouse.x = (x - rect.left) * (rect.width > 0 ? this.box.width / rect.width : 1);\n mouse.y = (y - rect.top) * (rect.height > 0 ? this.box.height / rect.height : 1);\n if (!mouse.set) {\n mouse.sx = mouse.x;\n mouse.sy = mouse.y;\n mouse.lx = mouse.x;\n mouse.ly = mouse.y;\n mouse.set = true;\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAsCA,IAAM,OAAN,MAAU;CAEW;CACA;CAFnB,YACmB,GACA,GAAS;EADT,KAAA,IAAA;EACA,KAAA,IAAA;CAChB;CAEH,KAAK,GAAW,GAAS;EACvB,OAAO,KAAK,IAAI,IAAI,KAAK,IAAI;CAC/B;AACD;AAED,MAAM,QAAyB;CAC7B,IAAI,KAAK,GAAG,CAAC;CACb,IAAI,KAAK,IAAI,CAAC;CACd,IAAI,KAAK,GAAG,EAAE;CACd,IAAI,KAAK,IAAI,EAAE;CACf,IAAI,KAAK,GAAG,CAAC;CACb,IAAI,KAAK,IAAI,CAAC;CACd,IAAI,KAAK,GAAG,CAAC;CACb,IAAI,KAAK,IAAI,CAAC;CACd,IAAI,KAAK,GAAG,CAAC;CACb,IAAI,KAAK,GAAG,EAAE;CACd,IAAI,KAAK,GAAG,CAAC;CACb,IAAI,KAAK,GAAG,EAAE;AACf;AAGD,MAAM,IAAuB;CAC3B;CAAK;CAAK;CAAK;CAAI;CAAI;CAAI;CAAK;CAAI;CAAK;CAAI;CAAI;CAAI;CAAK;CAAK;CAAG;CAAK;CAAK;CAAI;CAAK;CAAI;CAAI;CAAK;CAAG;CAAI;CAAI;CAC7G;CAAI;CAAI;CAAI;CAAK;CAAG;CAAK;CAAK;CAAK;CAAK;CAAI;CAAG;CAAI;CAAK;CAAI;CAAI;CAAK;CAAK;CAAK;CAAK;CAAI;CAAI;CAAI;CAAI;CAAK;CAAI;CAC7G;CAAK;CAAK;CAAI;CAAI;CAAK;CAAI;CAAK;CAAK;CAAK;CAAK;CAAI;CAAK;CAAI;CAAK;CAAI;CAAK;CAAK;CAAI;CAAI;CAAK;CAAI;CAAK;CAAK;CAAK;CAC/G;CAAK;CAAK;CAAK;CAAI;CAAK;CAAK;CAAK;CAAK;CAAK;CAAI;CAAI;CAAI;CAAI;CAAK;CAAI;CAAK;CAAK;CAAK;CAAI;CAAI;CAAI;CAAI;CAAK;CAAG;CAC5G;CAAI;CAAI;CAAK;CAAI;CAAK;CAAK;CAAK;CAAI;CAAI;CAAK;CAAK;CAAK;CAAK;CAAK;CAAK;CAAK;CAAK;CAAI;CAAK;CAAK;CAAK;CAAK;CAAK;CAC7G;CAAG;CAAI;CAAI;CAAK;CAAK;CAAK;CAAK;CAAK;CAAG;CAAK;CAAI;CAAK;CAAK;CAAK;CAAK;CAAI;CAAI;CAAK;CAAK;CAAK;CAAI;CAAK;CAAI;CAAI;CAC5G;CAAI;CAAK;CAAK;CAAI;CAAI;CAAK;CAAK;CAAK;CAAK;CAAK;CAAK;CAAK;CAAG;CAAI;CAAK;CAAK;CAAI;CAAK;CAAK;CAAK;CAAK;CAAK;CAAI;CAAK;CAChH;CAAK;CAAI;CAAI;CAAK;CAAI;CAAI;CAAK;CAAK;CAAI;CAAK;CAAK;CAAK;CAAK;CAAK;CAAK;CAAK;CAAK;CAAK;CAAI;CAAK;CAAK;CAAI;CAAK;CAC5G;CAAK;CAAK;CAAK;CAAI;CAAK;CAAK;CAAK;CAAK;CAAI;CAAI;CAAK;CAAK;CAAK;CAAI;CAAK;CAAK;CAAI;CAAK;CAAK;CAAI;CAAK;CAAK;CAAK;CAC7G;CAAK;CAAI;CAAK;CAAK;CAAK;CAAK;CAAI;CAAI;CAAK;CAAG;CAAK;CAAK;CAAK;CAAK;CAAK;CAAI;CAAK;CAAK;CAAI;CAAI;CAAI;CAAI;CAAK;CAAK;CAC9G;CAAK;CAAI;CAAI;CAAK;CAAI;CAAK;AAC5B;AAED,IAAM,QAAN,MAAW;CACQ,OAAO,IAAI,MAAc,GAAG;CAC5B,QAAQ,IAAI,MAAY,GAAG;CAE5C,YAAY,MAAY;EACtB,IAAI,OAAO,KAAK,OAAO,GAAG,QAAQ;EAClC,OAAO,KAAK,MAAM,IAAI;EACtB,IAAI,OAAO,KAAK,QAAQ,QAAQ;EAChC,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,KAAK;GAC5B,MAAM,IAAI,IAAI,IAAI,EAAE,KAAM,OAAO,MAAO,EAAE,KAAO,QAAQ,IAAK;GAC9D,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,OAAO;GACpC,KAAK,MAAM,KAAK,KAAK,MAAM,IAAI,OAAO,MAAM,IAAI;EAClD;CACF;CAEQ,KAAK,GAAS;EACpB,OAAO,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM;CACzC;CAEQ,KAAK,GAAW,GAAW,GAAS;EAC1C,QAAQ,IAAI,KAAK,IAAI,IAAI;CAC3B;CAEA,QAAQ,GAAW,GAAS;EAC1B,IAAI,KAAK,KAAK,MAAM,CAAC;EACrB,IAAI,KAAK,KAAK,MAAM,CAAC;EACrB,KAAK;EACL,KAAK;EACL,MAAM;EACN,MAAM;EACN,MAAM,MAAM,KAAK,MAAM,KAAK,KAAK,KAAK,IAAI,CAAC,KAAK,GAAG,CAAC;EACpD,MAAM,MAAM,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC;EAC5D,MAAM,MAAM,KAAK,MAAM,KAAK,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC;EAC5D,MAAM,MAAM,KAAK,MAAM,KAAK,IAAI,KAAK,KAAK,KAAK,GAAG,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;EACpE,MAAM,IAAI,KAAK,KAAK,CAAC;EACrB,OAAO,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,CAAC,GAAG,KAAK,KAAK,KAAK,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC;CAC/E;AACD;AAoCD,MAAM,oBAAoB;AAgB1B,IAAa,UAAb,MAAa,QAAO;CAET,YAAY,MAAqB,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,YAAA,CAAA,+BAAA,CAAA,CAAA;CAGtC,kBAAkB,MAAM,eAAc,GAAA,YAAA,CAAA,EAAA,WAAA,kBAAA,CAAA,+BAAA,CAAA,CAAA;CAGtC,aAAa,MAAM,OAAM;EAAA,GAAA,YAAA,EAAA,WAAA,aAAA,+BAAA,CAAA;EAAI,WAAW,QAAQ,KAAM;CAAC,CAAA;CAGvD,aAAa,MAAM,MAAK;EAAA,GAAA,YAAA,EAAA,WAAA,aAAA,+BAAA,CAAA;EAAI,WAAW,QAAQ,IAAK;CAAC,CAAA;CAGrD,WAAW,MAAM,IAAE;EAAA,GAAA,YAAA,EAAA,WAAA,WAAA,+BAAA,CAAA;EAAI,WAAW,QAAQ,EAAE;CAAC,CAAA;CAG7C,WAAW,MAAM,IAAE;EAAA,GAAA,YAAA,EAAA,WAAA,WAAA,+BAAA,CAAA;EAAI,WAAW,QAAQ,EAAE;CAAC,CAAA;CAG7C,OAAO,MAAM,IAAE;EAAA,GAAA,YAAA,EAAA,WAAA,OAAA,+BAAA,CAAA;EAAI,WAAW,QAAQ,EAAE;CAAC,CAAA;CAGzC,OAAO,MAAM,IAAE;EAAA,GAAA,YAAA,EAAA,WAAA,OAAA,+BAAA,CAAA;EAAI,WAAW,QAAQ,EAAE;CAAC,CAAA;CAGzC,WAAW,MAAM,MAAK;EAAA,GAAA,YAAA,EAAA,WAAA,WAAA,+BAAA,CAAA;EAAI,WAAW,QAAQ,IAAK;CAAC,CAAA;CAGnD,UAAU,MAAM,MAAK;EAAA,GAAA,YAAA,EAAA,WAAA,UAAA,+BAAA,CAAA;EAAI,WAAW,QAAQ,IAAK;CAAC,CAAA;CAGlD,gBAAgB,MAAM,KAAG;EAAA,GAAA,YAAA,EAAA,WAAA,gBAAA,+BAAA,CAAA;EAAI,WAAW,QAAQ,GAAG;CAAC,CAAA;CAE5C,YAAY,UAAU,SAAwC,UAAS,GAAA,YAAA,CAAA,EAAA,WAAA,YAAA,CAAA,+BAAA,CAAA,CAAA;CAEvE,OAAO,OAAgC,UAAU;CACjD,OAAO,OAAO,MAAM;CACpB,aAAa,OAAO,UAAU;CAC9B,WAAW,OAAO,UAAU;CAC5B,YAAY,kBAAkB,OAAO,WAAW,CAAC;CAE1D,MAAuC;CAC9B,QAAQ,IAAI,MAAM,KAAK,OAAM,CAAE;CACxC,QAAuB,CAAA;CAEvB,MAAM;EAAE,OAAO;EAAG,QAAQ;CAAC;CAE3B,QAAQ;CACC,QAAQ;EAAE,GAAG;EAAK,GAAG;EAAG,IAAI;EAAG,IAAI;EAAG,IAAI;EAAG,IAAI;EAAG,GAAG;EAAG,IAAI;EAAG,GAAG;EAAG,KAAK;CAAK;CAC1F,QAAQ;CAWG,UAAU,OAAO,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CAGzB,SAAS,OAAO,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;CAMtB,SAAS,OAAO,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;CAEvC,cAAA;EACE,IAAI,CAAC,KAAK,WAAW;EAErB,sBAAsB,KAAK,KAAK,wBAAwB,KAAK,KAAI,CAAE,CAAC;EAIpE,aAAY;GACV,KAAK,KAAI;GACT,KAAK,KAAI;GACT,IAAI,CAAC,KAAK,KAAK;GACf,KAAK,SAAQ;GAMb,IAAI,KAAK,SAAS,qBAAoB,GAAI,KAAK,UAAS;EAC1D,CAAC;EAKD,uBAAsB;GACpB,IAAI,KAAK,OAAM,KAAM,KAAK,SAAS,qBAAoB,GAAI,KAAK,UAAS;EAC3E,CAAC;EAKD,QAAO,cAAY;GACjB,IAAI,CAAC,KAAK,OAAM,GAAI;GACpB,IAAI,KAAK,SAAS,qBAAoB,GAAI;IAIxC,KAAK,UAAS;IACd,gBAAe;KACb,KAAK,SAAQ;KACb,KAAK,UAAS;IAChB,CAAC;IACD;GACF;GACA,IAAI,CAAC,KAAK,OAAM,GAAI;GACpB,UAAU,KAAK,KAAK,wBAAwB,KAAK,QAAO,CAAE,CAAC;EAC7D,CAAC;CACH;CAIQ,OAAI;EACV,MAAM,SAAS,KAAK,UAAS,CAAE,CAAC;EAChC,KAAK,MAAM,OAAO,WAAW,IAAI;EACjC,IAAI,CAAC,KAAK,KAAK;EAOf,MAAM,SAAS,KAAK,KAAK;EACzB,KAAK,IAAI,OAAO,aAAa,OAAO,YAAY;EAChD,KAAK,SAAQ;EAKb,MAAM,iBAAuB,KAAK,OAAO,KAAK,IAAI,OAAO,KAAK,IAAI,MAAM;EACxE,OAAO,iBAAiB,UAAU,QAAQ;EAC1C,MAAM,KAAK,IAAI,gBAAe,YAAU;GACtC,MAAM,OAAO,QAAQ,QAAQ,SAAS,EAAE,EAAE;GAC1C,IAAI,MAAM,KAAK,OAAO,KAAK,OAAO,KAAK,MAAM;EAC/C,CAAC;EACD,GAAG,QAAQ,MAAM;EACjB,KAAK,WAAW,gBAAe;GAC7B,OAAO,oBAAoB,UAAU,QAAQ;GAC7C,GAAG,WAAU;EACf,CAAC;EACD,KAAK,OAAO,IAAI,IAAI;CACtB;CAGQ,UAAO;EACb,MAAM,eAAe,MAAwB,KAAK,YAAY,EAAE,SAAS,EAAE,OAAO;EAClF,MAAM,eAAe,MAAwB,KAAK,YAAY,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAC,OAAO;EAExG,OAAO,iBAAiB,aAAa,WAAW;EAChD,OAAO,iBAAiB,aAAa,aAAa,EAAE,SAAS,KAAI,CAAE;EAEnE,MAAM,YAAiB;GACrB,IAAI,KAAK,UAAU,GAAG,KAAK,QAAQ,uBAAsB,MAAK,KAAK,KAAK,CAAC,CAAC;EAC5E;EACA,MAAM,aAAkB;GACtB,qBAAqB,KAAK,KAAK;GAC/B,KAAK,QAAQ;EACf;EASA,MAAM,KACJ,OAAO,yBAAyB,cAC5B,OACA,IAAI,sBACF,YAAU;GACR,MAAM,EAAE,gBAAgB,sBAAsB,QAAQ,QAAQ,SAAS;GACvE,IAAI,kBAAkB,oBAAoB,GAAG,IAAG;QAC3C,KAAI;EACX,GACA,EAAE,WAAW,CAAC,GAAG,IAAI,EAAC,CAAE;EAEhC,IAAI,IAAI,GAAG,QAAQ,KAAK,KAAK,aAAa;OACrC,IAAG;EAER,aAAY;GACV,OAAO,oBAAoB,aAAa,WAAW;GACnD,OAAO,oBAAoB,aAAa,WAAW;GACnD,IAAI,WAAU;GACd,KAAI;EACN;CACF;CAGQ,OAAO,OAAe,QAAc;EAC1C,MAAM,QAAQ,UAAU,KAAK,IAAI,SAAS,WAAW,KAAK,IAAI;EAC9D,IAAI,CAAC,KAAK,IAAI,OAAO,MAAM,GAAG;EAC9B,IAAI,OAAO;GACT,KAAK,SAAQ;GAGb,IAAI,CAAC,KAAK,SAAS,qBAAoB,GAAI,KAAK,MAAM,YAAY,IAAG,CAAE;EACzE;EAIA,KAAK,UAAS;CAChB;CAOQ,IAAI,OAAe,QAAc;EAMvC,MAAM,OAAO,QAAQ;EACrB,MAAM,SAAS,OAAO,IAAI,KAAK,KAAK,oBAAoB,IAAI,IAAI;EAChE,MAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,OAAO,oBAAoB,GAAG,GAAG,MAAM,CAAC;EAC3E,IAAI,UAAU,KAAK,IAAI,SAAS,WAAW,KAAK,IAAI,UAAU,UAAU,KAAK,OAAO,OAAO;EAE3F,KAAK,MAAM;GAAE;GAAO;EAAM;EAC1B,KAAK,QAAQ;EACb,KAAK,OAAO,IAAI,QAAQ,KAAK,SAAS,CAAC;EACvC,MAAM,SAAS,KAAK,UAAS,CAAE,CAAC;EAChC,OAAO,QAAQ,KAAK,MAAM,QAAQ,KAAK;EACvC,OAAO,SAAS,KAAK,MAAM,SAAS,KAAK;EAGzC,KAAK,KAAK,aAAa,OAAO,GAAG,GAAG,OAAO,GAAG,CAAC;EAC/C,OAAO;CACT;CAEQ,WAAQ;EACd,MAAM,EAAE,OAAO,WAAW,KAAK;EAC/B,KAAK,QAAQ,CAAA;EACb,MAAM,SAAS,QAAQ;EACvB,MAAM,UAAU,SAAS;EACzB,MAAM,OAAO,KAAK,KAAI;EACtB,MAAM,OAAO,KAAK,KAAI;EACtB,MAAM,aAAa,KAAK,KAAK,SAAS,IAAI;EAC1C,MAAM,cAAc,KAAK,KAAK,UAAU,IAAI;EAC5C,MAAM,UAAU,QAAQ,OAAO,cAAc;EAC7C,MAAM,UAAU,SAAS,OAAO,eAAe;EAC/C,KAAK,IAAI,IAAI,GAAG,KAAK,YAAY,KAAK;GACpC,MAAM,MAAmB,CAAA;GACzB,KAAK,IAAI,IAAI,GAAG,KAAK,aAAa,KAChC,IAAI,KAAK;IACP,GAAG,SAAS,OAAO;IACnB,GAAG,SAAS,OAAO;IACnB,MAAM;KAAE,GAAG;KAAG,GAAG;IAAC;IAClB,QAAQ;KAAE,GAAG;KAAG,GAAG;KAAG,IAAI;KAAG,IAAI;IAAC;GACnC,CAAA;GAEH,KAAK,MAAM,KAAK,GAAG;EACrB;CACF;CAIQ,KAAK,MAAY;EACvB,MAAM,QAAQ,KAAK;EACnB,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM;EACnC,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM;EACnC,MAAM,KAAK,MAAM,IAAI,MAAM;EAC3B,MAAM,KAAK,MAAM,IAAI,MAAM;EAC3B,MAAM,IAAI,KAAK,MAAM,IAAI,EAAE;EAC3B,MAAM,IAAI;EACV,MAAM,OAAO,IAAI,MAAM,MAAM;EAC7B,MAAM,KAAK,KAAK,IAAI,KAAK,MAAM,EAAE;EACjC,MAAM,KAAK,MAAM;EACjB,MAAM,KAAK,MAAM;EACjB,MAAM,IAAI,KAAK,MAAM,IAAI,EAAE;EAE3B,KAAK,WAAW,IAAI;EACpB,KAAK,UAAS;EACd,KAAK,QAAQ,uBAAsB,MAAK,KAAK,KAAK,CAAC,CAAC;CACtD;CAGQ,MAAM,MAAY;EACxB,MAAM,aAAa,KAAK,WAAU;EAClC,MAAM,aAAa,KAAK,WAAU;EAClC,MAAM,WAAW,KAAK,SAAQ;EAC9B,MAAM,WAAW,KAAK,SAAQ;EAE9B,KAAK,MAAM,OAAO,KAAK,OACrB,KAAK,MAAM,KAAK,KAAK;GACnB,MAAM,OAAO,KAAK,MAAM,SAAS,EAAE,IAAI,OAAO,cAAc,OAAQ,EAAE,IAAI,OAAO,cAAc,KAAM,IAAI;GACzG,EAAE,KAAK,IAAI,KAAK,IAAI,IAAI,IAAI;GAC5B,EAAE,KAAK,IAAI,KAAK,IAAI,IAAI,IAAI;EAC9B;CAEJ;CAEQ,WAAW,MAAY;EAC7B,KAAK,MAAM,IAAI;EAEf,MAAM,QAAQ,KAAK;EACnB,MAAM,WAAW,KAAK,SAAQ;EAC9B,MAAM,UAAU,KAAK,QAAO;EAC5B,MAAM,gBAAgB,KAAK,cAAa;EAExC,KAAK,MAAM,OAAO,KAAK,OACrB,KAAK,MAAM,KAAK,KAAK;GACnB,MAAM,KAAK,EAAE,IAAI,MAAM;GACvB,MAAM,KAAK,EAAE,IAAI,MAAM;GACvB,MAAM,OAAO,KAAK,MAAM,IAAI,EAAE;GAC9B,MAAM,IAAI,KAAK,IAAI,KAAK,MAAM,EAAE;GAChC,IAAI,OAAO,GAAG;IACZ,MAAM,IAAI,IAAI,OAAO;IACrB,MAAM,IAAI,KAAK,IAAI,OAAO,IAAK,IAAI;IACnC,EAAE,OAAO,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,IAAI,IAAI,MAAM,KAAK;IACtD,EAAE,OAAO,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,IAAI,IAAI,MAAM,KAAK;GACxD;GAEA,EAAE,OAAO,OAAO,IAAI,EAAE,OAAO,KAAK;GAClC,EAAE,OAAO,OAAO,IAAI,EAAE,OAAO,KAAK;GAClC,EAAE,OAAO,MAAM;GACf,EAAE,OAAO,MAAM;GACf,EAAE,OAAO,KAAK,EAAE,OAAO,KAAK;GAC5B,EAAE,OAAO,KAAK,EAAE,OAAO,KAAK;GAC5B,EAAE,OAAO,IAAI,KAAK,IAAI,eAAe,KAAK,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;GACzE,EAAE,OAAO,IAAI,KAAK,IAAI,eAAe,KAAK,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;EAC3E;CAEJ;CAEQ,MAAM,OAAkB,YAAmB;EACjD,MAAM,IAAI,MAAM,IAAI,MAAM,KAAK,KAAK,aAAa,MAAM,OAAO,IAAI;EAClE,MAAM,IAAI,MAAM,IAAI,MAAM,KAAK,KAAK,aAAa,MAAM,OAAO,IAAI;EAClE,OAAO;GAAE,GAAG,KAAK,MAAM,IAAI,EAAE,IAAI;GAAI,GAAG,KAAK,MAAM,IAAI,EAAE,IAAI;EAAE;CACjE;CAEQ,YAAS;EACf,MAAM,MAAM,KAAK;EACjB,IAAI,CAAC,KAAK;EAMV,IAAI,CAAC,KAAK,QAAO,GAAI,KAAK,QAAQ,IAAI,IAAI;EAC1C,MAAM,EAAE,OAAO,WAAW,KAAK;EAC/B,IAAI,UAAU,GAAG,GAAG,OAAO,MAAM;EACjC,IAAI,UAAS;EACb,IAAI,cAAc,KAAK,iBAAgB;EACvC,KAAK,MAAM,UAAU,KAAK,OAAO;GAG/B,MAAM,OAAO,OAAO,SAAS;GAC7B,MAAM,OAAO,OAAO,KAAK,GAAG,QAAQ,KAAK,MAAM,GAAG,MAAM,KAAK,MAAM,IAAI,CAAC;GAMxE,IAAI,OAAO,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC;GAC/B,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,KAAK;IAC7B,MAAM,IAAI,KAAK;IACf,MAAM,OAAO,KAAK,IAAI;IACtB,IAAI,iBAAiB,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,KAAK,KAAK,IAAI,EAAE,IAAI,KAAK,KAAK,CAAC;GACvE;GACA,IAAI,OAAO,KAAK,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC;EACvC;EACA,IAAI,OAAM;CACZ;CAQQ,mBAAgB;EACtB,MAAM,cAAc,KAAK,UAAS,KAAM,GAAA,CAAI,KAAI,KAAM;EACtD,OAAO,gBAAgB,KAAK,UAAS,CAAE,CAAC,eAAe,YAAY,wBAAwB;CAC7F;CAEQ,YAAY,GAAW,GAAS;EAKtC,MAAM,OAAO,KAAK,KAAK,cAAc,sBAAqB;EAC1D,MAAM,QAAQ,KAAK;EACnB,MAAM,KAAK,IAAI,KAAK,SAAS,KAAK,QAAQ,IAAI,KAAK,IAAI,QAAQ,KAAK,QAAQ;EAC5E,MAAM,KAAK,IAAI,KAAK,QAAQ,KAAK,SAAS,IAAI,KAAK,IAAI,SAAS,KAAK,SAAS;EAC9E,IAAI,CAAC,MAAM,KAAK;GACd,MAAM,KAAK,MAAM;GACjB,MAAM,KAAK,MAAM;GACjB,MAAM,KAAK,MAAM;GACjB,MAAM,KAAK,MAAM;GACjB,MAAM,MAAM;EACd;CACF;CApZW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAO,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAP,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAO,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,WAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,iBAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,YAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,YAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,MAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,MAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,SAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,eAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,MAAA;GAAA,YAAA;IAAA,0BAAA;IAAA,6BAAA;IAAA,2BAAA;GAAA;GAAA,gBAAA;EAAA;EAAA,aAAA,CAAA;GAAA,cAAA;GAAA,OAAA;GAAA,WAAA,CAAA,QAAA;GAAA,aAAA;GAAA,UAAA;EAAA,CAAA;EAAA,UAAA;EAAA,UAZR;EAAuE,UAAA;EAAA,QAAA,CAAA,khBAAA;EAAA,eAAA,GAAA,kBAAA;CAAA,CAAA;;AAYtE,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAO,YAAA,CAAA;EAdnB,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAU,UACV;GAAuE,eAElE,kBAAkB;GAAI,MAC/B;IACJ,OAAO;IACP,4BAA4B;IAG5B,+BAA+B;IAC/B,6BAA6B;GAC9B;GAAA,QAAA,CAAA,khBAAA;EAAA,CAAA;CAoC8E,CAAA;CAAA,sBAAA,CAAA;CAAA,gBAAA;EAAA,WAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,iBAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,YAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,YAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,UAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,UAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,MAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,MAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,UAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,SAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,eAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,WAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,UAAQ,EAAA,UAAA,KAAA,CAAA;EAAA,CAAA;CAAA;AAAA,CAAA"}
|
|
@@ -20,7 +20,7 @@ var WrBreadcrumbs = class WrBreadcrumbs {
|
|
|
20
20
|
separatorValue = computed(() => `"${cssString(this.separator())}"`, ...ngDevMode ? [{ debugName: "separatorValue" }] : /* istanbul ignore next */ []);
|
|
21
21
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
22
22
|
minVersion: "12.0.0",
|
|
23
|
-
version: "22.2.
|
|
23
|
+
version: "22.2.4",
|
|
24
24
|
ngImport: i0,
|
|
25
25
|
type: WrBreadcrumbs,
|
|
26
26
|
deps: [],
|
|
@@ -28,7 +28,7 @@ var WrBreadcrumbs = class WrBreadcrumbs {
|
|
|
28
28
|
});
|
|
29
29
|
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
30
30
|
minVersion: "17.1.0",
|
|
31
|
-
version: "22.2.
|
|
31
|
+
version: "22.2.4",
|
|
32
32
|
type: WrBreadcrumbs,
|
|
33
33
|
isStandalone: true,
|
|
34
34
|
selector: "wr-breadcrumbs",
|
|
@@ -60,7 +60,7 @@ var WrBreadcrumbs = class WrBreadcrumbs {
|
|
|
60
60
|
};
|
|
61
61
|
i0.ɵɵngDeclareClassMetadata({
|
|
62
62
|
minVersion: "12.0.0",
|
|
63
|
-
version: "22.2.
|
|
63
|
+
version: "22.2.4",
|
|
64
64
|
ngImport: i0,
|
|
65
65
|
type: WrBreadcrumbs,
|
|
66
66
|
decorators: [{
|
|
@@ -111,7 +111,7 @@ var WrBreadcrumbsItem = class WrBreadcrumbsItem {
|
|
|
111
111
|
rootClass = computed(() => this.isLink() ? "wr-breadcrumbs__link" : "wr-breadcrumbs__current", ...ngDevMode ? [{ debugName: "rootClass" }] : /* istanbul ignore next */ []);
|
|
112
112
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
113
113
|
minVersion: "12.0.0",
|
|
114
|
-
version: "22.2.
|
|
114
|
+
version: "22.2.4",
|
|
115
115
|
ngImport: i0,
|
|
116
116
|
type: WrBreadcrumbsItem,
|
|
117
117
|
deps: [],
|
|
@@ -119,7 +119,7 @@ var WrBreadcrumbsItem = class WrBreadcrumbsItem {
|
|
|
119
119
|
});
|
|
120
120
|
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
121
121
|
minVersion: "17.0.0",
|
|
122
|
-
version: "22.2.
|
|
122
|
+
version: "22.2.4",
|
|
123
123
|
type: WrBreadcrumbsItem,
|
|
124
124
|
isStandalone: true,
|
|
125
125
|
selector: "wr-breadcrumbs-item",
|
|
@@ -201,7 +201,7 @@ var WrBreadcrumbsItem = class WrBreadcrumbsItem {
|
|
|
201
201
|
};
|
|
202
202
|
i0.ɵɵngDeclareClassMetadata({
|
|
203
203
|
minVersion: "12.0.0",
|
|
204
|
-
version: "22.2.
|
|
204
|
+
version: "22.2.4",
|
|
205
205
|
ngImport: i0,
|
|
206
206
|
type: WrBreadcrumbsItem,
|
|
207
207
|
decorators: [{
|
package/fesm2022/ngwr-burger.mjs
CHANGED
|
@@ -26,7 +26,7 @@ var WrBurger = class WrBurger {
|
|
|
26
26
|
}
|
|
27
27
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
28
28
|
minVersion: "12.0.0",
|
|
29
|
-
version: "22.2.
|
|
29
|
+
version: "22.2.4",
|
|
30
30
|
ngImport: i0,
|
|
31
31
|
type: WrBurger,
|
|
32
32
|
deps: [],
|
|
@@ -34,7 +34,7 @@ var WrBurger = class WrBurger {
|
|
|
34
34
|
});
|
|
35
35
|
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
36
36
|
minVersion: "17.1.0",
|
|
37
|
-
version: "22.2.
|
|
37
|
+
version: "22.2.4",
|
|
38
38
|
type: WrBurger,
|
|
39
39
|
isStandalone: true,
|
|
40
40
|
selector: "wr-burger",
|
|
@@ -70,7 +70,7 @@ var WrBurger = class WrBurger {
|
|
|
70
70
|
};
|
|
71
71
|
i0.ɵɵngDeclareClassMetadata({
|
|
72
72
|
minVersion: "12.0.0",
|
|
73
|
-
version: "22.2.
|
|
73
|
+
version: "22.2.4",
|
|
74
74
|
ngImport: i0,
|
|
75
75
|
type: WrBurger,
|
|
76
76
|
decorators: [{
|
package/fesm2022/ngwr-button.mjs
CHANGED
|
@@ -115,7 +115,7 @@ var WrButton = class WrButton {
|
|
|
115
115
|
}, ...ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []);
|
|
116
116
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
117
117
|
minVersion: "12.0.0",
|
|
118
|
-
version: "22.2.
|
|
118
|
+
version: "22.2.4",
|
|
119
119
|
ngImport: i0,
|
|
120
120
|
type: WrButton,
|
|
121
121
|
deps: [],
|
|
@@ -123,7 +123,7 @@ var WrButton = class WrButton {
|
|
|
123
123
|
});
|
|
124
124
|
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
125
125
|
minVersion: "17.0.0",
|
|
126
|
-
version: "22.2.
|
|
126
|
+
version: "22.2.4",
|
|
127
127
|
type: WrButton,
|
|
128
128
|
isStandalone: true,
|
|
129
129
|
selector: "wr-btn, button[wr-btn], a[wr-btn]",
|
|
@@ -232,7 +232,7 @@ var WrButton = class WrButton {
|
|
|
232
232
|
};
|
|
233
233
|
i0.ɵɵngDeclareClassMetadata({
|
|
234
234
|
minVersion: "12.0.0",
|
|
235
|
-
version: "22.2.
|
|
235
|
+
version: "22.2.4",
|
|
236
236
|
ngImport: i0,
|
|
237
237
|
type: WrButton,
|
|
238
238
|
decorators: [{
|
|
@@ -355,7 +355,7 @@ var WrButtonGroup = class WrButtonGroup {
|
|
|
355
355
|
}, ...ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []);
|
|
356
356
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
357
357
|
minVersion: "12.0.0",
|
|
358
|
-
version: "22.2.
|
|
358
|
+
version: "22.2.4",
|
|
359
359
|
ngImport: i0,
|
|
360
360
|
type: WrButtonGroup,
|
|
361
361
|
deps: [],
|
|
@@ -363,7 +363,7 @@ var WrButtonGroup = class WrButtonGroup {
|
|
|
363
363
|
});
|
|
364
364
|
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
365
365
|
minVersion: "17.1.0",
|
|
366
|
-
version: "22.2.
|
|
366
|
+
version: "22.2.4",
|
|
367
367
|
type: WrButtonGroup,
|
|
368
368
|
isStandalone: true,
|
|
369
369
|
selector: "wr-btn-group",
|
|
@@ -390,7 +390,7 @@ var WrButtonGroup = class WrButtonGroup {
|
|
|
390
390
|
};
|
|
391
391
|
i0.ɵɵngDeclareClassMetadata({
|
|
392
392
|
minVersion: "12.0.0",
|
|
393
|
-
version: "22.2.
|
|
393
|
+
version: "22.2.4",
|
|
394
394
|
ngImport: i0,
|
|
395
395
|
type: WrButtonGroup,
|
|
396
396
|
decorators: [{
|
|
@@ -454,7 +454,7 @@ var WrCalendar = class WrCalendar {
|
|
|
454
454
|
}
|
|
455
455
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
456
456
|
minVersion: "12.0.0",
|
|
457
|
-
version: "22.2.
|
|
457
|
+
version: "22.2.4",
|
|
458
458
|
ngImport: i0,
|
|
459
459
|
type: WrCalendar,
|
|
460
460
|
deps: [],
|
|
@@ -462,7 +462,7 @@ var WrCalendar = class WrCalendar {
|
|
|
462
462
|
});
|
|
463
463
|
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
464
464
|
minVersion: "17.0.0",
|
|
465
|
-
version: "22.2.
|
|
465
|
+
version: "22.2.4",
|
|
466
466
|
type: WrCalendar,
|
|
467
467
|
isStandalone: true,
|
|
468
468
|
selector: "wr-calendar",
|
|
@@ -539,7 +539,7 @@ var WrCalendar = class WrCalendar {
|
|
|
539
539
|
};
|
|
540
540
|
i0.ɵɵngDeclareClassMetadata({
|
|
541
541
|
minVersion: "12.0.0",
|
|
542
|
-
version: "22.2.
|
|
542
|
+
version: "22.2.4",
|
|
543
543
|
ngImport: i0,
|
|
544
544
|
type: WrCalendar,
|
|
545
545
|
decorators: [{
|
package/fesm2022/ngwr-card.mjs
CHANGED
|
@@ -34,7 +34,7 @@ var WrCard = class WrCard {
|
|
|
34
34
|
}, ...ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []);
|
|
35
35
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
36
36
|
minVersion: "12.0.0",
|
|
37
|
-
version: "22.2.
|
|
37
|
+
version: "22.2.4",
|
|
38
38
|
ngImport: i0,
|
|
39
39
|
type: WrCard,
|
|
40
40
|
deps: [],
|
|
@@ -42,7 +42,7 @@ var WrCard = class WrCard {
|
|
|
42
42
|
});
|
|
43
43
|
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
44
44
|
minVersion: "17.0.0",
|
|
45
|
-
version: "22.2.
|
|
45
|
+
version: "22.2.4",
|
|
46
46
|
type: WrCard,
|
|
47
47
|
isStandalone: true,
|
|
48
48
|
selector: "wr-card",
|
|
@@ -88,7 +88,7 @@ var WrCard = class WrCard {
|
|
|
88
88
|
};
|
|
89
89
|
i0.ɵɵngDeclareClassMetadata({
|
|
90
90
|
minVersion: "12.0.0",
|
|
91
|
-
version: "22.2.
|
|
91
|
+
version: "22.2.4",
|
|
92
92
|
ngImport: i0,
|
|
93
93
|
type: WrCard,
|
|
94
94
|
decorators: [{
|
|
@@ -142,7 +142,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
142
142
|
var WrCardHeader = class WrCardHeader {
|
|
143
143
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
144
144
|
minVersion: "12.0.0",
|
|
145
|
-
version: "22.2.
|
|
145
|
+
version: "22.2.4",
|
|
146
146
|
ngImport: i0,
|
|
147
147
|
type: WrCardHeader,
|
|
148
148
|
deps: [],
|
|
@@ -150,7 +150,7 @@ var WrCardHeader = class WrCardHeader {
|
|
|
150
150
|
});
|
|
151
151
|
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
152
152
|
minVersion: "14.0.0",
|
|
153
|
-
version: "22.2.
|
|
153
|
+
version: "22.2.4",
|
|
154
154
|
type: WrCardHeader,
|
|
155
155
|
isStandalone: true,
|
|
156
156
|
selector: "wr-card-header",
|
|
@@ -163,7 +163,7 @@ var WrCardHeader = class WrCardHeader {
|
|
|
163
163
|
};
|
|
164
164
|
i0.ɵɵngDeclareClassMetadata({
|
|
165
165
|
minVersion: "12.0.0",
|
|
166
|
-
version: "22.2.
|
|
166
|
+
version: "22.2.4",
|
|
167
167
|
ngImport: i0,
|
|
168
168
|
type: WrCardHeader,
|
|
169
169
|
decorators: [{
|
|
@@ -179,7 +179,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
179
179
|
var WrCardFooter = class WrCardFooter {
|
|
180
180
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
181
181
|
minVersion: "12.0.0",
|
|
182
|
-
version: "22.2.
|
|
182
|
+
version: "22.2.4",
|
|
183
183
|
ngImport: i0,
|
|
184
184
|
type: WrCardFooter,
|
|
185
185
|
deps: [],
|
|
@@ -187,7 +187,7 @@ var WrCardFooter = class WrCardFooter {
|
|
|
187
187
|
});
|
|
188
188
|
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
189
189
|
minVersion: "14.0.0",
|
|
190
|
-
version: "22.2.
|
|
190
|
+
version: "22.2.4",
|
|
191
191
|
type: WrCardFooter,
|
|
192
192
|
isStandalone: true,
|
|
193
193
|
selector: "wr-card-footer",
|
|
@@ -200,7 +200,7 @@ var WrCardFooter = class WrCardFooter {
|
|
|
200
200
|
};
|
|
201
201
|
i0.ɵɵngDeclareClassMetadata({
|
|
202
202
|
minVersion: "12.0.0",
|
|
203
|
-
version: "22.2.
|
|
203
|
+
version: "22.2.4",
|
|
204
204
|
ngImport: i0,
|
|
205
205
|
type: WrCardFooter,
|
|
206
206
|
decorators: [{
|