@eduboxpro/studio 0.1.35 → 0.1.37

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.
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, inject, signal, effect, Injectable, makeEnvironmentProviders, ENVIRONMENT_INITIALIZER, input, computed, ChangeDetectionStrategy, Component, untracked, output, PLATFORM_ID, ElementRef, contentChild, viewChild, forwardRef, DOCUMENT as DOCUMENT$1, DestroyRef, Injector, model, afterNextRender, HostListener, Renderer2, TemplateRef, ContentChild, Input, Directive, contentChildren } from '@angular/core';
2
+ import { InjectionToken, inject, signal, effect, Injectable, makeEnvironmentProviders, ENVIRONMENT_INITIALIZER, input, computed, ChangeDetectionStrategy, Component, ViewEncapsulation, untracked, output, PLATFORM_ID, ElementRef, contentChild, viewChild, forwardRef, DOCUMENT as DOCUMENT$1, DestroyRef, Injector, model, afterNextRender, HostListener, Renderer2, TemplateRef, ContentChild, Input, Directive, contentChildren } from '@angular/core';
3
3
  import * as i1$1 from '@angular/common';
4
4
  import { DOCUMENT, CommonModule, isPlatformBrowser, NgTemplateOutlet } from '@angular/common';
5
5
  import * as LucideIcons from 'lucide-angular';
@@ -396,6 +396,115 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImpo
396
396
  `, styles: [":host{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}\n"] }]
397
397
  }], propDecorators: { name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: true }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], strokeWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "strokeWidth", required: false }] }], absoluteStrokeWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "absoluteStrokeWidth", required: false }] }], showFallback: [{ type: i0.Input, args: [{ isSignal: true, alias: "showFallback", required: false }] }], fallbackIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "fallbackIcon", required: false }] }] } });
398
398
 
399
+ class AvatarComponent {
400
+ /** Image source URL */
401
+ src = input(...(ngDevMode ? [undefined, { debugName: "src" }] : []));
402
+ /** Alt text for image */
403
+ alt = input('', ...(ngDevMode ? [{ debugName: "alt" }] : []));
404
+ /** Name to generate initials from */
405
+ name = input(...(ngDevMode ? [undefined, { debugName: "name" }] : []));
406
+ /** Size variant */
407
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : []));
408
+ /** Shape variant */
409
+ shape = input('circle', ...(ngDevMode ? [{ debugName: "shape" }] : []));
410
+ /** Custom background color */
411
+ customColor = input(...(ngDevMode ? [undefined, { debugName: "customColor" }] : []));
412
+ /** Computed initials from name */
413
+ initials = computed(() => {
414
+ const name = this.name();
415
+ if (!name)
416
+ return '';
417
+ const parts = name.trim().split(/\s+/);
418
+ if (parts.length === 1) {
419
+ return parts[0].substring(0, 2);
420
+ }
421
+ return (parts[0].charAt(0) + parts[parts.length - 1].charAt(0));
422
+ }, ...(ngDevMode ? [{ debugName: "initials" }] : []));
423
+ /** Computed background color */
424
+ backgroundColor = computed(() => {
425
+ if (this.customColor())
426
+ return this.customColor();
427
+ const name = this.name();
428
+ if (!name)
429
+ return undefined;
430
+ // Generate consistent color from name
431
+ const colors = [
432
+ '#ef4444', '#f97316', '#f59e0b', '#84cc16',
433
+ '#22c55e', '#14b8a6', '#06b6d4', '#0ea5e9',
434
+ '#3b82f6', '#6366f1', '#8b5cf6', '#a855f7',
435
+ '#d946ef', '#ec4899', '#f43f5e',
436
+ ];
437
+ let hash = 0;
438
+ for (let i = 0; i < name.length; i++) {
439
+ hash = name.charCodeAt(i) + ((hash << 5) - hash);
440
+ }
441
+ return colors[Math.abs(hash) % colors.length];
442
+ }, ...(ngDevMode ? [{ debugName: "backgroundColor" }] : []));
443
+ /** Computed CSS classes */
444
+ avatarClasses = computed(() => {
445
+ return `avatar avatar--${this.size()} avatar--${this.shape()}`;
446
+ }, ...(ngDevMode ? [{ debugName: "avatarClasses" }] : []));
447
+ /** Computed icon size based on avatar size */
448
+ iconSize = computed(() => {
449
+ const sizes = {
450
+ xs: 12,
451
+ sm: 16,
452
+ md: 20,
453
+ lg: 24,
454
+ xl: 32,
455
+ };
456
+ return sizes[this.size()];
457
+ }, ...(ngDevMode ? [{ debugName: "iconSize" }] : []));
458
+ onImageError(event) {
459
+ const img = event.target;
460
+ img.style.display = 'none';
461
+ }
462
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AvatarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
463
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.12", type: AvatarComponent, isStandalone: true, selector: "ui-avatar", inputs: { src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: false, transformFunction: null }, alt: { classPropertyName: "alt", publicName: "alt", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, shape: { classPropertyName: "shape", publicName: "shape", isSignal: true, isRequired: false, transformFunction: null }, customColor: { classPropertyName: "customColor", publicName: "customColor", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
464
+ <div
465
+ class="avatar"
466
+ [class]="avatarClasses()"
467
+ [style.background-color]="!src() ? backgroundColor() : undefined"
468
+ >
469
+ @if (src()) {
470
+ <img
471
+ class="avatar__image"
472
+ [src]="src()"
473
+ [alt]="alt()"
474
+ (error)="onImageError($event)"
475
+ />
476
+ } @else if (initials()) {
477
+ <span class="avatar__initials">{{ initials() }}</span>
478
+ } @else {
479
+ <studio-icon name="user" [size]="iconSize()" class="avatar__icon" />
480
+ }
481
+ </div>
482
+ `, isInline: true, styles: [".avatar{display:inline-flex;align-items:center;justify-content:center;overflow:hidden;background:var(--studio-avatar-bg, #e5e7eb);color:var(--studio-avatar-text, #374151);font-weight:500;flex-shrink:0}.avatar--circle{border-radius:50%}.avatar--square{border-radius:8px}.avatar--xs{width:24px;height:24px;font-size:10px}.avatar--sm{width:32px;height:32px;font-size:12px}.avatar--md{width:40px;height:40px;font-size:14px}.avatar--lg{width:48px;height:48px;font-size:16px}.avatar--xl{width:64px;height:64px;font-size:20px}.avatar__image{width:100%;height:100%;object-fit:cover}.avatar__initials{text-transform:uppercase;-webkit-user-select:none;user-select:none}.avatar__icon{opacity:.6}\n"], dependencies: [{ kind: "component", type: IconComponent, selector: "studio-icon", inputs: ["name", "size", "color", "strokeWidth", "absoluteStrokeWidth", "showFallback", "fallbackIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
483
+ }
484
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AvatarComponent, decorators: [{
485
+ type: Component,
486
+ args: [{ selector: 'ui-avatar', standalone: true, imports: [IconComponent], template: `
487
+ <div
488
+ class="avatar"
489
+ [class]="avatarClasses()"
490
+ [style.background-color]="!src() ? backgroundColor() : undefined"
491
+ >
492
+ @if (src()) {
493
+ <img
494
+ class="avatar__image"
495
+ [src]="src()"
496
+ [alt]="alt()"
497
+ (error)="onImageError($event)"
498
+ />
499
+ } @else if (initials()) {
500
+ <span class="avatar__initials">{{ initials() }}</span>
501
+ } @else {
502
+ <studio-icon name="user" [size]="iconSize()" class="avatar__icon" />
503
+ }
504
+ </div>
505
+ `, encapsulation: ViewEncapsulation.Emulated, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".avatar{display:inline-flex;align-items:center;justify-content:center;overflow:hidden;background:var(--studio-avatar-bg, #e5e7eb);color:var(--studio-avatar-text, #374151);font-weight:500;flex-shrink:0}.avatar--circle{border-radius:50%}.avatar--square{border-radius:8px}.avatar--xs{width:24px;height:24px;font-size:10px}.avatar--sm{width:32px;height:32px;font-size:12px}.avatar--md{width:40px;height:40px;font-size:14px}.avatar--lg{width:48px;height:48px;font-size:16px}.avatar--xl{width:64px;height:64px;font-size:20px}.avatar__image{width:100%;height:100%;object-fit:cover}.avatar__initials{text-transform:uppercase;-webkit-user-select:none;user-select:none}.avatar__icon{opacity:.6}\n"] }]
506
+ }], propDecorators: { src: [{ type: i0.Input, args: [{ isSignal: true, alias: "src", required: false }] }], alt: [{ type: i0.Input, args: [{ isSignal: true, alias: "alt", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], shape: [{ type: i0.Input, args: [{ isSignal: true, alias: "shape", required: false }] }], customColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "customColor", required: false }] }] } });
507
+
399
508
  // Минимальный набор - только для внутренних компонентов библиотеки
