@pacem/pacem-fx 1.0.0-abel

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,850 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __export = (target, all) => {
3
+ for (var name in all)
4
+ __defProp(target, name, { get: all[name], enumerable: true });
5
+ };
6
+
7
+ // packages/fx/dist/esm/index-components.js
8
+ var index_components_exports = {};
9
+ __export(index_components_exports, {
10
+ Fx: () => index_components_fx_exports
11
+ });
12
+
13
+ // packages/fx/dist/esm/index-components-fx.js
14
+ var index_components_fx_exports = {};
15
+ __export(index_components_fx_exports, {
16
+ PacemFxElement: () => PacemFxElement,
17
+ PacemFxFancyElement: () => PacemFxFancyElement,
18
+ PacemFxGradientElement: () => PacemFxGradientElement,
19
+ PacemFxGradientItemElement: () => PacemFxGradientItemElement,
20
+ PacemFxGradientStopElement: () => PacemFxGradientStopElement,
21
+ PacemFxHeroElement: () => PacemFxHeroElement,
22
+ PacemFxLinearGradientElement: () => PacemFxLinearGradientElement,
23
+ PacemFxListElement: () => PacemFxListElement,
24
+ PacemFxPulseElement: () => PacemFxPulseElement,
25
+ PacemFxRadialGradientElement: () => PacemFxRadialGradientElement,
26
+ PacemFxRippleElement: () => PacemFxRippleElement
27
+ });
28
+
29
+ // packages/fx/dist/esm/types.js
30
+ import { Watch, PropertyConverters, PacemEventTarget } from "@pacem/pacem-core";
31
+ var __decorate = function(decorators, target, key, desc) {
32
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
33
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
34
+ 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;
35
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
36
+ };
37
+ var PacemFxElement = class extends PacemEventTarget {
38
+ };
39
+ __decorate([
40
+ Watch({ converter: PropertyConverters.Element })
41
+ ], PacemFxElement.prototype, "target", void 0);
42
+
43
+ // packages/fx/dist/esm/ripple.js
44
+ import { CustomElement, Defaults, P, ViewChild, Utils, PacemEventTarget as PacemEventTarget2 } from "@pacem/pacem-core";
45
+ import { Point } from "@pacem/pacem-foundation";
46
+ var __decorate2 = function(decorators, target, key, desc) {
47
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
48
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
49
+ 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;
50
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
51
+ };
52
+ var RIPPLE_CSS = "ripple";
53
+ var PacemFxRippleElement = class PacemFxRippleElement2 extends PacemFxElement {
54
+ constructor() {
55
+ super(...arguments);
56
+ this._lock = false;
57
+ this._remove = false;
58
+ this._rippleHandler = (e) => {
59
+ if (this.disabled || this.target instanceof PacemEventTarget2 && this.target.disabled) {
60
+ return;
61
+ }
62
+ if (e instanceof MouseEvent && e.button !== 0) {
63
+ return;
64
+ }
65
+ const rect = Utils.offset(this.target);
66
+ const style = getComputedStyle(this.target);
67
+ const css = this.style;
68
+ css.top = rect.top + "px";
69
+ css.left = rect.left + "px";
70
+ css.width = rect.width + "px";
71
+ css.height = rect.height + "px";
72
+ css.borderRadius = style.borderRadius;
73
+ const pointSrc = e.type === "touchstart" ? e.touches[0] : e;
74
+ const point = { x: pointSrc.pageX, y: pointSrc.pageY };
75
+ 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 };
76
+ const radius = Math.max(Point.distance(point, topLeft), Point.distance(point, topRight), Point.distance(point, bottomRight), Point.distance(point, bottomLeft));
77
+ const wave = this._wave;
78
+ wave.style.left = point.x - rect.left - radius + "px";
79
+ wave.style.top = point.y - rect.top - radius + "px";
80
+ wave.style.width = wave.style.height = 2 * radius + "px";
81
+ Utils.addAnimationEndCallback(wave, () => {
82
+ this._lock = false;
83
+ this._tryRemove();
84
+ });
85
+ this._lock = true;
86
+ Utils.addClass(wave, "ripple-go");
87
+ };
88
+ this._unrippleHandler = (e) => {
89
+ this._remove = true;
90
+ this._tryRemove();
91
+ };
92
+ }
93
+ propertyChangedCallback(name, old, val, first) {
94
+ super.propertyChangedCallback(name, old, val, first);
95
+ if (name === "target") {
96
+ if (!Utils.isNull(old)) {
97
+ this._reset(old);
98
+ }
99
+ if (!Utils.isNull(val)) {
100
+ this._set(val);
101
+ }
102
+ }
103
+ }
104
+ viewActivatedCallback() {
105
+ super.viewActivatedCallback();
106
+ if (!Utils.isNull(this.target))
107
+ this._set();
108
+ }
109
+ disconnectedCallback() {
110
+ if (!Utils.isNull(this.target))
111
+ this._reset();
112
+ super.disconnectedCallback();
113
+ }
114
+ _tryRemove() {
115
+ if (!this._lock && this._remove) {
116
+ this._remove = false;
117
+ Utils.removeClass(this._wave, "ripple-go");
118
+ }
119
+ }
120
+ _set(val = this.target) {
121
+ val.addEventListener("mousedown", this._rippleHandler, false);
122
+ val.addEventListener("touchstart", this._rippleHandler, false);
123
+ val.addEventListener("touchend", this._unrippleHandler, false);
124
+ val.addEventListener("mouseup", this._unrippleHandler, false);
125
+ val.addEventListener("mousemove", this._unrippleHandler, false);
126
+ }
127
+ _reset(old = this.target) {
128
+ old.removeEventListener("mousedown", this._rippleHandler, false);
129
+ old.removeEventListener("touchstart", this._rippleHandler, false);
130
+ old.removeEventListener("touchend", this._unrippleHandler, false);
131
+ old.removeEventListener("mouseup", this._unrippleHandler, false);
132
+ old.removeEventListener("mousemove", this._unrippleHandler, false);
133
+ }
134
+ };
135
+ __decorate2([
136
+ ViewChild("." + RIPPLE_CSS)
137
+ ], PacemFxRippleElement.prototype, "_wave", void 0);
138
+ PacemFxRippleElement = __decorate2([
139
+ CustomElement({
140
+ tagName: P + "-fx-ripple",
141
+ shadow: Defaults.USE_SHADOW_ROOT,
142
+ template: `<div class="${RIPPLE_CSS}"></div>`
143
+ })
144
+ ], PacemFxRippleElement);
145
+
146
+ // packages/fx/dist/esm/pulse.js
147
+ import { CustomElement as CustomElement2, Defaults as Defaults2, P as P2, PCSS, ViewChild as ViewChild2, Utils as Utils2, Components } from "@pacem/pacem-core";
148
+ var __decorate3 = function(decorators, target, key, desc) {
149
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
150
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
151
+ 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;
152
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
153
+ };
154
+ var PULSE_CSS = "pulse";
155
+ var SVG_NS = "http://www.w3.org/2000/svg";
156
+ function buildAnimationName(id) {
157
+ return `${PCSS}-fx-pulse-${id}`;
158
+ }
159
+ function ensureCssAnimation(id, args, rx = "0", ry = rx) {
160
+ const selector = "style#" + id;
161
+ const existing = document.querySelector(selector);
162
+ if (Utils2.isNull(existing)) {
163
+ const newStyle = document.createElement("style");
164
+ newStyle.id = id;
165
+ document.head.appendChild(newStyle);
166
+ }
167
+ const css = document.querySelector(selector);
168
+ const w = args.width, h = args.height, dim = Math.max(w, h), x = 0.5 * (dim - w), y = 0.5 * (dim - h);
169
+ css.sheet.insertRule(`@keyframes ${buildAnimationName(id)} {
170
+ 0%{
171
+ opacity: .25; stroke-thickness: 0; rx: ${rx}; ry: ${ry}; x: ${x}px; y: ${y}px; width: ${args.width}px; height: ${args.height}px;
172
+ }
173
+ 50%{
174
+ 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;
175
+ }
176
+ 80%{
177
+ stroke-width: 10px;
178
+ }
179
+ 100%{
180
+ opacity: 0; rx: 50%; ry: 50%; transform: scale(2); stroke-width: 0; width: ${dim}px; height: ${dim}px; x: 0; y: 0
181
+ }
182
+ }`, 0);
183
+ for (let j = css.sheet.rules.length - 1; j > 0; j--) {
184
+ css.sheet.deleteRule(j);
185
+ }
186
+ return css;
187
+ }
188
+ var PacemFxPulseElement = class PacemFxPulseElement2 extends PacemFxElement {
189
+ constructor() {
190
+ super();
191
+ this._resizeHandler = (e) => {
192
+ this._pulse(e.detail);
193
+ };
194
+ this.#key = Utils2.uniqueCode();
195
+ }
196
+ #key;
197
+ viewActivatedCallback() {
198
+ super.viewActivatedCallback();
199
+ this._pulse();
200
+ }
201
+ disconnectedCallback() {
202
+ if (!Utils2.isNull(this._sheet)) {
203
+ this._sheet.remove();
204
+ this._sheet = null;
205
+ }
206
+ super.disconnectedCallback();
207
+ }
208
+ propertyChangedCallback(name, old, val, first) {
209
+ super.propertyChangedCallback(name, old, val, first);
210
+ if (name === "disabled" && !first) {
211
+ this._pulse();
212
+ }
213
+ }
214
+ _pulse(size = this._resize.currentSize) {
215
+ const inert = Utils2.isNull(this.target) || Utils2.isNull(size) || !(size.height > 0) || !(size.width > 0);
216
+ this._resize.disabled = this.disabled;
217
+ if (this.disabled || inert) {
218
+ Utils2.addClass(this, "pulse-off");
219
+ return;
220
+ }
221
+ Utils2.removeClass(this, "pulse-off");
222
+ const rect = size;
223
+ const style = getComputedStyle(this.target);
224
+ const css = this.style;
225
+ const dim = Math.max(rect.width, rect.height);
226
+ css.width = dim + "px";
227
+ css.height = dim + "px";
228
+ css.top = rect.top + 0.5 * (rect.height - dim) + "px";
229
+ css.left = rect.left + 0.5 * (rect.width - dim) + "px";
230
+ const rect1 = this._rect1, rect2 = this._rect2;
231
+ const css1 = rect1.style, css2 = rect2.style;
232
+ this._sheet = ensureCssAnimation(this.#key, size, style.borderTopLeftRadius);
233
+ const animationName = buildAnimationName(this.#key);
234
+ css1.animation = css2.animation = `${animationName} both cubic-bezier(0.37, 0, 0.63, 1) 1.25s infinite`;
235
+ css2.animationDelay = ".175s";
236
+ }
237
+ };
238
+ __decorate3([
239
+ ViewChild2(P2 + "-resize")
240
+ ], PacemFxPulseElement.prototype, "_resize", void 0);
241
+ __decorate3([
242
+ ViewChild2("svg")
243
+ ], PacemFxPulseElement.prototype, "_svg", void 0);
244
+ __decorate3([
245
+ ViewChild2("svg > rect[rect1]")
246
+ ], PacemFxPulseElement.prototype, "_rect1", void 0);
247
+ __decorate3([
248
+ ViewChild2("svg > rect[rect2]")
249
+ ], PacemFxPulseElement.prototype, "_rect2", void 0);
250
+ PacemFxPulseElement = __decorate3([
251
+ CustomElement2({
252
+ tagName: P2 + "-fx-pulse",
253
+ shadow: Defaults2.USE_SHADOW_ROOT,
254
+ template: `<${P2}-resize target="{{ :host.target }}" watch-position="true" on-${Components.ResizeEventName}=":host._resizeHandler($event)"></${P2}-resize>
255
+ <svg class="${PULSE_CSS}" xmlns="${SVG_NS}">
256
+ <rect rect1 /><rect rect2 />
257
+ </svg>`
258
+ })
259
+ ], PacemFxPulseElement);
260
+
261
+ // packages/fx/dist/esm/hero.js
262
+ import { CustomElement as CustomElement3, Watch as Watch2, PropertyConverters as PropertyConverters2, P as P3, PCSS as PCSS2, Utils as Utils3 } from "@pacem/pacem-core";
263
+ var __decorate4 = function(decorators, target, key, desc) {
264
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
265
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
266
+ 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;
267
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
268
+ };
269
+ var HERO_CSS = PCSS2 + "-hero";
270
+ var TRANSITION = 200;
271
+ var HEROING_IN = "entering";
272
+ var HEROING_OUT = "exiting";
273
+ var HERO_IN = "entered";
274
+ var HERO_OUT = "exited";
275
+ var rectOrElementConverter = {
276
+ convert: (attr) => {
277
+ if (attr.trim().startsWith("#"))
278
+ return PropertyConverters2.Element.convert(attr);
279
+ return PropertyConverters2.Json.convert(attr);
280
+ }
281
+ };
282
+ var PacemFxHeroElement = class PacemFxHeroElement2 extends PacemFxElement {
283
+ propertyChangedCallback(name, old, val, first) {
284
+ super.propertyChangedCallback(name, old, val, first);
285
+ if (name === "target" && !Utils3.isNull(old)) {
286
+ this._resetTarget(old);
287
+ }
288
+ if (name === "from" && this.hero && !Utils3.isNull(val)) {
289
+ this._originalState = this._computeFromState();
290
+ }
291
+ if (name === "hero" || name === "target" || name === "goal") {
292
+ if (!Utils3.isNull(this.target)) {
293
+ if (this.hero) {
294
+ this.start();
295
+ } else {
296
+ this.reset();
297
+ }
298
+ }
299
+ }
300
+ }
301
+ viewActivatedCallback() {
302
+ super.viewActivatedCallback();
303
+ if (this.hero && !Utils3.isNull(this.target))
304
+ this.start();
305
+ }
306
+ disconnectedCallback() {
307
+ if (!Utils3.isNull(this.target))
308
+ this.reset();
309
+ super.disconnectedCallback();
310
+ }
311
+ _computeFromState() {
312
+ const tget = this.target, offset = Utils3.offset(tget);
313
+ if (this.from instanceof Element) {
314
+ let from = Utils3.offset(this.from);
315
+ return { x: from.left, y: from.top, width: from.width, height: from.height };
316
+ } else {
317
+ return { x: offset.left, y: offset.top, width: offset.width, height: offset.height };
318
+ }
319
+ }
320
+ _resetTarget(tget = this.target) {
321
+ const style = tget.style;
322
+ style.top = style.left = style.height = style.width = "";
323
+ for (let j = 0; j < style.length; j++) {
324
+ let prop = style.item(j);
325
+ style[prop] = "";
326
+ }
327
+ for (let prop in this._originalStyle) {
328
+ style[prop] = this._originalStyle[prop];
329
+ }
330
+ Utils3.removeClass(tget, HERO_CSS);
331
+ }
332
+ reset() {
333
+ if (Utils3.isNull(this._originalState) || Utils3.isNull(this._targetState)) {
334
+ return;
335
+ }
336
+ this.dispatchEvent(new Event(HEROING_OUT));
337
+ return this._animate(this._targetState, this._originalState).then(() => {
338
+ this._resetTarget();
339
+ this.dispatchEvent(new Event(HERO_OUT));
340
+ });
341
+ }
342
+ start() {
343
+ if (!this.disabled && !Utils3.isNull(this.target)) {
344
+ let goal;
345
+ if (this.to instanceof Element) {
346
+ let to = Utils3.offset(this.to);
347
+ goal = { x: to.left, y: to.top, width: to.width, height: to.height };
348
+ } else {
349
+ goal = this.to;
350
+ }
351
+ const tget = this.target, wSize = Utils3.windowSize, state = goal || { x: 0, y: 0, width: wSize.width, height: wSize.height }, style = tget.style;
352
+ this._targetState = state;
353
+ let start = this._originalState = this._computeFromState();
354
+ this._originalStyle = {};
355
+ for (let j = 0; j < style.length; j++) {
356
+ let prop = style.item(j);
357
+ this._originalStyle[prop] = style[prop];
358
+ }
359
+ Utils3.addClass(tget, HERO_CSS);
360
+ this.dispatchEvent(new Event(HEROING_IN));
361
+ return this._animate(start, state).then(() => {
362
+ this.dispatchEvent(new Event(HERO_IN));
363
+ });
364
+ }
365
+ return Promise.resolve();
366
+ }
367
+ _animate(from, to) {
368
+ const tget = this.target, style = tget.style;
369
+ const scaleX = from.width / to.width, scaleY = from.height / to.height, translateX = from.x - to.x + "px", translateY = from.y - to.y + "px";
370
+ style.transformOrigin = "0 0";
371
+ style.transition = "none";
372
+ style.transform = `translate(${translateX}, ${translateY}) scale(${scaleX}, ${scaleY})`;
373
+ style.width = to.width + "px";
374
+ style.height = to.height + "px";
375
+ style.top = to.y + "px";
376
+ style.left = to.x + "px";
377
+ requestAnimationFrame(() => {
378
+ let duration = this.duration || TRANSITION;
379
+ style.transition = `transform cubic-bezier(0.445, 0.05, 0.55, 0.95) ${duration}ms, opacity ${duration}ms`;
380
+ style.transform = `translate(0, 0) scale(1)`;
381
+ });
382
+ return Utils3.waitForAnimationEnd(tget, TRANSITION + 10);
383
+ }
384
+ };
385
+ __decorate4([
386
+ Watch2({ converter: PropertyConverters2.Boolean })
387
+ ], PacemFxHeroElement.prototype, "hero", void 0);
388
+ __decorate4([
389
+ Watch2({ converter: rectOrElementConverter, emit: false })
390
+ ], PacemFxHeroElement.prototype, "to", void 0);
391
+ __decorate4([
392
+ Watch2({ converter: rectOrElementConverter, emit: false })
393
+ ], PacemFxHeroElement.prototype, "from", void 0);
394
+ __decorate4([
395
+ Watch2({ converter: PropertyConverters2.Number, emit: false })
396
+ ], PacemFxHeroElement.prototype, "duration", void 0);
397
+ PacemFxHeroElement = __decorate4([
398
+ CustomElement3({ tagName: P3 + "-fx-hero" })
399
+ ], PacemFxHeroElement);
400
+
401
+ // packages/fx/dist/esm/list.js
402
+ import { CustomElement as CustomElement4, P as P4, PCSS as PCSS3, Utils as Utils4 } from "@pacem/pacem-core";
403
+ var __decorate5 = function(decorators, target, key, desc) {
404
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
405
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
406
+ 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;
407
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
408
+ };
409
+ var CSS_CLASS = PCSS3 + "-fx-list";
410
+ var PacemFxListElement = class PacemFxListElement2 extends PacemFxElement {
411
+ constructor() {
412
+ super(...arguments);
413
+ this._observed = (items) => {
414
+ const children = Array.from(this.target.children);
415
+ for (let item of items) {
416
+ item.removedNodes.forEach((n) => {
417
+ if (n instanceof Element) {
418
+ this.dispatchEvent(new CustomEvent("itemremoved", { detail: n }));
419
+ }
420
+ });
421
+ item.addedNodes.forEach((n, j) => {
422
+ if (n instanceof Element) {
423
+ this.dispatchEvent(new CustomEvent("itemadded", { detail: { item: n, index: children.indexOf(n) } }));
424
+ }
425
+ });
426
+ }
427
+ };
428
+ }
429
+ viewActivatedCallback() {
430
+ super.viewActivatedCallback();
431
+ if (!Utils4.isNull(this.target)) {
432
+ this._setup();
433
+ }
434
+ }
435
+ disconnectedCallback() {
436
+ if (!Utils4.isNull(this._observer)) {
437
+ this._observer.disconnect();
438
+ }
439
+ super.disconnectedCallback();
440
+ }
441
+ propertyChangedCallback(name, old, val, first) {
442
+ super.propertyChangedCallback(name, old, val, first);
443
+ if (name === "target") {
444
+ if (old) {
445
+ this._reset(old);
446
+ } else {
447
+ this._setup();
448
+ }
449
+ }
450
+ }
451
+ _reset(el) {
452
+ Utils4.removeClass(el, CSS_CLASS);
453
+ this._observer.disconnect();
454
+ }
455
+ _setup() {
456
+ const target = this.target;
457
+ Utils4.addClass(target, CSS_CLASS);
458
+ const obs = this._observer = new MutationObserver(this._observed);
459
+ obs.observe(target, { childList: true });
460
+ }
461
+ };
462
+ PacemFxListElement = __decorate5([
463
+ CustomElement4({
464
+ tagName: P4 + "-fx-list"
465
+ })
466
+ ], PacemFxListElement);
467
+
468
+ // packages/fx/dist/esm/gradient.js
469
+ import { CustomElement as CustomElement5, Watch as Watch3, PropertyConverters as PropertyConverters3, P as P5, PCSS as PCSS4, Components as Components2, CustomElementUtils, Utils as Utils5, Debounce } from "@pacem/pacem-core";
470
+ import { Size, Colors } from "@pacem/pacem-foundation";
471
+ var __decorate6 = function(decorators, target, key, desc) {
472
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
473
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
474
+ 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;
475
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
476
+ };
477
+ var GradientChangeEventName = "gradientchange";
478
+ var GradientChangeEvent = class extends Event {
479
+ constructor() {
480
+ super(GradientChangeEventName, { cancelable: false, bubbles: false });
481
+ }
482
+ };
483
+ var SizeOrNumberConverter = {
484
+ convert: (attr, el) => {
485
+ try {
486
+ return Size.parse(attr);
487
+ } catch {
488
+ return PropertyConverters3.Number.convert(attr, el);
489
+ }
490
+ }
491
+ };
492
+ function pctFormatter(v) {
493
+ return Math.round(v * 1e3) / 10 + "%";
494
+ }
495
+ var PacemFxGradientStopElement = class PacemFxGradientStopElement2 extends Components2.PacemItemElement {
496
+ findContainer() {
497
+ return CustomElementUtils.findAncestor(this, (i) => i instanceof PacemFxGradientItemElement);
498
+ }
499
+ propertyChangedCallback(name, old, val, first) {
500
+ super.propertyChangedCallback(name, old, val, first);
501
+ if (!first && (name === "offset" || name === "color" || name === "opacity" || name === "disabled" || name === "hide")) {
502
+ this.dispatchEvent(new GradientChangeEvent());
503
+ }
504
+ }
505
+ };
506
+ __decorate6([
507
+ Watch3({ emit: false, converter: PropertyConverters3.Number })
508
+ ], PacemFxGradientStopElement.prototype, "offset", void 0);
509
+ __decorate6([
510
+ Watch3({ emit: false, converter: PropertyConverters3.String })
511
+ ], PacemFxGradientStopElement.prototype, "color", void 0);
512
+ __decorate6([
513
+ Watch3({ emit: false, converter: PropertyConverters3.Number })
514
+ ], PacemFxGradientStopElement.prototype, "opacity", void 0);
515
+ PacemFxGradientStopElement = __decorate6([
516
+ CustomElement5({ tagName: P5 + "-fx-gradient-stop" })
517
+ ], PacemFxGradientStopElement);
518
+ var PacemFxGradientItemElement = class extends Components2.PacemCrossItemsContainerElement {
519
+ constructor() {
520
+ super(...arguments);
521
+ this._dispatchGradientChangeHandler = (e) => {
522
+ this._dispatchGradientChange();
523
+ };
524
+ }
525
+ validate(item) {
526
+ return item instanceof PacemFxGradientStopElement;
527
+ }
528
+ register(item) {
529
+ const registered = super.register(item);
530
+ if (registered) {
531
+ item.addEventListener(GradientChangeEventName, this._dispatchGradientChangeHandler, false);
532
+ }
533
+ return registered;
534
+ }
535
+ unregister(item) {
536
+ const unregistered = super.unregister(item);
537
+ if (unregistered) {
538
+ item.removeEventListener(GradientChangeEventName, this._dispatchGradientChangeHandler, false);
539
+ }
540
+ return unregistered;
541
+ }
542
+ propertyChangedCallback(name, old, val, first) {
543
+ super.propertyChangedCallback(name, old, val, first);
544
+ if (!first && this.doesPropertyTriggerGradientChange(name)) {
545
+ this._dispatchGradientChange();
546
+ }
547
+ }
548
+ _dispatchGradientChange() {
549
+ this.dispatchEvent(new GradientChangeEvent());
550
+ }
551
+ buildColor(color, opacity) {
552
+ if (opacity >= 0 && opacity <= 1) {
553
+ const clr = Colors.parse(color);
554
+ return Colors.stringify(Utils5.extend(clr, { a: opacity }));
555
+ }
556
+ return color;
557
+ }
558
+ };
559
+ var PacemFxRadialGradientElement = class PacemFxRadialGradientElement2 extends PacemFxGradientItemElement {
560
+ doesPropertyTriggerGradientChange(prop) {
561
+ return ["shape", "size", "center", "items", "hide", "disabled"].indexOf(prop) >= 0;
562
+ }
563
+ buildGradient() {
564
+ const items = this.items;
565
+ if (Utils5.isNullOrEmpty(items)) {
566
+ return "";
567
+ }
568
+ const shape = this.shape === "circle" ? "circle" : "ellipse";
569
+ const center = this.center ?? { x: 0.5, y: 0.5 };
570
+ const size = this.size;
571
+ let dim = "";
572
+ if (!Utils5.isNullOrEmpty(size)) {
573
+ if (typeof size === "number") {
574
+ dim = `${size}px`;
575
+ } else {
576
+ dim = `${pctFormatter(size.width / 2)} ${pctFormatter(size.height / 2)}`;
577
+ }
578
+ }
579
+ let stops = [];
580
+ for (let { offset, color, hide, disabled, opacity } of items) {
581
+ if (hide || disabled) {
582
+ continue;
583
+ }
584
+ const clr = this.buildColor(color, opacity);
585
+ stops.push(`${clr} ${pctFormatter(offset)}`);
586
+ }
587
+ return `radial-gradient(${shape} ${dim} at ${pctFormatter(center.x)} ${pctFormatter(center.y)} in oklab, ${stops.join(", ")})`;
588
+ }
589
+ };
590
+ __decorate6([
591
+ Watch3({ emit: false, converter: PropertyConverters3.String })
592
+ ], PacemFxRadialGradientElement.prototype, "shape", void 0);
593
+ __decorate6([
594
+ Watch3({ emit: false, converter: PropertyConverters3.Point })
595
+ ], PacemFxRadialGradientElement.prototype, "center", void 0);
596
+ __decorate6([
597
+ Watch3({ emit: false, converter: SizeOrNumberConverter })
598
+ ], PacemFxRadialGradientElement.prototype, "size", void 0);
599
+ PacemFxRadialGradientElement = __decorate6([
600
+ CustomElement5({ tagName: P5 + "-fx-gradient-radial" })
601
+ ], PacemFxRadialGradientElement);
602
+ var PacemFxLinearGradientElement = class PacemFxLinearGradientElement2 extends PacemFxGradientItemElement {
603
+ doesPropertyTriggerGradientChange(prop) {
604
+ return ["angle", "items", "hide", "disabled"].indexOf(prop) >= 0;
605
+ }
606
+ buildGradient() {
607
+ const items = this.items;
608
+ if (Utils5.isNullOrEmpty(items)) {
609
+ return "";
610
+ }
611
+ const angle = this.angle ?? 0;
612
+ let stops = [];
613
+ for (let { offset, color, hide, disabled, opacity } of items) {
614
+ if (hide || disabled) {
615
+ continue;
616
+ }
617
+ const clr = this.buildColor(color, opacity);
618
+ stops.push(`${clr} ${pctFormatter(offset)}`);
619
+ }
620
+ return `linear-gradient(${angle}deg in oklab, ${stops.join(", ")})`;
621
+ }
622
+ };
623
+ __decorate6([
624
+ Watch3({ emit: false, converter: PropertyConverters3.Number })
625
+ ], PacemFxLinearGradientElement.prototype, "angle", void 0);
626
+ PacemFxLinearGradientElement = __decorate6([
627
+ CustomElement5({ tagName: P5 + "-fx-gradient-linear" })
628
+ ], PacemFxLinearGradientElement);
629
+ var PacemFxGradientElement = class PacemFxGradientElement2 extends Components2.PacemItemsContainerElement {
630
+ constructor() {
631
+ super(...arguments);
632
+ this._gradientChangeHandler = (e) => {
633
+ this._buildGradient();
634
+ };
635
+ }
636
+ validate(item) {
637
+ return item instanceof PacemFxGradientItemElement;
638
+ }
639
+ register(item) {
640
+ const registered = super.register(item);
641
+ if (registered) {
642
+ item.addEventListener(GradientChangeEventName, this._gradientChangeHandler, false);
643
+ }
644
+ return registered;
645
+ }
646
+ unregister(item) {
647
+ const unregistered = super.unregister(item);
648
+ if (unregistered) {
649
+ item.removeEventListener(GradientChangeEventName, this._gradientChangeHandler, false);
650
+ }
651
+ return unregistered;
652
+ }
653
+ viewActivatedCallback() {
654
+ super.viewActivatedCallback();
655
+ this._buildGradient();
656
+ }
657
+ propertyChangedCallback(name, old, val, first) {
658
+ super.propertyChangedCallback(name, old, val, first);
659
+ if (!first) {
660
+ switch (name) {
661
+ case "target":
662
+ if (old) {
663
+ this._removeGradient(old);
664
+ }
665
+ case "mode":
666
+ case "disabled":
667
+ this._buildGradient();
668
+ break;
669
+ }
670
+ }
671
+ }
672
+ _removeGradient(tget) {
673
+ Utils5.removeClass(tget, PCSS4 + "-fx-gradient-text");
674
+ Utils5.removeClass(tget, PCSS4 + "-fx-gradient-fill");
675
+ tget.style.backgroundImage = "";
676
+ }
677
+ _buildGradient() {
678
+ const tget = this.target;
679
+ if (Utils5.isNull(tget)) {
680
+ return;
681
+ }
682
+ let gradients = "";
683
+ const items = this.disabled ? [] : this.items ?? [];
684
+ for (let item of items) {
685
+ if (item.hide || item.disabled) {
686
+ continue;
687
+ }
688
+ const gradient = item.buildGradient();
689
+ if (Utils5.isNullOrEmpty(gradient)) {
690
+ continue;
691
+ }
692
+ gradients += gradient;
693
+ if (!gradients.trim().endsWith(",")) {
694
+ gradients += ",";
695
+ }
696
+ }
697
+ if (!Utils5.isNullOrEmpty(gradients)) {
698
+ const t = PCSS4 + "-fx-gradient-text", f = PCSS4 + "-fx-gradient-fill";
699
+ const ist = this.mode === "text";
700
+ Utils5.removeClass(tget, ist ? f : t);
701
+ Utils5.addClass(tget, ist ? t : f);
702
+ tget.style.backgroundImage = gradients.substring(0, gradients.length - 1);
703
+ } else {
704
+ this._removeGradient(tget);
705
+ }
706
+ }
707
+ };
708
+ __decorate6([
709
+ Watch3({ converter: PropertyConverters3.Element })
710
+ ], PacemFxGradientElement.prototype, "target", void 0);
711
+ __decorate6([
712
+ Watch3({ converter: PropertyConverters3.String })
713
+ ], PacemFxGradientElement.prototype, "mode", void 0);
714
+ __decorate6([
715
+ Debounce(true)
716
+ ], PacemFxGradientElement.prototype, "_buildGradient", null);
717
+ PacemFxGradientElement = __decorate6([
718
+ CustomElement5({ tagName: P5 + "-fx-gradient" })
719
+ ], PacemFxGradientElement);
720
+
721
+ // packages/fx/dist/esm/fancy.js
722
+ import { CustomElement as CustomElement6, Watch as Watch4, PropertyConverters as PropertyConverters4, P as P6, PCSS as PCSS5, Utils as Utils6, PropertyChangeEvent } from "@pacem/pacem-core";
723
+ var __decorate7 = function(decorators, target, key, desc) {
724
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
725
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
726
+ 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;
727
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
728
+ };
729
+ var FANCY_CSS = PCSS5 + "-fancy";
730
+ var FANCIFY_CSS = PCSS5 + "-fancify";
731
+ var DEFAULT_GAP = 20;
732
+ var PacemFxFancyElement = class PacemFxFancyElement2 extends PacemFxElement {
733
+ constructor() {
734
+ super(...arguments);
735
+ this._progress = 0;
736
+ this._started = false;
737
+ }
738
+ get progress() {
739
+ return this._progress;
740
+ }
741
+ get started() {
742
+ return this._started;
743
+ }
744
+ propertyChangedCallback(name, old, val, first) {
745
+ super.propertyChangedCallback(name, old, val, first);
746
+ if (name === "fancify" || name === "target") {
747
+ if (!Utils6.isNull(this.target)) {
748
+ if (this.fancify) {
749
+ this.start();
750
+ } else {
751
+ this._reset();
752
+ }
753
+ }
754
+ }
755
+ }
756
+ viewActivatedCallback() {
757
+ super.viewActivatedCallback();
758
+ if (this.fancify && !Utils6.isNull(this.target))
759
+ this.start();
760
+ }
761
+ disconnectedCallback() {
762
+ cancelAnimationFrame(this._handle);
763
+ clearTimeout(this._handle1);
764
+ if (!Utils6.isNull(this.target))
765
+ this._reset();
766
+ super.disconnectedCallback();
767
+ }
768
+ _reset() {
769
+ Utils6.removeClass(this.target, FANCY_CSS);
770
+ if (this._started) {
771
+ this.dispatchEvent(new PropertyChangeEvent({ propertyName: "started", oldValue: this._started, currentValue: this._started = false }));
772
+ }
773
+ this.dispatchEvent(new PropertyChangeEvent({ propertyName: "progress", oldValue: this._progress, currentValue: this._progress = 0 }));
774
+ if (Utils6.isNull(this._originalContent))
775
+ this._originalContent = this.target.innerHTML;
776
+ else
777
+ this.target.innerHTML = this._originalContent;
778
+ }
779
+ _parse() {
780
+ let n, a = [], walker = document.createTreeWalker(this.target, NodeFilter.SHOW_TEXT);
781
+ while (n = walker.nextNode()) {
782
+ if (n.textContent) {
783
+ a.push(n);
784
+ }
785
+ }
786
+ this._textNodes = a;
787
+ }
788
+ start() {
789
+ if (!this.disabled) {
790
+ this._reset();
791
+ this._parse();
792
+ this._startShow();
793
+ this._handle1 = setTimeout(() => {
794
+ this.dispatchEvent(new PropertyChangeEvent({ propertyName: "started", oldValue: this._started, currentValue: this._started = true }));
795
+ }, this.delay || 0);
796
+ }
797
+ }
798
+ _startShow(ndx = 0) {
799
+ Utils6.addClass(this.target, FANCY_CSS);
800
+ const trunks = this._textNodes, length = trunks.length;
801
+ this._fancify(trunks[ndx]);
802
+ const old = this._progress;
803
+ ndx++;
804
+ const curr = this._progress = ndx / length;
805
+ this.dispatchEvent(new PropertyChangeEvent({ propertyName: "progress", oldValue: old, currentValue: curr }));
806
+ if (ndx < length) {
807
+ this._handle = requestAnimationFrame(() => {
808
+ this._startShow(ndx);
809
+ });
810
+ }
811
+ }
812
+ _fancify(node) {
813
+ const content = node.textContent;
814
+ if (Utils6.isNullOrEmpty(content) || !/[^\s]/.test(content)) {
815
+ return;
816
+ }
817
+ const leftPad = /^\s/.test(content), rightPad = /\s$/.test(content);
818
+ node.textContent = "";
819
+ const words = content.trim().split(" "), gap = this.gap || DEFAULT_GAP, delay = this.delay || 0;
820
+ let j = 0;
821
+ for (let word of words) {
822
+ var span = document.createElement("span");
823
+ span.className = FANCIFY_CSS;
824
+ span.style.animationDelay = `${delay + j * gap}ms`;
825
+ if (leftPad || j > 0)
826
+ node.parentElement.insertBefore(document.createTextNode(" "), node);
827
+ span.textContent = word;
828
+ node.parentElement.insertBefore(span, node);
829
+ j++;
830
+ }
831
+ if (rightPad)
832
+ node.parentElement.insertBefore(document.createTextNode(" "), node);
833
+ }
834
+ };
835
+ __decorate7([
836
+ Watch4({ converter: PropertyConverters4.Boolean })
837
+ ], PacemFxFancyElement.prototype, "fancify", void 0);
838
+ __decorate7([
839
+ Watch4({ converter: PropertyConverters4.Number })
840
+ ], PacemFxFancyElement.prototype, "delay", void 0);
841
+ __decorate7([
842
+ Watch4({ converter: PropertyConverters4.Number })
843
+ ], PacemFxFancyElement.prototype, "gap", void 0);
844
+ PacemFxFancyElement = __decorate7([
845
+ CustomElement6({ tagName: P6 + "-fx-fancy" })
846
+ ], PacemFxFancyElement);
847
+ export {
848
+ index_components_exports as Components
849
+ };
850
+ //# sourceMappingURL=pacem-fx.mjs.map