@pacem/pacem-fx 1.0.0-bernoulli → 1.0.0-binet
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/dist/browser/pacem-fx.js +18 -1
- package/dist/browser/pacem-fx.js.map +1 -1
- package/dist/browser/pacem-fx.min.js +1 -2
- package/dist/bundle/pacem-fx.min.mjs +1 -1
- package/dist/bundle/pacem-fx.mjs +7 -1
- package/dist/bundle/pacem-fx.mjs.map +2 -2
- package/dist/docs/pacem-fx.json +3121 -0
- package/dist/esm/fancy.js +5 -1
- package/dist/esm/gradient.js +7 -1
- package/dist/esm/hero.js +4 -1
- package/dist/esm/index-components-fx.js +1 -1
- package/dist/esm/index-components.js +1 -1
- package/dist/esm/index-iife.js +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/list.js +2 -1
- package/dist/esm/pulse.js +2 -1
- package/dist/esm/ripple.js +2 -1
- package/dist/esm/types.js +2 -1
- package/package.json +2 -1
- package/typings/index.d.ts +33 -0
- package/dist/browser/pacem-fx.min.js.map +0 -1
package/dist/esm/fancy.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* @pacem/pacem-fx v1.0.0-
|
|
2
|
+
* @pacem/pacem-fx v1.0.0-binet (https://js.pacem.it)
|
|
3
3
|
* Pacem (https://pacem.it)
|
|
4
4
|
* Licensed under Apache-2.0
|
|
5
5
|
*/
|
|
@@ -15,15 +15,18 @@ import { PacemFxElement } from './types';
|
|
|
15
15
|
const FANCY_CSS = PCSS + "-fancy";
|
|
16
16
|
const FANCIFY_CSS = PCSS + "-fancify";
|
|
17
17
|
const DEFAULT_GAP = 20;
|
|
18
|
+
/** Reveals the `target` element's text content word by word, wrapping each word in an animated `<span>`. */
|
|
18
19
|
let PacemFxFancyElement = class PacemFxFancyElement extends PacemFxElement {
|
|
19
20
|
constructor() {
|
|
20
21
|
super(...arguments);
|
|
21
22
|
this._progress = .0;
|
|
22
23
|
this._started = false;
|
|
23
24
|
}
|
|
25
|
+
/** @readonly Gets the current show progress, as a number between `0` and `1`. */
|
|
24
26
|
get progress() {
|
|
25
27
|
return this._progress;
|
|
26
28
|
}
|
|
29
|
+
/** @readonly Gets whether the fancify animation has (fully) started. */
|
|
27
30
|
get started() {
|
|
28
31
|
return this._started;
|
|
29
32
|
}
|
|
@@ -72,6 +75,7 @@ let PacemFxFancyElement = class PacemFxFancyElement extends PacemFxElement {
|
|
|
72
75
|
}
|
|
73
76
|
this._textNodes = a;
|
|
74
77
|
}
|
|
78
|
+
/** Starts (or restarts) the fancify effect on the `target` element. */
|
|
75
79
|
start() {
|
|
76
80
|
if (!this.disabled) {
|
|
77
81
|
this._reset();
|
package/dist/esm/gradient.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* @pacem/pacem-fx v1.0.0-
|
|
2
|
+
* @pacem/pacem-fx v1.0.0-binet (https://js.pacem.it)
|
|
3
3
|
* Pacem (https://pacem.it)
|
|
4
4
|
* Licensed under Apache-2.0
|
|
5
5
|
*/
|
|
@@ -31,6 +31,7 @@ const SizeOrNumberConverter = {
|
|
|
31
31
|
function pctFormatter(v) {
|
|
32
32
|
return Math.round(v * 1000) / 10 + '%';
|
|
33
33
|
}
|
|
34
|
+
/** A single color stop within a `PacemFxGradientItemElement` (radial or linear gradient). */
|
|
34
35
|
let PacemFxGradientStopElement = class PacemFxGradientStopElement extends Components.PacemItemElement {
|
|
35
36
|
findContainer() {
|
|
36
37
|
return CustomElementUtils.findAncestor(this, i => i instanceof PacemFxGradientItemElement);
|
|
@@ -55,6 +56,7 @@ PacemFxGradientStopElement = __decorate([
|
|
|
55
56
|
CustomElement({ tagName: P + '-fx-gradient-stop' })
|
|
56
57
|
], PacemFxGradientStopElement);
|
|
57
58
|
export { PacemFxGradientStopElement };
|
|
59
|
+
/** Base class for gradient-shape elements (radial, linear, ...) hosting `PacemFxGradientStopElement` color stops and producing a CSS gradient string. */
|
|
58
60
|
export class PacemFxGradientItemElement extends Components.PacemCrossItemsContainerElement {
|
|
59
61
|
constructor() {
|
|
60
62
|
super(...arguments);
|
|
@@ -88,6 +90,7 @@ export class PacemFxGradientItemElement extends Components.PacemCrossItemsContai
|
|
|
88
90
|
_dispatchGradientChange() {
|
|
89
91
|
this.dispatchEvent(new GradientChangeEvent());
|
|
90
92
|
}
|
|
93
|
+
/** Builds the CSS color for a stop, applying the given opacity (if in the `0`-`1` range) on top of the base `color`. */
|
|
91
94
|
buildColor(color, opacity) {
|
|
92
95
|
if (opacity >= 0 && opacity <= 1) {
|
|
93
96
|
const clr = Colors.parse(color);
|
|
@@ -96,6 +99,7 @@ export class PacemFxGradientItemElement extends Components.PacemCrossItemsContai
|
|
|
96
99
|
return color;
|
|
97
100
|
}
|
|
98
101
|
}
|
|
102
|
+
/** Radial `<gradient>` shape, hosting one or more `PacemFxGradientStopElement` color stops. */
|
|
99
103
|
let PacemFxRadialGradientElement = class PacemFxRadialGradientElement extends PacemFxGradientItemElement {
|
|
100
104
|
doesPropertyTriggerGradientChange(prop) {
|
|
101
105
|
return ['shape', 'size', 'center', 'items', 'hide', 'disabled'].indexOf(prop) >= 0;
|
|
@@ -141,6 +145,7 @@ PacemFxRadialGradientElement = __decorate([
|
|
|
141
145
|
CustomElement({ tagName: P + '-fx-gradient-radial' })
|
|
142
146
|
], PacemFxRadialGradientElement);
|
|
143
147
|
export { PacemFxRadialGradientElement };
|
|
148
|
+
/** Linear `<gradient>` shape, hosting one or more `PacemFxGradientStopElement` color stops. */
|
|
144
149
|
let PacemFxLinearGradientElement = class PacemFxLinearGradientElement extends PacemFxGradientItemElement {
|
|
145
150
|
doesPropertyTriggerGradientChange(prop) {
|
|
146
151
|
return ['angle', 'items', 'hide', 'disabled'].indexOf(prop) >= 0;
|
|
@@ -169,6 +174,7 @@ PacemFxLinearGradientElement = __decorate([
|
|
|
169
174
|
CustomElement({ tagName: P + '-fx-gradient-linear' })
|
|
170
175
|
], PacemFxLinearGradientElement);
|
|
171
176
|
export { PacemFxLinearGradientElement };
|
|
177
|
+
/** Applies a combined CSS gradient (built from its `PacemFxGradientItemElement` children) as the `target` element's background fill or text color. */
|
|
172
178
|
let PacemFxGradientElement = class PacemFxGradientElement extends Components.PacemItemsContainerElement {
|
|
173
179
|
constructor() {
|
|
174
180
|
super(...arguments);
|
package/dist/esm/hero.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* @pacem/pacem-fx v1.0.0-
|
|
2
|
+
* @pacem/pacem-fx v1.0.0-binet (https://js.pacem.it)
|
|
3
3
|
* Pacem (https://pacem.it)
|
|
4
4
|
* Licensed under Apache-2.0
|
|
5
5
|
*/
|
|
@@ -25,6 +25,7 @@ const rectOrElementConverter = {
|
|
|
25
25
|
return PropertyConverters.Json.convert(attr);
|
|
26
26
|
}
|
|
27
27
|
};
|
|
28
|
+
/** Animates the `target` element (position and size) between a `from` and a `to` state, "hero"-transition style. */
|
|
28
29
|
let PacemFxHeroElement = class PacemFxHeroElement extends PacemFxElement {
|
|
29
30
|
propertyChangedCallback(name, old, val, first) {
|
|
30
31
|
super.propertyChangedCallback(name, old, val, first);
|
|
@@ -82,6 +83,7 @@ let PacemFxHeroElement = class PacemFxHeroElement extends PacemFxElement {
|
|
|
82
83
|
}
|
|
83
84
|
Utils.removeClass(tget, HERO_CSS);
|
|
84
85
|
}
|
|
86
|
+
/** Reverts the `target` element back to its original (`from`) state and returns a promise resolved once the transition completes. */
|
|
85
87
|
reset() {
|
|
86
88
|
//
|
|
87
89
|
if (Utils.isNull(this._originalState) || Utils.isNull(this._targetState)) {
|
|
@@ -93,6 +95,7 @@ let PacemFxHeroElement = class PacemFxHeroElement extends PacemFxElement {
|
|
|
93
95
|
this.dispatchEvent(new Event(HERO_OUT));
|
|
94
96
|
});
|
|
95
97
|
}
|
|
98
|
+
/** Starts the hero transition to the `to` state and returns a promise resolved once it completes. */
|
|
96
99
|
start() {
|
|
97
100
|
if (!this.disabled && !Utils.isNull(this.target)) {
|
|
98
101
|
let goal;
|
package/dist/esm/index-iife.js
CHANGED
package/dist/esm/index.js
CHANGED
package/dist/esm/list.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* @pacem/pacem-fx v1.0.0-
|
|
2
|
+
* @pacem/pacem-fx v1.0.0-binet (https://js.pacem.it)
|
|
3
3
|
* Pacem (https://pacem.it)
|
|
4
4
|
* Licensed under Apache-2.0
|
|
5
5
|
*/
|
|
@@ -13,6 +13,7 @@ import { CustomElement, P, PCSS, Utils } from '@pacem/pacem-core';
|
|
|
13
13
|
import { PacemFxElement } from './types';
|
|
14
14
|
//namespace Pacem.Components.Fx {
|
|
15
15
|
const CSS_CLASS = PCSS + '-fx-list';
|
|
16
|
+
/** Watches the `target` element's children and dispatches `itemadded`/`itemremoved` events as they are mutated, styling the target as an fx list. */
|
|
16
17
|
let PacemFxListElement = class PacemFxListElement extends PacemFxElement {
|
|
17
18
|
constructor() {
|
|
18
19
|
super(...arguments);
|
package/dist/esm/pulse.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* @pacem/pacem-fx v1.0.0-
|
|
2
|
+
* @pacem/pacem-fx v1.0.0-binet (https://js.pacem.it)
|
|
3
3
|
* Pacem (https://pacem.it)
|
|
4
4
|
* Licensed under Apache-2.0
|
|
5
5
|
*/
|
|
@@ -46,6 +46,7 @@ function ensureCssAnimation(id, args, rx = '0', ry = rx) {
|
|
|
46
46
|
}
|
|
47
47
|
return css;
|
|
48
48
|
}
|
|
49
|
+
/** Overlays the `target` element with a pulsing (expanding, fading) outline, tracking its position and size. */
|
|
49
50
|
let PacemFxPulseElement = class PacemFxPulseElement extends PacemFxElement {
|
|
50
51
|
constructor() {
|
|
51
52
|
super();
|
package/dist/esm/ripple.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* @pacem/pacem-fx v1.0.0-
|
|
2
|
+
* @pacem/pacem-fx v1.0.0-binet (https://js.pacem.it)
|
|
3
3
|
* Pacem (https://pacem.it)
|
|
4
4
|
* Licensed under Apache-2.0
|
|
5
5
|
*/
|
|
@@ -14,6 +14,7 @@ import { Point } from '@pacem/pacem-foundation';
|
|
|
14
14
|
import { PacemFxElement } from './types';
|
|
15
15
|
//namespace Pacem.Components.Fx {
|
|
16
16
|
const RIPPLE_CSS = "ripple";
|
|
17
|
+
/** Produces a Material-style ripple wave, centered on the pointer, on the `target` element's `mousedown`/`touchstart`. */
|
|
17
18
|
let PacemFxRippleElement = class PacemFxRippleElement extends PacemFxElement {
|
|
18
19
|
constructor() {
|
|
19
20
|
super(...arguments);
|
package/dist/esm/types.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* @pacem/pacem-fx v1.0.0-
|
|
2
|
+
* @pacem/pacem-fx v1.0.0-binet (https://js.pacem.it)
|
|
3
3
|
* Pacem (https://pacem.it)
|
|
4
4
|
* Licensed under Apache-2.0
|
|
5
5
|
*/
|
|
@@ -10,6 +10,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
10
10
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
11
11
|
};
|
|
12
12
|
import { Watch, PropertyConverters, PacemEventTarget } from '@pacem/pacem-core';
|
|
13
|
+
/** Base class for `fx` (visual-effect) custom elements: provides the `target` element the effect operates on. */
|
|
13
14
|
export class PacemFxElement extends PacemEventTarget {
|
|
14
15
|
}
|
|
15
16
|
__decorate([
|
package/package.json
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
"dist/browser/*.*",
|
|
5
5
|
"dist/bundle/*.*",
|
|
6
6
|
"dist/esm/*.*",
|
|
7
|
+
"dist/docs/*.*",
|
|
7
8
|
"typings/*.*",
|
|
8
9
|
"README.md",
|
|
9
10
|
"LICENSE",
|
|
@@ -24,7 +25,7 @@
|
|
|
24
25
|
"types": "./typings/index.d.ts"
|
|
25
26
|
}
|
|
26
27
|
},
|
|
27
|
-
"version": "1.0.0-
|
|
28
|
+
"version": "1.0.0-binet",
|
|
28
29
|
"author": {
|
|
29
30
|
"name": "Pacem",
|
|
30
31
|
"url": "https://pacem.it"
|
package/typings/index.d.ts
CHANGED
|
@@ -27,14 +27,18 @@ export declare namespace Fx {
|
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
+
/** Contract implemented by every `fx` element: exposes the `target` element the visual effect is applied to. */
|
|
30
31
|
declare interface PacemFx {
|
|
31
32
|
target: HTMLElement;
|
|
32
33
|
}
|
|
33
34
|
|
|
35
|
+
/** Base class for `fx` (visual-effect) custom elements: provides the `target` element the effect operates on. */
|
|
34
36
|
declare abstract class PacemFxElement extends PacemEventTarget implements PacemFx {
|
|
37
|
+
/** Gets or sets the element the visual effect is applied to. */
|
|
35
38
|
target: HTMLElement;
|
|
36
39
|
}
|
|
37
40
|
|
|
41
|
+
/** Reveals the `target` element's text content word by word, wrapping each word in an animated `<span>`. */
|
|
38
42
|
declare class PacemFxFancyElement extends PacemFxElement {
|
|
39
43
|
private _textNodes;
|
|
40
44
|
private _originalContent;
|
|
@@ -42,23 +46,32 @@ declare class PacemFxFancyElement extends PacemFxElement {
|
|
|
42
46
|
private _handle1;
|
|
43
47
|
private _progress;
|
|
44
48
|
private _started;
|
|
49
|
+
/** @readonly Gets the current show progress, as a number between `0` and `1`. */
|
|
45
50
|
get progress(): number;
|
|
51
|
+
/** @readonly Gets whether the fancify animation has (fully) started. */
|
|
46
52
|
get started(): boolean;
|
|
53
|
+
/** Gets or sets whether the `target` element's text should be fancified; toggling it on starts the effect, off resets it. */
|
|
47
54
|
fancify: boolean;
|
|
55
|
+
/** Gets or sets the delay, in milliseconds, before the first word is revealed. */
|
|
48
56
|
delay: number;
|
|
57
|
+
/** Gets or sets the delay, in milliseconds, between the reveal of consecutive words. */
|
|
49
58
|
gap: number;
|
|
50
59
|
propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
|
|
51
60
|
viewActivatedCallback(): void;
|
|
52
61
|
disconnectedCallback(): void;
|
|
53
62
|
private _reset;
|
|
54
63
|
private _parse;
|
|
64
|
+
/** Starts (or restarts) the fancify effect on the `target` element. */
|
|
55
65
|
start(): void;
|
|
56
66
|
private _startShow;
|
|
57
67
|
private _fancify;
|
|
58
68
|
}
|
|
59
69
|
|
|
70
|
+
/** Applies a combined CSS gradient (built from its `PacemFxGradientItemElement` children) as the `target` element's background fill or text color. */
|
|
60
71
|
declare class PacemFxGradientElement extends Components_2.PacemItemsContainerElement<PacemFxGradientItemElement> implements PacemFx {
|
|
72
|
+
/** Gets or sets the element the gradient is applied to. */
|
|
61
73
|
target: HTMLElement;
|
|
74
|
+
/** Gets or sets whether the gradient is applied as a `'fill'` background (default) or as `'text'` color. */
|
|
62
75
|
mode: 'fill' | 'text';
|
|
63
76
|
validate(item: PacemFxGradientItemElement): boolean;
|
|
64
77
|
register(item: PacemFxGradientItemElement): boolean;
|
|
@@ -70,6 +83,7 @@ declare class PacemFxGradientElement extends Components_2.PacemItemsContainerEle
|
|
|
70
83
|
private _buildGradient;
|
|
71
84
|
}
|
|
72
85
|
|
|
86
|
+
/** Base class for gradient-shape elements (radial, linear, ...) hosting `PacemFxGradientStopElement` color stops and producing a CSS gradient string. */
|
|
73
87
|
declare abstract class PacemFxGradientItemElement extends Components_2.PacemCrossItemsContainerElement<PacemFxGradientStopElement> {
|
|
74
88
|
validate(item: PacemFxGradientStopElement): boolean;
|
|
75
89
|
register(item: PacemFxGradientStopElement): boolean;
|
|
@@ -77,23 +91,35 @@ declare abstract class PacemFxGradientItemElement extends Components_2.PacemCros
|
|
|
77
91
|
propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
|
|
78
92
|
private _dispatchGradientChangeHandler;
|
|
79
93
|
private _dispatchGradientChange;
|
|
94
|
+
/** Gets whether a change of the given property must trigger a gradient rebuild. */
|
|
80
95
|
protected abstract doesPropertyTriggerGradientChange(prop: string): boolean;
|
|
96
|
+
/** Builds the CSS color for a stop, applying the given opacity (if in the `0`-`1` range) on top of the base `color`. */
|
|
81
97
|
protected buildColor(color: string, opacity?: number): string;
|
|
98
|
+
/** Builds the CSS `<gradient>` function (e.g. `radial-gradient(...)`) representing this element's current state. */
|
|
82
99
|
abstract buildGradient(): string;
|
|
83
100
|
}
|
|
84
101
|
|
|
102
|
+
/** A single color stop within a `PacemFxGradientItemElement` (radial or linear gradient). */
|
|
85
103
|
declare class PacemFxGradientStopElement extends Components_2.PacemItemElement {
|
|
104
|
+
/** Gets or sets the stop position, normalized between `0` and `1`. */
|
|
86
105
|
offset: number;
|
|
106
|
+
/** Gets or sets the stop color (any valid CSS color). */
|
|
87
107
|
color: string;
|
|
108
|
+
/** Gets or sets the stop opacity, between `0` and `1`. */
|
|
88
109
|
opacity: number;
|
|
89
110
|
findContainer(): any;
|
|
90
111
|
propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
|
|
91
112
|
}
|
|
92
113
|
|
|
114
|
+
/** Animates the `target` element (position and size) between a `from` and a `to` state, "hero"-transition style. */
|
|
93
115
|
declare class PacemFxHeroElement extends PacemFxElement {
|
|
116
|
+
/** Gets or sets whether the hero transition is active; toggling it on starts the effect, off reverts it. */
|
|
94
117
|
hero: boolean;
|
|
118
|
+
/** Gets or sets the target state (a `Rect`, or an `Element` whose bounds are used) the `target` element transitions to. */
|
|
95
119
|
to: Rect | Element;
|
|
120
|
+
/** Gets or sets the starting state (a `Rect`, or an `Element` whose bounds are used); defaults to the `target` element's current bounds. */
|
|
96
121
|
from: Rect | Element;
|
|
122
|
+
/** Gets or sets the transition duration, in milliseconds. */
|
|
97
123
|
duration: number;
|
|
98
124
|
propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
|
|
99
125
|
viewActivatedCallback(): void;
|
|
@@ -103,11 +129,14 @@ declare class PacemFxHeroElement extends PacemFxElement {
|
|
|
103
129
|
private _originalStyle;
|
|
104
130
|
private _computeFromState;
|
|
105
131
|
private _resetTarget;
|
|
132
|
+
/** Reverts the `target` element back to its original (`from`) state and returns a promise resolved once the transition completes. */
|
|
106
133
|
reset(): Promise<void>;
|
|
134
|
+
/** Starts the hero transition to the `to` state and returns a promise resolved once it completes. */
|
|
107
135
|
start(): Promise<void>;
|
|
108
136
|
private _animate;
|
|
109
137
|
}
|
|
110
138
|
|
|
139
|
+
/** Linear `<gradient>` shape, hosting one or more `PacemFxGradientStopElement` color stops. */
|
|
111
140
|
declare class PacemFxLinearGradientElement extends PacemFxGradientItemElement {
|
|
112
141
|
/** Angle in degrees. */
|
|
113
142
|
angle: number;
|
|
@@ -115,6 +144,7 @@ declare class PacemFxLinearGradientElement extends PacemFxGradientItemElement {
|
|
|
115
144
|
buildGradient(): string;
|
|
116
145
|
}
|
|
117
146
|
|
|
147
|
+
/** Watches the `target` element's children and dispatches `itemadded`/`itemremoved` events as they are mutated, styling the target as an fx list. */
|
|
118
148
|
declare class PacemFxListElement extends PacemFxElement {
|
|
119
149
|
private _observer;
|
|
120
150
|
viewActivatedCallback(): void;
|
|
@@ -125,6 +155,7 @@ declare class PacemFxListElement extends PacemFxElement {
|
|
|
125
155
|
private _setup;
|
|
126
156
|
}
|
|
127
157
|
|
|
158
|
+
/** Overlays the `target` element with a pulsing (expanding, fading) outline, tracking its position and size. */
|
|
128
159
|
declare class PacemFxPulseElement extends PacemFxElement {
|
|
129
160
|
#private;
|
|
130
161
|
constructor();
|
|
@@ -140,6 +171,7 @@ declare class PacemFxPulseElement extends PacemFxElement {
|
|
|
140
171
|
private _pulse;
|
|
141
172
|
}
|
|
142
173
|
|
|
174
|
+
/** Radial `<gradient>` shape, hosting one or more `PacemFxGradientStopElement` color stops. */
|
|
143
175
|
declare class PacemFxRadialGradientElement extends PacemFxGradientItemElement {
|
|
144
176
|
/** Either 'circle' or 'ellipse' (default). */
|
|
145
177
|
shape: 'circle' | 'ellipse';
|
|
@@ -151,6 +183,7 @@ declare class PacemFxRadialGradientElement extends PacemFxGradientItemElement {
|
|
|
151
183
|
buildGradient(): string;
|
|
152
184
|
}
|
|
153
185
|
|
|
186
|
+
/** Produces a Material-style ripple wave, centered on the pointer, on the `target` element's `mousedown`/`touchstart`. */
|
|
154
187
|
declare class PacemFxRippleElement extends PacemFxElement {
|
|
155
188
|
private _wave;
|
|
156
189
|
propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pacem-fx.min.js","sources":["../esm/types.js","../esm/ripple.js","../esm/pulse.js","../esm/hero.js","../esm/list.js","../esm/gradient.js","../esm/fancy.js","../esm/index-iife.js"],"sourcesContent":["var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Watch, PropertyConverters, PacemEventTarget } from '@pacem/pacem-core';\nexport class PacemFxElement extends PacemEventTarget {\n}\n__decorate([\n Watch({ converter: PropertyConverters.Element })\n], PacemFxElement.prototype, \"target\", void 0);\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, Defaults, P, ViewChild, Utils, PacemEventTarget } from '@pacem/pacem-core';\nimport { Point } from '@pacem/pacem-foundation';\nimport { PacemFxElement } from './types';\n//namespace Pacem.Components.Fx {\nconst RIPPLE_CSS = \"ripple\";\nlet PacemFxRippleElement = class PacemFxRippleElement extends PacemFxElement {\n constructor() {\n super(...arguments);\n this._lock = false;\n this._remove = false;\n this._rippleHandler = (e) => {\n if (this.disabled || (this.target instanceof PacemEventTarget && this.target.disabled)) {\n return;\n }\n if (e instanceof MouseEvent && e.button !== 0) {\n // only the 'main' (left) button click goes.\n return;\n }\n const rect = Utils.offset(this.target);\n const style = getComputedStyle(this.target);\n const css = this.style;\n css.top = rect.top + 'px';\n css.left = rect.left + 'px';\n css.width = rect.width + 'px';\n css.height = rect.height + 'px';\n css.borderRadius = style.borderRadius;\n const pointSrc = e.type === 'touchstart' ? e.touches[0] : e;\n const point = { x: pointSrc.pageX, y: pointSrc.pageY };\n const topLeft = { x: rect.left, y: rect.top }, topRight = { x: rect.left + rect.width, y: rect.top }, bottomLeft = { x: rect.left, y: rect.top + rect.height }, bottomRight = { x: topRight.x, y: bottomLeft.y };\n const radius = Math.max(Point.distance(point, topLeft), Point.distance(point, topRight), Point.distance(point, bottomRight), Point.distance(point, bottomLeft));\n const wave = this._wave;\n wave.style.left = (point.x - rect.left - radius) + 'px';\n wave.style.top = (point.y - rect.top - radius) + 'px';\n wave.style.width = wave.style.height = (2 * radius) + 'px';\n Utils.addAnimationEndCallback(wave, () => {\n this._lock = false;\n this._tryRemove();\n });\n this._lock = true;\n Utils.addClass(wave, 'ripple-go');\n };\n this._unrippleHandler = (e) => {\n this._remove = true;\n this._tryRemove();\n };\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n // target switch?\n if (name === 'target') {\n if (!Utils.isNull(old)) {\n this._reset(old);\n }\n if (!Utils.isNull(val)) {\n this._set(val);\n }\n }\n }\n viewActivatedCallback() {\n super.viewActivatedCallback();\n if (!Utils.isNull(this.target))\n this._set();\n }\n disconnectedCallback() {\n if (!Utils.isNull(this.target))\n this._reset();\n super.disconnectedCallback();\n }\n _tryRemove() {\n if (!this._lock && this._remove) {\n this._remove = false;\n Utils.removeClass(this._wave, 'ripple-go');\n }\n }\n _set(val = this.target) {\n val.addEventListener('mousedown', this._rippleHandler, false);\n val.addEventListener('touchstart', this._rippleHandler, false);\n val.addEventListener('touchend', this._unrippleHandler, false);\n val.addEventListener('mouseup', this._unrippleHandler, false);\n val.addEventListener('mousemove', this._unrippleHandler, false);\n }\n _reset(old = this.target) {\n old.removeEventListener('mousedown', this._rippleHandler, false);\n old.removeEventListener('touchstart', this._rippleHandler, false);\n old.removeEventListener('touchend', this._unrippleHandler, false);\n old.removeEventListener('mouseup', this._unrippleHandler, false);\n old.removeEventListener('mousemove', this._unrippleHandler, false);\n }\n};\n__decorate([\n ViewChild('.' + RIPPLE_CSS)\n], PacemFxRippleElement.prototype, \"_wave\", void 0);\nPacemFxRippleElement = __decorate([\n CustomElement({\n tagName: P + '-fx-ripple', shadow: Defaults.USE_SHADOW_ROOT,\n template: `<div class=\"${RIPPLE_CSS}\"></div>`\n })\n], PacemFxRippleElement);\nexport { PacemFxRippleElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, Defaults, P, PCSS, ViewChild, Utils, Components } from '@pacem/pacem-core';\nimport { PacemFxElement } from './types';\n//namespace Pacem.Components.Fx {\nconst PULSE_CSS = \"pulse\";\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nfunction buildAnimationName(id) {\n return `${PCSS}-fx-pulse-${id}`;\n}\nfunction ensureCssAnimation(id, args, rx = '0', ry = rx) {\n const selector = 'style#' + id;\n const existing = document.querySelector(selector);\n if (Utils.isNull(existing)) {\n const newStyle = document.createElement('style');\n newStyle.id = id;\n document.head.appendChild(newStyle);\n }\n const css = document.querySelector(selector);\n const w = args.width, h = args.height, dim = Math.max(w, h), x = .5 * (dim - w), y = .5 * (dim - h);\n css.sheet.insertRule(`@keyframes ${buildAnimationName(id)} {\r\n 0%{\r\n opacity: .25; stroke-thickness: 0; rx: ${rx}; ry: ${ry}; x: ${x}px; y: ${y}px; width: ${args.width}px; height: ${args.height}px;\r\n }\r\n 50%{\r\n width: ${args.width}px; height: ${args.height}px; transform: scale(1); stroke-width: 10px; rx: ${rx}; ry: ${ry}; opacity: .333; x: ${x}px; y: ${y}px; width: ${w}px; height: ${h}px;\r\n }\r\n 80%{\r\n stroke-width: 10px;\r\n }\r\n 100%{\r\n opacity: 0; rx: 50%; ry: 50%; transform: scale(2); stroke-width: 0; width: ${dim}px; height: ${dim}px; x: 0; y: 0\r\n }\r\n}`, 0);\n for (let j = css.sheet.rules.length - 1; j > 0; j--) {\n css.sheet.deleteRule(j);\n }\n return css;\n}\nlet PacemFxPulseElement = class PacemFxPulseElement extends PacemFxElement {\n constructor() {\n super();\n this._resizeHandler = (e) => {\n this._pulse(e.detail);\n };\n this.#key = Utils.uniqueCode();\n }\n #key;\n viewActivatedCallback() {\n super.viewActivatedCallback();\n this._pulse();\n }\n disconnectedCallback() {\n if (!Utils.isNull(this._sheet)) {\n this._sheet.remove();\n this._sheet = null;\n }\n super.disconnectedCallback();\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (name === 'disabled' && !first) {\n this._pulse();\n }\n }\n _pulse(size = this._resize.currentSize) {\n const inert = Utils.isNull(this.target) || Utils.isNull(size) || !(size.height > 0) || !(size.width > 0);\n this._resize.disabled = this.disabled;\n if (this.disabled || inert) {\n Utils.addClass(this, 'pulse-off');\n return;\n }\n Utils.removeClass(this, 'pulse-off');\n const rect = size;\n const style = getComputedStyle(this.target);\n const css = this.style;\n const dim = Math.max(rect.width, rect.height);\n css.width = dim + 'px';\n css.height = dim + 'px';\n css.top = (rect.top + .5 * (rect.height - dim)) + 'px';\n css.left = (rect.left + .5 * (rect.width - dim)) + 'px';\n const rect1 = this._rect1, rect2 = this._rect2;\n const css1 = rect1.style, css2 = rect2.style;\n this._sheet = ensureCssAnimation(this.#key, size, style.borderTopLeftRadius);\n const animationName = buildAnimationName(this.#key);\n css1.animation = css2.animation = `${animationName} both cubic-bezier(0.37, 0, 0.63, 1) 1.25s infinite`;\n css2.animationDelay = '.175s';\n }\n};\n__decorate([\n ViewChild(P + '-resize')\n], PacemFxPulseElement.prototype, \"_resize\", void 0);\n__decorate([\n ViewChild('svg')\n], PacemFxPulseElement.prototype, \"_svg\", void 0);\n__decorate([\n ViewChild('svg > rect[rect1]')\n], PacemFxPulseElement.prototype, \"_rect1\", void 0);\n__decorate([\n ViewChild('svg > rect[rect2]')\n], PacemFxPulseElement.prototype, \"_rect2\", void 0);\nPacemFxPulseElement = __decorate([\n CustomElement({\n tagName: P + '-fx-pulse', shadow: Defaults.USE_SHADOW_ROOT,\n template: `<${P}-resize target=\"{{ :host.target }}\" watch-position=\"true\" on-${Components.ResizeEventName}=\":host._resizeHandler($event)\"></${P}-resize>\r\n<svg class=\"${PULSE_CSS}\" xmlns=\"${SVG_NS}\">\r\n <rect rect1 /><rect rect2 />\r\n</svg>`\n })\n], PacemFxPulseElement);\nexport { PacemFxPulseElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, Watch, PropertyConverters, P, PCSS, Utils } from '@pacem/pacem-core';\nimport { PacemFxElement } from './types';\n//namespace Pacem.Components.Fx {\nconst HERO_CSS = PCSS + \"-hero\";\nconst TRANSITION = 200;\nconst HEROING_IN = \"entering\";\nconst HEROING_OUT = \"exiting\";\nconst HERO_IN = \"entered\";\nconst HERO_OUT = \"exited\";\nconst rectOrElementConverter = {\n convert: attr => {\n if (attr.trim().startsWith('#'))\n return PropertyConverters.Element.convert(attr);\n return PropertyConverters.Json.convert(attr);\n }\n};\nlet PacemFxHeroElement = class PacemFxHeroElement extends PacemFxElement {\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n // target switch?\n if (name === 'target' && !Utils.isNull(old)) {\n this._resetTarget(old);\n }\n // recompute back path (originalState)?\n if (name === 'from' && this.hero && !Utils.isNull(val)) {\n this._originalState = this._computeFromState();\n }\n // trigger\n if (name === 'hero' || name === 'target' || name === 'goal') {\n if (!Utils.isNull(this.target)) {\n if (this.hero) {\n this.start();\n }\n else {\n this.reset();\n }\n }\n }\n }\n viewActivatedCallback() {\n super.viewActivatedCallback();\n if (this.hero && !Utils.isNull(this.target))\n this.start();\n }\n disconnectedCallback() {\n if (!Utils.isNull(this.target))\n this.reset();\n super.disconnectedCallback();\n }\n _computeFromState() {\n const tget = this.target, offset = Utils.offset(tget);\n if (this.from instanceof Element) {\n let from = Utils.offset(this.from);\n return { x: from.left, y: from.top, width: from.width, height: from.height };\n }\n else {\n return { x: offset.left, y: offset.top, width: offset.width, height: offset.height };\n }\n }\n _resetTarget(tget = this.target) {\n // reset inline style options\n const style = tget.style;\n // reset position/size\n style.top = style.left = style.height = style.width = '';\n for (let j = 0; j < style.length; j++) {\n let prop = style.item(j);\n style[prop] = '';\n }\n for (let prop in this._originalStyle) {\n style[prop] = this._originalStyle[prop];\n }\n Utils.removeClass(tget, HERO_CSS);\n }\n reset() {\n //\n if (Utils.isNull(this._originalState) || Utils.isNull(this._targetState)) {\n return;\n }\n this.dispatchEvent(new Event(HEROING_OUT));\n return this._animate(this._targetState, this._originalState).then(() => {\n this._resetTarget();\n this.dispatchEvent(new Event(HERO_OUT));\n });\n }\n start() {\n if (!this.disabled && !Utils.isNull(this.target)) {\n let goal;\n if (this.to instanceof Element) {\n let to = Utils.offset(this.to);\n goal = { x: to.left, y: to.top, width: to.width, height: to.height };\n }\n else {\n goal = this.to;\n }\n const tget = this.target, wSize = Utils.windowSize, state = goal || { x: 0, y: 0, width: wSize.width, height: wSize.height }, style = tget.style;\n this._targetState = state;\n let start = this._originalState = this._computeFromState();\n // save inline style options\n this._originalStyle = {};\n for (let j = 0; j < style.length; j++) {\n let prop = style.item(j);\n this._originalStyle[prop] = style[prop];\n }\n //\n Utils.addClass(tget, HERO_CSS);\n this.dispatchEvent(new Event(HEROING_IN));\n return this._animate(start, state).then(() => {\n this.dispatchEvent(new Event(HERO_IN));\n });\n }\n // nothing to do\n return Promise.resolve();\n }\n _animate(from, to) {\n const tget = this.target, style = tget.style;\n // transformations to make target state look like original state\n // i.e. `target state` gets constrained to fit `original state`.\n const scaleX = from.width / to.width, scaleY = from.height / to.height, translateX = (from.x - to.x) + 'px', translateY = (from.y - to.y) + 'px';\n style.transformOrigin = '0 0';\n style.transition = 'none';\n // set final state\n style.transform = `translate(${translateX}, ${translateY}) scale(${scaleX}, ${scaleY})`;\n style.width = to.width + 'px';\n style.height = to.height + 'px';\n style.top = to.y + 'px';\n style.left = to.x + 'px';\n // hero-animate\n requestAnimationFrame(() => {\n let duration = this.duration || TRANSITION;\n style.transition = `transform cubic-bezier(0.445, 0.05, 0.55, 0.95) ${duration}ms, opacity ${duration}ms`;\n style.transform = `translate(0, 0) scale(1)`;\n });\n return Utils.waitForAnimationEnd(tget, TRANSITION + 10);\n // Utils.addAnimationEndCallback(tget, callback, TRANSITION + 10);\n }\n};\n__decorate([\n Watch({ converter: PropertyConverters.Boolean })\n], PacemFxHeroElement.prototype, \"hero\", void 0);\n__decorate([\n Watch({ converter: rectOrElementConverter, emit: false })\n], PacemFxHeroElement.prototype, \"to\", void 0);\n__decorate([\n Watch({ converter: rectOrElementConverter, emit: false })\n], PacemFxHeroElement.prototype, \"from\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.Number, emit: false })\n], PacemFxHeroElement.prototype, \"duration\", void 0);\nPacemFxHeroElement = __decorate([\n CustomElement({ tagName: P + '-fx-hero' })\n], PacemFxHeroElement);\nexport { PacemFxHeroElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, PCSS, Utils } from '@pacem/pacem-core';\nimport { PacemFxElement } from './types';\n//namespace Pacem.Components.Fx {\nconst CSS_CLASS = PCSS + '-fx-list';\nlet PacemFxListElement = class PacemFxListElement extends PacemFxElement {\n constructor() {\n super(...arguments);\n this._observed = (items) => {\n const children = Array.from(this.target.children);\n for (let item of items) {\n item.removedNodes.forEach(n => {\n if (n instanceof Element) {\n this.dispatchEvent(new CustomEvent('itemremoved', { detail: n }));\n }\n });\n item.addedNodes.forEach((n, j) => {\n if (n instanceof Element) {\n this.dispatchEvent(new CustomEvent('itemadded', { detail: { item: n, index: children.indexOf(n) } }));\n }\n });\n }\n };\n }\n viewActivatedCallback() {\n super.viewActivatedCallback();\n if (!Utils.isNull(this.target)) {\n this._setup();\n }\n }\n disconnectedCallback() {\n if (!Utils.isNull(this._observer)) {\n this._observer.disconnect();\n }\n super.disconnectedCallback();\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (name === 'target') {\n if (old) {\n this._reset(old);\n }\n else {\n this._setup();\n }\n }\n }\n _reset(el) {\n Utils.removeClass(el, CSS_CLASS);\n this._observer.disconnect();\n }\n _setup() {\n const target = this.target;\n Utils.addClass(target, CSS_CLASS);\n const obs = this._observer = new MutationObserver(this._observed);\n obs.observe(target, { childList: true });\n }\n};\nPacemFxListElement = __decorate([\n CustomElement({\n tagName: P + '-fx-list'\n })\n], PacemFxListElement);\nexport { PacemFxListElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, Watch, PropertyConverters, P, PCSS, Components, CustomElementUtils, Utils, Debounce } from '@pacem/pacem-core';\nimport { Size, Colors } from '@pacem/pacem-foundation';\n//namespace Pacem.Components.Fx {\nconst GradientChangeEventName = 'gradientchange';\nclass GradientChangeEvent extends Event {\n constructor() {\n super(GradientChangeEventName, { cancelable: false, bubbles: false });\n }\n}\nconst SizeOrNumberConverter = {\n convert: (attr, el) => {\n try {\n return Size.parse(attr);\n }\n catch {\n return PropertyConverters.Number.convert(attr, el);\n }\n }\n};\nfunction pctFormatter(v) {\n return Math.round(v * 1000) / 10 + '%';\n}\nlet PacemFxGradientStopElement = class PacemFxGradientStopElement extends Components.PacemItemElement {\n findContainer() {\n return CustomElementUtils.findAncestor(this, i => i instanceof PacemFxGradientItemElement);\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first && (name === 'offset' || name === 'color' || name === 'opacity' || name === 'disabled' || name === 'hide')) {\n this.dispatchEvent(new GradientChangeEvent());\n }\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemFxGradientStopElement.prototype, \"offset\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PacemFxGradientStopElement.prototype, \"color\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemFxGradientStopElement.prototype, \"opacity\", void 0);\nPacemFxGradientStopElement = __decorate([\n CustomElement({ tagName: P + '-fx-gradient-stop' })\n], PacemFxGradientStopElement);\nexport { PacemFxGradientStopElement };\nexport class PacemFxGradientItemElement extends Components.PacemCrossItemsContainerElement {\n constructor() {\n super(...arguments);\n this._dispatchGradientChangeHandler = (e) => {\n this._dispatchGradientChange();\n };\n }\n validate(item) {\n return item instanceof PacemFxGradientStopElement;\n }\n register(item) {\n const registered = super.register(item);\n if (registered) {\n item.addEventListener(GradientChangeEventName, this._dispatchGradientChangeHandler, false);\n }\n return registered;\n }\n unregister(item) {\n const unregistered = super.unregister(item);\n if (unregistered) {\n item.removeEventListener(GradientChangeEventName, this._dispatchGradientChangeHandler, false);\n }\n return unregistered;\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first && this.doesPropertyTriggerGradientChange(name)) {\n this._dispatchGradientChange();\n }\n }\n _dispatchGradientChange() {\n this.dispatchEvent(new GradientChangeEvent());\n }\n buildColor(color, opacity) {\n if (opacity >= 0 && opacity <= 1) {\n const clr = Colors.parse(color);\n return Colors.stringify(Utils.extend(clr, { a: opacity }));\n }\n return color;\n }\n}\nlet PacemFxRadialGradientElement = class PacemFxRadialGradientElement extends PacemFxGradientItemElement {\n doesPropertyTriggerGradientChange(prop) {\n return ['shape', 'size', 'center', 'items', 'hide', 'disabled'].indexOf(prop) >= 0;\n }\n buildGradient() {\n const items = this.items;\n if (Utils.isNullOrEmpty(items)) {\n return '';\n }\n const shape = this.shape === 'circle' ? 'circle' : 'ellipse';\n const center = this.center ?? { x: .5, y: .5 };\n const size = this.size;\n let dim = '';\n if (!Utils.isNullOrEmpty(size)) {\n if (typeof size === 'number') {\n dim = `${size}px`;\n }\n else {\n dim = `${pctFormatter(size.width / 2)} ${pctFormatter(size.height / 2)}`;\n }\n }\n let stops = [];\n for (let { offset, color, hide, disabled, opacity } of items) {\n if (hide || disabled) {\n continue;\n }\n const clr = this.buildColor(color, opacity);\n stops.push(`${clr} ${pctFormatter(offset)}`);\n }\n return `radial-gradient(${shape} ${dim} at ${pctFormatter(center.x)} ${pctFormatter(center.y)} in oklab, ${stops.join(', ')})`;\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PacemFxRadialGradientElement.prototype, \"shape\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Point })\n], PacemFxRadialGradientElement.prototype, \"center\", void 0);\n__decorate([\n Watch({ emit: false, converter: SizeOrNumberConverter })\n], PacemFxRadialGradientElement.prototype, \"size\", void 0);\nPacemFxRadialGradientElement = __decorate([\n CustomElement({ tagName: P + '-fx-gradient-radial' })\n], PacemFxRadialGradientElement);\nexport { PacemFxRadialGradientElement };\nlet PacemFxLinearGradientElement = class PacemFxLinearGradientElement extends PacemFxGradientItemElement {\n doesPropertyTriggerGradientChange(prop) {\n return ['angle', 'items', 'hide', 'disabled'].indexOf(prop) >= 0;\n }\n buildGradient() {\n const items = this.items;\n if (Utils.isNullOrEmpty(items)) {\n return '';\n }\n const angle = this.angle ?? 0;\n let stops = [];\n for (let { offset, color, hide, disabled, opacity } of items) {\n if (hide || disabled) {\n continue;\n }\n const clr = this.buildColor(color, opacity);\n stops.push(`${clr} ${pctFormatter(offset)}`);\n }\n return `linear-gradient(${angle}deg in oklab, ${stops.join(', ')})`;\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemFxLinearGradientElement.prototype, \"angle\", void 0);\nPacemFxLinearGradientElement = __decorate([\n CustomElement({ tagName: P + '-fx-gradient-linear' })\n], PacemFxLinearGradientElement);\nexport { PacemFxLinearGradientElement };\nlet PacemFxGradientElement = class PacemFxGradientElement extends Components.PacemItemsContainerElement {\n constructor() {\n super(...arguments);\n this._gradientChangeHandler = (e) => {\n this._buildGradient();\n };\n }\n validate(item) {\n return item instanceof PacemFxGradientItemElement;\n }\n register(item) {\n const registered = super.register(item);\n if (registered) {\n item.addEventListener(GradientChangeEventName, this._gradientChangeHandler, false);\n }\n return registered;\n }\n unregister(item) {\n const unregistered = super.unregister(item);\n if (unregistered) {\n item.removeEventListener(GradientChangeEventName, this._gradientChangeHandler, false);\n }\n return unregistered;\n }\n viewActivatedCallback() {\n super.viewActivatedCallback();\n this._buildGradient();\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'target':\n if (old) {\n this._removeGradient(old);\n }\n case 'mode':\n case 'disabled':\n this._buildGradient();\n break;\n }\n }\n }\n _removeGradient(tget) {\n Utils.removeClass(tget, PCSS + '-fx-gradient-text');\n Utils.removeClass(tget, PCSS + '-fx-gradient-fill');\n tget.style.backgroundImage = '';\n }\n _buildGradient() {\n const tget = this.target;\n if (Utils.isNull(tget)) {\n return;\n }\n let gradients = '';\n const items = this.disabled ? [] : this.items ?? [];\n for (let item of items) {\n if (item.hide || item.disabled) {\n continue;\n }\n const gradient = item.buildGradient();\n if (Utils.isNullOrEmpty(gradient)) {\n continue;\n }\n gradients += gradient;\n if (!gradients.trim().endsWith(',')) {\n gradients += ',';\n }\n }\n if (!Utils.isNullOrEmpty(gradients)) {\n const t = PCSS + '-fx-gradient-text', f = PCSS + '-fx-gradient-fill';\n const ist = this.mode === 'text';\n Utils.removeClass(tget, ist ? f : t);\n Utils.addClass(tget, ist ? t : f);\n tget.style.backgroundImage = gradients.substring(0, gradients.length - 1);\n }\n else {\n this._removeGradient(tget);\n }\n }\n};\n__decorate([\n Watch({ converter: PropertyConverters.Element })\n], PacemFxGradientElement.prototype, \"target\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.String })\n], PacemFxGradientElement.prototype, \"mode\", void 0);\n__decorate([\n Debounce(true)\n], PacemFxGradientElement.prototype, \"_buildGradient\", null);\nPacemFxGradientElement = __decorate([\n CustomElement({ tagName: P + '-fx-gradient' })\n], PacemFxGradientElement);\nexport { PacemFxGradientElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, Watch, PropertyConverters, P, PCSS, Utils, PropertyChangeEvent } from '@pacem/pacem-core';\nimport { PacemFxElement } from './types';\n//namespace Pacem.Components.Fx {\nconst FANCY_CSS = PCSS + \"-fancy\";\nconst FANCIFY_CSS = PCSS + \"-fancify\";\nconst DEFAULT_GAP = 20;\nlet PacemFxFancyElement = class PacemFxFancyElement extends PacemFxElement {\n constructor() {\n super(...arguments);\n this._progress = .0;\n this._started = false;\n }\n get progress() {\n return this._progress;\n }\n get started() {\n return this._started;\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (name === 'fancify' || name === 'target') {\n if (!Utils.isNull(this.target)) {\n if (this.fancify) {\n this.start();\n }\n else {\n this._reset();\n }\n }\n }\n }\n viewActivatedCallback() {\n super.viewActivatedCallback();\n if (this.fancify && !Utils.isNull(this.target))\n this.start();\n }\n disconnectedCallback() {\n cancelAnimationFrame(this._handle);\n clearTimeout(this._handle1);\n if (!Utils.isNull(this.target))\n this._reset();\n super.disconnectedCallback();\n }\n _reset() {\n Utils.removeClass(this.target, FANCY_CSS);\n if (this._started) {\n this.dispatchEvent(new PropertyChangeEvent({ propertyName: 'started', oldValue: this._started, currentValue: this._started = false }));\n }\n this.dispatchEvent(new PropertyChangeEvent({ propertyName: 'progress', oldValue: this._progress, currentValue: this._progress = 0 }));\n if (Utils.isNull(this._originalContent))\n this._originalContent = this.target.innerHTML;\n else\n this.target.innerHTML = this._originalContent;\n }\n _parse() {\n let n, a = [], walker = document.createTreeWalker(this.target, NodeFilter.SHOW_TEXT);\n while (n = walker.nextNode()) {\n if (n.textContent) {\n a.push(n);\n }\n }\n this._textNodes = a;\n }\n start() {\n if (!this.disabled) {\n this._reset();\n this._parse();\n this._startShow();\n this._handle1 = setTimeout(() => {\n this.dispatchEvent(new PropertyChangeEvent({ propertyName: 'started', oldValue: this._started, currentValue: this._started = true }));\n }, this.delay || 0);\n }\n }\n _startShow(ndx = 0) {\n Utils.addClass(this.target, FANCY_CSS);\n const trunks = this._textNodes, length = trunks.length;\n this._fancify(trunks[ndx]);\n const old = this._progress;\n ndx++;\n const curr = this._progress = ndx / length;\n this.dispatchEvent(new PropertyChangeEvent({ propertyName: 'progress', oldValue: old, currentValue: curr }));\n if (ndx < length) {\n this._handle = requestAnimationFrame(() => {\n this._startShow(ndx);\n });\n }\n }\n _fancify(node) {\n const content = node.textContent;\n if (Utils.isNullOrEmpty(content) || !/[^\\s]/.test(content)) {\n return;\n }\n const leftPad = /^\\s/.test(content), rightPad = /\\s$/.test(content);\n node.textContent = '';\n //\n const words = content.trim().split(' '), gap = this.gap || DEFAULT_GAP, delay = this.delay || 0;\n let j = 0;\n for (let word of words) {\n var span = document.createElement('span');\n span.className = FANCIFY_CSS;\n span.style.animationDelay = `${(delay + j * gap)}ms`;\n if (leftPad || j > 0)\n node.parentElement.insertBefore(document.createTextNode(' '), node);\n span.textContent = word;\n node.parentElement.insertBefore(span, node);\n j++;\n }\n //\n if (rightPad)\n node.parentElement.insertBefore(document.createTextNode(' '), node);\n }\n};\n__decorate([\n Watch({ converter: PropertyConverters.Boolean })\n], PacemFxFancyElement.prototype, \"fancify\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.Number })\n], PacemFxFancyElement.prototype, \"delay\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.Number })\n], PacemFxFancyElement.prototype, \"gap\", void 0);\nPacemFxFancyElement = __decorate([\n CustomElement({ tagName: P + '-fx-fancy' })\n], PacemFxFancyElement);\nexport { PacemFxFancyElement };\n","import { DeepMerger } from '@pacem/pacem-foundation';\nimport * as Output from './index';\nDeepMerger.merge(Output);\n"],"names":["__decorate","decorators","target","key","desc","d","c","arguments","length","r","Object","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","PacemFxElement","PacemEventTarget","Watch","converter","PropertyConverters","Element","prototype","RIPPLE_CSS","PacemFxRippleElement","constructor","super","this","_lock","_remove","_rippleHandler","e","disabled","MouseEvent","button","rect","Utils","offset","style","getComputedStyle","css","top","left","width","height","borderRadius","pointSrc","type","touches","point","x","pageX","y","pageY","topLeft","topRight","bottomLeft","bottomRight","radius","Math","max","Point","distance","wave","_wave","addAnimationEndCallback","_tryRemove","addClass","_unrippleHandler","propertyChangedCallback","name","old","val","first","isNull","_reset","_set","viewActivatedCallback","disconnectedCallback","removeClass","addEventListener","removeEventListener","ViewChild","CustomElement","tagName","P","shadow","Defaults","USE_SHADOW_ROOT","template","buildAnimationName","id","PCSS","PacemFxPulseElement","_resizeHandler","_pulse","detail","uniqueCode","_sheet","remove","size","_resize","currentSize","inert","dim","rect1","_rect1","rect2","_rect2","css1","css2","args","rx","ry","selector","existing","document","querySelector","newStyle","createElement","head","appendChild","w","h","sheet","insertRule","j","rules","deleteRule","ensureCssAnimation","borderTopLeftRadius","animationName","animation","animationDelay","Components","ResizeEventName","HERO_CSS","rectOrElementConverter","convert","attr","trim","startsWith","Json","PacemFxHeroElement","_resetTarget","hero","_originalState","_computeFromState","start","reset","tget","from","prop","item","_originalStyle","_targetState","dispatchEvent","Event","_animate","then","goal","to","wSize","windowSize","state","Promise","resolve","scaleX","scaleY","translateX","translateY","transformOrigin","transition","transform","requestAnimationFrame","duration","waitForAnimationEnd","TRANSITION","Boolean","emit","Number","CSS_CLASS","PacemFxListElement","_observed","items","children","Array","removedNodes","forEach","n","CustomEvent","addedNodes","index","indexOf","_setup","_observer","disconnect","el","MutationObserver","observe","childList","GradientChangeEventName","GradientChangeEvent","cancelable","bubbles","SizeOrNumberConverter","Size","parse","pctFormatter","v","round","PacemFxGradientStopElement","PacemItemElement","findContainer","CustomElementUtils","findAncestor","PacemFxGradientItemElement","String","PacemCrossItemsContainerElement","_dispatchGradientChangeHandler","_dispatchGradientChange","validate","register","registered","unregister","unregistered","doesPropertyTriggerGradientChange","buildColor","color","opacity","clr","Colors","stringify","extend","a","PacemFxRadialGradientElement","buildGradient","isNullOrEmpty","shape","center","stops","hide","push","join","PacemFxLinearGradientElement","angle","PacemFxGradientElement","PacemItemsContainerElement","_gradientChangeHandler","_buildGradient","_removeGradient","backgroundImage","gradients","gradient","endsWith","t","f","ist","mode","substring","Debounce","FANCY_CSS","FANCIFY_CSS","PacemFxFancyElement","_progress","_started","progress","started","fancify","cancelAnimationFrame","_handle","clearTimeout","_handle1","PropertyChangeEvent","propertyName","oldValue","currentValue","_originalContent","innerHTML","_parse","walker","createTreeWalker","NodeFilter","SHOW_TEXT","nextNode","textContent","_textNodes","_startShow","setTimeout","delay","ndx","trunks","_fancify","curr","node","content","test","leftPad","rightPad","words","split","gap","word","span","className","parentElement","insertBefore","createTextNode","DeepMerger","merge","Output"],"mappings":"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"}
|