400
509
  const MINIMAL_ICONS = {
401
510
  X: LucideIcons.X,
@@ -3637,6 +3746,76 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImpo
3637
3746
  `, styles: [":host{display:inline-block}.dropdown__item{width:100%;display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;background:none;border:none;border-radius:var(--studio-radius-sm);color:var(--studio-text-primary);font-size:.875rem;cursor:pointer;transition:all var(--studio-transition-fast);text-align:left;&--disabled{opacity:.5;cursor:not-allowed}&--danger{color:var(--studio-error)}}.dropdown__item:hover:not(:disabled){background:var(--studio-bg-secondary)}.dropdown__item:active:not(:disabled){transform:scale(.98)}.dropdown__icon{flex-shrink:0;color:var(--studio-text-secondary)}.dropdown__label{flex:1}.dropdown__shortcut{font-size:.75rem;color:var(--studio-text-tertiary);font-family:var(--studio-font-family-mono, monospace)}.dropdown__divider{height:1px;background:var(--studio-border-primary);margin:.25rem 0}\n"] }]
3638
3747
  }], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: true }] }], trigger: [{ type: i0.Input, args: [{ isSignal: true, alias: "trigger", required: false }] }], position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], minWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "minWidth", required: false }] }], itemClick: [{ type: i0.Output, args: ["itemClick"] }] } });
3639
3748
 
3749
+ class EmptyStateComponent {
3750
+ /** Icon name from lucide icons */
3751
+ icon = input(...(ngDevMode ? [undefined, { debugName: "icon" }] : []));
3752
+ /** Title text */
3753
+ title = input(...(ngDevMode ? [undefined, { debugName: "title" }] : []));
3754
+ /** Description text */
3755
+ description = input(...(ngDevMode ? [undefined, { debugName: "description" }] : []));
3756
+ /** Size variant */
3757
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : []));
3758
+ /** Computed icon size based on component size */
3759
+ iconSize = () => {
3760
+ const sizes = {
3761
+ sm: 20,
3762
+ md: 24,
3763
+ lg: 32,
3764
+ };
3765
+ return sizes[this.size()];
3766
+ };
3767
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: EmptyStateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3768
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.12", type: EmptyStateComponent, isStandalone: true, selector: "ui-empty-state", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
3769
+ <div
3770
+ class="empty-state"
3771
+ [class.empty-state--sm]="size() === 'sm'"
3772
+ [class.empty-state--md]="size() === 'md'"
3773
+ [class.empty-state--lg]="size() === 'lg'"
3774
+ >
3775
+ @if (icon()) {
3776
+ <div class="empty-state__icon">
3777
+ <studio-icon [name]="icon()!" [size]="iconSize()" />
3778
+ </div>
3779
+ }
3780
+ @if (title()) {
3781
+ <h3 class="empty-state__title">{{ title() }}</h3>
3782
+ }
3783
+ @if (description()) {
3784
+ <p class="empty-state__description">{{ description() }}</p>
3785
+ }
3786
+ <div class="empty-state__actions">
3787
+ <ng-content />
3788
+ </div>
3789
+ </div>
3790
+ `, isInline: true, styles: [".empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:2rem}.empty-state__icon{display:flex;align-items:center;justify-content:center;width:4rem;height:4rem;border-radius:50%;background:var(--studio-bg-tertiary, #f3f4f6);color:var(--studio-text-tertiary, #9ca3af);margin-bottom:1rem}.empty-state--sm .empty-state__icon{width:3rem;height:3rem;margin-bottom:.75rem}.empty-state--lg .empty-state__icon{width:5rem;height:5rem;margin-bottom:1.5rem}.empty-state__title{margin:0 0 .5rem;font-size:1.125rem;font-weight:600;color:var(--studio-text-primary, #111827)}.empty-state--sm .empty-state__title{font-size:1rem;margin-bottom:.25rem}.empty-state--lg .empty-state__title{font-size:1.25rem;margin-bottom:.75rem}.empty-state__description{margin:0 0 1.5rem;font-size:.875rem;color:var(--studio-text-secondary, #6b7280);max-width:24rem}.empty-state--sm .empty-state__description{font-size:.8125rem;margin-bottom:1rem}.empty-state--lg .empty-state__description{font-size:1rem;margin-bottom:2rem}.empty-state__actions{display:flex;gap:.75rem;flex-wrap:wrap;justify-content:center}.empty-state__actions:empty{display:none}\n"], dependencies: [{ kind: "component", type: IconComponent, selector: "studio-icon", inputs: ["name", "size", "color", "strokeWidth", "absoluteStrokeWidth", "showFallback", "fallbackIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3791
+ }
3792
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: EmptyStateComponent, decorators: [{
3793
+ type: Component,
3794
+ args: [{ selector: 'ui-empty-state', standalone: true, imports: [IconComponent], template: `
3795
+ <div
3796
+ class="empty-state"
3797
+ [class.empty-state--sm]="size() === 'sm'"
3798
+ [class.empty-state--md]="size() === 'md'"
3799
+ [class.empty-state--lg]="size() === 'lg'"
3800
+ >
3801
+ @if (icon()) {
3802
+ <div class="empty-state__icon">
3803
+ <studio-icon [name]="icon()!" [size]="iconSize()" />
3804
+ </div>
3805
+ }
3806
+ @if (title()) {
3807
+ <h3 class="empty-state__title">{{ title() }}</h3>
3808
+ }
3809
+ @if (description()) {
3810
+ <p class="empty-state__description">{{ description() }}</p>
3811
+ }
3812
+ <div class="empty-state__actions">
3813
+ <ng-content />
3814
+ </div>
3815
+ </div>
3816
+ `, encapsulation: ViewEncapsulation.Emulated, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:2rem}.empty-state__icon{display:flex;align-items:center;justify-content:center;width:4rem;height:4rem;border-radius:50%;background:var(--studio-bg-tertiary, #f3f4f6);color:var(--studio-text-tertiary, #9ca3af);margin-bottom:1rem}.empty-state--sm .empty-state__icon{width:3rem;height:3rem;margin-bottom:.75rem}.empty-state--lg .empty-state__icon{width:5rem;height:5rem;margin-bottom:1.5rem}.empty-state__title{margin:0 0 .5rem;font-size:1.125rem;font-weight:600;color:var(--studio-text-primary, #111827)}.empty-state--sm .empty-state__title{font-size:1rem;margin-bottom:.25rem}.empty-state--lg .empty-state__title{font-size:1.25rem;margin-bottom:.75rem}.empty-state__description{margin:0 0 1.5rem;font-size:.875rem;color:var(--studio-text-secondary, #6b7280);max-width:24rem}.empty-state--sm .empty-state__description{font-size:.8125rem;margin-bottom:1rem}.empty-state--lg .empty-state__description{font-size:1rem;margin-bottom:2rem}.empty-state__actions{display:flex;gap:.75rem;flex-wrap:wrap;justify-content:center}.empty-state__actions:empty{display:none}\n"] }]
3817
+ }], propDecorators: { icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], description: [{ type: i0.Input, args: [{ isSignal: true, alias: "description", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }] } });
3818
+
3640
3819
  /**
3641
3820
  * Input component with form control support, variants, and accessibility
3642
3821
  *
@@ -5323,6 +5502,45 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImpo
5323
5502
  * Sidebar component
5324
5503
  */
5325
5504
 
5505
+ class SkeletonComponent {
5506
+ /** Variant of skeleton */
5507
+ variant = input('text', ...(ngDevMode ? [{ debugName: "variant" }] : []));
5508
+ /** Width of skeleton */
5509
+ width = input('100%', ...(ngDevMode ? [{ debugName: "width" }] : []));
5510
+ /** Height of skeleton */
5511
+ height = input(...(ngDevMode ? [undefined, { debugName: "height" }] : []));
5512
+ /** Enable animation */
5513
+ animate = input(true, ...(ngDevMode ? [{ debugName: "animate" }] : []));
5514
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: SkeletonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5515
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.12", type: SkeletonComponent, isStandalone: true, selector: "ui-skeleton", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, animate: { classPropertyName: "animate", publicName: "animate", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
5516
+ <div
5517
+ class="skeleton"
5518
+ [class.skeleton--text]="variant() === 'text'"
5519
+ [class.skeleton--circular]="variant() === 'circular'"
5520
+ [class.skeleton--rectangular]="variant() === 'rectangular'"
5521
+ [class.skeleton--rounded]="variant() === 'rounded'"
5522
+ [class.skeleton--animate]="animate()"
5523
+ [style.width]="width()"
5524
+ [style.height]="height()"
5525
+ ></div>
5526
+ `, isInline: true, styles: [".skeleton{background:var(--studio-skeleton-bg, #e5e7eb);display:block}.skeleton--animate{animation:skeleton-pulse 1.5s ease-in-out infinite}.skeleton--text{height:1em;border-radius:4px;transform-origin:0 55%;transform:scaleY(.6)}.skeleton--circular{border-radius:50%}.skeleton--rectangular{border-radius:0}.skeleton--rounded{border-radius:8px}@keyframes skeleton-pulse{0%{opacity:1}50%{opacity:.4}to{opacity:1}}:host{display:block}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
5527
+ }
5528
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: SkeletonComponent, decorators: [{
5529
+ type: Component,
5530
+ args: [{ selector: 'ui-skeleton', standalone: true, template: `
5531
+ <div
5532
+ class="skeleton"
5533
+ [class.skeleton--text]="variant() === 'text'"
5534
+ [class.skeleton--circular]="variant() === 'circular'"
5535
+ [class.skeleton--rectangular]="variant() === 'rectangular'"
5536
+ [class.skeleton--rounded]="variant() === 'rounded'"
5537
+ [class.skeleton--animate]="animate()"
5538
+ [style.width]="width()"
5539
+ [style.height]="height()"
5540
+ ></div>
5541
+ `, encapsulation: ViewEncapsulation.Emulated, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".skeleton{background:var(--studio-skeleton-bg, #e5e7eb);display:block}.skeleton--animate{animation:skeleton-pulse 1.5s ease-in-out infinite}.skeleton--text{height:1em;border-radius:4px;transform-origin:0 55%;transform:scaleY(.6)}.skeleton--circular{border-radius:50%}.skeleton--rectangular{border-radius:0}.skeleton--rounded{border-radius:8px}@keyframes skeleton-pulse{0%{opacity:1}50%{opacity:.4}to{opacity:1}}:host{display:block}\n"] }]
5542
+ }], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }], animate: [{ type: i0.Input, args: [{ isSignal: true, alias: "animate", required: false }] }] } });
5543
+
5326
5544
  /**
5327
5545
  * Toggle switch component with customizable size and color
5328
5546
  *
@@ -7677,6 +7895,63 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImpo
7677
7895
  }, template: "@if (values()) {\n <div class=\"studio-inspector__container\">\n @for (section of values()!.sections; track trackBySectionId($index, section)) {\n <div class=\"studio-inspector__section\"\n [class.studio-inspector__section--expanded]=\"isSectionExpanded(section.id)\"\n [class.studio-inspector__section--collapsed]=\"!isSectionExpanded(section.id)\">\n\n <studio-button\n variant=\"ghost\"\n [fullWidth]=\"true\"\n class=\"studio-inspector__section-header\"\n [class.studio-inspector__section-header--collapsible]=\"collapsible()\"\n [disabled]=\"!collapsible()\"\n [attr.aria-expanded]=\"isSectionExpanded(section.id)\"\n [attr.aria-controls]=\"'section-content-' + section.id\"\n (click)=\"toggleSection(section.id)\">\n\n @if (showIcons() && section.icon) {\n <studio-icon\n [name]=\"section.icon\"\n [size]=\"16\"\n class=\"studio-inspector__section-icon\"\n />\n }\n\n <span class=\"studio-inspector__section-title\">{{ section.title }}</span>\n\n @if (collapsible()) {\n <studio-icon\n [name]=\"'chevron-down'\"\n [size]=\"16\"\n class=\"studio-inspector__section-toggle\"\n />\n }\n </studio-button>\n\n @if (isSectionExpanded(section.id)) {\n <div\n class=\"studio-inspector__section-content\"\n [id]=\"'section-content-' + section.id\">\n\n @if (section.groups) {\n @for (group of section.groups; track trackByGroupId($index, group); let isLast = $last) {\n <div class=\"studio-inspector__group\">\n\n @if (showGroupLabels() && group.label) {\n <div class=\"studio-inspector__group-label\">{{ group.label }}</div>\n }\n\n @for (param of group.parameters; track trackByParameterId($index, param)) {\n <div class=\"studio-inspector__parameter\">\n @if (param.type !== 'boolean' && param.type !== 'checkbox' && param.type !== 'radio') {\n <div class=\"studio-inspector__parameter-label\">{{ param.label }}</div>\n }\n\n @if (param.type === 'text') {\n <studio-input\n [ngModel]=\"param.value\"\n [name]=\"section.id + '-' + group.id + '-' + param.id\"\n (ngModelChange)=\"onParameterChange(section.id, group.id, param.id, $event)\"\n [variant]=\"componentVariant()\"\n [size]=\"componentSize()\"\n [placeholder]=\"param.placeholder || ''\"\n [disabled]=\"param.disabled || false\"\n [readonly]=\"param.readonly || false\"\n [maxLength]=\"param.maxLength\"\n [fullWidth]=\"fullWidth()\"\n />\n }\n\n @if (param.type === 'number') {\n <div class=\"studio-inspector__number-input\">\n <studio-input\n type=\"number\"\n [ngModel]=\"param.value\"\n [name]=\"section.id + '-' + group.id + '-' + param.id\"\n (ngModelChange)=\"onParameterChange(section.id, group.id, param.id, $event)\"\n [variant]=\"componentVariant()\"\n [size]=\"componentSize()\"\n [min]=\"param.min\"\n [max]=\"param.max\"\n [step]=\"param.step\"\n [disabled]=\"param.disabled || false\"\n [readonly]=\"param.readonly || false\"\n [fullWidth]=\"fullWidth()\"\n />\n @if (param.suffix) {\n <span class=\"studio-inspector__suffix\">{{ param.suffix }}</span>\n }\n </div>\n }\n\n @if (param.type === 'textarea') {\n <studio-textarea\n [ngModel]=\"param.value\"\n [name]=\"section.id + '-' + group.id + '-' + param.id\"\n (ngModelChange)=\"onParameterChange(section.id, group.id, param.id, $event)\"\n [variant]=\"componentVariant()\"\n [size]=\"componentSize()\"\n [placeholder]=\"param.placeholder || ''\"\n [disabled]=\"param.disabled || false\"\n [readonly]=\"param.readonly || false\"\n [maxLength]=\"param.maxLength\"\n [fullWidth]=\"fullWidth()\"\n />\n }\n\n @if (param.type === 'color') {\n <studio-color-picker-compact\n [ngModel]=\"param.value\"\n [name]=\"section.id + '-' + group.id + '-' + param.id\"\n (ngModelChange)=\"onParameterChange(section.id, group.id, param.id, $event)\"\n [disabled]=\"param.disabled || false\"\n />\n }\n\n @if (param.type === 'select') {\n <studio-select\n [ngModel]=\"param.value\"\n [name]=\"section.id + '-' + group.id + '-' + param.id\"\n (ngModelChange)=\"onParameterChange(section.id, group.id, param.id, $event)\"\n [variant]=\"componentVariant()\"\n [size]=\"componentSize()\"\n [options]=\"param.options || []\"\n [placeholder]=\"param.placeholder || ''\"\n [disabled]=\"param.disabled || false\"\n [fullWidth]=\"fullWidth()\"\n />\n }\n\n @if (param.type === 'boolean') {\n <studio-switch\n [ngModel]=\"param.value\"\n [name]=\"section.id + '-' + group.id + '-' + param.id\"\n (ngModelChange)=\"onParameterChange(section.id, group.id, param.id, $event)\"\n [label]=\"param.label\"\n [size]=\"componentSize()\"\n [disabled]=\"param.disabled || false\"\n />\n }\n\n @if (param.type === 'checkbox') {\n <div class=\"studio-inspector__options\">\n @for (option of param.options; track trackByOptionValue($index, option)) {\n <studio-checkbox\n [ngModel]=\"isChecked(param, option.value)\"\n [name]=\"section.id + '-' + group.id + '-' + param.id + '-' + option.value\"\n (ngModelChange)=\"onCheckboxChange(section.id, group.id, param.id, option.value, $event)\"\n [label]=\"option.label\"\n [disabled]=\"param.disabled || option.disabled || false\"\n [size]=\"componentSize()\"\n />\n }\n </div>\n }\n\n @if (param.type === 'radio') {\n <div class=\"studio-inspector__options\">\n @for (option of param.options; track trackByOptionValue($index, option)) {\n <div class=\"studio-inspector__option\">\n <studio-radio-button\n [ngModel]=\"param.value\"\n (ngModelChange)=\"onRadioChange(section.id, group.id, param.id, $event)\"\n [value]=\"option.value\"\n [label]=\"option.label\"\n [name]=\"getRadioName(section.id, group.id, param.id)\"\n [disabled]=\"param.disabled || option.disabled || false\"\n [size]=\"componentSize()\"\n />\n @if (showDefaultIndicator() && isDefault(param, option.value)) {\n <span class=\"studio-inspector__default-indicator\">(default)</span>\n }\n </div>\n }\n </div>\n }\n\n @if (param.hint) {\n <div class=\"studio-inspector__parameter-hint\">{{ param.hint }}</div>\n }\n </div>\n }\n\n @if (!isLast && groupDivider() !== 'none') {\n <div class=\"studio-inspector__group-divider\"\n [class.studio-inspector__group-divider--line]=\"groupDivider() === 'line'\"\n [class.studio-inspector__group-divider--space]=\"groupDivider() === 'space'\">\n </div>\n }\n </div>\n }\n }\n\n @if (section.parameters) {\n @for (param of section.parameters; track trackByParameterId($index, param)) {\n <div class=\"studio-inspector__parameter\">\n @if (param.type !== 'boolean' && param.type !== 'checkbox' && param.type !== 'radio') {\n <div class=\"studio-inspector__parameter-label\">{{ param.label }}</div>\n }\n\n @if (param.type === 'text') {\n <studio-input\n [ngModel]=\"param.value\"\n [name]=\"section.id + '-' + param.id\"\n (ngModelChange)=\"onParameterChange(section.id, null, param.id, $event)\"\n [variant]=\"componentVariant()\"\n [size]=\"componentSize()\"\n [placeholder]=\"param.placeholder || ''\"\n [disabled]=\"param.disabled || false\"\n [readonly]=\"param.readonly || false\"\n [maxLength]=\"param.maxLength\"\n [fullWidth]=\"fullWidth()\"\n />\n }\n\n @if (param.type === 'number') {\n <div class=\"studio-inspector__number-input\">\n <studio-input\n type=\"number\"\n [ngModel]=\"param.value\"\n [name]=\"section.id + '-' + param.id\"\n (ngModelChange)=\"onParameterChange(section.id, null, param.id, $event)\"\n [variant]=\"componentVariant()\"\n [size]=\"componentSize()\"\n [min]=\"param.min\"\n [max]=\"param.max\"\n [step]=\"param.step\"\n [disabled]=\"param.disabled || false\"\n [readonly]=\"param.readonly || false\"\n [fullWidth]=\"fullWidth()\"\n />\n @if (param.suffix) {\n <span class=\"studio-inspector__suffix\">{{ param.suffix }}</span>\n }\n </div>\n }\n\n @if (param.type === 'textarea') {\n <studio-textarea\n [ngModel]=\"param.value\"\n [name]=\"section.id + '-' + param.id\"\n (ngModelChange)=\"onParameterChange(section.id, null, param.id, $event)\"\n [variant]=\"componentVariant()\"\n [size]=\"componentSize()\"\n [placeholder]=\"param.placeholder || ''\"\n [disabled]=\"param.disabled || false\"\n [readonly]=\"param.readonly || false\"\n [maxLength]=\"param.maxLength\"\n [fullWidth]=\"fullWidth()\"\n />\n }\n\n @if (param.type === 'color') {\n <studio-color-picker-compact\n [ngModel]=\"param.value\"\n [name]=\"section.id + '-' + param.id\"\n (ngModelChange)=\"onParameterChange(section.id, null, param.id, $event)\"\n [disabled]=\"param.disabled || false\"\n />\n }\n\n @if (param.type === 'select') {\n <studio-select\n [ngModel]=\"param.value\"\n [name]=\"section.id + '-' + param.id\"\n (ngModelChange)=\"onParameterChange(section.id, null, param.id, $event)\"\n [variant]=\"componentVariant()\"\n [size]=\"componentSize()\"\n [options]=\"param.options || []\"\n [placeholder]=\"param.placeholder || ''\"\n [disabled]=\"param.disabled || false\"\n [fullWidth]=\"fullWidth()\"\n />\n }\n\n @if (param.type === 'boolean') {\n <studio-switch\n [ngModel]=\"param.value\"\n [name]=\"section.id + '-' + param.id\"\n (ngModelChange)=\"onParameterChange(section.id, null, param.id, $event)\"\n [label]=\"param.label\"\n [size]=\"componentSize()\"\n [disabled]=\"param.disabled || false\"\n />\n }\n\n @if (param.type === 'checkbox') {\n <div class=\"studio-inspector__options\">\n @for (option of param.options; track trackByOptionValue($index, option)) {\n <studio-checkbox\n [ngModel]=\"isChecked(param, option.value)\"\n [name]=\"section.id + '-' + param.id + '-' + option.value\"\n (ngModelChange)=\"onCheckboxChange(section.id, null, param.id, option.value, $event)\"\n [label]=\"option.label\"\n [disabled]=\"param.disabled || option.disabled || false\"\n [size]=\"componentSize()\"\n />\n }\n </div>\n }\n\n @if (param.type === 'radio') {\n <div class=\"studio-inspector__options\">\n @for (option of param.options; track trackByOptionValue($index, option)) {\n <div class=\"studio-inspector__option\">\n <studio-radio-button\n [ngModel]=\"param.value\"\n (ngModelChange)=\"onRadioChange(section.id, null, param.id, $event)\"\n [value]=\"option.value\"\n [label]=\"option.label\"\n [name]=\"getRadioName(section.id, null, param.id)\"\n [disabled]=\"param.disabled || option.disabled || false\"\n [size]=\"componentSize()\"\n />\n @if (showDefaultIndicator() && isDefault(param, option.value)) {\n <span class=\"studio-inspector__default-indicator\">(default)</span>\n }\n </div>\n }\n </div>\n }\n\n @if (param.hint) {\n <div class=\"studio-inspector__parameter-hint\">{{ param.hint }}</div>\n }\n </div>\n }\n }\n </div>\n }\n </div>\n }\n </div>\n}\n", styles: [":host{display:block;font-family:var(--studio-font-family)}.studio-inspector__container{display:flex;flex-direction:column;gap:.75rem}.studio-inspector__section{background:var(--studio-bg-primary);border:1px solid var(--studio-border-primary);border-radius:var(--studio-radius-md);overflow:hidden}.studio-inspector__section-header{width:100%;display:flex;align-items:center;gap:.75rem;padding:.875rem 1rem;background:var(--studio-bg-secondary);border:none;border-bottom:1px solid var(--studio-border-primary);cursor:pointer;transition:background var(--studio-transition-fast);text-align:left}.studio-inspector__section-header--collapsible:hover{background:var(--studio-bg-tertiary)}.studio-inspector__section-header:disabled{cursor:default}.studio-inspector__section-icon{color:var(--studio-text-secondary);flex-shrink:0}.studio-inspector__section-title{flex:1;font-size:.875rem;font-weight:var(--studio-font-weight-semibold);color:var(--studio-text-primary)}.studio-inspector__section-toggle{color:var(--studio-text-secondary);flex-shrink:0;transition:transform var(--studio-transition-fast)}.studio-inspector__section--collapsed .studio-inspector__section-toggle{transform:rotate(-90deg)}.studio-inspector__section--collapsed .studio-inspector__section-content{display:none}.studio-inspector__section--expanded .studio-inspector__section-toggle{transform:rotate(0)}.studio-inspector__section-content{padding:1rem;display:flex;flex-direction:column;gap:.75rem}.studio-inspector__group{display:flex;flex-direction:column;gap:.75rem}.studio-inspector__group-label{font-size:.75rem;font-weight:var(--studio-font-weight-semibold);color:var(--studio-text-secondary);text-transform:uppercase;letter-spacing:.05em}.studio-inspector__group-divider--line{height:1px;background:var(--studio-border-primary);margin:.5rem 0}.studio-inspector__group-divider--space{height:.5rem}.studio-inspector__parameter{display:flex;flex-direction:column;gap:.5rem}.studio-inspector__parameter-label{font-size:.8125rem;font-weight:var(--studio-font-weight-medium);color:var(--studio-text-primary)}.studio-inspector__parameter-hint{font-size:.75rem;color:var(--studio-text-secondary);line-height:1.4}.studio-inspector__number-input{display:flex;align-items:center;gap:.5rem}.studio-inspector__suffix{font-size:.875rem;color:var(--studio-text-secondary);flex-shrink:0}.studio-inspector__options{display:flex;flex-direction:column;gap:.5rem}.studio-inspector__option{display:flex;align-items:center;gap:.5rem}.studio-inspector__default-indicator{font-size:.75rem;color:var(--studio-text-tertiary);font-style:italic}:host(.studio-inspector--compact) .studio-inspector__container{gap:.5rem}:host(.studio-inspector--compact) .studio-inspector__section-header{padding:.625rem .75rem}:host(.studio-inspector--compact) .studio-inspector__section-content{padding:.75rem;gap:.5rem}:host(.studio-inspector--compact) .studio-inspector__group{gap:.5rem}:host(.studio-inspector--compact) .studio-inspector__parameter{gap:.375rem}:host(.studio-inspector--spacing-sm) .studio-inspector__section-content{gap:.5rem}:host(.studio-inspector--spacing-sm) .studio-inspector__group{gap:.5rem}:host(.studio-inspector--spacing-sm) .studio-inspector__parameter{gap:.375rem}:host(.studio-inspector--spacing-lg) .studio-inspector__section-content{gap:1rem}:host(.studio-inspector--spacing-lg) .studio-inspector__group{gap:1rem}:host(.studio-inspector--spacing-lg) .studio-inspector__parameter{gap:.625rem}:host(.studio-inspector--spacing-lg) .studio-inspector__group-divider--space{height:1rem}\n"] }]
7678
7896
  }], ctorParameters: () => [], propDecorators: { componentSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "componentSize", required: false }] }], componentVariant: [{ type: i0.Input, args: [{ isSignal: true, alias: "componentVariant", required: false }] }], compact: [{ type: i0.Input, args: [{ isSignal: true, alias: "compact", required: false }] }], showIcons: [{ type: i0.Input, args: [{ isSignal: true, alias: "showIcons", required: false }] }], showDefaultIndicator: [{ type: i0.Input, args: [{ isSignal: true, alias: "showDefaultIndicator", required: false }] }], collapsible: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsible", required: false }] }], expandedByDefault: [{ type: i0.Input, args: [{ isSignal: true, alias: "expandedByDefault", required: false }] }], expandedSectionsInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "expandedSections", required: false }] }], showGroupLabels: [{ type: i0.Input, args: [{ isSignal: true, alias: "showGroupLabels", required: false }] }], groupDivider: [{ type: i0.Input, args: [{ isSignal: true, alias: "groupDivider", required: false }] }], groupDividerSpacing: [{ type: i0.Input, args: [{ isSignal: true, alias: "groupDividerSpacing", required: false }] }], labelWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "labelWidth", required: false }] }], fullWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "fullWidth", required: false }] }], spacing: [{ type: i0.Input, args: [{ isSignal: true, alias: "spacing", required: false }] }], sectionTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "sectionTemplate", required: false }] }], parameterTemplates: [{ type: i0.Input, args: [{ isSignal: true, alias: "parameterTemplates", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], ariaDescribedBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaDescribedBy", required: false }] }], sectionToggled: [{ type: i0.Output, args: ["sectionToggled"] }], parameterFocused: [{ type: i0.Output, args: ["parameterFocused"] }], parameterBlurred: [{ type: i0.Output, args: ["parameterBlurred"] }] } });
7679
7897
 
7898
+ class LogoComponent {
7899
+ /** URL to navigate when logo is clicked */
7900
+ link = input('/', ...(ngDevMode ? [{ debugName: "link" }] : []));
7901
+ /** Path to logo image */
7902
+ logoSrc = input.required(...(ngDevMode ? [{ debugName: "logoSrc" }] : []));
7903
+ /** Text to display next to logo */
7904
+ logoText = input.required(...(ngDevMode ? [{ debugName: "logoText" }] : []));
7905
+ /** Size variant */
7906
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : []));
7907
+ /** Whether to show text */
7908
+ showText = input(true, ...(ngDevMode ? [{ debugName: "showText" }] : []));
7909
+ /** Whether to show text on mobile devices */
7910
+ showTextOnMobile = input(false, ...(ngDevMode ? [{ debugName: "showTextOnMobile" }] : []));
7911
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: LogoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7912
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.12", type: LogoComponent, isStandalone: true, selector: "ui-logo", inputs: { link: { classPropertyName: "link", publicName: "link", isSignal: true, isRequired: false, transformFunction: null }, logoSrc: { classPropertyName: "logoSrc", publicName: "logoSrc", isSignal: true, isRequired: true, transformFunction: null }, logoText: { classPropertyName: "logoText", publicName: "logoText", isSignal: true, isRequired: true, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, showText: { classPropertyName: "showText", publicName: "showText", isSignal: true, isRequired: false, transformFunction: null }, showTextOnMobile: { classPropertyName: "showTextOnMobile", publicName: "showTextOnMobile", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
7913
+ <a
7914
+ class="logo"
7915
+ [class.logo--sm]="size() === 'sm'"
7916
+ [class.logo--md]="size() === 'md'"
7917
+ [class.logo--lg]="size() === 'lg'"
7918
+ [routerLink]="link()"
7919
+ >
7920
+ <img [src]="logoSrc()" alt="Logo" class="logo__image" />
7921
+ @if (showText()) {
7922
+ <span
7923
+ class="logo__text"
7924
+ [class.logo__text--hide-mobile]="!showTextOnMobile()"
7925
+ >
7926
+ {{ logoText() }}
7927
+ </span>
7928
+ }
7929
+ </a>
7930
+ `, isInline: true, styles: [".logo{display:inline-flex;align-items:center;gap:.5rem;text-decoration:none;color:inherit;outline:none}.logo:focus-visible{outline:2px solid var(--ui-focus-ring, currentColor);outline-offset:2px;border-radius:4px}.logo__image{height:2rem;width:auto}.logo--sm .logo__image{height:1.5rem}.logo--lg .logo__image{height:2.5rem}.logo__text{font-weight:600;font-size:1.125rem;white-space:nowrap}.logo--sm .logo__text{font-size:1rem}.logo--lg .logo__text{font-size:1.25rem}@media (max-width: 768px){.logo__text--hide-mobile{display:none}}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
7931
+ }
7932
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: LogoComponent, decorators: [{
7933
+ type: Component,
7934
+ args: [{ selector: 'ui-logo', standalone: true, imports: [RouterLink], template: `
7935
+ <a
7936
+ class="logo"
7937
+ [class.logo--sm]="size() === 'sm'"
7938
+ [class.logo--md]="size() === 'md'"
7939
+ [class.logo--lg]="size() === 'lg'"
7940
+ [routerLink]="link()"
7941
+ >
7942
+ <img [src]="logoSrc()" alt="Logo" class="logo__image" />
7943
+ @if (showText()) {
7944
+ <span
7945
+ class="logo__text"
7946
+ [class.logo__text--hide-mobile]="!showTextOnMobile()"
7947
+ >
7948
+ {{ logoText() }}
7949
+ </span>
7950
+ }
7951
+ </a>
7952
+ `, encapsulation: ViewEncapsulation.Emulated, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".logo{display:inline-flex;align-items:center;gap:.5rem;text-decoration:none;color:inherit;outline:none}.logo:focus-visible{outline:2px solid var(--ui-focus-ring, currentColor);outline-offset:2px;border-radius:4px}.logo__image{height:2rem;width:auto}.logo--sm .logo__image{height:1.5rem}.logo--lg .logo__image{height:2.5rem}.logo__text{font-weight:600;font-size:1.125rem;white-space:nowrap}.logo--sm .logo__text{font-size:1rem}.logo--lg .logo__text{font-size:1.25rem}@media (max-width: 768px){.logo__text--hide-mobile{display:none}}\n"] }]
7953
+ }], propDecorators: { link: [{ type: i0.Input, args: [{ isSignal: true, alias: "link", required: false }] }], logoSrc: [{ type: i0.Input, args: [{ isSignal: true, alias: "logoSrc", required: true }] }], logoText: [{ type: i0.Input, args: [{ isSignal: true, alias: "logoText", required: true }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], showText: [{ type: i0.Input, args: [{ isSignal: true, alias: "showText", required: false }] }], showTextOnMobile: [{ type: i0.Input, args: [{ isSignal: true, alias: "showTextOnMobile", required: false }] }] } });
7954
+
7680
7955
  /**
7681
7956
  * Theme toggle switch with sun/moon icons
7682
7957
  *
@@ -8239,5 +8514,5 @@ function hasChildren(block) {
8239
8514
  * Generated bundle index. Do not edit.
8240
8515
  */
8241
8516
 
8242
- export { BadgeComponent, BadgeWrapperComponent, BottomNavigationComponent, ButtonComponent, ButtonGroupComponent, ButtonToggleGroupComponent, COUNTRY_OPTIONS, CardComponent, ChatComponent, ChatInputComponent, ChatMessageComponent, CheckboxComponent, ColorPickerCompactComponent, ColorPickerComponent, ConfirmDialogComponent, ConfirmDialogService, DEFAULT_COLOR_PRESETS, DrawerComponent, DrawerService, DropdownComponent, FileViewerComponent, IconComponent, InputComponent, InspectorComponent, MASK_PRESETS, MaskDirective, MaskEngine, MenuComponent, ModalComponent, NavbarComponent, PaginationComponent, PhoneInputComponent, PopoverComponent, RadioButtonComponent, STUDIO_CONFIG, SelectComponent, SidebarComponent, SignalStore, StudioConfigService, SwitchComponent, TableColumnDirective, TableComponent, TabsComponent, TextareaComponent, ThemeSwitchComponent, ToastComponent, ToastService, TooltipComponent, classNames, defaultFileViewerLabels, hasChildren, isContentBlock, isFormBlock, isInteractiveBlock, isLayoutBlock, isSafeUrl, isStudioBlock, loadGoogleFont, loadGoogleFonts, provideStudioConfig, provideStudioIcons, sanitizeUrl, withConfigDefault };
8517
+ export { AvatarComponent, BadgeComponent, BadgeWrapperComponent, BottomNavigationComponent, ButtonComponent, ButtonGroupComponent, ButtonToggleGroupComponent, COUNTRY_OPTIONS, CardComponent, ChatComponent, ChatInputComponent, ChatMessageComponent, CheckboxComponent, ColorPickerCompactComponent, ColorPickerComponent, ConfirmDialogComponent, ConfirmDialogService, DEFAULT_COLOR_PRESETS, DrawerComponent, DrawerService, DropdownComponent, EmptyStateComponent, FileViewerComponent, IconComponent, InputComponent, InspectorComponent, LogoComponent, MASK_PRESETS, MaskDirective, MaskEngine, MenuComponent, ModalComponent, NavbarComponent, PaginationComponent, PhoneInputComponent, PopoverComponent, RadioButtonComponent, STUDIO_CONFIG, SelectComponent, SidebarComponent, SignalStore, SkeletonComponent, StudioConfigService, SwitchComponent, TableColumnDirective, TableComponent, TabsComponent, TextareaComponent, ThemeSwitchComponent, ToastComponent, ToastService, TooltipComponent, classNames, defaultFileViewerLabels, hasChildren, isContentBlock, isFormBlock, isInteractiveBlock, isLayoutBlock, isSafeUrl, isStudioBlock, loadGoogleFont, loadGoogleFonts, provideStudioConfig, provideStudioIcons, sanitizeUrl, withConfigDefault };
8243
8518
  //# sourceMappingURL=eduboxpro-studio.mjs.map