@ngstarter-ui/components 21.0.11 → 21.0.13
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/ai/component-registry.json +118 -2
- package/fesm2022/ngstarter-ui-components-button-toggle.mjs +19 -16
- package/fesm2022/ngstarter-ui-components-button-toggle.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-digit-roller.mjs +748 -0
- package/fesm2022/ngstarter-ui-components-digit-roller.mjs.map +1 -0
- package/fesm2022/ngstarter-ui-components-image-designer.mjs +1 -1
- package/fesm2022/ngstarter-ui-components-image-designer.mjs.map +1 -1
- package/package.json +5 -1
- package/types/ngstarter-ui-components-button-toggle.d.ts +23 -22
- package/types/ngstarter-ui-components-digit-roller.d.ts +143 -0
|
@@ -0,0 +1,748 @@
|
|
|
1
|
+
import { isPlatformBrowser } from '@angular/common';
|
|
2
|
+
import * as i0 from '@angular/core';
|
|
3
|
+
import { InjectionToken, input, output, signal, computed, inject, PLATFORM_ID, ElementRef, DestroyRef, effect, untracked, afterEveryRender, ChangeDetectionStrategy, ViewEncapsulation, Component, contentChildren, forwardRef, Directive } from '@angular/core';
|
|
4
|
+
|
|
5
|
+
let staticCapable;
|
|
6
|
+
let prefersReducedMotion;
|
|
7
|
+
function isStaticallyCapable() {
|
|
8
|
+
if (staticCapable !== undefined) {
|
|
9
|
+
return staticCapable;
|
|
10
|
+
}
|
|
11
|
+
staticCapable =
|
|
12
|
+
typeof window !== 'undefined' &&
|
|
13
|
+
typeof window.CSS !== 'undefined' &&
|
|
14
|
+
typeof window.Element !== 'undefined' &&
|
|
15
|
+
typeof window.Element.prototype.animate === 'function' &&
|
|
16
|
+
typeof window.CSS.registerProperty === 'function' &&
|
|
17
|
+
window.CSS.supports('width', 'calc(mod(2, 10) * 1px)') &&
|
|
18
|
+
supportsLinearEasing();
|
|
19
|
+
return staticCapable;
|
|
20
|
+
}
|
|
21
|
+
function getPrefersReducedMotion() {
|
|
22
|
+
if (prefersReducedMotion !== undefined) {
|
|
23
|
+
return prefersReducedMotion;
|
|
24
|
+
}
|
|
25
|
+
if (typeof window === 'undefined' || !window.matchMedia) {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
const mediaQuery = window.matchMedia('(prefers-reduced-motion: reduce)');
|
|
29
|
+
prefersReducedMotion = mediaQuery.matches;
|
|
30
|
+
if (typeof mediaQuery.addEventListener === 'function') {
|
|
31
|
+
mediaQuery.addEventListener('change', (event) => {
|
|
32
|
+
prefersReducedMotion = event.matches;
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
return prefersReducedMotion;
|
|
36
|
+
}
|
|
37
|
+
function resetDigitRollerCapabilityCache() {
|
|
38
|
+
staticCapable = undefined;
|
|
39
|
+
prefersReducedMotion = undefined;
|
|
40
|
+
}
|
|
41
|
+
function canAnimateDigitRoller(options = {}) {
|
|
42
|
+
if (!isStaticallyCapable()) {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
return options.respectMotionPreference === false || !getPrefersReducedMotion();
|
|
46
|
+
}
|
|
47
|
+
function supportsLinearEasing() {
|
|
48
|
+
try {
|
|
49
|
+
document.createElement('div').animate({ opacity: 0 }, { easing: 'linear(0, 1)' });
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const PRE_TYPES = new Set(['currency', 'literal', 'minusSign', 'plusSign', 'nan', 'infinity']);
|
|
58
|
+
const POST_TYPES = new Set(['percentSign', 'unit']);
|
|
59
|
+
const formatterCache = new Map();
|
|
60
|
+
function getCachedFormatter(locales, options) {
|
|
61
|
+
const key = JSON.stringify(locales) + ':' + JSON.stringify(options);
|
|
62
|
+
let formatter = formatterCache.get(key);
|
|
63
|
+
if (!formatter) {
|
|
64
|
+
formatter = new Intl.NumberFormat(locales, options);
|
|
65
|
+
formatterCache.set(key, formatter);
|
|
66
|
+
}
|
|
67
|
+
return formatter;
|
|
68
|
+
}
|
|
69
|
+
function getDigitRollerGlyphs(locales, options = {}) {
|
|
70
|
+
const formatter = getCachedFormatter(locales, {
|
|
71
|
+
numberingSystem: options.numberingSystem,
|
|
72
|
+
useGrouping: false,
|
|
73
|
+
maximumFractionDigits: 0,
|
|
74
|
+
});
|
|
75
|
+
return Array.from({ length: 10 }, (_, value) => ({
|
|
76
|
+
value,
|
|
77
|
+
glyph: formatter.format(value),
|
|
78
|
+
}));
|
|
79
|
+
}
|
|
80
|
+
function getDigitValueMap(locales, options = {}) {
|
|
81
|
+
return new Map(getDigitRollerGlyphs(locales, options).map(({ glyph, value }) => [glyph, value]));
|
|
82
|
+
}
|
|
83
|
+
function formatDigitRollerValue(value, options = {}, locales, prefix = '', suffix = '') {
|
|
84
|
+
const formatter = getCachedFormatter(locales, options);
|
|
85
|
+
const digitValues = getDigitValueMap(locales, options);
|
|
86
|
+
const parts = formatter.formatToParts(value);
|
|
87
|
+
const pre = [];
|
|
88
|
+
const rawInteger = [];
|
|
89
|
+
const fraction = [];
|
|
90
|
+
const post = [];
|
|
91
|
+
let seenInteger = false;
|
|
92
|
+
let seenDecimal = false;
|
|
93
|
+
for (const part of parts) {
|
|
94
|
+
if (part.type === 'integer' || part.type === 'group') {
|
|
95
|
+
seenInteger = true;
|
|
96
|
+
rawInteger.push(part);
|
|
97
|
+
}
|
|
98
|
+
else if (part.type === 'decimal' || part.type === 'fraction') {
|
|
99
|
+
seenDecimal = true;
|
|
100
|
+
fraction.push({ type: part.type, value: part.value, key: '' });
|
|
101
|
+
}
|
|
102
|
+
else if (!seenInteger && PRE_TYPES.has(part.type)) {
|
|
103
|
+
pre.push({ type: part.type, value: part.value, key: `pre-${pre.length}` });
|
|
104
|
+
}
|
|
105
|
+
else if (seenInteger && POST_TYPES.has(part.type)) {
|
|
106
|
+
post.push({ type: part.type, value: part.value, key: `post-${post.length}` });
|
|
107
|
+
}
|
|
108
|
+
else if (seenDecimal || seenInteger) {
|
|
109
|
+
post.push({ type: part.type, value: part.value, key: `post-${post.length}` });
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
pre.push({ type: part.type, value: part.value, key: `pre-${pre.length}` });
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
if (prefix) {
|
|
116
|
+
pre.unshift({ type: 'prefix', value: prefix, key: '__prefix' });
|
|
117
|
+
}
|
|
118
|
+
if (suffix) {
|
|
119
|
+
post.push({ type: 'suffix', value: suffix, key: '__suffix' });
|
|
120
|
+
}
|
|
121
|
+
const splitInteger = [];
|
|
122
|
+
for (const part of rawInteger) {
|
|
123
|
+
if (part.type === 'integer') {
|
|
124
|
+
for (const char of part.value) {
|
|
125
|
+
splitInteger.push({ type: 'integer', value: char });
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
splitInteger.push(part);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
let digitIndex = 0;
|
|
133
|
+
const reversedInteger = [];
|
|
134
|
+
for (let i = splitInteger.length - 1; i >= 0; i--) {
|
|
135
|
+
const part = splitInteger[i];
|
|
136
|
+
if (part.type === 'integer') {
|
|
137
|
+
reversedInteger.push({
|
|
138
|
+
type: 'integer',
|
|
139
|
+
value: part.value,
|
|
140
|
+
key: `i${digitIndex}`,
|
|
141
|
+
numericValue: digitValues.get(part.value) ?? Number(part.value),
|
|
142
|
+
});
|
|
143
|
+
digitIndex++;
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
reversedInteger.push({ type: 'group', value: part.value, key: `g${digitIndex}` });
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
let fractionDigitIndex = 0;
|
|
150
|
+
const keyedFraction = [];
|
|
151
|
+
for (const part of fraction) {
|
|
152
|
+
if (part.type === 'fraction') {
|
|
153
|
+
for (const char of part.value) {
|
|
154
|
+
keyedFraction.push({
|
|
155
|
+
type: 'fraction',
|
|
156
|
+
value: char,
|
|
157
|
+
key: `f${++fractionDigitIndex}`,
|
|
158
|
+
numericValue: digitValues.get(char) ?? Number(char),
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
keyedFraction.push({ ...part, key: 'decimal' });
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return { pre, integer: reversedInteger.reverse(), fraction: keyedFraction, post };
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
const DIGIT_ROLLER_GROUP = new InjectionToken('DIGIT_ROLLER_GROUP');
|
|
170
|
+
|
|
171
|
+
const DIGIT_ROLLER_EMPTY_FORMATTED = {
|
|
172
|
+
pre: [],
|
|
173
|
+
integer: [],
|
|
174
|
+
fraction: [],
|
|
175
|
+
post: [],
|
|
176
|
+
};
|
|
177
|
+
|
|
178
|
+
const SPIN_EASING = 'linear(0,.005,.019,.039,.066,.096,.129,.165,.202,.24,.278,.316,.354,.39,.426,.461,' +
|
|
179
|
+
'.494,.526,.557,.586,.614,.64,.665,.689,.711,.731,.751,.769,.786,.802,.817,.831,.844,' +
|
|
180
|
+
'.856,.867,.877,.887,.896,.904,.912,.919,.925,.931,.937,.942,.947,.951,.955,.959,.962,' +
|
|
181
|
+
'.965,.968,.971,.973,.976,.978,.98,.981,.983,.984,.986,.987,.988,.989,.99,.991,.992,' +
|
|
182
|
+
'.992,.993,.994,.994,.995,.995,.996,.996,.9963,.9967,.9969,.9972,.9975,.9977,.9979,' +
|
|
183
|
+
'.9981,.9982,.9984,.9985,.9987,.9988,.9989,1)';
|
|
184
|
+
const EASING_PRESETS = {
|
|
185
|
+
default: SPIN_EASING,
|
|
186
|
+
spring: SPIN_EASING,
|
|
187
|
+
overshoot: 'cubic-bezier(0.34, 1.56, 0.64, 1)',
|
|
188
|
+
};
|
|
189
|
+
class DigitRoller {
|
|
190
|
+
value = input.required(...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
191
|
+
format = input({}, ...(ngDevMode ? [{ debugName: "format" }] : /* istanbul ignore next */ []));
|
|
192
|
+
locales = input(undefined, ...(ngDevMode ? [{ debugName: "locales" }] : /* istanbul ignore next */ []));
|
|
193
|
+
prefix = input('', ...(ngDevMode ? [{ debugName: "prefix" }] : /* istanbul ignore next */ []));
|
|
194
|
+
suffix = input('', ...(ngDevMode ? [{ debugName: "suffix" }] : /* istanbul ignore next */ []));
|
|
195
|
+
animated = input(true, ...(ngDevMode ? [{ debugName: "animated" }] : /* istanbul ignore next */ []));
|
|
196
|
+
duration = input(undefined, ...(ngDevMode ? [{ debugName: "duration" }] : /* istanbul ignore next */ []));
|
|
197
|
+
opacityDuration = input(undefined, ...(ngDevMode ? [{ debugName: "opacityDuration" }] : /* istanbul ignore next */ []));
|
|
198
|
+
transformTiming = input(undefined, ...(ngDevMode ? [{ debugName: "transformTiming" }] : /* istanbul ignore next */ []));
|
|
199
|
+
spinTiming = input(undefined, ...(ngDevMode ? [{ debugName: "spinTiming" }] : /* istanbul ignore next */ []));
|
|
200
|
+
opacityTiming = input(undefined, ...(ngDevMode ? [{ debugName: "opacityTiming" }] : /* istanbul ignore next */ []));
|
|
201
|
+
spinEasing = input(undefined, ...(ngDevMode ? [{ debugName: "spinEasing" }] : /* istanbul ignore next */ []));
|
|
202
|
+
flipEasing = input(undefined, ...(ngDevMode ? [{ debugName: "flipEasing" }] : /* istanbul ignore next */ []));
|
|
203
|
+
trend = input(undefined, ...(ngDevMode ? [{ debugName: "trend" }] : /* istanbul ignore next */ []));
|
|
204
|
+
continuous = input(false, ...(ngDevMode ? [{ debugName: "continuous" }] : /* istanbul ignore next */ []));
|
|
205
|
+
digits = input({}, ...(ngDevMode ? [{ debugName: "digits" }] : /* istanbul ignore next */ []));
|
|
206
|
+
respectMotionPreference = input(true, ...(ngDevMode ? [{ debugName: "respectMotionPreference" }] : /* istanbul ignore next */ []));
|
|
207
|
+
stagger = input(0, ...(ngDevMode ? [{ debugName: "stagger" }] : /* istanbul ignore next */ []));
|
|
208
|
+
colorOnIncrease = input(undefined, ...(ngDevMode ? [{ debugName: "colorOnIncrease" }] : /* istanbul ignore next */ []));
|
|
209
|
+
colorOnDecrease = input(undefined, ...(ngDevMode ? [{ debugName: "colorOnDecrease" }] : /* istanbul ignore next */ []));
|
|
210
|
+
animationsStart = output();
|
|
211
|
+
animationsFinish = output();
|
|
212
|
+
data = signal(DIGIT_ROLLER_EMPTY_FORMATTED, ...(ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []));
|
|
213
|
+
digitGlyphs = computed(() => getDigitRollerGlyphs(this.locales(), this.format()), ...(ngDevMode ? [{ debugName: "digitGlyphs" }] : /* istanbul ignore next */ []));
|
|
214
|
+
formattedPlainText = computed(() => new Intl.NumberFormat(this.locales(), this.format()).format(this.value()), ...(ngDevMode ? [{ debugName: "formattedPlainText" }] : /* istanbul ignore next */ []));
|
|
215
|
+
effectiveSettings = computed(() => {
|
|
216
|
+
const duration = this.duration() ?? 900;
|
|
217
|
+
return {
|
|
218
|
+
duration,
|
|
219
|
+
opacityDuration: this.opacityDuration() ?? 450,
|
|
220
|
+
spinEasing: this.resolveEasing(this.spinEasing()),
|
|
221
|
+
flipEasing: this.resolveEasing(this.flipEasing()),
|
|
222
|
+
transformTiming: this.transformTiming(),
|
|
223
|
+
spinTiming: this.spinTiming(),
|
|
224
|
+
opacityTiming: this.opacityTiming(),
|
|
225
|
+
};
|
|
226
|
+
}, ...(ngDevMode ? [{ debugName: "effectiveSettings" }] : /* istanbul ignore next */ []));
|
|
227
|
+
platformId = inject(PLATFORM_ID);
|
|
228
|
+
elementRef = inject(ElementRef);
|
|
229
|
+
destroyRef = inject(DestroyRef);
|
|
230
|
+
group = inject(DIGIT_ROLLER_GROUP, { optional: true });
|
|
231
|
+
prevRects = new Map();
|
|
232
|
+
prevInnerHTML = new Map();
|
|
233
|
+
prevDigitD = new Map();
|
|
234
|
+
prevDigitCurrent = new Map();
|
|
235
|
+
prevDigitValues = new Map();
|
|
236
|
+
prevDigitOrder = [];
|
|
237
|
+
prevNumberLeft = 0;
|
|
238
|
+
prevNumberWidth = 0;
|
|
239
|
+
prevNumericValue = 0;
|
|
240
|
+
animCount = 0;
|
|
241
|
+
pending = false;
|
|
242
|
+
destroyed = false;
|
|
243
|
+
hasRenderedValue = false;
|
|
244
|
+
liveAnimations = [];
|
|
245
|
+
spinCount = new Map();
|
|
246
|
+
animationsFinishAbort;
|
|
247
|
+
pendingCanAnimate = false;
|
|
248
|
+
pendingHostFont = '';
|
|
249
|
+
pendingHostColor = '';
|
|
250
|
+
pendingKeyedEls = [];
|
|
251
|
+
pendingNumberRect = null;
|
|
252
|
+
pendingNumberOffsetWidth = 0;
|
|
253
|
+
isNearViewport = true;
|
|
254
|
+
viewportObserver;
|
|
255
|
+
constructor() {
|
|
256
|
+
this.destroyRef.onDestroy(() => {
|
|
257
|
+
this.destroyed = true;
|
|
258
|
+
this.animationsFinishAbort?.abort();
|
|
259
|
+
this.viewportObserver?.disconnect();
|
|
260
|
+
for (const animation of this.liveAnimations) {
|
|
261
|
+
try {
|
|
262
|
+
animation.cancel();
|
|
263
|
+
}
|
|
264
|
+
catch {
|
|
265
|
+
/* Animation cancellation can throw AbortError in some browsers. */
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
this.liveAnimations = [];
|
|
269
|
+
});
|
|
270
|
+
effect(() => {
|
|
271
|
+
const value = this.value();
|
|
272
|
+
const format = this.format();
|
|
273
|
+
const locales = this.locales();
|
|
274
|
+
const prefix = this.prefix();
|
|
275
|
+
const suffix = this.suffix();
|
|
276
|
+
if (!this.hasRenderedValue) {
|
|
277
|
+
untracked(() => this.data.set(formatDigitRollerValue(value, format, locales, prefix, suffix)));
|
|
278
|
+
this.prevNumericValue = value;
|
|
279
|
+
this.hasRenderedValue = true;
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
const canAnimateThisUpdate = isPlatformBrowser(this.platformId) && this.animated() && this.canAnimateNow();
|
|
283
|
+
if (canAnimateThisUpdate) {
|
|
284
|
+
const handledByGroup = this.group?.requestGroupedUpdate(this, () => {
|
|
285
|
+
untracked(() => this.data.set(formatDigitRollerValue(value, format, locales, prefix, suffix)));
|
|
286
|
+
});
|
|
287
|
+
if (handledByGroup) {
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
this.snapshot();
|
|
291
|
+
untracked(() => this.data.set(formatDigitRollerValue(value, format, locales, prefix, suffix)));
|
|
292
|
+
this.pending = true;
|
|
293
|
+
}
|
|
294
|
+
else {
|
|
295
|
+
untracked(() => this.data.set(formatDigitRollerValue(value, format, locales, prefix, suffix)));
|
|
296
|
+
this.prevNumericValue = value;
|
|
297
|
+
}
|
|
298
|
+
});
|
|
299
|
+
if (isPlatformBrowser(this.platformId)) {
|
|
300
|
+
if (typeof IntersectionObserver !== 'undefined') {
|
|
301
|
+
this.viewportObserver = new IntersectionObserver((entries) => {
|
|
302
|
+
this.isNearViewport = entries[entries.length - 1].isIntersecting;
|
|
303
|
+
}, { rootMargin: '240px' });
|
|
304
|
+
this.viewportObserver.observe(this.elementRef.nativeElement);
|
|
305
|
+
}
|
|
306
|
+
afterEveryRender({
|
|
307
|
+
earlyRead: () => {
|
|
308
|
+
if (this.pending) {
|
|
309
|
+
this.readAnimationState();
|
|
310
|
+
}
|
|
311
|
+
},
|
|
312
|
+
write: () => {
|
|
313
|
+
if (this.pending) {
|
|
314
|
+
this.pending = false;
|
|
315
|
+
this.fireAnimations();
|
|
316
|
+
}
|
|
317
|
+
},
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
canGroupAnimateNow() {
|
|
322
|
+
return isPlatformBrowser(this.platformId) && this.animated() && this.canAnimateNow();
|
|
323
|
+
}
|
|
324
|
+
prepareGroupedUpdate() {
|
|
325
|
+
this.snapshot();
|
|
326
|
+
}
|
|
327
|
+
queueGroupedAnimation() {
|
|
328
|
+
this.pending = true;
|
|
329
|
+
}
|
|
330
|
+
snapshot() {
|
|
331
|
+
const host = this.elementRef.nativeElement;
|
|
332
|
+
this.prevRects.clear();
|
|
333
|
+
this.prevInnerHTML.clear();
|
|
334
|
+
this.prevDigitD.clear();
|
|
335
|
+
this.prevDigitCurrent.clear();
|
|
336
|
+
this.prevDigitValues.clear();
|
|
337
|
+
this.prevDigitOrder = [];
|
|
338
|
+
const number = host.querySelector('.ngs-digit-roller__number');
|
|
339
|
+
if (number) {
|
|
340
|
+
const numberRect = number.getBoundingClientRect();
|
|
341
|
+
this.prevNumberLeft = numberRect.left;
|
|
342
|
+
this.prevNumberWidth = numberRect.width;
|
|
343
|
+
}
|
|
344
|
+
untracked(() => {
|
|
345
|
+
[...this.data().integer, ...this.data().fraction].forEach((part) => {
|
|
346
|
+
if (part.type === 'integer' || part.type === 'fraction') {
|
|
347
|
+
this.prevDigitValues.set(part.key, this.getPartDigitValue(part));
|
|
348
|
+
this.prevDigitOrder.push(part.key);
|
|
349
|
+
}
|
|
350
|
+
});
|
|
351
|
+
});
|
|
352
|
+
host.querySelectorAll('[data-key]').forEach((element) => {
|
|
353
|
+
const key = element.getAttribute('data-key');
|
|
354
|
+
this.prevRects.set(key, element.getBoundingClientRect());
|
|
355
|
+
this.prevInnerHTML.set(key, element.innerHTML);
|
|
356
|
+
if (element.classList.contains('ngs-digit-roller__digit')) {
|
|
357
|
+
const styles = getComputedStyle(element);
|
|
358
|
+
this.prevDigitD.set(key, styles.getPropertyValue('--_ngs-digit-roller-d').trim() || '0');
|
|
359
|
+
this.prevDigitCurrent.set(key, (element.style.getPropertyValue('--_ngs-digit-roller-current') || '0').trim());
|
|
360
|
+
}
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
readAnimationState() {
|
|
364
|
+
if (this.destroyed || !this.canAnimateNow()) {
|
|
365
|
+
this.pendingCanAnimate = false;
|
|
366
|
+
return;
|
|
367
|
+
}
|
|
368
|
+
this.pendingCanAnimate = true;
|
|
369
|
+
const host = this.elementRef.nativeElement;
|
|
370
|
+
const hostStyles = getComputedStyle(host);
|
|
371
|
+
this.pendingHostFont = hostStyles.font;
|
|
372
|
+
this.pendingHostColor = hostStyles.color;
|
|
373
|
+
this.pendingKeyedEls = [];
|
|
374
|
+
host.querySelectorAll('[data-key]').forEach((element) => {
|
|
375
|
+
this.pendingKeyedEls.push({
|
|
376
|
+
el: element,
|
|
377
|
+
key: element.getAttribute('data-key'),
|
|
378
|
+
newRect: element.getBoundingClientRect(),
|
|
379
|
+
});
|
|
380
|
+
});
|
|
381
|
+
const number = host.querySelector('.ngs-digit-roller__number');
|
|
382
|
+
this.pendingNumberRect = number ? number.getBoundingClientRect() : null;
|
|
383
|
+
this.pendingNumberOffsetWidth = number ? number.offsetWidth : 0;
|
|
384
|
+
}
|
|
385
|
+
fireAnimations() {
|
|
386
|
+
if (this.destroyed) {
|
|
387
|
+
return;
|
|
388
|
+
}
|
|
389
|
+
const host = this.elementRef.nativeElement;
|
|
390
|
+
const newNumericValue = untracked(() => this.value());
|
|
391
|
+
if (!this.pendingCanAnimate) {
|
|
392
|
+
this.prevNumericValue = newNumericValue;
|
|
393
|
+
return;
|
|
394
|
+
}
|
|
395
|
+
const settings = this.effectiveSettings();
|
|
396
|
+
const duration = settings.duration;
|
|
397
|
+
const opacityDuration = settings.opacityDuration;
|
|
398
|
+
const trend = this.resolveTrend(this.prevNumericValue, newNumericValue);
|
|
399
|
+
const staggerMs = this.stagger();
|
|
400
|
+
const baseTransformTiming = settings.transformTiming ?? {
|
|
401
|
+
duration,
|
|
402
|
+
easing: settings.flipEasing,
|
|
403
|
+
};
|
|
404
|
+
const spinOptions = {
|
|
405
|
+
...baseTransformTiming,
|
|
406
|
+
easing: settings.spinEasing,
|
|
407
|
+
...(settings.spinTiming ?? {}),
|
|
408
|
+
duration: settings.spinTiming?.duration ?? baseTransformTiming.duration,
|
|
409
|
+
fill: 'none',
|
|
410
|
+
composite: 'accumulate',
|
|
411
|
+
};
|
|
412
|
+
const flipOptions = {
|
|
413
|
+
...baseTransformTiming,
|
|
414
|
+
duration: baseTransformTiming.duration,
|
|
415
|
+
fill: 'none',
|
|
416
|
+
composite: 'accumulate',
|
|
417
|
+
};
|
|
418
|
+
const fadeOptions = {
|
|
419
|
+
duration: opacityDuration,
|
|
420
|
+
easing: 'ease-out',
|
|
421
|
+
fill: 'none',
|
|
422
|
+
composite: 'accumulate',
|
|
423
|
+
...(settings.opacityTiming ?? {}),
|
|
424
|
+
};
|
|
425
|
+
const continuousStartPosition = this.continuous() && duration > 0 && trend !== 0 ? this.getContinuousStartPosition() : undefined;
|
|
426
|
+
const batch = [];
|
|
427
|
+
const newKeys = new Set();
|
|
428
|
+
let elementIndex = 0;
|
|
429
|
+
const number = host.querySelector('.ngs-digit-roller__number');
|
|
430
|
+
for (const { el, key, newRect } of this.pendingKeyedEls) {
|
|
431
|
+
newKeys.add(key);
|
|
432
|
+
const prevRect = this.prevRects.get(key);
|
|
433
|
+
const staggerDelay = staggerMs > 0 ? elementIndex * staggerMs : 0;
|
|
434
|
+
elementIndex++;
|
|
435
|
+
if (el.classList.contains('ngs-digit-roller__digit')) {
|
|
436
|
+
const digit = this.getDigitValue(key);
|
|
437
|
+
const fromDigit = this.prevDigitValues.has(key) ? this.prevDigitValues.get(key) : 0;
|
|
438
|
+
const rawDelta = this.getTrendDelta(fromDigit, digit, trend, this.getDigitLength(key));
|
|
439
|
+
const digitPosition = this.getDigitPosition(key);
|
|
440
|
+
const isLowerUnchanged = this.continuous() &&
|
|
441
|
+
rawDelta === 0 &&
|
|
442
|
+
continuousStartPosition !== undefined &&
|
|
443
|
+
digitPosition !== undefined &&
|
|
444
|
+
continuousStartPosition >= digitPosition;
|
|
445
|
+
const delta = isLowerUnchanged ? this.getDigitLength(key) * trend : rawDelta;
|
|
446
|
+
if (delta !== 0 && duration > 0) {
|
|
447
|
+
this.incrementSpin(el);
|
|
448
|
+
const animation = el.animate({ '--_ngs-digit-roller-d': [-delta, 0] }, spinOptions);
|
|
449
|
+
batch.push(animation);
|
|
450
|
+
animation.finished.then(() => this.decrementSpin(el)).catch(() => this.decrementSpin(el));
|
|
451
|
+
}
|
|
452
|
+
this.animatePositionOrFade(el, prevRect, newRect, flipOptions, fadeOptions, staggerDelay, batch);
|
|
453
|
+
}
|
|
454
|
+
else {
|
|
455
|
+
this.animatePositionOrFade(el, prevRect, newRect, flipOptions, fadeOptions, staggerDelay, batch);
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
let exitIndex = 0;
|
|
459
|
+
this.prevRects.forEach((rect, key) => {
|
|
460
|
+
if (newKeys.has(key)) {
|
|
461
|
+
return;
|
|
462
|
+
}
|
|
463
|
+
const ghost = this.buildGhost(key, rect, this.pendingHostFont, this.pendingHostColor);
|
|
464
|
+
host.appendChild(ghost);
|
|
465
|
+
ghost.style.setProperty('--_ngs-digit-roller-d-opacity', '-0.999');
|
|
466
|
+
const staggerDelay = staggerMs > 0 ? exitIndex * staggerMs : 0;
|
|
467
|
+
exitIndex++;
|
|
468
|
+
const animation = ghost.animate({ '--_ngs-digit-roller-d-opacity': [0.999, 0] }, this.addStaggerDelay(fadeOptions, staggerDelay));
|
|
469
|
+
batch.push(animation);
|
|
470
|
+
animation.finished.then(() => ghost.remove()).catch(() => ghost.remove());
|
|
471
|
+
});
|
|
472
|
+
if (number && this.pendingNumberRect) {
|
|
473
|
+
const rect = this.pendingNumberRect;
|
|
474
|
+
const dx = this.prevNumberLeft - rect.left;
|
|
475
|
+
const width = rect.width || this.pendingNumberOffsetWidth;
|
|
476
|
+
const dWidth = this.prevNumberWidth - width;
|
|
477
|
+
number.style.setProperty('--_ngs-digit-roller-width', String(width || this.prevNumberWidth || 1));
|
|
478
|
+
if (Math.abs(dx) > 0.5 || Math.abs(dWidth) > 0.5) {
|
|
479
|
+
batch.push(number.animate({
|
|
480
|
+
'--_ngs-digit-roller-dx': [`${dx}px`, '0px'],
|
|
481
|
+
'--_ngs-digit-roller-d-width': [dWidth, 0],
|
|
482
|
+
}, flipOptions));
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
if (duration > 0) {
|
|
486
|
+
const colorIncrease = this.colorOnIncrease();
|
|
487
|
+
const colorDecrease = this.colorOnDecrease();
|
|
488
|
+
if (trend > 0 && colorIncrease) {
|
|
489
|
+
batch.push(host.animate([{ color: colorIncrease }, { color: '' }], {
|
|
490
|
+
duration: Math.max(duration, 400),
|
|
491
|
+
easing: 'ease-out',
|
|
492
|
+
fill: 'none',
|
|
493
|
+
}));
|
|
494
|
+
}
|
|
495
|
+
else if (trend < 0 && colorDecrease) {
|
|
496
|
+
batch.push(host.animate([{ color: colorDecrease }, { color: '' }], {
|
|
497
|
+
duration: Math.max(duration, 400),
|
|
498
|
+
easing: 'ease-out',
|
|
499
|
+
fill: 'none',
|
|
500
|
+
}));
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
this.prevNumericValue = newNumericValue;
|
|
504
|
+
if (batch.length === 0) {
|
|
505
|
+
return;
|
|
506
|
+
}
|
|
507
|
+
this.liveAnimations.push(...batch);
|
|
508
|
+
this.animCount++;
|
|
509
|
+
if (this.animationsFinishAbort) {
|
|
510
|
+
this.animationsFinishAbort.abort();
|
|
511
|
+
}
|
|
512
|
+
else {
|
|
513
|
+
this.animationsStart.emit();
|
|
514
|
+
}
|
|
515
|
+
const finishController = new AbortController();
|
|
516
|
+
this.animationsFinishAbort = finishController;
|
|
517
|
+
Promise.allSettled(batch.map((animation) => animation.finished)).then(() => {
|
|
518
|
+
const batchSet = new Set(batch);
|
|
519
|
+
this.liveAnimations = this.liveAnimations.filter((animation) => !batchSet.has(animation));
|
|
520
|
+
this.animCount--;
|
|
521
|
+
if (this.animCount === 0 && !this.destroyed && this.animationsFinishAbort) {
|
|
522
|
+
this.animationsFinish.emit();
|
|
523
|
+
this.animationsFinishAbort = undefined;
|
|
524
|
+
}
|
|
525
|
+
});
|
|
526
|
+
}
|
|
527
|
+
animatePositionOrFade(element, prevRect, newRect, flipOptions, fadeOptions, staggerDelay, batch) {
|
|
528
|
+
if (prevRect) {
|
|
529
|
+
const dx = prevRect.left - newRect.left;
|
|
530
|
+
if (Math.abs(dx) > 0.5) {
|
|
531
|
+
batch.push(element.animate([{ transform: `translateX(${dx}px)` }, { transform: 'translateX(0)' }], flipOptions));
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
else {
|
|
535
|
+
batch.push(element.animate({ '--_ngs-digit-roller-d-opacity': [-0.9999, 0] }, this.addStaggerDelay(fadeOptions, staggerDelay)));
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
getDigitValue(key) {
|
|
539
|
+
const part = [...this.data().integer, ...this.data().fraction].find((item) => item.key === key);
|
|
540
|
+
return part ? this.getPartDigitValue(part) : 0;
|
|
541
|
+
}
|
|
542
|
+
getPartDigitValue(part) {
|
|
543
|
+
return part.numericValue ?? Number(part.value);
|
|
544
|
+
}
|
|
545
|
+
resolveTrend(oldValue, newValue) {
|
|
546
|
+
const configured = this.trend();
|
|
547
|
+
const trend = typeof configured === 'function'
|
|
548
|
+
? configured(oldValue, newValue)
|
|
549
|
+
: (configured ?? Math.sign(newValue - oldValue));
|
|
550
|
+
return Math.sign(trend);
|
|
551
|
+
}
|
|
552
|
+
canAnimateNow() {
|
|
553
|
+
const host = this.elementRef.nativeElement;
|
|
554
|
+
return (canAnimateDigitRoller({ respectMotionPreference: this.respectMotionPreference() }) &&
|
|
555
|
+
this.animated() &&
|
|
556
|
+
host.ownerDocument.visibilityState === 'visible' &&
|
|
557
|
+
this.isHostNearViewport(host));
|
|
558
|
+
}
|
|
559
|
+
isHostNearViewport(host) {
|
|
560
|
+
if (this.viewportObserver) {
|
|
561
|
+
return this.isNearViewport;
|
|
562
|
+
}
|
|
563
|
+
const rect = host.getBoundingClientRect();
|
|
564
|
+
if (rect.width <= 0 || rect.height <= 0) {
|
|
565
|
+
return false;
|
|
566
|
+
}
|
|
567
|
+
const windowRef = host.ownerDocument.defaultView;
|
|
568
|
+
if (!windowRef) {
|
|
569
|
+
return true;
|
|
570
|
+
}
|
|
571
|
+
const margin = 240;
|
|
572
|
+
return (rect.bottom >= -margin &&
|
|
573
|
+
rect.right >= -margin &&
|
|
574
|
+
rect.top <= windowRef.innerHeight + margin &&
|
|
575
|
+
rect.left <= windowRef.innerWidth + margin);
|
|
576
|
+
}
|
|
577
|
+
resolveEasing(easing) {
|
|
578
|
+
return easing ? (EASING_PRESETS[easing] ?? easing) : SPIN_EASING;
|
|
579
|
+
}
|
|
580
|
+
getContinuousStartPosition() {
|
|
581
|
+
const current = new Map();
|
|
582
|
+
const currentOrder = [];
|
|
583
|
+
untracked(() => {
|
|
584
|
+
[...this.data().integer, ...this.data().fraction].forEach((part) => {
|
|
585
|
+
if (part.type === 'integer' || part.type === 'fraction') {
|
|
586
|
+
current.set(part.key, this.getPartDigitValue(part));
|
|
587
|
+
currentOrder.push(part.key);
|
|
588
|
+
}
|
|
589
|
+
});
|
|
590
|
+
});
|
|
591
|
+
const firstChangedPrev = this.prevDigitOrder.find((key) => current.get(key) !== this.prevDigitValues.get(key));
|
|
592
|
+
const firstChangedCurrent = currentOrder.find((key) => current.get(key) !== this.prevDigitValues.get(key));
|
|
593
|
+
const start = Math.max(this.getDigitPosition(firstChangedPrev) ?? -Infinity, this.getDigitPosition(firstChangedCurrent) ?? -Infinity);
|
|
594
|
+
return Number.isFinite(start) ? start : undefined;
|
|
595
|
+
}
|
|
596
|
+
getDigitPosition(key) {
|
|
597
|
+
if (!key) {
|
|
598
|
+
return undefined;
|
|
599
|
+
}
|
|
600
|
+
if (key.startsWith('i')) {
|
|
601
|
+
return Number(key.slice(1));
|
|
602
|
+
}
|
|
603
|
+
if (key.startsWith('f')) {
|
|
604
|
+
return -Number(key.slice(1));
|
|
605
|
+
}
|
|
606
|
+
return undefined;
|
|
607
|
+
}
|
|
608
|
+
getDigitLength(key) {
|
|
609
|
+
if (!key.startsWith('i')) {
|
|
610
|
+
return 10;
|
|
611
|
+
}
|
|
612
|
+
const position = Number(key.slice(1));
|
|
613
|
+
const max = this.digits()[position]?.max;
|
|
614
|
+
return max !== undefined ? max + 1 : 10;
|
|
615
|
+
}
|
|
616
|
+
digitLengthForKey(key) {
|
|
617
|
+
return this.getDigitLength(key);
|
|
618
|
+
}
|
|
619
|
+
digitGlyphsForKey(key) {
|
|
620
|
+
return this.digitGlyphs().slice(0, this.getDigitLength(key));
|
|
621
|
+
}
|
|
622
|
+
addStaggerDelay(options, staggerDelay) {
|
|
623
|
+
const currentDelay = typeof options.delay === 'number' ? options.delay : 0;
|
|
624
|
+
return { ...options, delay: currentDelay + staggerDelay };
|
|
625
|
+
}
|
|
626
|
+
getTrendDelta(from, to, trend, length = 10) {
|
|
627
|
+
const diff = to - from;
|
|
628
|
+
const resolvedTrend = trend || Math.sign(diff);
|
|
629
|
+
if (resolvedTrend > 0 && to < from) {
|
|
630
|
+
return length - from + to;
|
|
631
|
+
}
|
|
632
|
+
if (resolvedTrend < 0 && to > from) {
|
|
633
|
+
return to - length - from;
|
|
634
|
+
}
|
|
635
|
+
return diff;
|
|
636
|
+
}
|
|
637
|
+
incrementSpin(element) {
|
|
638
|
+
const count = (this.spinCount.get(element) ?? 0) + 1;
|
|
639
|
+
this.spinCount.set(element, count);
|
|
640
|
+
if (count === 1) {
|
|
641
|
+
element.classList.add('ngs-digit-roller__digit--spinning');
|
|
642
|
+
}
|
|
643
|
+
}
|
|
644
|
+
decrementSpin(element) {
|
|
645
|
+
const count = Math.max(0, (this.spinCount.get(element) ?? 1) - 1);
|
|
646
|
+
if (count === 0) {
|
|
647
|
+
this.spinCount.delete(element);
|
|
648
|
+
element.classList.remove('ngs-digit-roller__digit--spinning');
|
|
649
|
+
}
|
|
650
|
+
else {
|
|
651
|
+
this.spinCount.set(element, count);
|
|
652
|
+
}
|
|
653
|
+
}
|
|
654
|
+
buildGhost(key, rect, font, color) {
|
|
655
|
+
const ghost = document.createElement('span');
|
|
656
|
+
ghost.style.cssText =
|
|
657
|
+
`position:fixed;left:${rect.left}px;top:${rect.top}px;` +
|
|
658
|
+
`width:${rect.width}px;height:${rect.height}px;` +
|
|
659
|
+
`pointer-events:none;overflow:hidden;display:inline-flex;` +
|
|
660
|
+
`align-items:center;font:${font};color:${color}`;
|
|
661
|
+
ghost.className = 'ngs-digit-roller__ghost';
|
|
662
|
+
const savedHTML = this.prevInnerHTML.get(key);
|
|
663
|
+
if (savedHTML) {
|
|
664
|
+
ghost.innerHTML = savedHTML;
|
|
665
|
+
const savedD = this.prevDigitD.get(key);
|
|
666
|
+
const savedCurrent = this.prevDigitCurrent.get(key);
|
|
667
|
+
if (savedD !== undefined) {
|
|
668
|
+
ghost.style.setProperty('--_ngs-digit-roller-d', savedD);
|
|
669
|
+
}
|
|
670
|
+
if (savedCurrent !== undefined) {
|
|
671
|
+
ghost.style.setProperty('--_ngs-digit-roller-current', savedCurrent);
|
|
672
|
+
}
|
|
673
|
+
ghost.querySelectorAll('[inert]').forEach((element) => {
|
|
674
|
+
element.style.display = 'none';
|
|
675
|
+
});
|
|
676
|
+
}
|
|
677
|
+
return ghost;
|
|
678
|
+
}
|
|
679
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DigitRoller, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
680
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: DigitRoller, isStandalone: true, selector: "ngs-digit-roller", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, format: { classPropertyName: "format", publicName: "format", isSignal: true, isRequired: false, transformFunction: null }, locales: { classPropertyName: "locales", publicName: "locales", isSignal: true, isRequired: false, transformFunction: null }, prefix: { classPropertyName: "prefix", publicName: "prefix", isSignal: true, isRequired: false, transformFunction: null }, suffix: { classPropertyName: "suffix", publicName: "suffix", isSignal: true, isRequired: false, transformFunction: null }, animated: { classPropertyName: "animated", publicName: "animated", isSignal: true, isRequired: false, transformFunction: null }, duration: { classPropertyName: "duration", publicName: "duration", isSignal: true, isRequired: false, transformFunction: null }, opacityDuration: { classPropertyName: "opacityDuration", publicName: "opacityDuration", isSignal: true, isRequired: false, transformFunction: null }, transformTiming: { classPropertyName: "transformTiming", publicName: "transformTiming", isSignal: true, isRequired: false, transformFunction: null }, spinTiming: { classPropertyName: "spinTiming", publicName: "spinTiming", isSignal: true, isRequired: false, transformFunction: null }, opacityTiming: { classPropertyName: "opacityTiming", publicName: "opacityTiming", isSignal: true, isRequired: false, transformFunction: null }, spinEasing: { classPropertyName: "spinEasing", publicName: "spinEasing", isSignal: true, isRequired: false, transformFunction: null }, flipEasing: { classPropertyName: "flipEasing", publicName: "flipEasing", isSignal: true, isRequired: false, transformFunction: null }, trend: { classPropertyName: "trend", publicName: "trend", isSignal: true, isRequired: false, transformFunction: null }, continuous: { classPropertyName: "continuous", publicName: "continuous", isSignal: true, isRequired: false, transformFunction: null }, digits: { classPropertyName: "digits", publicName: "digits", isSignal: true, isRequired: false, transformFunction: null }, respectMotionPreference: { classPropertyName: "respectMotionPreference", publicName: "respectMotionPreference", isSignal: true, isRequired: false, transformFunction: null }, stagger: { classPropertyName: "stagger", publicName: "stagger", isSignal: true, isRequired: false, transformFunction: null }, colorOnIncrease: { classPropertyName: "colorOnIncrease", publicName: "colorOnIncrease", isSignal: true, isRequired: false, transformFunction: null }, colorOnDecrease: { classPropertyName: "colorOnDecrease", publicName: "colorOnDecrease", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { animationsStart: "animationsStart", animationsFinish: "animationsFinish" }, host: { properties: { "attr.data-animated": "animated()" }, classAttribute: "ngs-digit-roller" }, exportAs: ["ngsDigitRoller"], ngImport: i0, template: "<span class=\"ngs-digit-roller__number\" aria-hidden=\"true\">\n <span class=\"ngs-digit-roller__number-inner\">\n @if (data().pre.length) {\n <span class=\"ngs-digit-roller__section ngs-digit-roller__section--pre\">\n @for (part of data().pre; track part.key) {\n <span class=\"ngs-digit-roller__literal\" [attr.data-key]=\"part.key\">{{ part.value }}</span>\n }\n </span>\n }\n\n <span class=\"ngs-digit-roller__section ngs-digit-roller__section--integer\">\n @for (part of data().integer; track part.key) {\n @if (part.type === 'integer') {\n <span\n class=\"ngs-digit-roller__digit\"\n [attr.data-key]=\"part.key\"\n [style.--_ngs-digit-roller-current]=\"part.numericValue\"\n [style.--_ngs-digit-roller-len]=\"digitLengthForKey(part.key)\"\n >\n @for (digit of digitGlyphsForKey(part.key); track digit.value) {\n <span\n class=\"ngs-digit-roller__digit-number\"\n [style.--_ngs-digit-roller-n]=\"digit.value\"\n [attr.inert]=\"digit.value !== part.numericValue ? '' : null\"\n >\n {{ digit.glyph }}\n </span>\n }\n </span>\n } @else {\n <span class=\"ngs-digit-roller__separator\" [attr.data-key]=\"part.key\">{{ part.value }}</span>\n }\n }\n </span>\n\n @if (data().fraction.length) {\n <span class=\"ngs-digit-roller__section ngs-digit-roller__section--fraction\">\n @for (part of data().fraction; track part.key) {\n @if (part.type === 'fraction') {\n <span\n class=\"ngs-digit-roller__digit\"\n [attr.data-key]=\"part.key\"\n [style.--_ngs-digit-roller-current]=\"part.numericValue\"\n [style.--_ngs-digit-roller-len]=\"digitLengthForKey(part.key)\"\n >\n @for (digit of digitGlyphsForKey(part.key); track digit.value) {\n <span\n class=\"ngs-digit-roller__digit-number\"\n [style.--_ngs-digit-roller-n]=\"digit.value\"\n [attr.inert]=\"digit.value !== part.numericValue ? '' : null\"\n >\n {{ digit.glyph }}\n </span>\n }\n </span>\n } @else {\n <span class=\"ngs-digit-roller__separator\" [attr.data-key]=\"part.key\">{{ part.value }}</span>\n }\n }\n </span>\n }\n\n @if (data().post.length) {\n <span class=\"ngs-digit-roller__section ngs-digit-roller__section--post\">\n @for (part of data().post; track part.key) {\n <span class=\"ngs-digit-roller__literal\" [attr.data-key]=\"part.key\">{{ part.value }}</span>\n }\n </span>\n }\n </span>\n</span>\n\n<span class=\"ngs-digit-roller__sr-only\">{{ formattedPlainText() }}</span>\n", styles: ["@layer properties;@property --_ngs-digit-roller-d{syntax: \"<number>\"; inherits: true; initial-value: 0;}@property --_ngs-digit-roller-d-opacity{syntax: \"<number>\"; inherits: false; initial-value: 0;}@property --_ngs-digit-roller-d-width{syntax: \"<number>\"; inherits: false; initial-value: 0;}@property --_ngs-digit-roller-dx{syntax: \"<length>\"; inherits: true; initial-value: 0px;}ngs-digit-roller{--ngs-digit-roller-mask-height: .25em;--ngs-digit-roller-mask-width: .5em;--ngs-digit-roller-min-digit-width: .6em;display:inline-block;position:relative;direction:ltr;isolation:isolate;line-height:1;white-space:nowrap}ngs-digit-roller .ngs-digit-roller__number{--_ngs-digit-roller-width: 1;--_ngs-digit-roller-scale-x: calc( 1 + var(--_ngs-digit-roller-d-width) / var(--_ngs-digit-roller-width) );--_ngs-digit-roller-half-mask-height: round( nearest, calc(var(--ngs-digit-roller-mask-height) / 2), 1px );--_ngs-digit-roller-resolved-mask-height: calc(var(--_ngs-digit-roller-half-mask-height) * 2);--_ngs-digit-roller-scaled-mask-width: calc( var(--ngs-digit-roller-mask-width) / var(--_ngs-digit-roller-scale-x) );display:inline-block;line-height:1;font-variant-numeric:tabular-nums;font-feature-settings:\"tnum\";position:relative;transform-origin:left top;transform:translate(var(--_ngs-digit-roller-dx)) scaleX(var(--_ngs-digit-roller-scale-x));margin:0 calc(-1 * var(--ngs-digit-roller-mask-width));-webkit-mask-image:linear-gradient(to right,transparent 0,#000 var(--_ngs-digit-roller-scaled-mask-width),#000 calc(100% - var(--_ngs-digit-roller-scaled-mask-width)),transparent 100%),linear-gradient(to bottom,transparent 0,#000 var(--_ngs-digit-roller-resolved-mask-height),#000 calc(100% - var(--_ngs-digit-roller-resolved-mask-height)),transparent 100%),radial-gradient(at bottom right,#000 0,transparent 71%),radial-gradient(at bottom left,#000 0,transparent 71%),radial-gradient(at top left,#000 0,transparent 71%),radial-gradient(at top right,#000 0,transparent 71%);mask-image:linear-gradient(to right,transparent 0,#000 var(--_ngs-digit-roller-scaled-mask-width),#000 calc(100% - var(--_ngs-digit-roller-scaled-mask-width)),transparent 100%),linear-gradient(to bottom,transparent 0,#000 var(--_ngs-digit-roller-resolved-mask-height),#000 calc(100% - var(--_ngs-digit-roller-resolved-mask-height)),transparent 100%),radial-gradient(at bottom right,#000 0,transparent 71%),radial-gradient(at bottom left,#000 0,transparent 71%),radial-gradient(at top left,#000 0,transparent 71%),radial-gradient(at top right,#000 0,transparent 71%);-webkit-mask-size:100% calc(100% - var(--_ngs-digit-roller-resolved-mask-height) * 2),calc(100% - var(--_ngs-digit-roller-scaled-mask-width) * 2) 100%,var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height),var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height),var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height),var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height);mask-size:100% calc(100% - var(--_ngs-digit-roller-resolved-mask-height) * 2),calc(100% - var(--_ngs-digit-roller-scaled-mask-width) * 2) 100%,var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height),var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height),var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height),var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height);-webkit-mask-position:center,center,top left,top right,bottom right,bottom left;mask-position:center,center,top left,top right,bottom right,bottom left;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}ngs-digit-roller .ngs-digit-roller__number-inner{display:inline-flex;align-items:baseline;padding:var(--_ngs-digit-roller-half-mask-height) var(--ngs-digit-roller-mask-width);transform-origin:left top;transform:scaleX(calc(1 / var(--_ngs-digit-roller-scale-x))) translate(calc(-1 * var(--_ngs-digit-roller-dx)))}ngs-digit-roller .ngs-digit-roller__section{display:inline-flex;align-items:baseline}ngs-digit-roller .ngs-digit-roller__digit{display:inline-block;position:relative;height:calc(1em + var(--_ngs-digit-roller-resolved-mask-height, .25em));clip-path:inset(0 -.2em);vertical-align:top;--_ngs-digit-roller-c: var(--_ngs-digit-roller-current, 0) + var(--_ngs-digit-roller-d);--_ngs-digit-roller-len: 10}ngs-digit-roller .ngs-digit-roller__digit,ngs-digit-roller .ngs-digit-roller__separator,ngs-digit-roller .ngs-digit-roller__literal,ngs-digit-roller .ngs-digit-roller__ghost{opacity:calc(1 + var(--_ngs-digit-roller-d-opacity, 0))}ngs-digit-roller .ngs-digit-roller__digit-number{display:inline-block;height:1em;line-height:1;text-align:center;min-width:var(--ngs-digit-roller-min-digit-width);padding:var(--_ngs-digit-roller-half-mask-height, .125em) 0;box-sizing:content-box;--_ngs-digit-roller-offset-raw: mod( var(--_ngs-digit-roller-len) + var(--_ngs-digit-roller-n) - mod(var(--_ngs-digit-roller-c), var(--_ngs-digit-roller-len)), var(--_ngs-digit-roller-len) );--_ngs-digit-roller-offset: calc( var(--_ngs-digit-roller-offset-raw) - var(--_ngs-digit-roller-len) * round(down, var(--_ngs-digit-roller-offset-raw) / (var(--_ngs-digit-roller-len) / 2), 1) );--_ngs-digit-roller-y: clamp(-100%, var(--_ngs-digit-roller-offset) * 100%, 100%);transform:translateY(var(--_ngs-digit-roller-y))}ngs-digit-roller .ngs-digit-roller__digit-number[inert]{position:absolute;top:0;left:50%;transform:translate(-50%) translateY(var(--_ngs-digit-roller-y))}ngs-digit-roller .ngs-digit-roller__digit:not(.ngs-digit-roller__digit--spinning) .ngs-digit-roller__digit-number[inert]{display:none}ngs-digit-roller .ngs-digit-roller__separator,ngs-digit-roller .ngs-digit-roller__literal{display:inline-block}ngs-digit-roller .ngs-digit-roller__sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}ngs-digit-roller[data-animated=false] .ngs-digit-roller__digit-number,ngs-digit-roller[data-animated=false] .ngs-digit-roller__digit,ngs-digit-roller[data-animated=false] .ngs-digit-roller__separator,ngs-digit-roller[data-animated=false] .ngs-digit-roller__literal{transition:none!important;animation:none!important}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){:root,:host{--_ngs-digit-roller-d: 0;--_ngs-digit-roller-dx: 0px}*,:before,:after,::backdrop{--_ngs-digit-roller-d-opacity: 0;--_ngs-digit-roller-d-width: 0}}}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
681
|
+
}
|
|
682
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DigitRoller, decorators: [{
|
|
683
|
+
type: Component,
|
|
684
|
+
args: [{ selector: 'ngs-digit-roller', exportAs: 'ngsDigitRoller', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
685
|
+
class: 'ngs-digit-roller',
|
|
686
|
+
'[attr.data-animated]': 'animated()',
|
|
687
|
+
}, template: "<span class=\"ngs-digit-roller__number\" aria-hidden=\"true\">\n <span class=\"ngs-digit-roller__number-inner\">\n @if (data().pre.length) {\n <span class=\"ngs-digit-roller__section ngs-digit-roller__section--pre\">\n @for (part of data().pre; track part.key) {\n <span class=\"ngs-digit-roller__literal\" [attr.data-key]=\"part.key\">{{ part.value }}</span>\n }\n </span>\n }\n\n <span class=\"ngs-digit-roller__section ngs-digit-roller__section--integer\">\n @for (part of data().integer; track part.key) {\n @if (part.type === 'integer') {\n <span\n class=\"ngs-digit-roller__digit\"\n [attr.data-key]=\"part.key\"\n [style.--_ngs-digit-roller-current]=\"part.numericValue\"\n [style.--_ngs-digit-roller-len]=\"digitLengthForKey(part.key)\"\n >\n @for (digit of digitGlyphsForKey(part.key); track digit.value) {\n <span\n class=\"ngs-digit-roller__digit-number\"\n [style.--_ngs-digit-roller-n]=\"digit.value\"\n [attr.inert]=\"digit.value !== part.numericValue ? '' : null\"\n >\n {{ digit.glyph }}\n </span>\n }\n </span>\n } @else {\n <span class=\"ngs-digit-roller__separator\" [attr.data-key]=\"part.key\">{{ part.value }}</span>\n }\n }\n </span>\n\n @if (data().fraction.length) {\n <span class=\"ngs-digit-roller__section ngs-digit-roller__section--fraction\">\n @for (part of data().fraction; track part.key) {\n @if (part.type === 'fraction') {\n <span\n class=\"ngs-digit-roller__digit\"\n [attr.data-key]=\"part.key\"\n [style.--_ngs-digit-roller-current]=\"part.numericValue\"\n [style.--_ngs-digit-roller-len]=\"digitLengthForKey(part.key)\"\n >\n @for (digit of digitGlyphsForKey(part.key); track digit.value) {\n <span\n class=\"ngs-digit-roller__digit-number\"\n [style.--_ngs-digit-roller-n]=\"digit.value\"\n [attr.inert]=\"digit.value !== part.numericValue ? '' : null\"\n >\n {{ digit.glyph }}\n </span>\n }\n </span>\n } @else {\n <span class=\"ngs-digit-roller__separator\" [attr.data-key]=\"part.key\">{{ part.value }}</span>\n }\n }\n </span>\n }\n\n @if (data().post.length) {\n <span class=\"ngs-digit-roller__section ngs-digit-roller__section--post\">\n @for (part of data().post; track part.key) {\n <span class=\"ngs-digit-roller__literal\" [attr.data-key]=\"part.key\">{{ part.value }}</span>\n }\n </span>\n }\n </span>\n</span>\n\n<span class=\"ngs-digit-roller__sr-only\">{{ formattedPlainText() }}</span>\n", styles: ["@layer properties;@property --_ngs-digit-roller-d{syntax: \"<number>\"; inherits: true; initial-value: 0;}@property --_ngs-digit-roller-d-opacity{syntax: \"<number>\"; inherits: false; initial-value: 0;}@property --_ngs-digit-roller-d-width{syntax: \"<number>\"; inherits: false; initial-value: 0;}@property --_ngs-digit-roller-dx{syntax: \"<length>\"; inherits: true; initial-value: 0px;}ngs-digit-roller{--ngs-digit-roller-mask-height: .25em;--ngs-digit-roller-mask-width: .5em;--ngs-digit-roller-min-digit-width: .6em;display:inline-block;position:relative;direction:ltr;isolation:isolate;line-height:1;white-space:nowrap}ngs-digit-roller .ngs-digit-roller__number{--_ngs-digit-roller-width: 1;--_ngs-digit-roller-scale-x: calc( 1 + var(--_ngs-digit-roller-d-width) / var(--_ngs-digit-roller-width) );--_ngs-digit-roller-half-mask-height: round( nearest, calc(var(--ngs-digit-roller-mask-height) / 2), 1px );--_ngs-digit-roller-resolved-mask-height: calc(var(--_ngs-digit-roller-half-mask-height) * 2);--_ngs-digit-roller-scaled-mask-width: calc( var(--ngs-digit-roller-mask-width) / var(--_ngs-digit-roller-scale-x) );display:inline-block;line-height:1;font-variant-numeric:tabular-nums;font-feature-settings:\"tnum\";position:relative;transform-origin:left top;transform:translate(var(--_ngs-digit-roller-dx)) scaleX(var(--_ngs-digit-roller-scale-x));margin:0 calc(-1 * var(--ngs-digit-roller-mask-width));-webkit-mask-image:linear-gradient(to right,transparent 0,#000 var(--_ngs-digit-roller-scaled-mask-width),#000 calc(100% - var(--_ngs-digit-roller-scaled-mask-width)),transparent 100%),linear-gradient(to bottom,transparent 0,#000 var(--_ngs-digit-roller-resolved-mask-height),#000 calc(100% - var(--_ngs-digit-roller-resolved-mask-height)),transparent 100%),radial-gradient(at bottom right,#000 0,transparent 71%),radial-gradient(at bottom left,#000 0,transparent 71%),radial-gradient(at top left,#000 0,transparent 71%),radial-gradient(at top right,#000 0,transparent 71%);mask-image:linear-gradient(to right,transparent 0,#000 var(--_ngs-digit-roller-scaled-mask-width),#000 calc(100% - var(--_ngs-digit-roller-scaled-mask-width)),transparent 100%),linear-gradient(to bottom,transparent 0,#000 var(--_ngs-digit-roller-resolved-mask-height),#000 calc(100% - var(--_ngs-digit-roller-resolved-mask-height)),transparent 100%),radial-gradient(at bottom right,#000 0,transparent 71%),radial-gradient(at bottom left,#000 0,transparent 71%),radial-gradient(at top left,#000 0,transparent 71%),radial-gradient(at top right,#000 0,transparent 71%);-webkit-mask-size:100% calc(100% - var(--_ngs-digit-roller-resolved-mask-height) * 2),calc(100% - var(--_ngs-digit-roller-scaled-mask-width) * 2) 100%,var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height),var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height),var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height),var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height);mask-size:100% calc(100% - var(--_ngs-digit-roller-resolved-mask-height) * 2),calc(100% - var(--_ngs-digit-roller-scaled-mask-width) * 2) 100%,var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height),var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height),var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height),var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height);-webkit-mask-position:center,center,top left,top right,bottom right,bottom left;mask-position:center,center,top left,top right,bottom right,bottom left;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}ngs-digit-roller .ngs-digit-roller__number-inner{display:inline-flex;align-items:baseline;padding:var(--_ngs-digit-roller-half-mask-height) var(--ngs-digit-roller-mask-width);transform-origin:left top;transform:scaleX(calc(1 / var(--_ngs-digit-roller-scale-x))) translate(calc(-1 * var(--_ngs-digit-roller-dx)))}ngs-digit-roller .ngs-digit-roller__section{display:inline-flex;align-items:baseline}ngs-digit-roller .ngs-digit-roller__digit{display:inline-block;position:relative;height:calc(1em + var(--_ngs-digit-roller-resolved-mask-height, .25em));clip-path:inset(0 -.2em);vertical-align:top;--_ngs-digit-roller-c: var(--_ngs-digit-roller-current, 0) + var(--_ngs-digit-roller-d);--_ngs-digit-roller-len: 10}ngs-digit-roller .ngs-digit-roller__digit,ngs-digit-roller .ngs-digit-roller__separator,ngs-digit-roller .ngs-digit-roller__literal,ngs-digit-roller .ngs-digit-roller__ghost{opacity:calc(1 + var(--_ngs-digit-roller-d-opacity, 0))}ngs-digit-roller .ngs-digit-roller__digit-number{display:inline-block;height:1em;line-height:1;text-align:center;min-width:var(--ngs-digit-roller-min-digit-width);padding:var(--_ngs-digit-roller-half-mask-height, .125em) 0;box-sizing:content-box;--_ngs-digit-roller-offset-raw: mod( var(--_ngs-digit-roller-len) + var(--_ngs-digit-roller-n) - mod(var(--_ngs-digit-roller-c), var(--_ngs-digit-roller-len)), var(--_ngs-digit-roller-len) );--_ngs-digit-roller-offset: calc( var(--_ngs-digit-roller-offset-raw) - var(--_ngs-digit-roller-len) * round(down, var(--_ngs-digit-roller-offset-raw) / (var(--_ngs-digit-roller-len) / 2), 1) );--_ngs-digit-roller-y: clamp(-100%, var(--_ngs-digit-roller-offset) * 100%, 100%);transform:translateY(var(--_ngs-digit-roller-y))}ngs-digit-roller .ngs-digit-roller__digit-number[inert]{position:absolute;top:0;left:50%;transform:translate(-50%) translateY(var(--_ngs-digit-roller-y))}ngs-digit-roller .ngs-digit-roller__digit:not(.ngs-digit-roller__digit--spinning) .ngs-digit-roller__digit-number[inert]{display:none}ngs-digit-roller .ngs-digit-roller__separator,ngs-digit-roller .ngs-digit-roller__literal{display:inline-block}ngs-digit-roller .ngs-digit-roller__sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}ngs-digit-roller[data-animated=false] .ngs-digit-roller__digit-number,ngs-digit-roller[data-animated=false] .ngs-digit-roller__digit,ngs-digit-roller[data-animated=false] .ngs-digit-roller__separator,ngs-digit-roller[data-animated=false] .ngs-digit-roller__literal{transition:none!important;animation:none!important}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){:root,:host{--_ngs-digit-roller-d: 0;--_ngs-digit-roller-dx: 0px}*,:before,:after,::backdrop{--_ngs-digit-roller-d-opacity: 0;--_ngs-digit-roller-d-width: 0}}}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
|
|
688
|
+
}], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: true }] }], format: [{ type: i0.Input, args: [{ isSignal: true, alias: "format", required: false }] }], locales: [{ type: i0.Input, args: [{ isSignal: true, alias: "locales", required: false }] }], prefix: [{ type: i0.Input, args: [{ isSignal: true, alias: "prefix", required: false }] }], suffix: [{ type: i0.Input, args: [{ isSignal: true, alias: "suffix", required: false }] }], animated: [{ type: i0.Input, args: [{ isSignal: true, alias: "animated", required: false }] }], duration: [{ type: i0.Input, args: [{ isSignal: true, alias: "duration", required: false }] }], opacityDuration: [{ type: i0.Input, args: [{ isSignal: true, alias: "opacityDuration", required: false }] }], transformTiming: [{ type: i0.Input, args: [{ isSignal: true, alias: "transformTiming", required: false }] }], spinTiming: [{ type: i0.Input, args: [{ isSignal: true, alias: "spinTiming", required: false }] }], opacityTiming: [{ type: i0.Input, args: [{ isSignal: true, alias: "opacityTiming", required: false }] }], spinEasing: [{ type: i0.Input, args: [{ isSignal: true, alias: "spinEasing", required: false }] }], flipEasing: [{ type: i0.Input, args: [{ isSignal: true, alias: "flipEasing", required: false }] }], trend: [{ type: i0.Input, args: [{ isSignal: true, alias: "trend", required: false }] }], continuous: [{ type: i0.Input, args: [{ isSignal: true, alias: "continuous", required: false }] }], digits: [{ type: i0.Input, args: [{ isSignal: true, alias: "digits", required: false }] }], respectMotionPreference: [{ type: i0.Input, args: [{ isSignal: true, alias: "respectMotionPreference", required: false }] }], stagger: [{ type: i0.Input, args: [{ isSignal: true, alias: "stagger", required: false }] }], colorOnIncrease: [{ type: i0.Input, args: [{ isSignal: true, alias: "colorOnIncrease", required: false }] }], colorOnDecrease: [{ type: i0.Input, args: [{ isSignal: true, alias: "colorOnDecrease", required: false }] }], animationsStart: [{ type: i0.Output, args: ["animationsStart"] }], animationsFinish: [{ type: i0.Output, args: ["animationsFinish"] }] } });
|
|
689
|
+
|
|
690
|
+
class DigitRollerGroupDirective {
|
|
691
|
+
children = contentChildren(DigitRoller, { ...(ngDevMode ? { debugName: "children" } : /* istanbul ignore next */ {}), descendants: true });
|
|
692
|
+
pendingUpdates = new Map();
|
|
693
|
+
flushQueued = false;
|
|
694
|
+
requestGroupedUpdate(member, applyUpdate) {
|
|
695
|
+
if (!member.canGroupAnimateNow()) {
|
|
696
|
+
return false;
|
|
697
|
+
}
|
|
698
|
+
this.pendingUpdates.set(member, applyUpdate);
|
|
699
|
+
if (!this.flushQueued) {
|
|
700
|
+
this.flushQueued = true;
|
|
701
|
+
queueMicrotask(() => this.flushGroupedUpdates());
|
|
702
|
+
}
|
|
703
|
+
return true;
|
|
704
|
+
}
|
|
705
|
+
flushGroupedUpdates() {
|
|
706
|
+
this.flushQueued = false;
|
|
707
|
+
if (this.pendingUpdates.size === 0) {
|
|
708
|
+
return;
|
|
709
|
+
}
|
|
710
|
+
const members = this.children().filter((child) => child.canGroupAnimateNow());
|
|
711
|
+
for (const member of members) {
|
|
712
|
+
member.prepareGroupedUpdate();
|
|
713
|
+
}
|
|
714
|
+
for (const applyUpdate of this.pendingUpdates.values()) {
|
|
715
|
+
applyUpdate();
|
|
716
|
+
}
|
|
717
|
+
this.pendingUpdates.clear();
|
|
718
|
+
for (const member of members) {
|
|
719
|
+
member.queueGroupedAnimation();
|
|
720
|
+
}
|
|
721
|
+
}
|
|
722
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DigitRollerGroupDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
723
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.2.4", type: DigitRollerGroupDirective, isStandalone: true, selector: "[ngsDigitRollerGroup]", providers: [
|
|
724
|
+
{
|
|
725
|
+
provide: DIGIT_ROLLER_GROUP,
|
|
726
|
+
useExisting: forwardRef(() => DigitRollerGroupDirective),
|
|
727
|
+
},
|
|
728
|
+
], queries: [{ propertyName: "children", predicate: DigitRoller, descendants: true, isSignal: true }], ngImport: i0 });
|
|
729
|
+
}
|
|
730
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DigitRollerGroupDirective, decorators: [{
|
|
731
|
+
type: Directive,
|
|
732
|
+
args: [{
|
|
733
|
+
selector: '[ngsDigitRollerGroup]',
|
|
734
|
+
providers: [
|
|
735
|
+
{
|
|
736
|
+
provide: DIGIT_ROLLER_GROUP,
|
|
737
|
+
useExisting: forwardRef(() => DigitRollerGroupDirective),
|
|
738
|
+
},
|
|
739
|
+
],
|
|
740
|
+
}]
|
|
741
|
+
}], propDecorators: { children: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => DigitRoller), { ...{ descendants: true }, isSignal: true }] }] } });
|
|
742
|
+
|
|
743
|
+
/**
|
|
744
|
+
* Generated bundle index. Do not edit.
|
|
745
|
+
*/
|
|
746
|
+
|
|
747
|
+
export { DIGIT_ROLLER_EMPTY_FORMATTED, DigitRoller, DigitRollerGroupDirective };
|
|
748
|
+
//# sourceMappingURL=ngstarter-ui-components-digit-roller.mjs.map
|