tickera-angular-components 0.0.1-dev.36 → 0.0.1-dev.38
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.
|
@@ -3207,6 +3207,217 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
|
|
|
3207
3207
|
args: [{ providedIn: 'root' }]
|
|
3208
3208
|
}] });
|
|
3209
3209
|
|
|
3210
|
+
class TicketMapZoomService {
|
|
3211
|
+
currentZoom = signal(1, ...(ngDevMode ? [{ debugName: "currentZoom" }] : []));
|
|
3212
|
+
stage;
|
|
3213
|
+
bookingDataService = inject(PerformanceBookingDataService);
|
|
3214
|
+
defaultConfig = {
|
|
3215
|
+
minZoom: 0.3,
|
|
3216
|
+
maxZoom: 5,
|
|
3217
|
+
zoomStep: 0.1,
|
|
3218
|
+
scaleBy: 1.1,
|
|
3219
|
+
};
|
|
3220
|
+
constructor() { }
|
|
3221
|
+
/**
|
|
3222
|
+
* Set the Konva stage instance
|
|
3223
|
+
*/
|
|
3224
|
+
setStage(stage) {
|
|
3225
|
+
this.stage = stage;
|
|
3226
|
+
}
|
|
3227
|
+
/**
|
|
3228
|
+
* Zoom in by one step
|
|
3229
|
+
*/
|
|
3230
|
+
zoomIn() {
|
|
3231
|
+
if (!this.stage)
|
|
3232
|
+
return;
|
|
3233
|
+
const newScale = Math.min(this.defaultConfig.maxZoom, this.currentZoom() + this.defaultConfig.zoomStep);
|
|
3234
|
+
this.applyZoom(newScale);
|
|
3235
|
+
}
|
|
3236
|
+
/**
|
|
3237
|
+
* Zoom out by one step
|
|
3238
|
+
*/
|
|
3239
|
+
zoomOut() {
|
|
3240
|
+
if (!this.stage)
|
|
3241
|
+
return;
|
|
3242
|
+
const newScale = Math.max(this.defaultConfig.minZoom, this.currentZoom() - this.defaultConfig.zoomStep);
|
|
3243
|
+
this.applyZoom(newScale);
|
|
3244
|
+
}
|
|
3245
|
+
/**
|
|
3246
|
+
* Reset zoom to 100%
|
|
3247
|
+
*/
|
|
3248
|
+
resetZoom() {
|
|
3249
|
+
if (!this.stage)
|
|
3250
|
+
return;
|
|
3251
|
+
this.applyZoom(1);
|
|
3252
|
+
}
|
|
3253
|
+
/**
|
|
3254
|
+
* Get current zoom as percentage string
|
|
3255
|
+
*/
|
|
3256
|
+
getZoomPercentage() {
|
|
3257
|
+
return Math.round(this.currentZoom() * 100) + '%';
|
|
3258
|
+
}
|
|
3259
|
+
/**
|
|
3260
|
+
* Get current zoom value
|
|
3261
|
+
*/
|
|
3262
|
+
getCurrentZoom() {
|
|
3263
|
+
return this.currentZoom();
|
|
3264
|
+
}
|
|
3265
|
+
/**
|
|
3266
|
+
* Apply zoom with center point
|
|
3267
|
+
*/
|
|
3268
|
+
applyZoom(newScale) {
|
|
3269
|
+
if (!this.stage)
|
|
3270
|
+
return;
|
|
3271
|
+
const oldScale = this.stage.scaleX();
|
|
3272
|
+
const stageCenter = {
|
|
3273
|
+
x: this.stage.width() / 2,
|
|
3274
|
+
y: this.stage.height() / 2,
|
|
3275
|
+
};
|
|
3276
|
+
const mousePointTo = {
|
|
3277
|
+
x: (stageCenter.x - this.stage.x()) / oldScale,
|
|
3278
|
+
y: (stageCenter.y - this.stage.y()) / oldScale,
|
|
3279
|
+
};
|
|
3280
|
+
this.applyZoomScale(newScale, stageCenter, mousePointTo);
|
|
3281
|
+
}
|
|
3282
|
+
/**
|
|
3283
|
+
* Apply zoom scale with specific center point
|
|
3284
|
+
*/
|
|
3285
|
+
applyZoomScale(newScale, centerPoint, mousePointTo) {
|
|
3286
|
+
if (!this.stage)
|
|
3287
|
+
return;
|
|
3288
|
+
this.stage.scaleX(newScale);
|
|
3289
|
+
this.stage.scaleY(newScale);
|
|
3290
|
+
const newPos = {
|
|
3291
|
+
x: centerPoint.x - mousePointTo.x * newScale,
|
|
3292
|
+
y: centerPoint.y - mousePointTo.y * newScale,
|
|
3293
|
+
};
|
|
3294
|
+
this.stage.position(newPos);
|
|
3295
|
+
this.stage.batchDraw();
|
|
3296
|
+
this.currentZoom.set(newScale);
|
|
3297
|
+
this.bookingDataService.updateStageConfig({
|
|
3298
|
+
scaleX: newScale,
|
|
3299
|
+
scaleY: newScale,
|
|
3300
|
+
x: this.stage.x(),
|
|
3301
|
+
y: this.stage.y(),
|
|
3302
|
+
});
|
|
3303
|
+
}
|
|
3304
|
+
/**
|
|
3305
|
+
* Handle mouse wheel zoom toward the cursor position
|
|
3306
|
+
*/
|
|
3307
|
+
handleWheelZoom(deltaY) {
|
|
3308
|
+
if (!this.stage)
|
|
3309
|
+
return;
|
|
3310
|
+
const oldScale = this.currentZoom();
|
|
3311
|
+
const pointer = this.stage.getPointerPosition();
|
|
3312
|
+
if (!pointer)
|
|
3313
|
+
return;
|
|
3314
|
+
const scaleBy = this.defaultConfig.scaleBy;
|
|
3315
|
+
const direction = deltaY > 0 ? -1 : 1;
|
|
3316
|
+
const newScale = direction > 0 ? oldScale * scaleBy : oldScale / scaleBy;
|
|
3317
|
+
if (newScale < this.defaultConfig.minZoom || newScale > this.defaultConfig.maxZoom)
|
|
3318
|
+
return;
|
|
3319
|
+
const mousePointTo = {
|
|
3320
|
+
x: (pointer.x - this.stage.x()) / oldScale,
|
|
3321
|
+
y: (pointer.y - this.stage.y()) / oldScale,
|
|
3322
|
+
};
|
|
3323
|
+
this.applyZoomScale(newScale, pointer, mousePointTo);
|
|
3324
|
+
}
|
|
3325
|
+
/**
|
|
3326
|
+
* Fit the content bounds to fill the stage container
|
|
3327
|
+
*/
|
|
3328
|
+
fitToContainer(padding = 24) {
|
|
3329
|
+
if (!this.stage)
|
|
3330
|
+
return;
|
|
3331
|
+
const containerEl = this.stage.container().parentElement;
|
|
3332
|
+
if (!containerEl)
|
|
3333
|
+
return;
|
|
3334
|
+
const containerWidth = containerEl.offsetWidth;
|
|
3335
|
+
const containerHeight = containerEl.offsetHeight;
|
|
3336
|
+
if (containerWidth === 0 || containerHeight === 0)
|
|
3337
|
+
return;
|
|
3338
|
+
const renderData = this.bookingDataService.renderData();
|
|
3339
|
+
if (renderData.length === 0)
|
|
3340
|
+
return;
|
|
3341
|
+
let minX = Infinity, minY = Infinity;
|
|
3342
|
+
let maxX = -Infinity, maxY = -Infinity;
|
|
3343
|
+
for (const el of renderData) {
|
|
3344
|
+
const c = el.shapeConfig;
|
|
3345
|
+
if (c['x'] !== undefined) {
|
|
3346
|
+
minX = Math.min(minX, c['x']);
|
|
3347
|
+
maxX = Math.max(maxX, c['x'] + (c['width'] || 0));
|
|
3348
|
+
}
|
|
3349
|
+
if (c['y'] !== undefined) {
|
|
3350
|
+
minY = Math.min(minY, c['y']);
|
|
3351
|
+
maxY = Math.max(maxY, c['y'] + (c['height'] || 0));
|
|
3352
|
+
}
|
|
3353
|
+
}
|
|
3354
|
+
if (!isFinite(minX))
|
|
3355
|
+
return;
|
|
3356
|
+
const contentW = maxX - minX;
|
|
3357
|
+
const contentH = maxY - minY;
|
|
3358
|
+
if (contentW <= 0 || contentH <= 0)
|
|
3359
|
+
return;
|
|
3360
|
+
setTimeout(() => {
|
|
3361
|
+
if (this.stage) {
|
|
3362
|
+
this.fitToBounds({ x: minX, y: minY, width: contentW, height: contentH }, containerWidth, containerHeight, padding);
|
|
3363
|
+
}
|
|
3364
|
+
});
|
|
3365
|
+
}
|
|
3366
|
+
/**
|
|
3367
|
+
* Get current stage position
|
|
3368
|
+
*/
|
|
3369
|
+
getStagePosition() {
|
|
3370
|
+
if (!this.stage)
|
|
3371
|
+
return { x: 0, y: 0 };
|
|
3372
|
+
return this.stage.position();
|
|
3373
|
+
}
|
|
3374
|
+
/**
|
|
3375
|
+
* Set stage position (useful for programmatic panning)
|
|
3376
|
+
*/
|
|
3377
|
+
setStagePosition(position) {
|
|
3378
|
+
if (!this.stage)
|
|
3379
|
+
return;
|
|
3380
|
+
this.stage.position(position);
|
|
3381
|
+
this.stage.batchDraw();
|
|
3382
|
+
}
|
|
3383
|
+
/**
|
|
3384
|
+
* Fit the stage content bounds to the container, centering and scaling
|
|
3385
|
+
* to show the full content with optional padding.
|
|
3386
|
+
*/
|
|
3387
|
+
fitToBounds(contentBounds, containerWidth, containerHeight, padding = 24) {
|
|
3388
|
+
if (!this.stage)
|
|
3389
|
+
return;
|
|
3390
|
+
const { x, y, width, height } = contentBounds;
|
|
3391
|
+
const contentW = Math.max(width, 1);
|
|
3392
|
+
const contentH = Math.max(height, 1);
|
|
3393
|
+
const scaleX = (containerWidth - padding * 2) / contentW;
|
|
3394
|
+
const scaleY = (containerHeight - padding * 2) / contentH;
|
|
3395
|
+
const newScale = Math.min(scaleX, scaleY);
|
|
3396
|
+
const offsetX = (containerWidth - contentW * newScale) / 2;
|
|
3397
|
+
const offsetY = (containerHeight - contentH * newScale) / 2;
|
|
3398
|
+
this.stage.scaleX(newScale);
|
|
3399
|
+
this.stage.scaleY(newScale);
|
|
3400
|
+
this.stage.position({
|
|
3401
|
+
x: offsetX - x * newScale,
|
|
3402
|
+
y: offsetY - y * newScale,
|
|
3403
|
+
});
|
|
3404
|
+
this.stage.batchDraw();
|
|
3405
|
+
this.currentZoom.set(newScale);
|
|
3406
|
+
this.bookingDataService.updateStageConfig({
|
|
3407
|
+
scaleX: newScale,
|
|
3408
|
+
scaleY: newScale,
|
|
3409
|
+
x: this.stage.x(),
|
|
3410
|
+
y: this.stage.y(),
|
|
3411
|
+
});
|
|
3412
|
+
}
|
|
3413
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TicketMapZoomService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
3414
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TicketMapZoomService, providedIn: 'root' });
|
|
3415
|
+
}
|
|
3416
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TicketMapZoomService, decorators: [{
|
|
3417
|
+
type: Injectable,
|
|
3418
|
+
args: [{ providedIn: 'root' }]
|
|
3419
|
+
}], ctorParameters: () => [] });
|
|
3420
|
+
|
|
3210
3421
|
const authInterceptor = (req, next) => {
|
|
3211
3422
|
const platformId = inject(PLATFORM_ID);
|
|
3212
3423
|
const config = inject(TICKERA_COMPONENTS_CONFIG);
|
|
@@ -6178,7 +6389,7 @@ class ProductMultiSelectComponent {
|
|
|
6178
6389
|
useExisting: forwardRef(() => ProductMultiSelectComponent),
|
|
6179
6390
|
multi: true,
|
|
6180
6391
|
},
|
|
6181
|
-
], ngImport: i0, template: "<div class=\"product-multi-select\">\n @if (label) {\n <label class=\"product-multi-select-label\">\n {{ label }}\n </label>\n }\n\n @if (selectedIds.length > 0) {\n <div class=\"product-multi-select-tags\">\n @for (id of selectedIds; track id) {\n @let product = getProductOption(id);\n <span class=\"product-multi-select-tag\">\n @if (product?.imageUrl) {\n <img [src]=\"product!.imageUrl\" alt=\"\" class=\"product-multi-select-tag-image\" />\n }\n {{ product?.label ?? id }}\n <button
|
|
6392
|
+
], ngImport: i0, template: "<div class=\"product-multi-select\">\n @if (label) {\n <label class=\"product-multi-select-label\">\n {{ label }}\n </label>\n }\n\n @if (selectedIds.length > 0) {\n <div class=\"product-multi-select-tags\">\n @for (id of selectedIds; track id) {\n @let product = getProductOption(id);\n <span class=\"product-multi-select-tag\">\n @if (product?.imageUrl) {\n <img [src]=\"product!.imageUrl\" alt=\"\" class=\"product-multi-select-tag-image\" />\n }\n {{ product?.label ?? id }}\n <button type=\"button\" class=\"product-multi-select-tag-remove\" (click)=\"removeProduct(id)\">\n ×\n </button>\n </span>\n }\n </div>\n }\n\n <input\n type=\"text\"\n [placeholder]=\"placeholder\"\n class=\"product-multi-select-search\"\n (input)=\"onSearchChange($event)\"\n />\n\n @if (loading()) {\n <div class=\"product-multi-select-loading\">\n <div class=\"product-multi-select-spinner\"></div>\n Cargando productos...\n </div>\n }\n\n @if (!loading() && filteredProducts().length > 0) {\n <div class=\"product-multi-select-list\">\n @for (p of filteredProducts(); track p.value) {\n <label class=\"product-multi-select-option\">\n <input\n type=\"checkbox\"\n [checked]=\"isSelected(p.value)\"\n (change)=\"toggleProduct(p.value)\"\n class=\"product-multi-select-checkbox\"\n />\n @if (p.imageUrl) {\n <img [src]=\"p.imageUrl\" alt=\"\" class=\"product-multi-select-option-image\" />\n } @else {\n <div class=\"product-multi-select-option-image-placeholder\">\n <i class=\"ri-image-line\"></i>\n </div>\n }\n <span class=\"product-multi-select-option-label\">{{ p.label }}</span>\n </label>\n }\n </div>\n }\n\n @if (!loading() && filteredProducts().length === 0) {\n <p class=\"product-multi-select-empty\">No se encontraron productos</p>\n }\n</div>\n", styles: [".product-multi-select{width:100%}.product-multi-select-label{display:block;font-size:.875rem;font-weight:500;color:#374151;margin-bottom:.25rem}@media(prefers-color-scheme:dark){.product-multi-select-label{color:#d1d5db}}.product-multi-select-tags{display:flex;flex-wrap:wrap;gap:.25rem;margin-bottom:.5rem}.product-multi-select-tag{display:inline-flex;align-items:center;gap:.25rem;padding:.25rem .5rem;border-radius:9999px;font-size:.75rem;font-weight:500;background-color:#dcfce7;color:#166534}.product-multi-select-tag-image{width:1rem;height:1rem;border-radius:9999px;object-fit:cover}.product-multi-select-tag-remove{margin-left:.25rem;line-height:1}.product-multi-select-tag-remove:hover{color:#16a34a}.product-multi-select-search{width:100%;padding:.5rem .75rem;border:1px solid #d1d5db;border-radius:.375rem;font-size:.875rem}.product-multi-select-search:focus{outline:none;box-shadow:0 0 0 2px #22c55e;border-color:transparent}.product-multi-select-loading{display:flex;align-items:center;gap:.5rem;margin-top:.5rem;font-size:.875rem;color:#6b7280}.product-multi-select-spinner{width:1rem;height:1rem;border:2px solid #e5e7eb;border-top-color:#22c55e;border-radius:9999px;animation:product-multi-select-spin .6s linear infinite}.product-multi-select-list{margin-top:.25rem;max-height:12rem;overflow-y:auto;border:1px solid #e5e7eb;border-radius:.375rem}.product-multi-select-list>*+*{border-top:1px solid #f3f4f6}.product-multi-select-option{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;font-size:.875rem;cursor:pointer}.product-multi-select-option:hover{background-color:#f9fafb}.product-multi-select-checkbox{width:1rem;height:1rem;accent-color:#22c55e;cursor:pointer}.product-multi-select-option-image{width:1.5rem;height:1.5rem;border-radius:.125rem;object-fit:cover}.product-multi-select-option-image-placeholder{width:1.5rem;height:1.5rem;border-radius:.125rem;background-color:#e5e7eb;display:flex;align-items:center;justify-content:center}.product-multi-select-option-image-placeholder i{color:#9ca3af;font-size:.75rem}.product-multi-select-option-label{color:#374151;-webkit-user-select:none;user-select:none}.product-multi-select-empty{font-size:.875rem;color:#6b7280;margin-top:.25rem}@keyframes product-multi-select-spin{to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
6182
6393
|
}
|
|
6183
6394
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ProductMultiSelectComponent, decorators: [{
|
|
6184
6395
|
type: Component,
|
|
@@ -6188,7 +6399,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
|
|
|
6188
6399
|
useExisting: forwardRef(() => ProductMultiSelectComponent),
|
|
6189
6400
|
multi: true,
|
|
6190
6401
|
},
|
|
6191
|
-
], template: "<div class=\"product-multi-select\">\n @if (label) {\n <label class=\"product-multi-select-label\">\n {{ label }}\n </label>\n }\n\n @if (selectedIds.length > 0) {\n <div class=\"product-multi-select-tags\">\n @for (id of selectedIds; track id) {\n @let product = getProductOption(id);\n <span class=\"product-multi-select-tag\">\n @if (product?.imageUrl) {\n <img [src]=\"product!.imageUrl\" alt=\"\" class=\"product-multi-select-tag-image\" />\n }\n {{ product?.label ?? id }}\n <button
|
|
6402
|
+
], template: "<div class=\"product-multi-select\">\n @if (label) {\n <label class=\"product-multi-select-label\">\n {{ label }}\n </label>\n }\n\n @if (selectedIds.length > 0) {\n <div class=\"product-multi-select-tags\">\n @for (id of selectedIds; track id) {\n @let product = getProductOption(id);\n <span class=\"product-multi-select-tag\">\n @if (product?.imageUrl) {\n <img [src]=\"product!.imageUrl\" alt=\"\" class=\"product-multi-select-tag-image\" />\n }\n {{ product?.label ?? id }}\n <button type=\"button\" class=\"product-multi-select-tag-remove\" (click)=\"removeProduct(id)\">\n ×\n </button>\n </span>\n }\n </div>\n }\n\n <input\n type=\"text\"\n [placeholder]=\"placeholder\"\n class=\"product-multi-select-search\"\n (input)=\"onSearchChange($event)\"\n />\n\n @if (loading()) {\n <div class=\"product-multi-select-loading\">\n <div class=\"product-multi-select-spinner\"></div>\n Cargando productos...\n </div>\n }\n\n @if (!loading() && filteredProducts().length > 0) {\n <div class=\"product-multi-select-list\">\n @for (p of filteredProducts(); track p.value) {\n <label class=\"product-multi-select-option\">\n <input\n type=\"checkbox\"\n [checked]=\"isSelected(p.value)\"\n (change)=\"toggleProduct(p.value)\"\n class=\"product-multi-select-checkbox\"\n />\n @if (p.imageUrl) {\n <img [src]=\"p.imageUrl\" alt=\"\" class=\"product-multi-select-option-image\" />\n } @else {\n <div class=\"product-multi-select-option-image-placeholder\">\n <i class=\"ri-image-line\"></i>\n </div>\n }\n <span class=\"product-multi-select-option-label\">{{ p.label }}</span>\n </label>\n }\n </div>\n }\n\n @if (!loading() && filteredProducts().length === 0) {\n <p class=\"product-multi-select-empty\">No se encontraron productos</p>\n }\n</div>\n", styles: [".product-multi-select{width:100%}.product-multi-select-label{display:block;font-size:.875rem;font-weight:500;color:#374151;margin-bottom:.25rem}@media(prefers-color-scheme:dark){.product-multi-select-label{color:#d1d5db}}.product-multi-select-tags{display:flex;flex-wrap:wrap;gap:.25rem;margin-bottom:.5rem}.product-multi-select-tag{display:inline-flex;align-items:center;gap:.25rem;padding:.25rem .5rem;border-radius:9999px;font-size:.75rem;font-weight:500;background-color:#dcfce7;color:#166534}.product-multi-select-tag-image{width:1rem;height:1rem;border-radius:9999px;object-fit:cover}.product-multi-select-tag-remove{margin-left:.25rem;line-height:1}.product-multi-select-tag-remove:hover{color:#16a34a}.product-multi-select-search{width:100%;padding:.5rem .75rem;border:1px solid #d1d5db;border-radius:.375rem;font-size:.875rem}.product-multi-select-search:focus{outline:none;box-shadow:0 0 0 2px #22c55e;border-color:transparent}.product-multi-select-loading{display:flex;align-items:center;gap:.5rem;margin-top:.5rem;font-size:.875rem;color:#6b7280}.product-multi-select-spinner{width:1rem;height:1rem;border:2px solid #e5e7eb;border-top-color:#22c55e;border-radius:9999px;animation:product-multi-select-spin .6s linear infinite}.product-multi-select-list{margin-top:.25rem;max-height:12rem;overflow-y:auto;border:1px solid #e5e7eb;border-radius:.375rem}.product-multi-select-list>*+*{border-top:1px solid #f3f4f6}.product-multi-select-option{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;font-size:.875rem;cursor:pointer}.product-multi-select-option:hover{background-color:#f9fafb}.product-multi-select-checkbox{width:1rem;height:1rem;accent-color:#22c55e;cursor:pointer}.product-multi-select-option-image{width:1.5rem;height:1.5rem;border-radius:.125rem;object-fit:cover}.product-multi-select-option-image-placeholder{width:1.5rem;height:1.5rem;border-radius:.125rem;background-color:#e5e7eb;display:flex;align-items:center;justify-content:center}.product-multi-select-option-image-placeholder i{color:#9ca3af;font-size:.75rem}.product-multi-select-option-label{color:#374151;-webkit-user-select:none;user-select:none}.product-multi-select-empty{font-size:.875rem;color:#6b7280;margin-top:.25rem}@keyframes product-multi-select-spin{to{transform:rotate(360deg)}}\n"] }]
|
|
6192
6403
|
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
6193
6404
|
type: Inject,
|
|
6194
6405
|
args: [PLATFORM_ID]
|
|
@@ -6813,11 +7024,11 @@ class ShowsFilterComponent {
|
|
|
6813
7024
|
this.listEventService.setSelectedPerformance(null);
|
|
6814
7025
|
}
|
|
6815
7026
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ShowsFilterComponent, deps: [{ token: PLATFORM_ID }, { token: ShowService }, { token: PerformancesListEventsService }, { token: ToastService }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Component });
|
|
6816
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: ShowsFilterComponent, isStandalone: true, selector: "shows-filter", ngImport: i0, template: "<div class=\"shows-filter\">\n @if (shows().length > 0) {\n <p class=\"shows-filter-heading\">Filtrar por evento</p>\n }\n\n @if (loadingData()) {\n @for (i of [1, 2, 3]; track $index) {\n <div class=\"shows-filter-skeleton\"></div>\n }\n }\n\n @for (show of shows(); track $index) {\n <div class=\"shows-filter-item\" [class.shows-filter-item--active]=\"isActive(show.id)\">\n <div class=\"shows-filter-item-info\">\n <span class=\"shows-filter-item-image\">\n @if (show.images.length > 0) {\n <img [src]=\"show.images[0].full_url\" class=\"shows-filter-item-image-img\" />\n } @else {\n <span class=\"shows-filter-item-image-placeholder\"></span>\n }\n </span>\n\n <div>\n <div class=\"shows-filter-item-title\">{{ show.title }}</div>\n @if (show.performances_quantity && show.performances_quantity > 0) {\n <div class=\"shows-filter-item-count\"
|
|
7027
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: ShowsFilterComponent, isStandalone: true, selector: "shows-filter", ngImport: i0, template: "<div class=\"shows-filter\">\n @if (shows().length > 0) {\n <p class=\"shows-filter-heading\">Filtrar por evento</p>\n }\n\n @if (loadingData()) {\n @for (i of [1, 2, 3]; track $index) {\n <div class=\"shows-filter-skeleton\"></div>\n }\n }\n\n @for (show of shows(); track $index) {\n <div class=\"shows-filter-item\" [class.shows-filter-item--active]=\"isActive(show.id)\">\n <div class=\"shows-filter-item-info\">\n <span class=\"shows-filter-item-image\">\n @if (show.images.length > 0) {\n <img [src]=\"show.images[0].full_url\" class=\"shows-filter-item-image-img\" />\n } @else {\n <span class=\"shows-filter-item-image-placeholder\"></span>\n }\n </span>\n\n <div>\n <div class=\"shows-filter-item-title\">{{ show.title }}</div>\n @if (show.performances_quantity && show.performances_quantity > 0) {\n <div class=\"shows-filter-item-count\">{{ show.performances_quantity }} funciones</div>\n }\n </div>\n </div>\n\n <div class=\"shows-filter-item-actions\">\n @if (isActive(show.id)) {\n <app-button\n variant=\"tertiary\"\n icon=\"ri-close-line\"\n size=\"xs\"\n (clicked)=\"onFilter(show)\"\n />\n } @else {\n <app-button variant=\"primary\" text=\"Filtrar\" size=\"xs\" (clicked)=\"onFilter(show)\" />\n }\n </div>\n </div>\n }\n</div>\n", styles: [".shows-filter{display:flex;flex-direction:column;gap:.5rem;width:100%}.shows-filter-heading{font-size:11px;font-weight:600;letter-spacing:.25em;color:#6b7280;text-transform:uppercase}.shows-filter-skeleton{height:3.75rem;width:100%;border-radius:.75rem;border:1px solid #e5e7eb;background-color:#f3f4f6;animation:shows-filter-pulse 2s cubic-bezier(.4,0,.6,1) infinite}@media(prefers-color-scheme:dark){.shows-filter-skeleton{border-color:#6b72801a;background-color:#6b728008}}.shows-filter-item{display:flex;align-items:center;justify-content:space-between;border-radius:.75rem;border:1px solid rgba(107,114,128,.1);background-color:#6b728005;padding:.75rem;width:100%}.shows-filter-item--active{box-shadow:0 0 0 1px #ef444480,0 0 16px #ef444459}.shows-filter-item-info{display:flex;align-items:center;gap:.75rem}.shows-filter-item-image{height:2.5rem;width:2.5rem;border-radius:.125rem;overflow:hidden}.shows-filter-item-image-img{object-fit:contain;object-position:center;max-height:100%;max-width:100%;margin-left:auto;margin-right:auto}.shows-filter-item-image-placeholder{display:flex;background-color:#e5e7eb;height:100%;width:100%;animation:shows-filter-pulse 2s cubic-bezier(.4,0,.6,1) infinite}.shows-filter-item-title{font-size:.875rem;font-weight:600;color:#6b7280}.shows-filter-item-count{font-size:11px;color:#6b7280}.shows-filter-item-actions{font-size:.875rem;font-weight:700;color:#6b7280}@keyframes shows-filter-pulse{0%,to{opacity:1}50%{opacity:.5}}\n"], dependencies: [{ kind: "component", type: AppButtonComponent, selector: "app-button", inputs: ["disabled", "loading", "type", "variant", "text", "size", "loadingText", "icon"], outputs: ["clicked"] }, { kind: "ngmodule", type: CommonModule }] });
|
|
6817
7028
|
}
|
|
6818
7029
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ShowsFilterComponent, decorators: [{
|
|
6819
7030
|
type: Component,
|
|
6820
|
-
args: [{ selector: 'shows-filter', standalone: true, imports: [AppButtonComponent, CommonModule], template: "<div class=\"shows-filter\">\n @if (shows().length > 0) {\n <p class=\"shows-filter-heading\">Filtrar por evento</p>\n }\n\n @if (loadingData()) {\n @for (i of [1, 2, 3]; track $index) {\n <div class=\"shows-filter-skeleton\"></div>\n }\n }\n\n @for (show of shows(); track $index) {\n <div class=\"shows-filter-item\" [class.shows-filter-item--active]=\"isActive(show.id)\">\n <div class=\"shows-filter-item-info\">\n <span class=\"shows-filter-item-image\">\n @if (show.images.length > 0) {\n <img [src]=\"show.images[0].full_url\" class=\"shows-filter-item-image-img\" />\n } @else {\n <span class=\"shows-filter-item-image-placeholder\"></span>\n }\n </span>\n\n <div>\n <div class=\"shows-filter-item-title\">{{ show.title }}</div>\n @if (show.performances_quantity && show.performances_quantity > 0) {\n <div class=\"shows-filter-item-count\"
|
|
7031
|
+
args: [{ selector: 'shows-filter', standalone: true, imports: [AppButtonComponent, CommonModule], template: "<div class=\"shows-filter\">\n @if (shows().length > 0) {\n <p class=\"shows-filter-heading\">Filtrar por evento</p>\n }\n\n @if (loadingData()) {\n @for (i of [1, 2, 3]; track $index) {\n <div class=\"shows-filter-skeleton\"></div>\n }\n }\n\n @for (show of shows(); track $index) {\n <div class=\"shows-filter-item\" [class.shows-filter-item--active]=\"isActive(show.id)\">\n <div class=\"shows-filter-item-info\">\n <span class=\"shows-filter-item-image\">\n @if (show.images.length > 0) {\n <img [src]=\"show.images[0].full_url\" class=\"shows-filter-item-image-img\" />\n } @else {\n <span class=\"shows-filter-item-image-placeholder\"></span>\n }\n </span>\n\n <div>\n <div class=\"shows-filter-item-title\">{{ show.title }}</div>\n @if (show.performances_quantity && show.performances_quantity > 0) {\n <div class=\"shows-filter-item-count\">{{ show.performances_quantity }} funciones</div>\n }\n </div>\n </div>\n\n <div class=\"shows-filter-item-actions\">\n @if (isActive(show.id)) {\n <app-button\n variant=\"tertiary\"\n icon=\"ri-close-line\"\n size=\"xs\"\n (clicked)=\"onFilter(show)\"\n />\n } @else {\n <app-button variant=\"primary\" text=\"Filtrar\" size=\"xs\" (clicked)=\"onFilter(show)\" />\n }\n </div>\n </div>\n }\n</div>\n", styles: [".shows-filter{display:flex;flex-direction:column;gap:.5rem;width:100%}.shows-filter-heading{font-size:11px;font-weight:600;letter-spacing:.25em;color:#6b7280;text-transform:uppercase}.shows-filter-skeleton{height:3.75rem;width:100%;border-radius:.75rem;border:1px solid #e5e7eb;background-color:#f3f4f6;animation:shows-filter-pulse 2s cubic-bezier(.4,0,.6,1) infinite}@media(prefers-color-scheme:dark){.shows-filter-skeleton{border-color:#6b72801a;background-color:#6b728008}}.shows-filter-item{display:flex;align-items:center;justify-content:space-between;border-radius:.75rem;border:1px solid rgba(107,114,128,.1);background-color:#6b728005;padding:.75rem;width:100%}.shows-filter-item--active{box-shadow:0 0 0 1px #ef444480,0 0 16px #ef444459}.shows-filter-item-info{display:flex;align-items:center;gap:.75rem}.shows-filter-item-image{height:2.5rem;width:2.5rem;border-radius:.125rem;overflow:hidden}.shows-filter-item-image-img{object-fit:contain;object-position:center;max-height:100%;max-width:100%;margin-left:auto;margin-right:auto}.shows-filter-item-image-placeholder{display:flex;background-color:#e5e7eb;height:100%;width:100%;animation:shows-filter-pulse 2s cubic-bezier(.4,0,.6,1) infinite}.shows-filter-item-title{font-size:.875rem;font-weight:600;color:#6b7280}.shows-filter-item-count{font-size:11px;color:#6b7280}.shows-filter-item-actions{font-size:.875rem;font-weight:700;color:#6b7280}@keyframes shows-filter-pulse{0%,to{opacity:1}50%{opacity:.5}}\n"] }]
|
|
6821
7032
|
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
6822
7033
|
type: Inject,
|
|
6823
7034
|
args: [PLATFORM_ID]
|
|
@@ -6861,11 +7072,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
|
|
|
6861
7072
|
class TicketMapWidgetHeaderComponent {
|
|
6862
7073
|
title = '';
|
|
6863
7074
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TicketMapWidgetHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6864
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: TicketMapWidgetHeaderComponent, isStandalone: true, selector: "ticket-map-widget-header", inputs: { title: "title" }, ngImport: i0, template: "<div class=\"ticket-map-widget-header\">\n @if (title) {\n <p class=\"ticket-map-widget-header__title\">{{ title }}</p>\n }\n\n <div class=\"ticket-map-widget-header__content\">\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [".ticket-map-widget-header{display:flex;flex-direction:row;align-items:center;justify-content:start;gap:.5rem}.ticket-map-widget-header__title{font-weight:700;color:#374151;font-size:.875rem;text-transform:uppercase}.ticket-map-widget-header__content{display:flex;align-items:center;justify-content:end}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
7075
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: TicketMapWidgetHeaderComponent, isStandalone: true, selector: "ticket-map-widget-header", inputs: { title: "title" }, ngImport: i0, template: "<div class=\"ticket-map-widget-header\">\n @if (title) {\n <p class=\"ticket-map-widget-header__title\">{{ title }}</p>\n }\n\n <div class=\"ticket-map-widget-header__content\">\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [".ticket-map-widget-header{display:flex;flex-direction:row;align-items:center;justify-content:start;gap:.5rem}.ticket-map-widget-header__title{font-weight:700;color:#374151;font-size:.875rem;text-transform:uppercase}.ticket-map-widget-header__content{display:flex;align-items:center;justify-content:end;margin-left:auto}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
6865
7076
|
}
|
|
6866
7077
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TicketMapWidgetHeaderComponent, decorators: [{
|
|
6867
7078
|
type: Component,
|
|
6868
|
-
args: [{ selector: 'ticket-map-widget-header', standalone: true, imports: [CommonModule], template: "<div class=\"ticket-map-widget-header\">\n @if (title) {\n <p class=\"ticket-map-widget-header__title\">{{ title }}</p>\n }\n\n <div class=\"ticket-map-widget-header__content\">\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [".ticket-map-widget-header{display:flex;flex-direction:row;align-items:center;justify-content:start;gap:.5rem}.ticket-map-widget-header__title{font-weight:700;color:#374151;font-size:.875rem;text-transform:uppercase}.ticket-map-widget-header__content{display:flex;align-items:center;justify-content:end}\n"] }]
|
|
7079
|
+
args: [{ selector: 'ticket-map-widget-header', standalone: true, imports: [CommonModule], template: "<div class=\"ticket-map-widget-header\">\n @if (title) {\n <p class=\"ticket-map-widget-header__title\">{{ title }}</p>\n }\n\n <div class=\"ticket-map-widget-header__content\">\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [".ticket-map-widget-header{display:flex;flex-direction:row;align-items:center;justify-content:start;gap:.5rem}.ticket-map-widget-header__title{font-weight:700;color:#374151;font-size:.875rem;text-transform:uppercase}.ticket-map-widget-header__content{display:flex;align-items:center;justify-content:end;margin-left:auto}\n"] }]
|
|
6869
7080
|
}], propDecorators: { title: [{
|
|
6870
7081
|
type: Input
|
|
6871
7082
|
}] } });
|
|
@@ -6876,5 +7087,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
|
|
|
6876
7087
|
* Generated bundle index. Do not edit.
|
|
6877
7088
|
*/
|
|
6878
7089
|
|
|
6879
|
-
export { ADMIN_API_ROUTES, ALERT_ICONS, AdminSelectComponent, AdminService, ApiService, AppAlertComponent, AppButtonComponent, AppLinkButtonComponent, AppModalComponent, AsyncSelectComponent, AuditInformationComponent, BASE_BUTTON_CLASSES, BASE_INPUT_CLASSES, BUTTON_SIZES_CLASSES, BUTTON_VARIANT_CLASSES, BaseModalService, CITY_API_ENDPOINTS, COUNTRY_API_ENDPOINTS, CUSTOMERS_API_ROUTES, ChangePasswordFormComponent, ChangePasswordFormService, CitiesService, CitySelectComponent, ColorPickerComponent, CorporateBondStatus, CountrySelectComponent, CountryService, CouponApplicability, CouponDiscountType, CouponStatus, CustomerSelectComponent, CustomerService, DEFAULT_STAGE_CONFIG, DOCUMENT_TYPES_OPTIONS, DateInputComponent, DateService, DaySelectorGridComponent, DeleteConfirmationComponent, DeleteConfirmationService, DynamicTableComponent, ERROR_INPUT_CLASSES, EndDateGreaterThanStartValidator, FORM_ERROR_MESSAGES, FeedbackModalComponent, FeedbackModalService, FileType, FileUploadComponent, FileUploadPreviewComponent, FormEditorComponent, FormInputComponent, FormSelectComponent, FormTextareaComponent, GiftBondStatus, KONVA_SHAPE_MAPPINGS, LanguageSwitcherComponent, MinTodayValidator, MustMatchValidator, OrderItemType, OrderStatus, PAYMENT_METHODS_OPTIONS, PERFORMANCES_API_ROUTES, PRICE_ZONES_API_ROUTES, PRODUCTS_API_ROUTES, PRODUCT_CATEGORIES_API_ROUTES, PRODUCT_TAGS_API_ROUTES, PRODUCT_TYPES_API_ROUTES, PerformanceBookingDataService, PerformanceCardComponent, PerformanceCardListComponent, PerformanceMultiSelectComponent, PerformanceSelectComponent, PerformanceService, PerformanceStatus, PerformanceStepperComponent, PerformanceTicketStatus, PerformancesListEventsService, PriceZoneEventService, PriceZoneFormModalService, PriceZoneSelectComponent, PriceZoneService, ProductCategoryService, ProductMultiSelectComponent, ProductSelectComponent, ProductService, ProductTagService, ProductTypeService, RoomMapElementOrientation, RoomMapElementType, SHOWS_API_ROUTES, STATE_API_ENDPOINTS, SelectedDiscountCardType, ShowMultiSelectComponent, ShowSelectComponent, ShowService, ShowsFilterComponent, StateSelectComponent, StatesService, TICKERA_COMPONENTS_CONFIG, TICKET_ELEMENT_TYPES, TICKET_MAP_GRID_SIZE, TICKET_MAP_TITLE_HEIGHT, TICKET_STATUS_COLORS, TICKET_STATUS_FILLS, TICKET_STATUS_LABELS, TickeraTranslocoLoader, TicketMapWidgetComponent, TicketMapWidgetHeaderComponent, TicketSelectionDetailsService, TicketSelectionDiscountService, TicketSelectionService, TicketSelectionTotalsService, ToastService, ToggleSwitchComponent, VENUES_API_ROUTES, ZonePriceItemComponent, ZonePriceListComponent, authInterceptor, drawChairIcon$1 as drawChairIcon, drawHappyFace, drawRoundedRect, drawWheelchairIcon, findElementAtPosition, findTicketAtPosition, formatCitiesResponseToSelect, generateExitScene, generateHallwayScene, generateProductionAreaScene, generateSeatBlockScene, generateSeatBlockTicketScene, generateStageScene, generateStairScene, generateTableScene, generateTableTicketScene, generateUnavailableSpaceScene, generateZoneScene, getBrowserLanguage, getCustomerFullname, getItemTypeIcon, getStoredLanguage, numberToLetter$1 as numberToLetter, parseJsonToFormDataAdvanced, processElementsToRenderData, provideTickeraComponents, resolveLanguage, setStoredLanguage, tintColor, transformImageToFile };
|
|
7090
|
+
export { ADMIN_API_ROUTES, ALERT_ICONS, AdminSelectComponent, AdminService, ApiService, AppAlertComponent, AppButtonComponent, AppLinkButtonComponent, AppModalComponent, AsyncSelectComponent, AuditInformationComponent, BASE_BUTTON_CLASSES, BASE_INPUT_CLASSES, BUTTON_SIZES_CLASSES, BUTTON_VARIANT_CLASSES, BaseModalService, CITY_API_ENDPOINTS, COUNTRY_API_ENDPOINTS, CUSTOMERS_API_ROUTES, ChangePasswordFormComponent, ChangePasswordFormService, CitiesService, CitySelectComponent, ColorPickerComponent, CorporateBondStatus, CountrySelectComponent, CountryService, CouponApplicability, CouponDiscountType, CouponStatus, CustomerSelectComponent, CustomerService, DEFAULT_STAGE_CONFIG, DOCUMENT_TYPES_OPTIONS, DateInputComponent, DateService, DaySelectorGridComponent, DeleteConfirmationComponent, DeleteConfirmationService, DynamicTableComponent, ERROR_INPUT_CLASSES, EndDateGreaterThanStartValidator, FORM_ERROR_MESSAGES, FeedbackModalComponent, FeedbackModalService, FileType, FileUploadComponent, FileUploadPreviewComponent, FormEditorComponent, FormInputComponent, FormSelectComponent, FormTextareaComponent, GiftBondStatus, KONVA_SHAPE_MAPPINGS, LanguageSwitcherComponent, MinTodayValidator, MustMatchValidator, OrderItemType, OrderStatus, PAYMENT_METHODS_OPTIONS, PERFORMANCES_API_ROUTES, PRICE_ZONES_API_ROUTES, PRODUCTS_API_ROUTES, PRODUCT_CATEGORIES_API_ROUTES, PRODUCT_TAGS_API_ROUTES, PRODUCT_TYPES_API_ROUTES, PerformanceBookingDataService, PerformanceCardComponent, PerformanceCardListComponent, PerformanceMultiSelectComponent, PerformanceSelectComponent, PerformanceService, PerformanceStatus, PerformanceStepperComponent, PerformanceTicketStatus, PerformancesListEventsService, PriceZoneEventService, PriceZoneFormModalService, PriceZoneSelectComponent, PriceZoneService, ProductCategoryService, ProductMultiSelectComponent, ProductSelectComponent, ProductService, ProductTagService, ProductTypeService, RoomMapElementOrientation, RoomMapElementType, SHOWS_API_ROUTES, STATE_API_ENDPOINTS, SelectedDiscountCardType, ShowMultiSelectComponent, ShowSelectComponent, ShowService, ShowsFilterComponent, StateSelectComponent, StatesService, TICKERA_COMPONENTS_CONFIG, TICKET_ELEMENT_TYPES, TICKET_MAP_GRID_SIZE, TICKET_MAP_TITLE_HEIGHT, TICKET_STATUS_COLORS, TICKET_STATUS_FILLS, TICKET_STATUS_LABELS, TickeraTranslocoLoader, TicketMapWidgetComponent, TicketMapWidgetHeaderComponent, TicketMapZoomService, TicketSelectionDetailsService, TicketSelectionDiscountService, TicketSelectionService, TicketSelectionTotalsService, ToastService, ToggleSwitchComponent, VENUES_API_ROUTES, ZonePriceItemComponent, ZonePriceListComponent, authInterceptor, drawChairIcon$1 as drawChairIcon, drawHappyFace, drawRoundedRect, drawWheelchairIcon, findElementAtPosition, findTicketAtPosition, formatCitiesResponseToSelect, generateExitScene, generateHallwayScene, generateProductionAreaScene, generateSeatBlockScene, generateSeatBlockTicketScene, generateStageScene, generateStairScene, generateTableScene, generateTableTicketScene, generateUnavailableSpaceScene, generateZoneScene, getBrowserLanguage, getCustomerFullname, getItemTypeIcon, getStoredLanguage, numberToLetter$1 as numberToLetter, parseJsonToFormDataAdvanced, processElementsToRenderData, provideTickeraComponents, resolveLanguage, setStoredLanguage, tintColor, transformImageToFile };
|
|
6880
7091
|
//# sourceMappingURL=tickera-angular-components.mjs.map
|