@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/esm/fancy.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem-fx v1.0.0-bernoulli (https://js.pacem.it)
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();
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem-fx v1.0.0-bernoulli (https://js.pacem.it)
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-bernoulli (https://js.pacem.it)
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;
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem-fx v1.0.0-bernoulli (https://js.pacem.it)
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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem-fx v1.0.0-bernoulli (https://js.pacem.it)
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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem-fx v1.0.0-bernoulli (https://js.pacem.it)
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
  */
package/dist/esm/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem-fx v1.0.0-bernoulli (https://js.pacem.it)
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
  */
package/dist/esm/list.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem-fx v1.0.0-bernoulli (https://js.pacem.it)
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-bernoulli (https://js.pacem.it)
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();
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem-fx v1.0.0-bernoulli (https://js.pacem.it)
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-bernoulli (https://js.pacem.it)
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-bernoulli",
28
+ "version": "1.0.0-binet",
28
29
  "author": {
29
30
  "name": "Pacem",
30
31
  "url": "https://pacem.it"
@@ -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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"}