@tolle_/tolle-ui 0.0.30-beta → 0.0.32-beta

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.
@@ -10,9 +10,12 @@ import { NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';
10
10
  import { autoUpdate, computePosition, offset, flip, shift, size } from '@floating-ui/dom';
11
11
  import { Subject, Subscription, BehaviorSubject } from 'rxjs';
12
12
  import { format, startOfWeek, startOfMonth, endOfWeek, endOfMonth, eachDayOfInterval, subMonths, subYears, addMonths, addYears, setMonth, setYear, isSameDay, isToday, isSameMonth, isBefore, startOfDay, parse, isValid, isWithinInterval } from 'date-fns';
13
+ import { trigger, state, style, transition, animate } from '@angular/animations';
13
14
  import * as i1$1 from '@angular/cdk/overlay';
14
15
  import { OverlayConfig } from '@angular/cdk/overlay';
15
16
  import { ComponentPortal } from '@angular/cdk/portal';
17
+ import * as i1$2 from '@angular/router';
18
+ import { RouterModule } from '@angular/router';
16
19
 
17
20
  function cn(...inputs) {
18
21
  return twMerge(clsx(inputs));
@@ -26,7 +29,7 @@ const buttonVariants = cva("tolle-button-base inline-flex items-center justify-c
26
29
  outline: "border border-input bg-transparent hover:bg-accent hover:text-accent-foreground",
27
30
  secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
28
31
  ghost: "hover:bg-accent hover:text-accent-foreground",
29
- link: "text-primary underline-offset-4 hover:underline",
32
+ link: "text-primary-foreground underline-offset-4 hover:underline",
30
33
  },
31
34
  size: {
32
35
  default: "h-10 px-4 py-2",
@@ -1132,7 +1135,7 @@ class BadgeComponent {
1132
1135
  get computedClass() {
1133
1136
  return cn(
1134
1137
  // Base styles - Pills are always rounded-full
1135
- 'inline-flex items-center justify-center rounded-md border px-2 py-0.5 font-medium transition-colors gap-1',
1138
+ 'flex items-center justify-center rounded-md border px-2 py-0.5 font-medium transition-colors gap-1',
1136
1139
  // Variants (Google Dark Mode theme)
1137
1140
  this.variant === 'default' && 'border-transparent bg-primary text-primary-foreground', this.variant === 'secondary' && 'border-transparent bg-secondary text-secondary-foreground', this.variant === 'outline' && 'text-foreground border-border bg-transparent', this.variant === 'destructive' && 'border-transparent bg-destructive text-destructive-foreground',
1138
1141
  // Sizing
@@ -1150,9 +1153,8 @@ class BadgeComponent {
1150
1153
  <button
1151
1154
  *ngIf="removable"
1152
1155
  (click)="onRemove.emit($event)"
1153
- class="ml-1 -mr-1 rounded-md p-0.5 hover:bg-foreground/20 transition-colors outline-none focus:ring-1 focus:ring-ring"
1154
- >
1155
- <i class="ri-close-line text-[1.1em]"></i>
1156
+ class="ml-1 -mr-1 rounded-md hover:bg-foreground/20 transition-colors outline-none">
1157
+ <i class="ri-close-line"></i>
1156
1158
  </button>
1157
1159
  </div>
1158
1160
  `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
@@ -1174,9 +1176,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
1174
1176
  <button
1175
1177
  *ngIf="removable"
1176
1178
  (click)="onRemove.emit($event)"
1177
- class="ml-1 -mr-1 rounded-md p-0.5 hover:bg-foreground/20 transition-colors outline-none focus:ring-1 focus:ring-ring"
1178
- >
1179
- <i class="ri-close-line text-[1.1em]"></i>
1179
+ class="ml-1 -mr-1 rounded-md hover:bg-foreground/20 transition-colors outline-none">
1180
+ <i class="ri-close-line"></i>
1180
1181
  </button>
1181
1182
  </div>
1182
1183
  `,
@@ -4167,21 +4168,42 @@ class AccordionItemComponent {
4167
4168
  <button
4168
4169
  type="button"
4169
4170
  (click)="toggle()"
4170
- class="flex flex-1 items-center justify-between py-4 font-medium transition-all [&[data-state=open]>i]:rotate-180"
4171
+ [attr.aria-expanded]="isOpen"
4171
4172
  [attr.data-state]="isOpen ? 'open' : 'closed'"
4173
+ class="flex flex-1 items-center justify-between py-4 font-medium transition-all group [&[data-state=open]>i]:rotate-180"
4172
4174
  >
4173
- <span class="text-left">{{ title }}</span>
4174
- <i class="ri-arrow-down-s-line text-muted-foreground transition-transform"></i>
4175
+ <span class="text-left group-hover:underline">{{ title }}</span>
4176
+ <i class="ri-arrow-down-s-line text-muted-foreground text-lg transition-transform duration-200 hover:no-underline"></i>
4175
4177
  </button>
4176
4178
 
4177
4179
  <div
4178
- *ngIf="isOpen"
4179
- class="pb-4 text-sm text-muted-foreground overflow-hidden"
4180
- >
4181
- <ng-content></ng-content>
4180
+ [@expandCollapse]="isOpen ? 'expanded' : 'collapsed'"
4181
+ class="overflow-hidden">
4182
+ <div class="pb-4 pt-0 text-sm text-muted-foreground">
4183
+ <ng-content></ng-content>
4184
+ </div>
4182
4185
  </div>
4183
4186
  </div>
4184
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
4187
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }], animations: [
4188
+ trigger('expandCollapse', [
4189
+ state('collapsed', style({
4190
+ height: '0px',
4191
+ opacity: '0',
4192
+ overflow: 'hidden',
4193
+ visibility: 'hidden'
4194
+ })),
4195
+ state('expanded', style({
4196
+ height: '*', // "Star" means actual content height
4197
+ opacity: '1',
4198
+ overflow: 'hidden',
4199
+ visibility: 'visible'
4200
+ })),
4201
+ // Use cubic-bezier to match Tailwind/shadcn-ui default ease
4202
+ transition('collapsed <=> expanded', [
4203
+ animate('300ms cubic-bezier(0.87, 0, 0.13, 1)')
4204
+ ])
4205
+ ])
4206
+ ] });
4185
4207
  }
4186
4208
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AccordionItemComponent, decorators: [{
4187
4209
  type: Component,
@@ -4189,23 +4211,45 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
4189
4211
  selector: 'tolle-accordion-item',
4190
4212
  standalone: true,
4191
4213
  imports: [CommonModule],
4214
+ animations: [
4215
+ trigger('expandCollapse', [
4216
+ state('collapsed', style({
4217
+ height: '0px',
4218
+ opacity: '0',
4219
+ overflow: 'hidden',
4220
+ visibility: 'hidden'
4221
+ })),
4222
+ state('expanded', style({
4223
+ height: '*', // "Star" means actual content height
4224
+ opacity: '1',
4225
+ overflow: 'hidden',
4226
+ visibility: 'visible'
4227
+ })),
4228
+ // Use cubic-bezier to match Tailwind/shadcn-ui default ease
4229
+ transition('collapsed <=> expanded', [
4230
+ animate('300ms cubic-bezier(0.87, 0, 0.13, 1)')
4231
+ ])
4232
+ ])
4233
+ ],
4192
4234
  template: `
4193
4235
  <div [class]="cn('flex flex-col border-b border-border', class)">
4194
4236
  <button
4195
4237
  type="button"
4196
4238
  (click)="toggle()"
4197
- class="flex flex-1 items-center justify-between py-4 font-medium transition-all [&[data-state=open]>i]:rotate-180"
4239
+ [attr.aria-expanded]="isOpen"
4198
4240
  [attr.data-state]="isOpen ? 'open' : 'closed'"
4241
+ class="flex flex-1 items-center justify-between py-4 font-medium transition-all group [&[data-state=open]>i]:rotate-180"
4199
4242
  >
4200
- <span class="text-left">{{ title }}</span>
4201
- <i class="ri-arrow-down-s-line text-muted-foreground transition-transform"></i>
4243
+ <span class="text-left group-hover:underline">{{ title }}</span>
4244
+ <i class="ri-arrow-down-s-line text-muted-foreground text-lg transition-transform duration-200 hover:no-underline"></i>
4202
4245
  </button>
4203
4246
 
4204
4247
  <div
4205
- *ngIf="isOpen"
4206
- class="pb-4 text-sm text-muted-foreground overflow-hidden"
4207
- >
4208
- <ng-content></ng-content>
4248
+ [@expandCollapse]="isOpen ? 'expanded' : 'collapsed'"
4249
+ class="overflow-hidden">
4250
+ <div class="pb-4 pt-0 text-sm text-muted-foreground">
4251
+ <ng-content></ng-content>
4252
+ </div>
4209
4253
  </div>
4210
4254
  </div>
4211
4255
  `
@@ -4223,31 +4267,36 @@ class AccordionComponent {
4223
4267
  class = '';
4224
4268
  items;
4225
4269
  ngAfterContentInit() {
4270
+ // 1. Assign IDs and Listeners on load
4271
+ this.initItems();
4272
+ // 2. Re-init if items change dynamically (optional but good for robustness)
4273
+ this.items.changes.subscribe(() => this.initItems());
4274
+ }
4275
+ initItems() {
4226
4276
  this.items.forEach((item, index) => {
4227
- // Assign unique ID if none provided
4277
+ // Auto-assign ID if missing
4228
4278
  if (item.id === undefined)
4229
- item.id = index;
4230
- // Hook into the item's toggle event
4279
+ item.id = `accordion-item-${index}`;
4280
+ // Set up the toggle bridge
4231
4281
  item.onToggle = (id) => this.handleToggle(id);
4232
4282
  });
4233
4283
  }
4234
4284
  handleToggle(selectedId) {
4235
4285
  this.items.forEach(item => {
4236
4286
  if (item.id === selectedId) {
4287
+ // Toggle the clicked item
4237
4288
  item.isOpen = !item.isOpen;
4238
4289
  }
4239
- else {
4240
- // If type is 'single', close all other items
4241
- if (this.type === 'single') {
4242
- item.isOpen = false;
4243
- }
4290
+ else if (this.type === 'single') {
4291
+ // Close others if in single mode
4292
+ item.isOpen = false;
4244
4293
  }
4245
4294
  });
4246
4295
  }
4247
4296
  cn = cn;
4248
4297
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AccordionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4249
4298
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: AccordionComponent, isStandalone: true, selector: "tolle-accordion", inputs: { type: "type", class: "class" }, queries: [{ propertyName: "items", predicate: AccordionItemComponent }], ngImport: i0, template: `
4250
- <div [class]="cn('w-full border-t border-border', class)">
4299
+ <div [class]="cn('w-full', class)">
4251
4300
  <ng-content></ng-content>
4252
4301
  </div>
4253
4302
  `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }] });
@@ -4257,9 +4306,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
4257
4306
  args: [{
4258
4307
  selector: 'tolle-accordion',
4259
4308
  standalone: true,
4260
- imports: [CommonModule],
4309
+ imports: [CommonModule], // No AccordionItemComponent import needed here if projected via ng-content
4261
4310
  template: `
4262
- <div [class]="cn('w-full border-t border-border', class)">
4311
+ <div [class]="cn('w-full', class)">
4263
4312
  <ng-content></ng-content>
4264
4313
  </div>
4265
4314
  `
@@ -5471,13 +5520,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
5471
5520
  type: Input
5472
5521
  }] } });
