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