5473
5522
 
5474
- const alertVariants = cva("relative w-full rounded-lg border p-4 transition-all duration-300 [&>i~div]:pl-7 [&>i]:absolute [&>i]:left-4 [&>i]:top-4 [&>i]:text-foreground", {
5523
+ const alertVariants = cva("relative w-full rounded-lg border p-4 [&>i+div]:translate-y-[-3px] [&>i]:absolute [&>i]:left-4 [&>i]:top-4 [&>i]:text-foreground [&>i~div]:pl-7", {
5475
5524
  variants: {
5476
5525
  variant: {
5477
5526
  default: "bg-background text-foreground",
5478
- destructive: "border-destructive/50 text-destructive dark:border-destructive [&>i]:text-destructive",
5479
- success: "border-emerald-500/50 text-emerald-700 dark:text-emerald-400 [&>i]:text-emerald-600",
5480
- warning: "border-amber-500/50 text-amber-700 dark:text-amber-400 [&>i]:text-amber-600",
5527
+ destructive: "border-red-500/50 text-red-500 dark:border-red-500 [&>i]:text-red-500",
5528
+ success: "border-emerald-500/50 text-emerald-700 dark:border-emerald-500 [&>i]:text-emerald-600 dark:text-emerald-400",
5529
+ warning: "border-amber-500/50 text-amber-700 dark:border-amber-500 [&>i]:text-amber-600 dark:text-amber-400",
5530
+ info: "border-blue-500/50 text-blue-700 dark:border-blue-500 [&>i]:text-blue-600 dark:text-blue-400",
5481
5531
  },
5482
5532
  },
5483
5533
  defaultVariants: {
@@ -5491,24 +5541,18 @@ class AlertComponent {
5491
5541
  dismissible = false;
5492
5542
  onClose = new EventEmitter();
5493
5543
  dismissed = false;
5494
- isDismissing = false;
5495
5544
  alertVariants = alertVariants;
5496
5545
  cn = cn;
5497
5546
  dismiss() {
5498
- this.isDismissing = true;
5499
- // Wait for animation to finish before removing from DOM
5500
- setTimeout(() => {
5501
- this.dismissed = true;
5502
- this.onClose.emit();
5503
- }, 300);
5547
+ this.dismissed = true;
5548
+ this.onClose.emit();
5504
5549
  }
5505
5550
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlertComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5506
5551
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: AlertComponent, isStandalone: true, selector: "tolle-alert", inputs: { variant: "variant", title: "title", class: "class", dismissible: "dismissible" }, outputs: { onClose: "onClose" }, ngImport: i0, template: `
5507
5552
  <div
5508
5553
  *ngIf="!dismissed"
5554
+ @fade
5509
5555
  [class]="cn(alertVariants({ variant }), class)"
5510
- [class.opacity-0]="isDismissing"
5511
- [class.scale-95]="isDismissing"
5512
5556
  role="alert"
5513
5557
  >
5514
5558
  <ng-content select="[icon]"></ng-content>
@@ -5516,22 +5560,30 @@ class AlertComponent {
5516
5560
  <button
5517
5561
  *ngIf="dismissible"
5518
5562
  (click)="dismiss()"
5519
- class="absolute right-2 top-2 rounded-md p-1 text-foreground/50 opacity-0 transition-opacity hover:text-foreground focus:opacity-100 group-hover:opacity-100"
5520
- [class.opacity-100]="dismissible"
5563
+ class="absolute right-2 top-2 rounded-md p-1 opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2"
5564
+ type="button"
5521
5565
  >
5522
5566
  <i class="ri-close-line text-lg"></i>
5567
+ <span class="sr-only">Close</span>
5523
5568
  </button>
5524
5569
 
5525
5570
  <div>
5526
5571
  <h5 *ngIf="title" class="mb-1 font-medium leading-none tracking-tight">
5527
5572
  {{ title }}
5528
5573
  </h5>
5529
- <div class="text-sm [&_p]:leading-relaxed">
5574
+ <div class="text-sm [&_p]:leading-relaxed opacity-90">
5530
5575
  <ng-content></ng-content>
5531
5576
  </div>
5532
5577
  </div>
5533
5578
  </div>
5534
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
5579
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], animations: [
5580
+ trigger('fade', [
5581
+ transition(':leave', [
5582
+ style({ opacity: 1, transform: 'scale(1)' }),
5583
+ animate('300ms ease-in-out', style({ opacity: 0, transform: 'scale(0.95)', height: 0, margin: 0, padding: 0 }))
5584
+ ])
5585
+ ])
5586
+ ] });
5535
5587
  }
5536
5588
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlertComponent, decorators: [{
5537
5589
  type: Component,
@@ -5539,12 +5591,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
5539
5591
  selector: 'tolle-alert',
5540
5592
  standalone: true,
5541
5593
  imports: [CommonModule],
5594
+ animations: [
5595
+ trigger('fade', [
5596
+ transition(':leave', [
5597
+ style({ opacity: 1, transform: 'scale(1)' }),
5598
+ animate('300ms ease-in-out', style({ opacity: 0, transform: 'scale(0.95)', height: 0, margin: 0, padding: 0 }))
5599
+ ])
5600
+ ])
5601
+ ],
5542
5602
  template: `
5543
5603
  <div
5544
5604
  *ngIf="!dismissed"
5605
+ @fade
5545
5606
  [class]="cn(alertVariants({ variant }), class)"
5546
- [class.opacity-0]="isDismissing"
5547
- [class.scale-95]="isDismissing"
5548
5607
  role="alert"
5549
5608
  >
5550
5609
  <ng-content select="[icon]"></ng-content>
@@ -5552,22 +5611,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
5552
5611
  <button
5553
5612
  *ngIf="dismissible"
5554
5613
  (click)="dismiss()"
5555
- class="absolute right-2 top-2 rounded-md p-1 text-foreground/50 opacity-0 transition-opacity hover:text-foreground focus:opacity-100 group-hover:opacity-100"
5556
- [class.opacity-100]="dismissible"
5614
+ class="absolute right-2 top-2 rounded-md p-1 opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2"
5615
+ type="button"
5557
5616
  >
5558
5617
  <i class="ri-close-line text-lg"></i>
5618
+ <span class="sr-only">Close</span>
5559
5619
  </button>
5560
5620
 
5561
5621
  <div>
5562
5622
  <h5 *ngIf="title" class="mb-1 font-medium leading-none tracking-tight">
5563
5623
  {{ title }}
5564
5624
  </h5>
5565
- <div class="text-sm [&_p]:leading-relaxed">
5625
+ <div class="text-sm [&_p]:leading-relaxed opacity-90">
5566
5626
  <ng-content></ng-content>
5567
5627
  </div>
5568
5628
  </div>
5569
5629
  </div>
5570
- `,
5630
+ `
5571
5631
  }]
5572
5632
  }], propDecorators: { variant: [{
5573
5633
  type: Input
@@ -6526,7 +6586,7 @@ class SegmentedComponent {
6526
6586
  role="tablist"
6527
6587
  >
6528
6588
  <div
6529
- class="absolute top-1 bottom-1 bg-background shadow-sm rounded-md transition-all duration-300 ease-[cubic-bezier(0.2,0.0,0.2,1)]"
6589
+ class="absolute top-1 bottom-1 bg-primary shadow-sm rounded-md transition-all duration-300 ease-[cubic-bezier(0.2,0.0,0.2,1)]"
6530
6590
  [style.left.px]="gliderLeft"
6531
6591
  [style.width.px]="gliderWidth"
6532
6592
  [class.opacity-0]="!hasValue"
@@ -6544,7 +6604,7 @@ class SegmentedComponent {
6544
6604
  'relative z-10 flex-1 px-3 py-1.5 text-sm font-medium transition-colors duration-200 rounded-md text-center focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',
6545
6605
  'flex items-center justify-center gap-2',
6546
6606
  value === item.value
6547
- ? 'text-foreground'
6607
+ ? 'text-primary-foreground'
6548
6608
  : 'text-muted-foreground hover:text-foreground/70',
6549
6609
  item.disabled && 'opacity-50 cursor-not-allowed',
6550
6610
  item.class
@@ -6581,7 +6641,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
6581
6641
  role="tablist"
6582
6642
  >
6583
6643
  <div
6584
- class="absolute top-1 bottom-1 bg-background shadow-sm rounded-md transition-all duration-300 ease-[cubic-bezier(0.2,0.0,0.2,1)]"
6644
+ class="absolute top-1 bottom-1 bg-primary shadow-sm rounded-md transition-all duration-300 ease-[cubic-bezier(0.2,0.0,0.2,1)]"
6585
6645
  [style.left.px]="gliderLeft"
6586
6646
  [style.width.px]="gliderWidth"
6587
6647
  [class.opacity-0]="!hasValue"
@@ -6599,7 +6659,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
6599
6659
  'relative z-10 flex-1 px-3 py-1.5 text-sm font-medium transition-colors duration-200 rounded-md text-center focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',
6600
6660
  'flex items-center justify-center gap-2',
6601
6661
  value === item.value
6602
- ? 'text-foreground'
6662
+ ? 'text-primary-foreground'
6603
6663
  : 'text-muted-foreground hover:text-foreground/70',
6604
6664
  item.disabled && 'opacity-50 cursor-not-allowed',
6605
6665
  item.class
@@ -6630,6 +6690,460 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
6630
6690
  args: ['itemEls']
6631
6691
  }] } });
6632
6692
 
6693
+ class SidebarComponent {
6694
+ items = [];
6695
+ collapsed = false;
6696
+ class = '';
6697
+ /**
6698
+ * Styling variant for active items.
6699
+ * - default: Solid primary background, light text (Matches Badge Default)
6700
+ * - secondary: Solid secondary background
6701
+ * - ghost: Transparent background, accent text (Shadcn standard)
6702
+ * - outline: Bordered
6703
+ */
6704
+ variant = 'default';
6705
+ expandedParents = new Set();
6706
+ expandedChildren = new Set();
6707
+ cn = cn;
6708
+ get activeClasses() {
6709
+ return cn('transition-colors',
6710
+ // Default: Solid Primary (Badge-like) with lighter opacity (80% instead of 90%)
6711
+ this.variant === 'default' && 'bg-primary/80 text-primary-foreground hover:bg-primary hover:text-primary-foreground',
6712
+ // Secondary: Solid Secondary
6713
+ this.variant === 'secondary' && 'bg-secondary text-secondary-foreground hover:bg-secondary/80',
6714
+ // Ghost: Subtle background (Sidebar standard)
6715
+ this.variant === 'ghost' && 'bg-accent text-accent-foreground',
6716
+ // Outline: Bordered
6717
+ this.variant === 'outline' && 'border border-border bg-background text-foreground hover:bg-accent hover:text-accent-foreground');
6718
+ }
6719
+ ngOnChanges(changes) {
6720
+ if (changes['collapsed'] && this.collapsed) {
6721
+ this.collapseAll();
6722
+ return;
6723
+ }
6724
+ if (changes['items']) {
6725
+ this.initializeState();
6726
+ }
6727
+ }
6728
+ // --- STATE INIT ---
6729
+ initializeState() {
6730
+ this.collapseAll();
6731
+ if (!this.items)
6732
+ return;
6733
+ this.items.forEach((group, gIndex) => {
6734
+ group.items.forEach((item, iIndex) => {
6735
+ const parentId = this.getParentId(group, item, gIndex, iIndex);
6736
+ if (item.expanded) {
6737
+ this.expandedParents.add(parentId);
6738
+ }
6739
+ if (item.items) {
6740
+ item.items.forEach((subItem, sIndex) => {
6741
+ if (subItem.expanded) {
6742
+ const childId = this.getChildId(group, item, subItem, gIndex, iIndex, sIndex);
6743
+ this.expandedChildren.add(childId);
6744
+ this.expandedParents.add(parentId);
6745
+ }
6746
+ });
6747
+ }
6748
+ });
6749
+ });
6750
+ }
6751
+ // --- ID GENERATORS ---
6752
+ getGroupId(group, index) {
6753
+ return group.id || group.title || `g-${index}`;
6754
+ }
6755
+ getParentId(group, item, gIndex, iIndex) {
6756
+ const groupId = this.getGroupId(group, gIndex);
6757
+ const itemId = item.id || item.title || `p-${iIndex}`;
6758
+ return `${groupId}__${itemId}`;
6759
+ }
6760
+ getChildId(group, parent, subItem, gIndex, iIndex, sIndex) {
6761
+ const parentId = this.getParentId(group, parent, gIndex, iIndex);
6762
+ const subItemId = subItem.id || subItem.title || `c-${sIndex}`;
6763
+ return `${parentId}__${subItemId}`;
6764
+ }
6765
+ // --- ACTIONS ---
6766
+ toggleParent(group, item, gIndex, iIndex) {
6767
+ if (this.collapsed)
6768
+ return;
6769
+ const id = this.getParentId(group, item, gIndex, iIndex);
6770
+ const newSet = new Set(this.expandedParents);
6771
+ if (newSet.has(id)) {
6772
+ newSet.delete(id);
6773
+ }
6774
+ else {
6775
+ newSet.add(id);
6776
+ }
6777
+ this.expandedParents = newSet;
6778
+ }
6779
+ toggleChild(group, parent, subItem, gIndex, iIndex, sIndex) {
6780
+ const id = this.getChildId(group, parent, subItem, gIndex, iIndex, sIndex);
6781
+ const newSet = new Set(this.expandedChildren);
6782
+ if (newSet.has(id)) {
6783
+ newSet.delete(id);
6784
+ }
6785
+ else {
6786
+ newSet.add(id);
6787
+ }
6788
+ this.expandedChildren = newSet;
6789
+ }
6790
+ collapseAll() {
6791
+ this.expandedParents = new Set();
6792
+ this.expandedChildren = new Set();
6793
+ }
6794
+ // --- TEMPLATE HELPERS ---
6795
+ isParentExpanded(group, item, gIndex, iIndex) {
6796
+ return this.expandedParents.has(this.getParentId(group, item, gIndex, iIndex));
6797
+ }
6798
+ isChildExpanded(group, parent, subItem, gIndex, iIndex, sIndex) {
6799
+ return this.expandedChildren.has(this.getChildId(group, parent, subItem, gIndex, iIndex, sIndex));
6800
+ }
6801
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SidebarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6802
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: SidebarComponent, isStandalone: true, selector: "tolle-sidebar", inputs: { items: "items", collapsed: "collapsed", class: "class", variant: "variant" }, usesOnChanges: true, ngImport: i0, template: `
6803
+ <aside [class]="cn(
6804
+ 'flex flex-col h-full bg-background transition-[width] duration-300 ease-in-out shrink-0 overflow-hidden',
6805
+ collapsed ? 'w-16' : 'w-64',
6806
+ class
6807
+ )">
6808
+ <div class="flex h-14 shrink-0 items-center px-3 overflow-hidden whitespace-nowrap">
6809
+ <ng-content select="[header]"></ng-content>
6810
+ </div>
6811
+
6812
+ <div class="flex-1 min-h-0 overflow-y-auto overflow-x-hidden py-4 px-3 custom-scrollbar">
6813
+
6814
+ @for (group of items; track group.id || group.title || $index; let gIndex = $index) {
6815
+ <div class="mb-6">
6816
+
6817
+ <div [class]="cn(
6818
+ 'mb-2 px-2 text-xs font-semibold uppercase tracking-wider text-muted-foreground/70 transition-all duration-200 overflow-hidden',
6819
+ collapsed ? 'opacity-0 h-0 mb-0 px-0' : 'opacity-100 h-auto'
6820
+ )">
6821
+ {{ group.title }}
6822
+ </div>
6823
+
6824
+ <div class="flex flex-col gap-1">
6825
+ @for (item of group.items; track item.id || item.title || $index; let i = $index) {
6826
+
6827
+ @if (item.items && item.items.length) {
6828
+ <!-- Parent Item (Group) -->
6829
+ <div class="relative">
6830
+ <button
6831
+ type="button"
6832
+ (click)="toggleParent(group, item, gIndex, i)"
6833
+ [disabled]="collapsed"
6834
+ [attr.aria-expanded]="isParentExpanded(group, item, gIndex, i)"
6835
+ [class]="cn(
6836
+ 'group w-full relative flex items-center rounded-md px-3 py-2 text-sm font-medium transition-colors',
6837
+ 'hover:bg-accent hover:text-accent-foreground',
6838
+ isParentExpanded(group, item, gIndex, i) ? 'text-foreground bg-accent/50' : 'text-muted-foreground',
6839
+ collapsed ? 'justify-center' : 'justify-start'
6840
+ )"
6841
+ >
6842
+ <i [class]="cn(
6843
+ item.icon || 'ri-circle-fill',
6844
+ 'h-4 w-4 text-lg shrink-0 transition-transform',
6845
+ !collapsed && 'group-hover:scale-110'
6846
+ )"></i>
6847
+
6848
+ <span [class]="cn(
6849
+ 'truncate transition-all duration-300',
6850
+ collapsed ? 'opacity-0 w-0 ml-0' : 'opacity-100 w-auto ml-3'
6851
+ )">
6852
+ {{ item.title }}
6853
+ </span>
6854
+
6855
+ @if (!collapsed) {
6856
+ <i [class]="cn(
6857
+ 'ri-arrow-down-s-line ml-auto transition-transform duration-300',
6858
+ isParentExpanded(group, item, gIndex, i) ? 'rotate-180' : ''
6859
+ )"></i>
6860
+ }
6861
+ </button>
6862
+
6863
+ <!-- Submenu Grid Transition -->
6864
+ <div [class]="cn(
6865
+ 'grid transition-[grid-template-rows] duration-300 ease-in-out',
6866
+ isParentExpanded(group, item, gIndex, i) && !collapsed ? 'grid-rows-[1fr] opacity-100' : 'grid-rows-[0fr] opacity-0'
6867
+ )">
6868
+ <div class="overflow-hidden">
6869
+ <div class="flex flex-col gap-1 mt-1 ml-4 border-l border-border/50 pl-2">
6870
+
6871
+ @for (subItem of item.items; track subItem.id || subItem.title || $index; let j = $index) {
6872
+ @if (subItem.items && subItem.items.length) {
6873
+ <!-- Grandchild Item Group (Recursive-ish logic for depth 2) -->
6874
+ <div class="relative">
6875
+ <button
6876
+ type="button"
6877
+ (click)="toggleChild(group, item, subItem, gIndex, i, j); $event.stopPropagation()"
6878
+ [class]="cn(
6879
+ 'group w-full relative flex items-center rounded-md px-3 py-1.5 text-sm font-medium transition-colors',
6880
+ 'hover:bg-accent hover:text-accent-foreground text-muted-foreground',
6881
+ isChildExpanded(group, item, subItem, gIndex, i, j) ? 'text-foreground bg-accent/30' : ''
6882
+ )"
6883
+ >
6884
+ <span class="w-1.5 h-1.5 rounded-full bg-border shrink-0"></span>
6885
+ <span class="ml-2 truncate">{{ subItem.title }}</span>
6886
+ <i [class]="cn(
6887
+ 'ri-arrow-right-s-line ml-auto transition-transform duration-300 text-xs',
6888
+ isChildExpanded(group, item, subItem, gIndex, i, j) ? 'rotate-90' : ''
6889
+ )"></i>
6890
+ </button>
6891
+
6892
+ <div [class]="cn(
6893
+ 'grid transition-[grid-template-rows] duration-300 ease-in-out',
6894
+ isChildExpanded(group, item, subItem, gIndex, i, j) ? 'grid-rows-[1fr] opacity-100' : 'grid-rows-[0fr] opacity-0'
6895
+ )">
6896
+ <div class="overflow-hidden">
6897
+ <div class="flex flex-col gap-1 mt-1 ml-4 border-l border-border/30 pl-2">
6898
+ @for (grandChild of subItem.items; track grandChild.title) {
6899
+ <a
6900
+ [routerLink]="grandChild.url"
6901
+ [routerLinkActive]="activeClasses"
6902
+ [routerLinkActiveOptions]="{ exact: true }"
6903
+ class="flex items-center gap-2 hover:no-underline rounded-md px-3 py-1.5 text-sm transition-colors hover:bg-accent hover:text-accent-foreground text-muted-foreground whitespace-nowrap"
6904
+ >
6905
+ <span class="w-1.5 h-1.5 rounded-full bg-border/70 shrink-0"></span>
6906
+ <span class="truncate">{{ grandChild.title }}</span>
6907
+ </a>
6908
+ }
6909
+ </div>
6910
+ </div>
6911
+ </div>
6912
+ </div>
6913
+ }
6914
+ @else {
6915
+ <!-- Standard Sub Item -->
6916
+ <a
6917
+ [routerLink]="subItem.url"
6918
+ [routerLinkActive]="activeClasses"
6919
+ [routerLinkActiveOptions]="{ exact: true }"
6920
+ class="flex items-center gap-2 hover:no-underline rounded-md px-3 py-1.5 text-sm transition-colors hover:bg-accent hover:text-accent-foreground text-muted-foreground whitespace-nowrap"
6921
+ >
6922
+ <span class="w-1.5 h-1.5 rounded-full bg-border shrink-0"></span>
6923
+ <span class="truncate">{{ subItem.title }}</span>
6924
+ </a>
6925
+ }
6926
+ }
6927
+ </div>
6928
+ </div>
6929
+ </div>
6930
+ </div>
6931
+ }
6932
+ @else {
6933
+ <!-- Standard Top-Level Item -->
6934
+ <a
6935
+ [routerLink]="item.url"
6936
+ [routerLinkActive]="activeClasses"
6937
+ [routerLinkActiveOptions]="{ exact: true }"
6938
+ [class]="cn(
6939
+ 'group relative hover:no-underline flex items-center rounded-md px-3 py-2 text-sm font-medium transition-colors',
6940
+ 'hover:bg-accent hover:text-accent-foreground text-muted-foreground',
6941
+ collapsed ? 'justify-center' : 'justify-start'
6942
+ )"
6943
+ >
6944
+ <i [class]="cn(
6945
+ item.icon || 'ri-circle-fill',
6946
+ 'h-4 w-4 text-lg shrink-0 transition-transform',
6947
+ !collapsed && 'group-hover:scale-110'
6948
+ )"></i>
6949
+ <span [class]="cn(
6950
+ 'truncate transition-all duration-300',
6951
+ collapsed ? 'opacity-0 w-0 ml-0' : 'opacity-100 w-auto ml-3'
6952
+ )">
6953
+ {{ item.title }}
6954
+ </span>
6955
+ </a>
6956
+ }
6957
+ }
6958
+ </div>
6959
+ </div>
6960
+ }
6961
+ </div>
6962
+
6963
+ <div class="shrink-0 p-3 overflow-hidden whitespace-nowrap">
6964
+ <ng-content select="[footer]"></ng-content>
6965
+ </div>
6966
+ </aside>
6967
+ `, isInline: true, styles: [":host{display:block;height:100%}.custom-scrollbar{scrollbar-width:thin;scrollbar-color:rgba(156,163,175,.3) transparent}.custom-scrollbar::-webkit-scrollbar{width:4px}.custom-scrollbar::-webkit-scrollbar-track{background:transparent}.custom-scrollbar::-webkit-scrollbar-thumb{background-color:#9ca3af4d;border-radius:20px}button:disabled{cursor:not-allowed;opacity:.6}*{transition-timing-function:cubic-bezier(.4,0,.2,1)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1$2.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }] });
6968
+ }
6969
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SidebarComponent, decorators: [{
6970
+ type: Component,
6971
+ args: [{ selector: 'tolle-sidebar', standalone: true, imports: [CommonModule, RouterModule], template: `
6972
+ <aside [class]="cn(
6973
+ 'flex flex-col h-full bg-background transition-[width] duration-300 ease-in-out shrink-0 overflow-hidden',
6974
+ collapsed ? 'w-16' : 'w-64',
6975
+ class
6976
+ )">
6977
+ <div class="flex h-14 shrink-0 items-center px-3 overflow-hidden whitespace-nowrap">
6978
+ <ng-content select="[header]"></ng-content>
6979
+ </div>
6980
+
6981
+ <div class="flex-1 min-h-0 overflow-y-auto overflow-x-hidden py-4 px-3 custom-scrollbar">
6982
+
6983
+ @for (group of items; track group.id || group.title || $index; let gIndex = $index) {
6984
+ <div class="mb-6">
6985
+
6986
+ <div [class]="cn(
6987
+ 'mb-2 px-2 text-xs font-semibold uppercase tracking-wider text-muted-foreground/70 transition-all duration-200 overflow-hidden',
6988
+ collapsed ? 'opacity-0 h-0 mb-0 px-0' : 'opacity-100 h-auto'
6989
+ )">
6990
+ {{ group.title }}
6991
+ </div>
6992
+
6993
+ <div class="flex flex-col gap-1">
6994
+ @for (item of group.items; track item.id || item.title || $index; let i = $index) {
6995
+
6996
+ @if (item.items && item.items.length) {
6997
+ <!-- Parent Item (Group) -->
6998
+ <div class="relative">
6999
+ <button
7000
+ type="button"
7001
+ (click)="toggleParent(group, item, gIndex, i)"
7002
+ [disabled]="collapsed"
7003
+ [attr.aria-expanded]="isParentExpanded(group, item, gIndex, i)"
7004
+ [class]="cn(
7005
+ 'group w-full relative flex items-center rounded-md px-3 py-2 text-sm font-medium transition-colors',
7006
+ 'hover:bg-accent hover:text-accent-foreground',
7007
+ isParentExpanded(group, item, gIndex, i) ? 'text-foreground bg-accent/50' : 'text-muted-foreground',
7008
+ collapsed ? 'justify-center' : 'justify-start'
7009
+ )"
7010
+ >
7011
+ <i [class]="cn(
7012
+ item.icon || 'ri-circle-fill',
7013
+ 'h-4 w-4 text-lg shrink-0 transition-transform',
7014
+ !collapsed && 'group-hover:scale-110'
7015
+ )"></i>
7016
+
7017
+ <span [class]="cn(
7018
+ 'truncate transition-all duration-300',
7019
+ collapsed ? 'opacity-0 w-0 ml-0' : 'opacity-100 w-auto ml-3'
7020
+ )">
7021
+ {{ item.title }}
7022
+ </span>
7023
+
7024
+ @if (!collapsed) {
7025
+ <i [class]="cn(
7026
+ 'ri-arrow-down-s-line ml-auto transition-transform duration-300',
7027
+ isParentExpanded(group, item, gIndex, i) ? 'rotate-180' : ''
7028
+ )"></i>
7029
+ }
7030
+ </button>
7031
+
7032
+ <!-- Submenu Grid Transition -->
7033
+ <div [class]="cn(
7034
+ 'grid transition-[grid-template-rows] duration-300 ease-in-out',
7035
+ isParentExpanded(group, item, gIndex, i) && !collapsed ? 'grid-rows-[1fr] opacity-100' : 'grid-rows-[0fr] opacity-0'
7036
+ )">
7037
+ <div class="overflow-hidden">
7038
+ <div class="flex flex-col gap-1 mt-1 ml-4 border-l border-border/50 pl-2">
7039
+
7040
+ @for (subItem of item.items; track subItem.id || subItem.title || $index; let j = $index) {
7041
+ @if (subItem.items && subItem.items.length) {
7042
+ <!-- Grandchild Item Group (Recursive-ish logic for depth 2) -->
7043
+ <div class="relative">
7044
+ <button
7045
+ type="button"
7046
+ (click)="toggleChild(group, item, subItem, gIndex, i, j); $event.stopPropagation()"
7047
+ [class]="cn(
7048
+ 'group w-full relative flex items-center rounded-md px-3 py-1.5 text-sm font-medium transition-colors',
7049
+ 'hover:bg-accent hover:text-accent-foreground text-muted-foreground',
7050
+ isChildExpanded(group, item, subItem, gIndex, i, j) ? 'text-foreground bg-accent/30' : ''
7051
+ )"
7052
+ >
7053
+ <span class="w-1.5 h-1.5 rounded-full bg-border shrink-0"></span>
7054
+ <span class="ml-2 truncate">{{ subItem.title }}</span>
7055
+ <i [class]="cn(
7056
+ 'ri-arrow-right-s-line ml-auto transition-transform duration-300 text-xs',
7057
+ isChildExpanded(group, item, subItem, gIndex, i, j) ? 'rotate-90' : ''
7058
+ )"></i>
7059
+ </button>
7060
+
7061
+ <div [class]="cn(
7062
+ 'grid transition-[grid-template-rows] duration-300 ease-in-out',
7063
+ isChildExpanded(group, item, subItem, gIndex, i, j) ? 'grid-rows-[1fr] opacity-100' : 'grid-rows-[0fr] opacity-0'
7064
+ )">
7065
+ <div class="overflow-hidden">
7066
+ <div class="flex flex-col gap-1 mt-1 ml-4 border-l border-border/30 pl-2">
7067
+ @for (grandChild of subItem.items; track grandChild.title) {
7068
+ <a
7069
+ [routerLink]="grandChild.url"
7070
+ [routerLinkActive]="activeClasses"
7071
+ [routerLinkActiveOptions]="{ exact: true }"
7072
+ class="flex items-center gap-2 hover:no-underline rounded-md px-3 py-1.5 text-sm transition-colors hover:bg-accent hover:text-accent-foreground text-muted-foreground whitespace-nowrap"
7073
+ >
7074
+ <span class="w-1.5 h-1.5 rounded-full bg-border/70 shrink-0"></span>
7075
+ <span class="truncate">{{ grandChild.title }}</span>
7076
+ </a>
7077
+ }
7078
+ </div>
7079
+ </div>
7080
+ </div>
7081
+ </div>
7082
+ }
7083
+ @else {
7084
+ <!-- Standard Sub Item -->
7085
+ <a
7086
+ [routerLink]="subItem.url"
7087
+ [routerLinkActive]="activeClasses"
7088
+ [routerLinkActiveOptions]="{ exact: true }"
7089
+ class="flex items-center gap-2 hover:no-underline rounded-md px-3 py-1.5 text-sm transition-colors hover:bg-accent hover:text-accent-foreground text-muted-foreground whitespace-nowrap"
7090
+ >
7091
+ <span class="w-1.5 h-1.5 rounded-full bg-border shrink-0"></span>
7092
+ <span class="truncate">{{ subItem.title }}</span>
7093
+ </a>
7094
+ }
7095
+ }
7096
+ </div>
7097
+ </div>
7098
+ </div>
7099
+ </div>
7100
+ }
7101
+ @else {
7102
+ <!-- Standard Top-Level Item -->
7103
+ <a
7104
+ [routerLink]="item.url"
7105
+ [routerLinkActive]="activeClasses"
7106
+ [routerLinkActiveOptions]="{ exact: true }"
7107
+ [class]="cn(
7108
+ 'group relative hover:no-underline flex items-center rounded-md px-3 py-2 text-sm font-medium transition-colors',
7109
+ 'hover:bg-accent hover:text-accent-foreground text-muted-foreground',
7110
+ collapsed ? 'justify-center' : 'justify-start'
7111
+ )"
7112
+ >
7113
+ <i [class]="cn(
7114
+ item.icon || 'ri-circle-fill',
7115
+ 'h-4 w-4 text-lg shrink-0 transition-transform',
7116
+ !collapsed && 'group-hover:scale-110'
7117
+ )"></i>
7118
+ <span [class]="cn(
7119
+ 'truncate transition-all duration-300',
7120
+ collapsed ? 'opacity-0 w-0 ml-0' : 'opacity-100 w-auto ml-3'
7121
+ )">
7122
+ {{ item.title }}
7123
+ </span>
7124
+ </a>
7125
+ }
7126
+ }
7127
+ </div>
7128
+ </div>
7129
+ }
7130
+ </div>
7131
+
7132
+ <div class="shrink-0 p-3 overflow-hidden whitespace-nowrap">
7133
+ <ng-content select="[footer]"></ng-content>
7134
+ </div>
7135
+ </aside>
7136
+ `, styles: [":host{display:block;height:100%}.custom-scrollbar{scrollbar-width:thin;scrollbar-color:rgba(156,163,175,.3) transparent}.custom-scrollbar::-webkit-scrollbar{width:4px}.custom-scrollbar::-webkit-scrollbar-track{background:transparent}.custom-scrollbar::-webkit-scrollbar-thumb{background-color:#9ca3af4d;border-radius:20px}button:disabled{cursor:not-allowed;opacity:.6}*{transition-timing-function:cubic-bezier(.4,0,.2,1)}\n"] }]
7137
+ }], propDecorators: { items: [{
7138
+ type: Input
7139
+ }], collapsed: [{
7140
+ type: Input
7141
+ }], class: [{
7142
+ type: Input
7143
+ }], variant: [{
7144
+ type: Input
7145
+ }] } });
7146
+
6633
7147
  /*
6634
7148
  * Public API Surface of tolle
6635
7149
  */
@@ -6638,5 +7152,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
6638
7152
  * Generated bundle index. Do not edit.
6639
7153
  */
6640
7154
 
6641
- export { AccordionComponent, AccordionItemComponent, AlertComponent, AvatarComponent, AvatarFallbackComponent, BadgeComponent, BreadcrumbComponent, BreadcrumbItemComponent, BreadcrumbLinkComponent, BreadcrumbSeparatorComponent, ButtonComponent, ButtonGroupComponent, CalendarComponent, CardComponent, CardContentComponent, CardFooterComponent, CardHeaderComponent, CardTitleComponent, CheckboxComponent, DataTableComponent, DatePickerComponent, DateRangePickerComponent, DropdownItemComponent, DropdownLabelComponent, DropdownMenuComponent, DropdownSeparatorComponent, DropdownTriggerDirective, EmptyStateComponent, InputComponent, MaskedInputComponent, Modal, ModalComponent, ModalRef, ModalService, ModalStackService, MultiSelectComponent, OtpComponent, OtpGroupComponent, OtpSlotComponent, PaginationComponent, PopoverComponent, PopoverContentComponent, RadioGroupComponent, RadioItemComponent, RangeCalendarComponent, SegmentedComponent, SelectComponent, SelectGroupComponent, SelectItemComponent, SelectSeparatorComponent, SkeletonComponent, SwitchComponent, TOLLE_CONFIG, TextareaComponent, ThemeService, ToastContainerComponent, ToastService, TolleCellDirective, TooltipDirective, cn, provideTolleConfig };
7155
+ export { AccordionComponent, AccordionItemComponent, AlertComponent, AvatarComponent, AvatarFallbackComponent, BadgeComponent, BreadcrumbComponent, BreadcrumbItemComponent, BreadcrumbLinkComponent, BreadcrumbSeparatorComponent, ButtonComponent, ButtonGroupComponent, CalendarComponent, CardComponent, CardContentComponent, CardFooterComponent, CardHeaderComponent, CardTitleComponent, CheckboxComponent, DataTableComponent, DatePickerComponent, DateRangePickerComponent, DropdownItemComponent, DropdownLabelComponent, DropdownMenuComponent, DropdownSeparatorComponent, DropdownTriggerDirective, EmptyStateComponent, InputComponent, MaskedInputComponent, Modal, ModalComponent, ModalRef, ModalService, ModalStackService, MultiSelectComponent, OtpComponent, OtpGroupComponent, OtpSlotComponent, PaginationComponent, PopoverComponent, PopoverContentComponent, RadioGroupComponent, RadioItemComponent, RangeCalendarComponent, SegmentedComponent, SelectComponent, SelectGroupComponent, SelectItemComponent, SelectSeparatorComponent, SidebarComponent, SkeletonComponent, SwitchComponent, TOLLE_CONFIG, TextareaComponent, ThemeService, ToastContainerComponent, ToastService, TolleCellDirective, TooltipDirective, cn, provideTolleConfig };
6642
7156
  //# sourceMappingURL=tolle-ui.mjs.map