@ojiepermana/angular 21.1.28 → 21.1.30

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,7 +1,7 @@
1
1
  import { clsx } from 'clsx';
2
2
  import { twMerge } from 'tailwind-merge';
3
3
  import * as i0 from '@angular/core';
4
- import { Directive, input, model, computed, forwardRef, ChangeDetectionStrategy, Component, inject, signal, output, viewChild, ElementRef, DestroyRef, ViewContainerRef, effect, untracked, ContentChildren, TemplateRef, Injectable, InjectionToken } from '@angular/core';
4
+ import { Directive, input, model, computed, forwardRef, ChangeDetectionStrategy, Component, inject, signal, booleanAttribute, output, viewChild, ElementRef, DestroyRef, ViewContainerRef, effect, untracked, ContentChildren, TemplateRef, Injectable, InjectionToken } from '@angular/core';
5
5
  import { cva } from 'class-variance-authority';
6
6
  import { MatCalendar, MatDatepicker, MatDatepickerInput, MatDatepickerToggle } from '@angular/material/datepicker';
7
7
  import * as i1 from '@angular/forms';
@@ -96,7 +96,7 @@ class AccordionItemComponent {
96
96
  class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
97
97
  triggerId = `ui-accordion-trigger-${nextId$1()}`;
98
98
  contentId = `ui-accordion-content-${nextId$1()}`;
99
- classes = computed(() => cn('border-b', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
99
+ classes = computed(() => cn('block border-b border-border', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
100
100
  open = computed(() => this.ctx.isOpen(this.value()), ...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
101
101
  toggle() {
102
102
  if (!this.disabled())
@@ -174,7 +174,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImpo
174
174
  class AccordionContentComponent {
175
175
  item = inject(AccordionItemComponent);
176
176
  class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
177
- classes = computed(() => cn('overflow-hidden text-sm', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
177
+ classes = computed(() => cn('block overflow-hidden text-sm', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
178
178
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: AccordionContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
179
179
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: AccordionContentComponent, isStandalone: true, selector: "ui-accordion-content", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "attr.id": "item.contentId", "attr.role": "\"region\"", "attr.aria-labelledby": "item.triggerId", "attr.data-state": "item.open() ? \"open\" : \"closed\"", "hidden": "!item.open()" } }, ngImport: i0, template: `<div class="pb-4 pt-0 text-sm"><ng-content /></div>`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
180
180
  }
@@ -200,7 +200,7 @@ function nextId$1() {
200
200
  }
201
201
 
202
202
  const alertVariants = cva([
203
- 'relative w-full rounded-lg border p-4',
203
+ 'relative block w-full rounded-lg border p-4 [&:has(ui-alert-action)]:pr-20',
204
204
  '[&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px]',
205
205
  '[&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground',
206
206
  ].join(' '), {
@@ -234,7 +234,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImpo
234
234
  }], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
235
235
  class AlertTitleComponent {
236
236
  class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
237
- classes = computed(() => cn('mb-1 font-medium leading-none tracking-tight', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
237
+ classes = computed(() => cn('mb-1 block font-medium leading-none tracking-tight', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
238
238
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: AlertTitleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
239
239
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: AlertTitleComponent, isStandalone: true, selector: "ui-alert-title, h5[ui-alert-title]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
240
240
  }
@@ -249,7 +249,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImpo
249
249
  }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
250
250
  class AlertDescriptionComponent {
251
251
  class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
252
- classes = computed(() => cn('text-sm [&_p]:leading-relaxed', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
252
+ classes = computed(() => cn('block text-sm [&_p]:leading-relaxed', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
253
253
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: AlertDescriptionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
254
254
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: AlertDescriptionComponent, isStandalone: true, selector: "ui-alert-description", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
255
255
  }
@@ -262,30 +262,54 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImpo
262
262
  template: `<ng-content />`,
263
263
  }]
264
264
  }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
265
+ class AlertActionComponent {
266
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
267
+ classes = computed(() => cn('mt-3 flex items-center justify-end sm:absolute sm:right-4 sm:top-4 sm:mt-0', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
268
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: AlertActionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
269
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: AlertActionComponent, isStandalone: true, selector: "ui-alert-action", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
270
+ }
271
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: AlertActionComponent, decorators: [{
272
+ type: Component,
273
+ args: [{
274
+ selector: 'ui-alert-action',
275
+ changeDetection: ChangeDetectionStrategy.OnPush,
276
+ host: { '[class]': 'classes()' },
277
+ template: `<ng-content />`,
278
+ }]
279
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
265
280
 
281
+ const avatarSizeClasses = {
282
+ default: 'h-10 w-10',
283
+ sm: 'h-8 w-8',
284
+ lg: 'h-12 w-12',
285
+ };
266
286
  class AvatarComponent {
287
+ size = input('default', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
267
288
  class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
268
- classes = computed(() => cn('relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
289
+ classes = computed(() => cn('relative flex shrink-0 overflow-hidden rounded-full', avatarSizeClasses[this.size()], this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
269
290
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: AvatarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
270
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: AvatarComponent, isStandalone: true, selector: "ui-avatar", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
291
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: AvatarComponent, isStandalone: true, selector: "ui-avatar", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "attr.data-size": "size()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
271
292
  }
272
293
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: AvatarComponent, decorators: [{
273
294
  type: Component,
274
295
  args: [{
275
296
  selector: 'ui-avatar',
276
297
  changeDetection: ChangeDetectionStrategy.OnPush,
277
- host: { '[class]': 'classes()' },
298
+ host: {
299
+ '[class]': 'classes()',
300
+ '[attr.data-size]': 'size()',
301
+ },
278
302
  template: `<ng-content />`,
279
303
  }]
280
- }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
304
+ }], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
281
305
  class AvatarImageComponent {
282
306
  src = input.required(...(ngDevMode ? [{ debugName: "src" }] : /* istanbul ignore next */ []));
283
307
  alt = input('', ...(ngDevMode ? [{ debugName: "alt" }] : /* istanbul ignore next */ []));
284
308
  class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
285
309
  failed = signal(false, ...(ngDevMode ? [{ debugName: "failed" }] : /* istanbul ignore next */ []));
286
- classes = computed(() => cn('aspect-square h-full w-full object-cover', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
310
+ classes = computed(() => cn('h-full w-full object-cover', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
287
311
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: AvatarImageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
288
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.13", type: AvatarImageComponent, isStandalone: true, selector: "ui-avatar-image", inputs: { src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: true, transformFunction: null }, alt: { classPropertyName: "alt", publicName: "alt", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
312
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.13", type: AvatarImageComponent, isStandalone: true, selector: "ui-avatar-image", inputs: { src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: true, transformFunction: null }, alt: { classPropertyName: "alt", publicName: "alt", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "absolute inset-0 z-10 block" }, ngImport: i0, template: `
289
313
  @if (!failed()) {
290
314
  <img [src]="src()" [alt]="alt()" [class]="classes()" (error)="failed.set(true)" />
291
315
  }
@@ -296,6 +320,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImpo
296
320
  args: [{
297
321
  selector: 'ui-avatar-image',
298
322
  changeDetection: ChangeDetectionStrategy.OnPush,
323
+ host: {
324
+ class: 'absolute inset-0 z-10 block',
325
+ },
299
326
  template: `
300
327
  @if (!failed()) {
301
328
  <img [src]="src()" [alt]="alt()" [class]="classes()" (error)="failed.set(true)" />
@@ -305,7 +332,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImpo
305
332
  }], propDecorators: { src: [{ type: i0.Input, args: [{ isSignal: true, alias: "src", required: true }] }], alt: [{ type: i0.Input, args: [{ isSignal: true, alias: "alt", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
306
333
  class AvatarFallbackComponent {
307
334
  class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
308
- classes = computed(() => cn('flex h-full w-full items-center justify-center rounded-full bg-muted text-sm font-medium text-muted-foreground', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
335
+ classes = computed(() => cn('absolute inset-0 z-0 flex items-center justify-center rounded-full bg-muted text-sm font-medium text-muted-foreground', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
309
336
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: AvatarFallbackComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
310
337
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: AvatarFallbackComponent, isStandalone: true, selector: "ui-avatar-fallback", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
311
338
  }
@@ -318,10 +345,56 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImpo
318
345
  template: `<ng-content />`,
319
346
  }]
320
347
  }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
348
+ class AvatarBadgeComponent {
349
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
350
+ classes = computed(() => cn('absolute bottom-0 right-0 z-10 flex size-4 translate-x-1/4 translate-y-1/4 items-center justify-center rounded-full border-2 border-background bg-primary text-[0.625rem] font-medium leading-none text-primary-foreground shadow-sm [&>*]:pointer-events-none [&>*]:size-2.5 [&>*]:shrink-0', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
351
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: AvatarBadgeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
352
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: AvatarBadgeComponent, isStandalone: true, selector: "ui-avatar-badge", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
353
+ }
354
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: AvatarBadgeComponent, decorators: [{
355
+ type: Component,
356
+ args: [{
357
+ selector: 'ui-avatar-badge',
358
+ changeDetection: ChangeDetectionStrategy.OnPush,
359
+ host: { '[class]': 'classes()' },
360
+ template: `<ng-content />`,
361
+ }]
362
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
363
+ class AvatarGroupComponent {
364
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
365
+ classes = computed(() => cn('inline-flex items-center [&>*]:ring-2 [&>*]:ring-background [&>*:not(:first-child)]:-ml-3', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
366
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: AvatarGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
367
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: AvatarGroupComponent, isStandalone: true, selector: "ui-avatar-group", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
368
+ }
369
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: AvatarGroupComponent, decorators: [{
370
+ type: Component,
371
+ args: [{
372
+ selector: 'ui-avatar-group',
373
+ changeDetection: ChangeDetectionStrategy.OnPush,
374
+ host: { '[class]': 'classes()' },
375
+ template: `<ng-content />`,
376
+ }]
377
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
378
+ class AvatarGroupCountComponent {
379
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
380
+ classes = computed(() => cn('flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-muted text-sm font-medium text-muted-foreground', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
381
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: AvatarGroupCountComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
382
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: AvatarGroupCountComponent, isStandalone: true, selector: "ui-avatar-group-count", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
383
+ }
384
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: AvatarGroupCountComponent, decorators: [{
385
+ type: Component,
386
+ args: [{
387
+ selector: 'ui-avatar-group-count',
388
+ changeDetection: ChangeDetectionStrategy.OnPush,
389
+ host: { '[class]': 'classes()' },
390
+ template: `<ng-content />`,
391
+ }]
392
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
321
393
 
322
394
  const badgeVariants = cva([
323
- 'inline-flex items-center rounded-full border px-2.5 py-0.5',
395
+ 'inline-flex items-center gap-1 rounded-full border border-border px-2.5 py-0.5',
324
396
  'text-xs font-semibold transition-colors',
397
+ '[&>svg]:size-3 [&>svg]:shrink-0',
325
398
  'focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',
326
399
  ].join(' '), {
327
400
  variants: {
@@ -329,7 +402,9 @@ const badgeVariants = cva([
329
402
  default: 'border-transparent bg-primary text-primary-foreground hover:bg-primary/80',
330
403
  secondary: 'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80',
331
404
  destructive: 'border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80',
332
- outline: 'text-foreground',
405
+ outline: 'bg-transparent text-foreground',
406
+ ghost: 'border-transparent bg-transparent text-foreground hover:bg-accent hover:text-accent-foreground',
407
+ link: 'border-transparent bg-transparent text-foreground underline-offset-4 hover:underline',
333
408
  },
334
409
  },
335
410
  defaultVariants: { variant: 'default' },
@@ -340,12 +415,12 @@ class BadgeComponent {
340
415
  class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
341
416
  classes = computed(() => cn(badgeVariants({ variant: this.variant() }), this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
342
417
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: BadgeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
343
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: BadgeComponent, isStandalone: true, selector: "ui-badge, span[ui-badge]", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
418
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: BadgeComponent, isStandalone: true, selector: "ui-badge, [ui-badge]", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
344
419
  }
345
420
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: BadgeComponent, decorators: [{
346
421
  type: Component,
347
422
  args: [{
348
- selector: 'ui-badge, span[ui-badge]',
423
+ selector: 'ui-badge, [ui-badge]',
349
424
  changeDetection: ChangeDetectionStrategy.OnPush,
350
425
  host: { '[class]': 'classes()' },
351
426
  template: `<ng-content />`,
@@ -353,8 +428,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImpo
353
428
  }], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
354
429
 
355
430
  class BreadcrumbComponent {
431
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
432
+ classes = computed(() => cn('block', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
356
433
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: BreadcrumbComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
357
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.13", type: BreadcrumbComponent, isStandalone: true, selector: "ui-breadcrumb, nav[ui-breadcrumb]", host: { properties: { "attr.aria-label": "\"breadcrumb\"" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
434
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: BreadcrumbComponent, isStandalone: true, selector: "ui-breadcrumb, nav[ui-breadcrumb]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "attr.aria-label": "\"breadcrumb\"" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
358
435
  }
359
436
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: BreadcrumbComponent, decorators: [{
360
437
  type: Component,
@@ -362,11 +439,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImpo
362
439
  selector: 'ui-breadcrumb, nav[ui-breadcrumb]',
363
440
  changeDetection: ChangeDetectionStrategy.OnPush,
364
441
  host: {
442
+ '[class]': 'classes()',
365
443
  '[attr.aria-label]': '"breadcrumb"',
366
444
  },
367
445
  template: `<ng-content />`,
368
446
  }]
369
- }] });
447
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
370
448
  class BreadcrumbListComponent {
371
449
  class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
372
450
  classes = computed(() => cn('flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground sm:gap-2.5', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
@@ -479,7 +557,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImpo
479
557
  }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
480
558
  class BreadcrumbEllipsisComponent {
481
559
  class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
482
- classes = computed(() => cn('flex h-9 w-9 items-center justify-center', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
560
+ classes = computed(() => cn('relative flex h-9 w-9 items-center justify-center', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
483
561
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: BreadcrumbEllipsisComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
484
562
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: BreadcrumbEllipsisComponent, isStandalone: true, selector: "span[ui-breadcrumb-ellipsis]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "presentation", "aria-hidden": "true" }, properties: { "class": "classes()" } }, ngImport: i0, template: `
485
563
  <svg
@@ -543,10 +621,14 @@ const buttonVariants = cva([
543
621
  link: 'text-primary underline-offset-4 hover:underline',
544
622
  },
545
623
  size: {
624
+ xs: 'h-7 rounded-md px-2.5 text-xs',
546
625
  default: 'h-9 px-4 py-2',
547
626
  sm: 'h-8 rounded-md px-3 text-xs',
548
627
  lg: 'h-10 rounded-md px-8',
549
- icon: 'h-9 w-9',
628
+ 'icon-xs': 'h-7 w-7 p-0',
629
+ 'icon-sm': 'h-8 w-8 p-0',
630
+ icon: 'h-9 w-9 p-0',
631
+ 'icon-lg': 'h-10 w-10 p-0',
550
632
  },
551
633
  },
552
634
  defaultVariants: { variant: 'default', size: 'default' },
@@ -630,24 +712,31 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImpo
630
712
  }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], startAt: [{ type: i0.Input, args: [{ isSignal: true, alias: "startAt", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
631
713
 
632
714
  class CardComponent {
715
+ size = input('default', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
633
716
  class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
634
- classes = computed(() => cn('rounded-lg border bg-card text-card-foreground shadow-sm', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
717
+ classes = computed(() => cn('block rounded-lg border border-border bg-card text-card-foreground shadow-sm', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
635
718
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: CardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
636
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: CardComponent, isStandalone: true, selector: "ui-card", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
719
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: CardComponent, isStandalone: true, selector: "ui-card", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "attr.data-size": "size()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
637
720
  }
638
721
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: CardComponent, decorators: [{
639
722
  type: Component,
640
723
  args: [{
641
724
  selector: 'ui-card',
642
725
  changeDetection: ChangeDetectionStrategy.OnPush,
643
- host: { '[class]': 'classes()' },
726
+ host: {
727
+ '[class]': 'classes()',
728
+ '[attr.data-size]': 'size()',
729
+ },
644
730
  template: `<ng-content />`,
645
731
  }]
646
- }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
732
+ }], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
647
733
 
648
734
  class CardHeaderComponent {
735
+ card = inject(CardComponent, { optional: true });
649
736
  class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
650
- classes = computed(() => cn('flex flex-col gap-1.5 p-6', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
737
+ classes = computed(() => cn(this.card?.size() === 'sm'
738
+ ? 'grid auto-rows-min grid-cols-[1fr_auto] items-start gap-1 p-4'
739
+ : 'grid auto-rows-min grid-cols-[1fr_auto] items-start gap-1.5 p-6', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
651
740
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: CardHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
652
741
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: CardHeaderComponent, isStandalone: true, selector: "ui-card-header", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
653
742
  }
@@ -662,8 +751,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImpo
662
751
  }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
663
752
 
664
753
  class CardTitleComponent {
754
+ card = inject(CardComponent, { optional: true });
665
755
  class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
666
- classes = computed(() => cn('text-lg font-semibold leading-none tracking-tight', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
756
+ classes = computed(() => cn(this.card?.size() === 'sm'
757
+ ? 'block col-start-1 text-base font-semibold leading-none tracking-tight'
758
+ : 'block col-start-1 text-lg font-semibold leading-none tracking-tight', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
667
759
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: CardTitleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
668
760
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: CardTitleComponent, isStandalone: true, selector: "ui-card-title, h3[ui-card-title]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
669
761
  }
@@ -678,8 +770,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImpo
678
770
  }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
679
771
 
680
772
  class CardDescriptionComponent {
773
+ card = inject(CardComponent, { optional: true });
681
774
  class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
682
- classes = computed(() => cn('text-sm text-muted-foreground', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
775
+ classes = computed(() => cn(this.card?.size() === 'sm'
776
+ ? 'block col-start-1 text-xs text-muted-foreground'
777
+ : 'block col-start-1 text-sm text-muted-foreground', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
683
778
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: CardDescriptionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
684
779
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: CardDescriptionComponent, isStandalone: true, selector: "ui-card-description, p[ui-card-description]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
685
780
  }
@@ -693,9 +788,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImpo
693
788
  }]
694
789
  }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
695
790
 
791
+ class CardActionComponent {
792
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
793
+ classes = computed(() => cn('col-start-2 row-span-2 row-start-1 flex items-center self-start justify-self-end', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
794
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: CardActionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
795
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: CardActionComponent, isStandalone: true, selector: "ui-card-action", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
796
+ }
797
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: CardActionComponent, decorators: [{
798
+ type: Component,
799
+ args: [{
800
+ selector: 'ui-card-action',
801
+ changeDetection: ChangeDetectionStrategy.OnPush,
802
+ host: { '[class]': 'classes()' },
803
+ template: `<ng-content />`,
804
+ }]
805
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
806
+
696
807
  class CardContentComponent {
808
+ card = inject(CardComponent, { optional: true });
697
809
  class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
698
- classes = computed(() => cn('p-6 pt-0', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
810
+ classes = computed(() => cn(this.card?.size() === 'sm' ? 'block p-4 pt-0' : 'block p-6 pt-0', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
699
811
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: CardContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
700
812
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: CardContentComponent, isStandalone: true, selector: "ui-card-content", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
701
813
  }
@@ -710,8 +822,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImpo
710
822
  }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
711
823
 
712
824
  class CardFooterComponent {
825
+ card = inject(CardComponent, { optional: true });
713
826
  class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
714
- classes = computed(() => cn('flex items-center p-6 pt-0', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
827
+ classes = computed(() => cn(this.card?.size() === 'sm' ? 'flex items-center p-4 pt-0' : 'flex items-center p-6 pt-0', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
715
828
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: CardFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
716
829
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: CardFooterComponent, isStandalone: true, selector: "ui-card-footer", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
717
830
  }
@@ -725,16 +838,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImpo
725
838
  }]
726
839
  }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
727
840
 
841
+ let nextCheckboxId = 0;
728
842
  class CheckboxComponent {
843
+ id = input(`ui-checkbox-${nextCheckboxId++}`, ...(ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []));
844
+ name = input(null, ...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
845
+ disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
729
846
  indeterminate = input(false, ...(ngDevMode ? [{ debugName: "indeterminate" }] : /* istanbul ignore next */ []));
730
847
  required = input(false, ...(ngDevMode ? [{ debugName: "required" }] : /* istanbul ignore next */ []));
731
848
  ariaLabel = input(null, { ...(ngDevMode ? { debugName: "ariaLabel" } : /* istanbul ignore next */ {}), alias: 'aria-label' });
849
+ ariaDescribedby = input(null, { ...(ngDevMode ? { debugName: "ariaDescribedby" } : /* istanbul ignore next */ {}), alias: 'aria-describedby' });
732
850
  ariaLabelledby = input(null, { ...(ngDevMode ? { debugName: "ariaLabelledby" } : /* istanbul ignore next */ {}), alias: 'aria-labelledby' });
851
+ ariaInvalid = input(null, { ...(ngDevMode ? { debugName: "ariaInvalid" } : /* istanbul ignore next */ {}), alias: 'aria-invalid' });
733
852
  class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
734
853
  checkedChange = output();
735
854
  ref = viewChild.required('ref');
736
855
  checked = signal(false, ...(ngDevMode ? [{ debugName: "checked" }] : /* istanbul ignore next */ []));
737
- disabled = signal(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
856
+ disabledState = signal(false, ...(ngDevMode ? [{ debugName: "disabledState" }] : /* istanbul ignore next */ []));
857
+ ariaInvalidAttr = computed(() => {
858
+ const value = this.ariaInvalid();
859
+ if (value === false || value === 'false' || value == null) {
860
+ return null;
861
+ }
862
+ return value === true || value === '' ? 'true' : `${value}`;
863
+ }, ...(ngDevMode ? [{ debugName: "ariaInvalidAttr" }] : /* istanbul ignore next */ []));
864
+ isDisabled = computed(() => this.disabled() || this.disabledState(), ...(ngDevMode ? [{ debugName: "isDisabled" }] : /* istanbul ignore next */ []));
738
865
  classes = computed(() => cn('ui-checkbox', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
739
866
  onChange = () => { };
740
867
  onTouched = () => { };
@@ -757,24 +884,28 @@ class CheckboxComponent {
757
884
  this.onTouched = fn;
758
885
  }
759
886
  setDisabledState(d) {
760
- this.disabled.set(d);
887
+ this.disabledState.set(d);
761
888
  }
762
889
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: CheckboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
763
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.13", type: CheckboxComponent, isStandalone: true, selector: "ui-checkbox", inputs: { indeterminate: { classPropertyName: "indeterminate", publicName: "indeterminate", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, ariaLabelledby: { classPropertyName: "ariaLabelledby", publicName: "aria-labelledby", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { checkedChange: "checkedChange" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => CheckboxComponent), multi: true }], viewQueries: [{ propertyName: "ref", first: true, predicate: ["ref"], descendants: true, isSignal: true }], ngImport: i0, template: `
890
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.13", type: CheckboxComponent, isStandalone: true, selector: "ui-checkbox", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, indeterminate: { classPropertyName: "indeterminate", publicName: "indeterminate", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, ariaDescribedby: { classPropertyName: "ariaDescribedby", publicName: "aria-describedby", isSignal: true, isRequired: false, transformFunction: null }, ariaLabelledby: { classPropertyName: "ariaLabelledby", publicName: "aria-labelledby", isSignal: true, isRequired: false, transformFunction: null }, ariaInvalid: { classPropertyName: "ariaInvalid", publicName: "aria-invalid", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { checkedChange: "checkedChange" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => CheckboxComponent), multi: true }], viewQueries: [{ propertyName: "ref", first: true, predicate: ["ref"], descendants: true, isSignal: true }], ngImport: i0, template: `
764
891
  <mat-checkbox
765
892
  #ref
766
893
  disableRipple
894
+ [id]="id()"
895
+ [name]="name()"
767
896
  [class]="classes()"
768
897
  [checked]="checked()"
769
- [disabled]="disabled()"
898
+ [disabled]="isDisabled()"
770
899
  [indeterminate]="indeterminate()"
771
900
  [required]="required()"
772
901
  [attr.aria-label]="ariaLabel()"
902
+ [attr.aria-describedby]="ariaDescribedby()"
773
903
  [attr.aria-labelledby]="ariaLabelledby()"
904
+ [attr.aria-invalid]="ariaInvalidAttr()"
774
905
  (change)="handleChange($event)">
775
906
  <ng-content />
776
907
  </mat-checkbox>
777
- `, isInline: true, styles: [":host{display:inline-flex}:host ::ng-deep .mat-mdc-checkbox{--mdc-checkbox-selected-icon-color: hsl(var(--primary));--mdc-checkbox-selected-focus-icon-color: hsl(var(--primary));--mdc-checkbox-selected-hover-icon-color: hsl(var(--primary));--mdc-checkbox-selected-pressed-icon-color: hsl(var(--primary));--mdc-checkbox-unselected-icon-color: hsl(var(--input));--mdc-checkbox-unselected-focus-icon-color: hsl(var(--input));--mdc-checkbox-unselected-hover-icon-color: hsl(var(--input));--mdc-checkbox-selected-checkmark-color: hsl(var(--primary-foreground));--mdc-checkbox-selected-focus-state-layer-color: transparent;--mdc-checkbox-selected-hover-state-layer-color: transparent;--mdc-checkbox-selected-pressed-state-layer-color: transparent;--mdc-checkbox-unselected-focus-state-layer-color: transparent;--mdc-checkbox-unselected-hover-state-layer-color: transparent;--mdc-checkbox-unselected-pressed-state-layer-color: transparent;--mdc-checkbox-state-layer-size: 1rem}:host ::ng-deep .mat-mdc-checkbox .mdc-checkbox__ripple,:host ::ng-deep .mat-mdc-checkbox .mat-mdc-checkbox-ripple,:host ::ng-deep .mat-mdc-checkbox .mat-mdc-focus-indicator{display:none}:host ::ng-deep .mat-mdc-checkbox .mat-mdc-checkbox-touch-target{display:none}:host ::ng-deep .mat-mdc-checkbox .mdc-checkbox{padding:0;margin:0;flex:0 0 1rem;width:1rem;height:1rem}:host ::ng-deep .mat-mdc-checkbox .mdc-checkbox__background{top:0;left:0;width:1rem;height:1rem;border-radius:var(--radius-sm);border-width:var(--border-width)}:host ::ng-deep .mat-mdc-checkbox .mdc-form-field{gap:.5rem;color:hsl(var(--foreground));font-family:var(--font-sans);font-size:var(--text-sm);line-height:var(--text-sm--line-height)}:host ::ng-deep .mat-mdc-checkbox .mdc-label{padding:0;margin:0;cursor:pointer}\n"], dependencies: [{ kind: "component", type: MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
908
+ `, isInline: true, styles: [":host{display:inline-flex}:host ::ng-deep .mat-mdc-checkbox{--mdc-checkbox-selected-icon-color: hsl(var(--primary));--mdc-checkbox-selected-focus-icon-color: hsl(var(--primary));--mdc-checkbox-selected-hover-icon-color: hsl(var(--primary));--mdc-checkbox-selected-pressed-icon-color: hsl(var(--primary));--mdc-checkbox-unselected-icon-color: hsl(var(--input));--mdc-checkbox-unselected-focus-icon-color: hsl(var(--input));--mdc-checkbox-unselected-hover-icon-color: hsl(var(--input));--mdc-checkbox-selected-checkmark-color: hsl(var(--primary-foreground));--mdc-checkbox-selected-focus-state-layer-color: transparent;--mdc-checkbox-selected-hover-state-layer-color: transparent;--mdc-checkbox-selected-pressed-state-layer-color: transparent;--mdc-checkbox-unselected-focus-state-layer-color: transparent;--mdc-checkbox-unselected-hover-state-layer-color: transparent;--mdc-checkbox-unselected-pressed-state-layer-color: transparent;--mdc-checkbox-state-layer-size: 1rem}:host ::ng-deep .mat-mdc-checkbox[aria-invalid=true]{--mdc-checkbox-selected-icon-color: hsl(var(--destructive));--mdc-checkbox-selected-focus-icon-color: hsl(var(--destructive));--mdc-checkbox-selected-hover-icon-color: hsl(var(--destructive));--mdc-checkbox-selected-pressed-icon-color: hsl(var(--destructive));--mdc-checkbox-selected-checkmark-color: hsl(var(--destructive-foreground));--mdc-checkbox-unselected-icon-color: hsl(var(--destructive));--mdc-checkbox-unselected-focus-icon-color: hsl(var(--destructive));--mdc-checkbox-unselected-hover-icon-color: hsl(var(--destructive))}:host ::ng-deep .mat-mdc-checkbox .mdc-checkbox__ripple,:host ::ng-deep .mat-mdc-checkbox .mat-mdc-checkbox-ripple,:host ::ng-deep .mat-mdc-checkbox .mat-mdc-focus-indicator{display:none}:host ::ng-deep .mat-mdc-checkbox .mat-mdc-checkbox-touch-target{display:none}:host ::ng-deep .mat-mdc-checkbox .mdc-checkbox{padding:0;margin:0;flex:0 0 1rem;width:1rem;height:1rem}:host ::ng-deep .mat-mdc-checkbox .mdc-checkbox__background{top:0;left:0;width:1rem;height:1rem;border-radius:var(--radius-sm);border-width:var(--border-width)}:host ::ng-deep .mat-mdc-checkbox[aria-invalid=true] .mdc-checkbox__background{box-shadow:0 0 0 3px hsl(var(--destructive) / .12)}:host ::ng-deep .mat-mdc-checkbox .mdc-form-field{gap:.5rem;color:hsl(var(--foreground));font-family:var(--font-sans);font-size:var(--text-sm);line-height:var(--text-sm--line-height)}:host ::ng-deep .mat-mdc-checkbox .mdc-label{padding:0;margin:0;cursor:pointer}\n"], dependencies: [{ kind: "component", type: MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
778
909
  }
779
910
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: CheckboxComponent, decorators: [{
780
911
  type: Component,
@@ -782,18 +913,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImpo
782
913
  <mat-checkbox
783
914
  #ref
784
915
  disableRipple
916
+ [id]="id()"
917
+ [name]="name()"
785
918
  [class]="classes()"
786
919
  [checked]="checked()"
787
- [disabled]="disabled()"
920
+ [disabled]="isDisabled()"
788
921
  [indeterminate]="indeterminate()"
789
922
  [required]="required()"
790
923
  [attr.aria-label]="ariaLabel()"
924
+ [attr.aria-describedby]="ariaDescribedby()"
791
925
  [attr.aria-labelledby]="ariaLabelledby()"
926
+ [attr.aria-invalid]="ariaInvalidAttr()"
792
927
  (change)="handleChange($event)">
793
928
  <ng-content />
794
929
  </mat-checkbox>
795
- `, styles: [":host{display:inline-flex}:host ::ng-deep .mat-mdc-checkbox{--mdc-checkbox-selected-icon-color: hsl(var(--primary));--mdc-checkbox-selected-focus-icon-color: hsl(var(--primary));--mdc-checkbox-selected-hover-icon-color: hsl(var(--primary));--mdc-checkbox-selected-pressed-icon-color: hsl(var(--primary));--mdc-checkbox-unselected-icon-color: hsl(var(--input));--mdc-checkbox-unselected-focus-icon-color: hsl(var(--input));--mdc-checkbox-unselected-hover-icon-color: hsl(var(--input));--mdc-checkbox-selected-checkmark-color: hsl(var(--primary-foreground));--mdc-checkbox-selected-focus-state-layer-color: transparent;--mdc-checkbox-selected-hover-state-layer-color: transparent;--mdc-checkbox-selected-pressed-state-layer-color: transparent;--mdc-checkbox-unselected-focus-state-layer-color: transparent;--mdc-checkbox-unselected-hover-state-layer-color: transparent;--mdc-checkbox-unselected-pressed-state-layer-color: transparent;--mdc-checkbox-state-layer-size: 1rem}:host ::ng-deep .mat-mdc-checkbox .mdc-checkbox__ripple,:host ::ng-deep .mat-mdc-checkbox .mat-mdc-checkbox-ripple,:host ::ng-deep .mat-mdc-checkbox .mat-mdc-focus-indicator{display:none}:host ::ng-deep .mat-mdc-checkbox .mat-mdc-checkbox-touch-target{display:none}:host ::ng-deep .mat-mdc-checkbox .mdc-checkbox{padding:0;margin:0;flex:0 0 1rem;width:1rem;height:1rem}:host ::ng-deep .mat-mdc-checkbox .mdc-checkbox__background{top:0;left:0;width:1rem;height:1rem;border-radius:var(--radius-sm);border-width:var(--border-width)}:host ::ng-deep .mat-mdc-checkbox .mdc-form-field{gap:.5rem;color:hsl(var(--foreground));font-family:var(--font-sans);font-size:var(--text-sm);line-height:var(--text-sm--line-height)}:host ::ng-deep .mat-mdc-checkbox .mdc-label{padding:0;margin:0;cursor:pointer}\n"] }]
796
- }], propDecorators: { indeterminate: [{ type: i0.Input, args: [{ isSignal: true, alias: "indeterminate", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }], ariaLabelledby: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-labelledby", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], checkedChange: [{ type: i0.Output, args: ["checkedChange"] }], ref: [{ type: i0.ViewChild, args: ['ref', { isSignal: true }] }] } });
930
+ `, styles: [":host{display:inline-flex}:host ::ng-deep .mat-mdc-checkbox{--mdc-checkbox-selected-icon-color: hsl(var(--primary));--mdc-checkbox-selected-focus-icon-color: hsl(var(--primary));--mdc-checkbox-selected-hover-icon-color: hsl(var(--primary));--mdc-checkbox-selected-pressed-icon-color: hsl(var(--primary));--mdc-checkbox-unselected-icon-color: hsl(var(--input));--mdc-checkbox-unselected-focus-icon-color: hsl(var(--input));--mdc-checkbox-unselected-hover-icon-color: hsl(var(--input));--mdc-checkbox-selected-checkmark-color: hsl(var(--primary-foreground));--mdc-checkbox-selected-focus-state-layer-color: transparent;--mdc-checkbox-selected-hover-state-layer-color: transparent;--mdc-checkbox-selected-pressed-state-layer-color: transparent;--mdc-checkbox-unselected-focus-state-layer-color: transparent;--mdc-checkbox-unselected-hover-state-layer-color: transparent;--mdc-checkbox-unselected-pressed-state-layer-color: transparent;--mdc-checkbox-state-layer-size: 1rem}:host ::ng-deep .mat-mdc-checkbox[aria-invalid=true]{--mdc-checkbox-selected-icon-color: hsl(var(--destructive));--mdc-checkbox-selected-focus-icon-color: hsl(var(--destructive));--mdc-checkbox-selected-hover-icon-color: hsl(var(--destructive));--mdc-checkbox-selected-pressed-icon-color: hsl(var(--destructive));--mdc-checkbox-selected-checkmark-color: hsl(var(--destructive-foreground));--mdc-checkbox-unselected-icon-color: hsl(var(--destructive));--mdc-checkbox-unselected-focus-icon-color: hsl(var(--destructive));--mdc-checkbox-unselected-hover-icon-color: hsl(var(--destructive))}:host ::ng-deep .mat-mdc-checkbox .mdc-checkbox__ripple,:host ::ng-deep .mat-mdc-checkbox .mat-mdc-checkbox-ripple,:host ::ng-deep .mat-mdc-checkbox .mat-mdc-focus-indicator{display:none}:host ::ng-deep .mat-mdc-checkbox .mat-mdc-checkbox-touch-target{display:none}:host ::ng-deep .mat-mdc-checkbox .mdc-checkbox{padding:0;margin:0;flex:0 0 1rem;width:1rem;height:1rem}:host ::ng-deep .mat-mdc-checkbox .mdc-checkbox__background{top:0;left:0;width:1rem;height:1rem;border-radius:var(--radius-sm);border-width:var(--border-width)}:host ::ng-deep .mat-mdc-checkbox[aria-invalid=true] .mdc-checkbox__background{box-shadow:0 0 0 3px hsl(var(--destructive) / .12)}:host ::ng-deep .mat-mdc-checkbox .mdc-form-field{gap:.5rem;color:hsl(var(--foreground));font-family:var(--font-sans);font-size:var(--text-sm);line-height:var(--text-sm--line-height)}:host ::ng-deep .mat-mdc-checkbox .mdc-label{padding:0;margin:0;cursor:pointer}\n"] }]
931
+ }], propDecorators: { id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], indeterminate: [{ type: i0.Input, args: [{ isSignal: true, alias: "indeterminate", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }], ariaDescribedby: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-describedby", required: false }] }], ariaLabelledby: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-labelledby", required: false }] }], ariaInvalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-invalid", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], checkedChange: [{ type: i0.Output, args: ["checkedChange"] }], ref: [{ type: i0.ViewChild, args: ['ref', { isSignal: true }] }] } });
797
932
 
798
933
  /** Base class exposed to children for context lookup. */
799
934
  class CommandContextBase {
@@ -839,6 +974,12 @@ class CommandComponent extends CommandContextBase {
839
974
  vis.forEach((i, k) => i._setActive(k === 0));
840
975
  vis[0]?.focus();
841
976
  }
977
+ hasVisibleItems() {
978
+ return this.visibleItems().length > 0;
979
+ }
980
+ activateOnly(item) {
981
+ this.items().forEach((entry) => entry._setActive(entry === item));
982
+ }
842
983
  /** Returns the first visible item's text if any. Used when user hits Enter with no active. */
843
984
  getActive() {
844
985
  return this.visibleItems().find((i) => i.active()) ?? this.visibleItems()[0] ?? null;
@@ -917,17 +1058,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImpo
917
1058
  }]
918
1059
  }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
919
1060
  class CommandEmptyComponent {
1061
+ ctx = inject(CommandComponent);
920
1062
  class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
921
1063
  classes = computed(() => cn('py-6 text-center text-sm text-muted-foreground', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
922
1064
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: CommandEmptyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
923
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: CommandEmptyComponent, isStandalone: true, selector: "ui-command-empty", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content>No results found.</ng-content>`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1065
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: CommandEmptyComponent, isStandalone: true, selector: "ui-command-empty", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "hidden": "ctx.hasVisibleItems()" } }, ngImport: i0, template: `<ng-content>No results found.</ng-content>`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
924
1066
  }
925
1067
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: CommandEmptyComponent, decorators: [{
926
1068
  type: Component,
927
1069
  args: [{
928
1070
  selector: 'ui-command-empty',
929
1071
  changeDetection: ChangeDetectionStrategy.OnPush,
930
- host: { '[class]': 'classes()' },
1072
+ host: {
1073
+ '[class]': 'classes()',
1074
+ '[hidden]': 'ctx.hasVisibleItems()',
1075
+ },
931
1076
  template: `<ng-content>No results found.</ng-content>`,
932
1077
  }]
933
1078
  }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
@@ -1003,9 +1148,7 @@ class CommandItemComponent {
1003
1148
  onHover() {
1004
1149
  if (this.disabled())
1005
1150
  return;
1006
- // Mark this item active; deactivate siblings.
1007
- this.ctx._activateOnly?.(this);
1008
- this._setActive(true);
1151
+ this.ctx.activateOnly(this);
1009
1152
  }
1010
1153
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: CommandItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1011
1154
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: CommandItemComponent, isStandalone: true, selector: "ui-command-item, button[ui-command-item]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selected: "selected" }, host: { listeners: { "click": "_select($any($event))", "mousemove": "onHover()" }, properties: { "class": "classes()", "attr.role": "\"option\"", "attr.tabindex": "-1", "attr.aria-selected": "active()", "attr.data-active": "active() ? \"true\" : null", "attr.data-disabled": "disabled() ? \"true\" : null", "hidden": "!visible()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
@@ -1045,6 +1188,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImpo
1045
1188
  }]
1046
1189
  }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
1047
1190
 
1191
+ let nextComboboxId = 0;
1048
1192
  /**
1049
1193
  * Combobox with searchable option list. Options passed via `[options]`.
1050
1194
  * Emits two-way `value` and supports forms via ControlValueAccessor.
@@ -1053,6 +1197,7 @@ class ComboboxComponent {
1053
1197
  overlay = inject(Overlay);
1054
1198
  vcr = inject(ViewContainerRef);
1055
1199
  destroyRef = inject(DestroyRef);
1200
+ instanceId = `ui-combobox-${nextComboboxId++}`;
1056
1201
  options = input([], ...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
1057
1202
  value = model(null, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
1058
1203
  placeholder = input('Select…', ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
@@ -1065,8 +1210,10 @@ class ComboboxComponent {
1065
1210
  panel = viewChild.required('panel');
1066
1211
  overlayRef = null;
1067
1212
  isOpen = signal(false, ...(ngDevMode ? [{ debugName: "isOpen" }] : /* istanbul ignore next */ []));
1068
- classes = computed(() => cn('inline-block', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
1069
- triggerClasses = computed(() => cn(buttonVariants({ variant: 'outline', size: 'default' }), 'w-[200px] justify-between'), ...(ngDevMode ? [{ debugName: "triggerClasses" }] : /* istanbul ignore next */ []));
1213
+ triggerId = `${this.instanceId}-trigger`;
1214
+ panelId = `${this.instanceId}-panel`;
1215
+ classes = computed(() => cn('inline-block min-w-[200px]', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
1216
+ triggerClasses = computed(() => cn(buttonVariants({ variant: 'outline', size: 'default' }), 'w-full justify-between'), ...(ngDevMode ? [{ debugName: "triggerClasses" }] : /* istanbul ignore next */ []));
1070
1217
  selectedLabel = computed(() => {
1071
1218
  const v = this.value();
1072
1219
  return this.options().find((o) => o.value === v)?.label ?? '';
@@ -1143,9 +1290,11 @@ class ComboboxComponent {
1143
1290
  <button
1144
1291
  #trigger
1145
1292
  type="button"
1293
+ [attr.id]="triggerId"
1146
1294
  role="combobox"
1295
+ aria-haspopup="listbox"
1147
1296
  [attr.aria-expanded]="isOpen()"
1148
- [attr.aria-controls]="isOpen() ? 'ui-combobox-panel' : null"
1297
+ [attr.aria-controls]="isOpen() ? panelId : null"
1149
1298
  [class]="triggerClasses()"
1150
1299
  [disabled]="disabled() || null"
1151
1300
  (click)="toggle()">
@@ -1166,7 +1315,7 @@ class ComboboxComponent {
1166
1315
 
1167
1316
  <ng-template #panel>
1168
1317
  <div
1169
- id="ui-combobox-panel"
1318
+ [attr.id]="panelId"
1170
1319
  class="w-[var(--ui-combobox-trigger-width)] rounded-md border bg-popover text-popover-foreground shadow-md">
1171
1320
  <ui-command>
1172
1321
  <input ui-command-input [placeholder]="searchPlaceholder()" />
@@ -1221,9 +1370,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImpo
1221
1370
  <button
1222
1371
  #trigger
1223
1372
  type="button"
1373
+ [attr.id]="triggerId"
1224
1374
  role="combobox"
1375
+ aria-haspopup="listbox"
1225
1376
  [attr.aria-expanded]="isOpen()"
1226
- [attr.aria-controls]="isOpen() ? 'ui-combobox-panel' : null"
1377
+ [attr.aria-controls]="isOpen() ? panelId : null"
1227
1378
  [class]="triggerClasses()"
1228
1379
  [disabled]="disabled() || null"
1229
1380
  (click)="toggle()">
@@ -1244,7 +1395,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImpo
1244
1395
 
1245
1396
  <ng-template #panel>
1246
1397
  <div
1247
- id="ui-combobox-panel"
1398
+ [attr.id]="panelId"
1248
1399
  class="w-[var(--ui-combobox-trigger-width)] rounded-md border bg-popover text-popover-foreground shadow-md">
1249
1400
  <ui-command>
1250
1401
  <input ui-command-input [placeholder]="searchPlaceholder()" />
@@ -1312,6 +1463,16 @@ class ContextMenuTriggerDirective {
1312
1463
  this.close();
1313
1464
  this.openAt(event.clientX, event.clientY);
1314
1465
  }
1466
+ onKeyDown(event) {
1467
+ const isContextMenuKey = event.key === 'ContextMenu' || (event.shiftKey && event.key === 'F10');
1468
+ if (!isContextMenuKey || this.disabled()) {
1469
+ return;
1470
+ }
1471
+ event.preventDefault();
1472
+ const rect = this.el.nativeElement.getBoundingClientRect();
1473
+ this.close();
1474
+ this.openAt(rect.left + rect.width / 2, rect.top + rect.height / 2);
1475
+ }
1315
1476
  openAt(x, y) {
1316
1477
  this.overlayRef = this.overlay.create({
1317
1478
  positionStrategy: this.overlay
@@ -1344,7 +1505,7 @@ class ContextMenuTriggerDirective {
1344
1505
  this.openedChange.emit(false);
1345
1506
  }
1346
1507
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ContextMenuTriggerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1347
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.13", type: ContextMenuTriggerDirective, isStandalone: true, selector: "[uiContextMenuTrigger]", inputs: { uiContextMenuTrigger: { classPropertyName: "uiContextMenuTrigger", publicName: "uiContextMenuTrigger", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { openedChange: "openedChange" }, host: { listeners: { "contextmenu": "onContextMenu($event)" } }, exportAs: ["uiContextMenuTrigger"], ngImport: i0 });
1508
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.13", type: ContextMenuTriggerDirective, isStandalone: true, selector: "[uiContextMenuTrigger]", inputs: { uiContextMenuTrigger: { classPropertyName: "uiContextMenuTrigger", publicName: "uiContextMenuTrigger", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { openedChange: "openedChange" }, host: { listeners: { "contextmenu": "onContextMenu($event)", "keydown": "onKeyDown($event)" } }, exportAs: ["uiContextMenuTrigger"], ngImport: i0 });
1348
1509
  }
1349
1510
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ContextMenuTriggerDirective, decorators: [{
1350
1511
  type: Directive,
@@ -1353,6 +1514,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImpo
1353
1514
  exportAs: 'uiContextMenuTrigger',
1354
1515
  host: {
1355
1516
  '(contextmenu)': 'onContextMenu($event)',
1517
+ '(keydown)': 'onKeyDown($event)',
1356
1518
  },
1357
1519
  }]
1358
1520
  }], propDecorators: { uiContextMenuTrigger: [{ type: i0.Input, args: [{ isSignal: true, alias: "uiContextMenuTrigger", required: true }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], openedChange: [{ type: i0.Output, args: ["openedChange"] }] } });
@@ -1466,6 +1628,8 @@ class DialogComponent {
1466
1628
  open = model(false, ...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
1467
1629
  closeOnEscape = input(true, ...(ngDevMode ? [{ debugName: "closeOnEscape" }] : /* istanbul ignore next */ []));
1468
1630
  closeOnBackdropClick = input(true, ...(ngDevMode ? [{ debugName: "closeOnBackdropClick" }] : /* istanbul ignore next */ []));
1631
+ showCloseButton = input(true, ...(ngDevMode ? [{ debugName: "showCloseButton" }] : /* istanbul ignore next */ []));
1632
+ closeButtonLabel = input('Close', ...(ngDevMode ? [{ debugName: "closeButtonLabel" }] : /* istanbul ignore next */ []));
1469
1633
  labelledBy = input(null, { ...(ngDevMode ? { debugName: "labelledBy" } : /* istanbul ignore next */ {}), alias: 'aria-labelledby' });
1470
1634
  describedBy = input(null, { ...(ngDevMode ? { debugName: "describedBy" } : /* istanbul ignore next */ {}), alias: 'aria-describedby' });
1471
1635
  class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
@@ -1527,7 +1691,7 @@ class DialogComponent {
1527
1691
  this.requestClose();
1528
1692
  }
1529
1693
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: DialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1530
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.13", type: DialogComponent, isStandalone: true, selector: "ui-dialog", inputs: { open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, closeOnEscape: { classPropertyName: "closeOnEscape", publicName: "closeOnEscape", isSignal: true, isRequired: false, transformFunction: null }, closeOnBackdropClick: { classPropertyName: "closeOnBackdropClick", publicName: "closeOnBackdropClick", isSignal: true, isRequired: false, transformFunction: null }, labelledBy: { classPropertyName: "labelledBy", publicName: "aria-labelledby", isSignal: true, isRequired: false, transformFunction: null }, describedBy: { classPropertyName: "describedBy", publicName: "aria-describedby", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "openChange", openedChange: "openedChange" }, viewQueries: [{ propertyName: "tpl", first: true, predicate: ["tpl"], descendants: true, isSignal: true }], ngImport: i0, template: `
1694
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.13", type: DialogComponent, isStandalone: true, selector: "ui-dialog", inputs: { open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, closeOnEscape: { classPropertyName: "closeOnEscape", publicName: "closeOnEscape", isSignal: true, isRequired: false, transformFunction: null }, closeOnBackdropClick: { classPropertyName: "closeOnBackdropClick", publicName: "closeOnBackdropClick", isSignal: true, isRequired: false, transformFunction: null }, showCloseButton: { classPropertyName: "showCloseButton", publicName: "showCloseButton", isSignal: true, isRequired: false, transformFunction: null }, closeButtonLabel: { classPropertyName: "closeButtonLabel", publicName: "closeButtonLabel", isSignal: true, isRequired: false, transformFunction: null }, labelledBy: { classPropertyName: "labelledBy", publicName: "aria-labelledby", isSignal: true, isRequired: false, transformFunction: null }, describedBy: { classPropertyName: "describedBy", publicName: "aria-describedby", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "openChange", openedChange: "openedChange" }, viewQueries: [{ propertyName: "tpl", first: true, predicate: ["tpl"], descendants: true, isSignal: true }], ngImport: i0, template: `
1531
1695
  <ng-template #tpl>
1532
1696
  <div
1533
1697
  class="ui-dialog-surface"
@@ -1536,16 +1700,30 @@ class DialogComponent {
1536
1700
  [attr.aria-labelledby]="labelledBy()"
1537
1701
  [attr.aria-describedby]="describedBy()"
1538
1702
  [class]="surfaceClasses()">
1703
+ @if (showCloseButton()) {
1704
+ <button
1705
+ type="button"
1706
+ ui-button
1707
+ variant="ghost"
1708
+ size="icon-sm"
1709
+ class="ui-dialog-close-button absolute right-4 top-4 h-8 w-8 rounded-md p-0 text-muted-foreground opacity-70 transition-opacity hover:opacity-100 focus-visible:ring-2 focus-visible:ring-ring"
1710
+ [attr.aria-label]="closeButtonLabel()"
1711
+ (click)="close()">
1712
+ <span aria-hidden="true">X</span>
1713
+ <span class="sr-only">{{ closeButtonLabel() }}</span>
1714
+ </button>
1715
+ }
1539
1716
  <ng-content />
1540
1717
  </div>
1541
1718
  </ng-template>
1542
- `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1719
+ `, isInline: true, dependencies: [{ kind: "component", type: ButtonComponent, selector: "button[ui-button], a[ui-button]", inputs: ["variant", "size", "class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1543
1720
  }
1544
1721
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: DialogComponent, decorators: [{
1545
1722
  type: Component,
1546
1723
  args: [{
1547
1724
  selector: 'ui-dialog',
1548
1725
  changeDetection: ChangeDetectionStrategy.OnPush,
1726
+ imports: [ButtonComponent],
1549
1727
  template: `
1550
1728
  <ng-template #tpl>
1551
1729
  <div
@@ -1555,12 +1733,43 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImpo
1555
1733
  [attr.aria-labelledby]="labelledBy()"
1556
1734
  [attr.aria-describedby]="describedBy()"
1557
1735
  [class]="surfaceClasses()">
1736
+ @if (showCloseButton()) {
1737
+ <button
1738
+ type="button"
1739
+ ui-button
1740
+ variant="ghost"
1741
+ size="icon-sm"
1742
+ class="ui-dialog-close-button absolute right-4 top-4 h-8 w-8 rounded-md p-0 text-muted-foreground opacity-70 transition-opacity hover:opacity-100 focus-visible:ring-2 focus-visible:ring-ring"
1743
+ [attr.aria-label]="closeButtonLabel()"
1744
+ (click)="close()">
1745
+ <span aria-hidden="true">X</span>
1746
+ <span class="sr-only">{{ closeButtonLabel() }}</span>
1747
+ </button>
1748
+ }
1558
1749
  <ng-content />
1559
1750
  </div>
1560
1751
  </ng-template>
1561
1752
  `,
1562
1753
  }]
1563
- }], ctorParameters: () => [], propDecorators: { open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }, { type: i0.Output, args: ["openChange"] }], closeOnEscape: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnEscape", required: false }] }], closeOnBackdropClick: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnBackdropClick", required: false }] }], labelledBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-labelledby", required: false }] }], describedBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-describedby", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], openedChange: [{ type: i0.Output, args: ["openedChange"] }], tpl: [{ type: i0.ViewChild, args: ['tpl', { isSignal: true }] }] } });
1754
+ }], ctorParameters: () => [], propDecorators: { open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }, { type: i0.Output, args: ["openChange"] }], closeOnEscape: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnEscape", required: false }] }], closeOnBackdropClick: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnBackdropClick", required: false }] }], showCloseButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "showCloseButton", required: false }] }], closeButtonLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeButtonLabel", required: false }] }], labelledBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-labelledby", required: false }] }], describedBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-describedby", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], openedChange: [{ type: i0.Output, args: ["openedChange"] }], tpl: [{ type: i0.ViewChild, args: ['tpl', { isSignal: true }] }] } });
1755
+
1756
+ class DialogCloseDirective {
1757
+ dialog = inject(DialogComponent);
1758
+ closeDialog() {
1759
+ this.dialog.close();
1760
+ }
1761
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: DialogCloseDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1762
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.13", type: DialogCloseDirective, isStandalone: true, selector: "button[ui-dialog-close], a[ui-dialog-close]", host: { listeners: { "click": "closeDialog()" } }, ngImport: i0 });
1763
+ }
1764
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: DialogCloseDirective, decorators: [{
1765
+ type: Directive,
1766
+ args: [{
1767
+ selector: 'button[ui-dialog-close], a[ui-dialog-close]',
1768
+ host: {
1769
+ '(click)': 'closeDialog()',
1770
+ },
1771
+ }]
1772
+ }] });
1564
1773
 
1565
1774
  class DialogHeaderComponent {
1566
1775
  class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
@@ -1638,45 +1847,234 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImpo
1638
1847
  }]
1639
1848
  }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
1640
1849
 
1641
- class MenuItemComponent {
1850
+ class MenuFocusableItem {
1642
1851
  el = inject(ElementRef);
1643
- disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
1852
+ disabledInput = input(false, { ...(ngDevMode ? { debugName: "disabledInput" } : /* istanbul ignore next */ {}), alias: 'disabled' });
1644
1853
  inset = input(false, ...(ngDevMode ? [{ debugName: "inset" }] : /* istanbul ignore next */ []));
1645
1854
  class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
1855
+ variant = input('default', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
1646
1856
  selected = output();
1647
- classes = computed(() => cn('relative flex w-full cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none', 'transition-colors focus:bg-accent focus:text-accent-foreground', 'data-[inset=true]:pl-8', 'aria-disabled:pointer-events-none aria-disabled:opacity-50', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
1857
+ get disabled() {
1858
+ return this.disabledInput();
1859
+ }
1648
1860
  focus() {
1649
1861
  this.el.nativeElement.focus();
1650
1862
  }
1651
1863
  getLabel() {
1652
1864
  return this.el.nativeElement.textContent?.trim() ?? '';
1653
1865
  }
1866
+ buildItemClasses(extraClass = '') {
1867
+ return cn('relative flex w-full cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none', 'transition-colors focus:bg-accent focus:text-accent-foreground', 'aria-disabled:pointer-events-none aria-disabled:opacity-50', 'data-[inset=true]:pl-8', 'data-[variant=destructive]:text-destructive', 'data-[variant=destructive]:focus:bg-destructive/10', 'data-[variant=destructive]:focus:text-destructive', extraClass, this.class());
1868
+ }
1869
+ emitSelection(event) {
1870
+ if (this.disabled) {
1871
+ event.preventDefault();
1872
+ return false;
1873
+ }
1874
+ this.selected.emit(event);
1875
+ return true;
1876
+ }
1877
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: MenuFocusableItem, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1878
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.13", type: MenuFocusableItem, isStandalone: true, inputs: { disabledInput: { classPropertyName: "disabledInput", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, inset: { classPropertyName: "inset", publicName: "inset", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selected: "selected" }, ngImport: i0 });
1879
+ }
1880
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: MenuFocusableItem, decorators: [{
1881
+ type: Directive
1882
+ }], propDecorators: { disabledInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], inset: [{ type: i0.Input, args: [{ isSignal: true, alias: "inset", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], selected: [{ type: i0.Output, args: ["selected"] }] } });
1883
+ class MenuGroupComponent {
1884
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
1885
+ classes = computed(() => cn('block', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
1886
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: MenuGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1887
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: MenuGroupComponent, isStandalone: true, selector: "ui-menu-group", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "attr.role": "\"group\"" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1888
+ }
1889
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: MenuGroupComponent, decorators: [{
1890
+ type: Component,
1891
+ args: [{
1892
+ selector: 'ui-menu-group',
1893
+ changeDetection: ChangeDetectionStrategy.OnPush,
1894
+ host: {
1895
+ '[class]': 'classes()',
1896
+ '[attr.role]': '"group"',
1897
+ },
1898
+ template: `<ng-content />`,
1899
+ }]
1900
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
1901
+ class MenuRadioGroupBase {
1902
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: MenuRadioGroupBase, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1903
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.13", type: MenuRadioGroupBase, isStandalone: true, ngImport: i0 });
1904
+ }
1905
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: MenuRadioGroupBase, decorators: [{
1906
+ type: Directive
1907
+ }] });
1908
+ class MenuRadioGroupComponent extends MenuRadioGroupBase {
1909
+ value = model(null, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
1910
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
1911
+ classes = computed(() => cn('block', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
1912
+ isChecked(value) {
1913
+ return this.value() === value;
1914
+ }
1915
+ select(value) {
1916
+ this.value.set(value);
1917
+ }
1918
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: MenuRadioGroupComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
1919
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: MenuRadioGroupComponent, isStandalone: true, selector: "ui-menu-radio-group", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { properties: { "class": "classes()", "attr.role": "\"group\"" } }, providers: [{ provide: MenuRadioGroupBase, useExisting: forwardRef(() => MenuRadioGroupComponent) }], usesInheritance: true, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1920
+ }
1921
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: MenuRadioGroupComponent, decorators: [{
1922
+ type: Component,
1923
+ args: [{
1924
+ selector: 'ui-menu-radio-group',
1925
+ changeDetection: ChangeDetectionStrategy.OnPush,
1926
+ providers: [{ provide: MenuRadioGroupBase, useExisting: forwardRef(() => MenuRadioGroupComponent) }],
1927
+ host: {
1928
+ '[class]': 'classes()',
1929
+ '[attr.role]': '"group"',
1930
+ },
1931
+ template: `<ng-content />`,
1932
+ }]
1933
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
1934
+ class MenuItemComponent extends MenuFocusableItem {
1935
+ classes = computed(() => this.buildItemClasses(), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
1654
1936
  handleClick(e) {
1655
- if (this.disabled())
1656
- return;
1657
- this.selected.emit(e);
1937
+ this.emitSelection(e);
1658
1938
  }
1659
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: MenuItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1660
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: MenuItemComponent, isStandalone: true, selector: "ui-menu-item, button[ui-menu-item]", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, inset: { classPropertyName: "inset", publicName: "inset", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selected: "selected" }, host: { listeners: { "click": "handleClick($any($event))", "keydown.enter": "handleClick($any($event))", "keydown.space": "handleClick($any($event))" }, properties: { "class": "classes()", "attr.role": "\"menuitem\"", "attr.tabindex": "disabled() ? -1 : -1", "attr.aria-disabled": "disabled() ? \"true\" : null", "attr.data-inset": "inset() ? \"true\" : null" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1939
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: MenuItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
1940
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.13", type: MenuItemComponent, isStandalone: true, selector: "ui-menu-item, button[ui-menu-item]", host: { attributes: { "tabindex": "-1" }, listeners: { "click": "handleClick($any($event))", "keydown.enter": "handleClick($any($event))", "keydown.space": "handleClick($any($event))" }, properties: { "class": "classes()", "attr.role": "\"menuitem\"", "attr.aria-disabled": "disabled ? \"true\" : null", "attr.data-inset": "inset() ? \"true\" : null", "attr.data-variant": "variant()" } }, providers: [{ provide: MenuFocusableItem, useExisting: forwardRef(() => MenuItemComponent) }], usesInheritance: true, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1661
1941
  }
1662
1942
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: MenuItemComponent, decorators: [{
1663
1943
  type: Component,
1664
1944
  args: [{
1665
1945
  selector: 'ui-menu-item, button[ui-menu-item]',
1666
1946
  changeDetection: ChangeDetectionStrategy.OnPush,
1947
+ providers: [{ provide: MenuFocusableItem, useExisting: forwardRef(() => MenuItemComponent) }],
1667
1948
  host: {
1668
1949
  '[class]': 'classes()',
1669
1950
  '[attr.role]': '"menuitem"',
1670
- '[attr.tabindex]': 'disabled() ? -1 : -1',
1671
- '[attr.aria-disabled]': 'disabled() ? "true" : null',
1951
+ tabindex: '-1',
1952
+ '[attr.aria-disabled]': 'disabled ? "true" : null',
1672
1953
  '[attr.data-inset]': 'inset() ? "true" : null',
1954
+ '[attr.data-variant]': 'variant()',
1673
1955
  '(click)': 'handleClick($any($event))',
1674
1956
  '(keydown.enter)': 'handleClick($any($event))',
1675
1957
  '(keydown.space)': 'handleClick($any($event))',
1676
1958
  },
1677
1959
  template: `<ng-content />`,
1678
1960
  }]
1679
- }], propDecorators: { disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], inset: [{ type: i0.Input, args: [{ isSignal: true, alias: "inset", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], selected: [{ type: i0.Output, args: ["selected"] }] } });
1961
+ }] });
1962
+ class MenuCheckboxItemComponent extends MenuFocusableItem {
1963
+ checked = model(false, ...(ngDevMode ? [{ debugName: "checked" }] : /* istanbul ignore next */ []));
1964
+ classes = computed(() => this.buildItemClasses('pl-8'), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
1965
+ toggle(event) {
1966
+ if (!this.emitSelection(event)) {
1967
+ return;
1968
+ }
1969
+ this.checked.set(!this.checked());
1970
+ }
1971
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: MenuCheckboxItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
1972
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.13", type: MenuCheckboxItemComponent, isStandalone: true, selector: "ui-menu-checkbox-item, button[ui-menu-checkbox-item]", inputs: { checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { checked: "checkedChange" }, host: { attributes: { "tabindex": "-1" }, listeners: { "click": "toggle($any($event))", "keydown.enter": "toggle($any($event))", "keydown.space": "toggle($any($event))" }, properties: { "class": "classes()", "attr.role": "\"menuitemcheckbox\"", "attr.aria-disabled": "disabled ? \"true\" : null", "attr.aria-checked": "checked()", "attr.data-state": "checked() ? \"checked\" : \"unchecked\"", "attr.data-variant": "variant()" } }, providers: [{ provide: MenuFocusableItem, useExisting: forwardRef(() => MenuCheckboxItemComponent) }], usesInheritance: true, ngImport: i0, template: `
1973
+ <span class="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
1974
+ @if (checked()) {
1975
+ <svg
1976
+ aria-hidden="true"
1977
+ class="h-4 w-4"
1978
+ viewBox="0 0 24 24"
1979
+ fill="none"
1980
+ stroke="currentColor"
1981
+ stroke-width="2"
1982
+ stroke-linecap="round"
1983
+ stroke-linejoin="round">
1984
+ <polyline points="20 6 9 17 4 12" />
1985
+ </svg>
1986
+ }
1987
+ </span>
1988
+ <ng-content />
1989
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1990
+ }
1991
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: MenuCheckboxItemComponent, decorators: [{
1992
+ type: Component,
1993
+ args: [{
1994
+ selector: 'ui-menu-checkbox-item, button[ui-menu-checkbox-item]',
1995
+ changeDetection: ChangeDetectionStrategy.OnPush,
1996
+ providers: [{ provide: MenuFocusableItem, useExisting: forwardRef(() => MenuCheckboxItemComponent) }],
1997
+ host: {
1998
+ '[class]': 'classes()',
1999
+ '[attr.role]': '"menuitemcheckbox"',
2000
+ tabindex: '-1',
2001
+ '[attr.aria-disabled]': 'disabled ? "true" : null',
2002
+ '[attr.aria-checked]': 'checked()',
2003
+ '[attr.data-state]': 'checked() ? "checked" : "unchecked"',
2004
+ '[attr.data-variant]': 'variant()',
2005
+ '(click)': 'toggle($any($event))',
2006
+ '(keydown.enter)': 'toggle($any($event))',
2007
+ '(keydown.space)': 'toggle($any($event))',
2008
+ },
2009
+ template: `
2010
+ <span class="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
2011
+ @if (checked()) {
2012
+ <svg
2013
+ aria-hidden="true"
2014
+ class="h-4 w-4"
2015
+ viewBox="0 0 24 24"
2016
+ fill="none"
2017
+ stroke="currentColor"
2018
+ stroke-width="2"
2019
+ stroke-linecap="round"
2020
+ stroke-linejoin="round">
2021
+ <polyline points="20 6 9 17 4 12" />
2022
+ </svg>
2023
+ }
2024
+ </span>
2025
+ <ng-content />
2026
+ `,
2027
+ }]
2028
+ }], propDecorators: { checked: [{ type: i0.Input, args: [{ isSignal: true, alias: "checked", required: false }] }, { type: i0.Output, args: ["checkedChange"] }] } });
2029
+ class MenuRadioItemComponent extends MenuFocusableItem {
2030
+ group = inject(MenuRadioGroupBase);
2031
+ value = input.required(...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
2032
+ checked = computed(() => this.group.isChecked(this.value()), ...(ngDevMode ? [{ debugName: "checked" }] : /* istanbul ignore next */ []));
2033
+ classes = computed(() => this.buildItemClasses('pl-8'), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
2034
+ select(event) {
2035
+ if (!this.emitSelection(event)) {
2036
+ return;
2037
+ }
2038
+ this.group.select(this.value());
2039
+ }
2040
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: MenuRadioItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
2041
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.13", type: MenuRadioItemComponent, isStandalone: true, selector: "ui-menu-radio-item, button[ui-menu-radio-item]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null } }, host: { attributes: { "tabindex": "-1" }, listeners: { "click": "select($any($event))", "keydown.enter": "select($any($event))", "keydown.space": "select($any($event))" }, properties: { "class": "classes()", "attr.role": "\"menuitemradio\"", "attr.aria-disabled": "disabled ? \"true\" : null", "attr.aria-checked": "checked()", "attr.data-state": "checked() ? \"checked\" : \"unchecked\"", "attr.data-variant": "variant()" } }, providers: [{ provide: MenuFocusableItem, useExisting: forwardRef(() => MenuRadioItemComponent) }], usesInheritance: true, ngImport: i0, template: `
2042
+ <span class="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
2043
+ @if (checked()) {
2044
+ <span aria-hidden="true" class="h-2 w-2 rounded-full bg-current"></span>
2045
+ }
2046
+ </span>
2047
+ <ng-content />
2048
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2049
+ }
2050
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: MenuRadioItemComponent, decorators: [{
2051
+ type: Component,
2052
+ args: [{
2053
+ selector: 'ui-menu-radio-item, button[ui-menu-radio-item]',
2054
+ changeDetection: ChangeDetectionStrategy.OnPush,
2055
+ providers: [{ provide: MenuFocusableItem, useExisting: forwardRef(() => MenuRadioItemComponent) }],
2056
+ host: {
2057
+ '[class]': 'classes()',
2058
+ '[attr.role]': '"menuitemradio"',
2059
+ tabindex: '-1',
2060
+ '[attr.aria-disabled]': 'disabled ? "true" : null',
2061
+ '[attr.aria-checked]': 'checked()',
2062
+ '[attr.data-state]': 'checked() ? "checked" : "unchecked"',
2063
+ '[attr.data-variant]': 'variant()',
2064
+ '(click)': 'select($any($event))',
2065
+ '(keydown.enter)': 'select($any($event))',
2066
+ '(keydown.space)': 'select($any($event))',
2067
+ },
2068
+ template: `
2069
+ <span class="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
2070
+ @if (checked()) {
2071
+ <span aria-hidden="true" class="h-2 w-2 rounded-full bg-current"></span>
2072
+ }
2073
+ </span>
2074
+ <ng-content />
2075
+ `,
2076
+ }]
2077
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: true }] }] } });
1680
2078
  class MenuSeparatorComponent {
1681
2079
  class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
1682
2080
  classes = computed(() => cn('-mx-1 my-1 h-px bg-muted block', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
@@ -1740,7 +2138,8 @@ class MenuSurfaceComponent {
1740
2138
  ngAfterContentInit() {
1741
2139
  this.keyManager = new FocusKeyManager(this.items)
1742
2140
  .withWrap()
1743
- .withTypeAhead();
2141
+ .withTypeAhead()
2142
+ .skipPredicate((item) => item.disabled);
1744
2143
  // Focus the first enabled item when the menu opens.
1745
2144
  queueMicrotask(() => this.keyManager?.setFirstItemActive());
1746
2145
  }
@@ -1763,7 +2162,7 @@ class MenuSurfaceComponent {
1763
2162
  this.closeRequested.emit();
1764
2163
  }
1765
2164
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: MenuSurfaceComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1766
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: MenuSurfaceComponent, isStandalone: true, selector: "ui-menu-surface", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closeRequested: "closeRequested" }, host: { attributes: { "tabindex": "-1" }, listeners: { "keydown.arrowDown": "onArrow($any($event), 1)", "keydown.arrowUp": "onArrow($any($event), -1)", "keydown.home": "onHome($any($event))", "keydown.end": "onEnd($any($event))", "keydown.tab": "onTab($any($event))" }, properties: { "class": "classes()", "attr.role": "\"menu\"" } }, queries: [{ propertyName: "items", predicate: MenuItemComponent, descendants: true }], ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2165
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: MenuSurfaceComponent, isStandalone: true, selector: "ui-menu-surface", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closeRequested: "closeRequested" }, host: { attributes: { "tabindex": "-1" }, listeners: { "keydown.arrowDown": "onArrow($any($event), 1)", "keydown.arrowUp": "onArrow($any($event), -1)", "keydown.home": "onHome($any($event))", "keydown.end": "onEnd($any($event))", "keydown.tab": "onTab($any($event))" }, properties: { "class": "classes()", "attr.role": "\"menu\"" } }, queries: [{ propertyName: "items", predicate: MenuFocusableItem, descendants: true }], ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1767
2166
  }
1768
2167
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: MenuSurfaceComponent, decorators: [{
1769
2168
  type: Component,
@@ -1784,7 +2183,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImpo
1784
2183
  }]
1785
2184
  }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], items: [{
1786
2185
  type: ContentChildren,
1787
- args: [MenuItemComponent, { descendants: true }]
2186
+ args: [MenuFocusableItem, { descendants: true }]
1788
2187
  }], closeRequested: [{ type: i0.Output, args: ["closeRequested"] }] } });
1789
2188
  /**
1790
2189
  * Wraps an `<ng-template>` that holds `<ui-menu-surface>` + items.
@@ -2120,6 +2519,389 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImpo
2120
2519
  }]
2121
2520
  }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
2122
2521
 
2522
+ const GROUP_BASE = [
2523
+ 'relative flex min-w-0 flex-wrap overflow-hidden rounded-[var(--radius)] border border-input bg-transparent text-sm shadow-sm',
2524
+ 'transition-[border-color,box-shadow] focus-within:border-ring focus-within:ring-1 focus-within:ring-ring',
2525
+ '[&>[data-slot=input-group-control]]:min-w-0',
2526
+ '[&>[data-slot=input-group-control]]:flex-1',
2527
+ '[&>[data-slot=input-group-control]]:rounded-none',
2528
+ '[&>[data-slot=input-group-control]]:border-0',
2529
+ '[&>[data-slot=input-group-control]]:bg-transparent',
2530
+ '[&>[data-slot=input-group-control]]:shadow-none',
2531
+ '[&>[data-slot=input-group-control]]:outline-none',
2532
+ '[&>[data-slot=input-group-control]]:focus-visible:ring-0',
2533
+ '[&>[data-slot=input-group-control]]:focus-visible:outline-none',
2534
+ ].join(' ');
2535
+ const addonAlignClasses = {
2536
+ 'inline-start': ['order-10', '[border-inline-end-width:1px]', '[border-inline-end-color:hsl(var(--border))]'].join(' '),
2537
+ 'inline-end': ['order-30', '[border-inline-start-width:1px]', '[border-inline-start-color:hsl(var(--border))]'].join(' '),
2538
+ 'block-start': [
2539
+ 'order-0 basis-full py-2',
2540
+ '[border-block-end-width:1px]',
2541
+ '[border-block-end-color:hsl(var(--border))]',
2542
+ ].join(' '),
2543
+ 'block-end': [
2544
+ 'order-40 basis-full py-2',
2545
+ '[border-block-start-width:1px]',
2546
+ '[border-block-start-color:hsl(var(--border))]',
2547
+ ].join(' '),
2548
+ };
2549
+ const ADDON_BASE = [
2550
+ 'flex min-h-9 shrink-0 items-center gap-1.5 bg-muted/30 px-3 text-sm text-muted-foreground',
2551
+ '[&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0',
2552
+ ].join(' ');
2553
+ const CONTROL_BASE = [
2554
+ 'order-20 min-w-0 flex-1 bg-transparent text-sm text-foreground',
2555
+ 'placeholder:text-muted-foreground',
2556
+ 'disabled:cursor-not-allowed disabled:opacity-50',
2557
+ 'focus-visible:outline-none',
2558
+ 'aria-[invalid=true]:text-destructive',
2559
+ ].join(' ');
2560
+ class InputGroupComponent {
2561
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
2562
+ classes = computed(() => cn(GROUP_BASE, this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
2563
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: InputGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2564
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: InputGroupComponent, isStandalone: true, selector: "ui-input-group", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2565
+ }
2566
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: InputGroupComponent, decorators: [{
2567
+ type: Component,
2568
+ args: [{
2569
+ selector: 'ui-input-group',
2570
+ changeDetection: ChangeDetectionStrategy.OnPush,
2571
+ host: { '[class]': 'classes()' },
2572
+ template: `<ng-content />`,
2573
+ }]
2574
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
2575
+ class InputGroupAddonComponent {
2576
+ align = input('inline-start', ...(ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []));
2577
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
2578
+ classes = computed(() => cn(ADDON_BASE, addonAlignClasses[this.align()], this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
2579
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: InputGroupAddonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2580
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: InputGroupAddonComponent, isStandalone: true, selector: "ui-input-group-addon", inputs: { align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "attr.data-align": "align()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2581
+ }
2582
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: InputGroupAddonComponent, decorators: [{
2583
+ type: Component,
2584
+ args: [{
2585
+ selector: 'ui-input-group-addon',
2586
+ changeDetection: ChangeDetectionStrategy.OnPush,
2587
+ host: {
2588
+ '[class]': 'classes()',
2589
+ '[attr.data-align]': 'align()',
2590
+ },
2591
+ template: `<ng-content />`,
2592
+ }]
2593
+ }], propDecorators: { align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
2594
+ class InputGroupTextComponent {
2595
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
2596
+ classes = computed(() => cn('inline-flex items-center gap-1.5 whitespace-nowrap text-sm leading-none text-current', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
2597
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: InputGroupTextComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2598
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: InputGroupTextComponent, isStandalone: true, selector: "ui-input-group-text", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2599
+ }
2600
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: InputGroupTextComponent, decorators: [{
2601
+ type: Component,
2602
+ args: [{
2603
+ selector: 'ui-input-group-text',
2604
+ changeDetection: ChangeDetectionStrategy.OnPush,
2605
+ host: { '[class]': 'classes()' },
2606
+ template: `<ng-content />`,
2607
+ }]
2608
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
2609
+ class InputGroupButtonComponent {
2610
+ variant = input('ghost', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
2611
+ size = input('xs', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
2612
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
2613
+ classes = computed(() => cn(buttonVariants({ variant: this.variant(), size: this.size() }), 'shrink-0 shadow-none', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
2614
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: InputGroupButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2615
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: InputGroupButtonComponent, isStandalone: true, selector: "button[ui-input-group-button], a[ui-input-group-button]", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "attr.data-size": "size()", "attr.data-variant": "variant()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2616
+ }
2617
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: InputGroupButtonComponent, decorators: [{
2618
+ type: Component,
2619
+ args: [{
2620
+ selector: 'button[ui-input-group-button], a[ui-input-group-button]',
2621
+ changeDetection: ChangeDetectionStrategy.OnPush,
2622
+ host: {
2623
+ '[class]': 'classes()',
2624
+ '[attr.data-size]': 'size()',
2625
+ '[attr.data-variant]': 'variant()',
2626
+ },
2627
+ template: `<ng-content />`,
2628
+ }]
2629
+ }], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
2630
+ class InputGroupInputComponent {
2631
+ el = inject(ElementRef);
2632
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
2633
+ classes = computed(() => cn(CONTROL_BASE, 'h-9 px-3 py-2', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
2634
+ focus() {
2635
+ this.el.nativeElement.focus();
2636
+ }
2637
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: InputGroupInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2638
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: InputGroupInputComponent, isStandalone: true, selector: "input[ui-input-group-input]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "input-group-control" }, properties: { "class": "classes()" } }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2639
+ }
2640
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: InputGroupInputComponent, decorators: [{
2641
+ type: Component,
2642
+ args: [{
2643
+ selector: 'input[ui-input-group-input]',
2644
+ changeDetection: ChangeDetectionStrategy.OnPush,
2645
+ host: {
2646
+ '[class]': 'classes()',
2647
+ 'data-slot': 'input-group-control',
2648
+ },
2649
+ template: '',
2650
+ }]
2651
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
2652
+ class InputGroupTextareaComponent {
2653
+ el = inject(ElementRef);
2654
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
2655
+ classes = computed(() => cn(CONTROL_BASE, 'min-h-[120px] w-full resize-none px-3 py-2.5', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
2656
+ focus() {
2657
+ this.el.nativeElement.focus();
2658
+ }
2659
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: InputGroupTextareaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2660
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: InputGroupTextareaComponent, isStandalone: true, selector: "textarea[ui-input-group-textarea]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "input-group-control" }, properties: { "class": "classes()" } }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2661
+ }
2662
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: InputGroupTextareaComponent, decorators: [{
2663
+ type: Component,
2664
+ args: [{
2665
+ selector: 'textarea[ui-input-group-textarea]',
2666
+ changeDetection: ChangeDetectionStrategy.OnPush,
2667
+ host: {
2668
+ '[class]': 'classes()',
2669
+ 'data-slot': 'input-group-control',
2670
+ },
2671
+ template: '',
2672
+ }]
2673
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
2674
+
2675
+ const itemVariants = cva(['flex w-full flex-wrap items-center gap-x-3 gap-y-3', 'text-foreground', '[&[href]]:no-underline'].join(' '), {
2676
+ variants: {
2677
+ variant: {
2678
+ default: 'bg-transparent',
2679
+ outline: 'rounded-xl border border-border bg-background px-4 py-3 shadow-sm',
2680
+ muted: 'rounded-xl bg-muted/50 px-4 py-3',
2681
+ },
2682
+ size: {
2683
+ default: 'text-sm',
2684
+ sm: 'gap-x-2.5 gap-y-2 text-sm',
2685
+ xs: 'gap-x-2 gap-y-2 text-xs',
2686
+ },
2687
+ interactive: {
2688
+ true: 'cursor-pointer rounded-xl transition-colors hover:bg-accent/40 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',
2689
+ false: '',
2690
+ },
2691
+ },
2692
+ defaultVariants: {
2693
+ variant: 'default',
2694
+ size: 'default',
2695
+ interactive: false,
2696
+ },
2697
+ });
2698
+ const itemMediaVariants = cva('flex shrink-0 items-center justify-center text-muted-foreground', {
2699
+ variants: {
2700
+ variant: {
2701
+ default: '[&>svg]:size-5 [&>svg]:shrink-0',
2702
+ icon: 'border border-border bg-muted/50 [&>svg]:size-4 [&>svg]:shrink-0',
2703
+ image: 'overflow-hidden [&>img]:h-full [&>img]:w-full [&>img]:object-cover',
2704
+ },
2705
+ size: {
2706
+ default: '',
2707
+ sm: '',
2708
+ xs: '',
2709
+ },
2710
+ },
2711
+ compoundVariants: [
2712
+ { variant: 'icon', size: 'default', class: 'size-10 rounded-lg' },
2713
+ { variant: 'icon', size: 'sm', class: 'size-9 rounded-md' },
2714
+ { variant: 'icon', size: 'xs', class: 'size-8 rounded-md' },
2715
+ { variant: 'image', size: 'default', class: 'h-10 w-10 rounded-md' },
2716
+ { variant: 'image', size: 'sm', class: 'h-9 w-9 rounded-md' },
2717
+ { variant: 'image', size: 'xs', class: 'h-8 w-8 rounded-sm' },
2718
+ ],
2719
+ defaultVariants: {
2720
+ variant: 'default',
2721
+ size: 'default',
2722
+ },
2723
+ });
2724
+
2725
+ const ITEM_TITLE_CLASSES = {
2726
+ default: 'text-sm leading-5',
2727
+ sm: 'text-sm leading-5',
2728
+ xs: 'text-xs leading-4',
2729
+ };
2730
+ const ITEM_DESCRIPTION_CLASSES = {
2731
+ default: 'text-sm leading-5',
2732
+ sm: 'text-xs leading-4',
2733
+ xs: 'text-xs leading-4',
2734
+ };
2735
+ class ItemComponent {
2736
+ variant = input('default', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
2737
+ size = input('default', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
2738
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
2739
+ host = inject(ElementRef);
2740
+ interactive = ['a', 'button'].includes(this.host.nativeElement.tagName.toLowerCase());
2741
+ classes = computed(() => cn(itemVariants({ variant: this.variant(), size: this.size(), interactive: this.interactive }), this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
2742
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2743
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: ItemComponent, isStandalone: true, selector: "ui-item, [ui-item]", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "attr.data-size": "size()", "attr.data-variant": "variant()", "attr.data-interactive": "interactive ? \"true\" : null" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2744
+ }
2745
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ItemComponent, decorators: [{
2746
+ type: Component,
2747
+ args: [{
2748
+ selector: 'ui-item, [ui-item]',
2749
+ changeDetection: ChangeDetectionStrategy.OnPush,
2750
+ host: {
2751
+ '[class]': 'classes()',
2752
+ '[attr.data-size]': 'size()',
2753
+ '[attr.data-variant]': 'variant()',
2754
+ '[attr.data-interactive]': 'interactive ? "true" : null',
2755
+ },
2756
+ template: `<ng-content />`,
2757
+ }]
2758
+ }], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
2759
+ class ItemGroupComponent {
2760
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
2761
+ classes = computed(() => cn('flex w-full flex-col gap-3', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
2762
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ItemGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2763
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: ItemGroupComponent, isStandalone: true, selector: "ui-item-group", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2764
+ }
2765
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ItemGroupComponent, decorators: [{
2766
+ type: Component,
2767
+ args: [{
2768
+ selector: 'ui-item-group',
2769
+ changeDetection: ChangeDetectionStrategy.OnPush,
2770
+ host: { '[class]': 'classes()' },
2771
+ template: `<ng-content />`,
2772
+ }]
2773
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
2774
+ class ItemSeparatorComponent {
2775
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
2776
+ classes = computed(() => cn('block h-px w-full bg-border', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
2777
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ItemSeparatorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2778
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: ItemSeparatorComponent, isStandalone: true, selector: "ui-item-separator", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "separator" }, properties: { "class": "classes()" } }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2779
+ }
2780
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ItemSeparatorComponent, decorators: [{
2781
+ type: Component,
2782
+ args: [{
2783
+ selector: 'ui-item-separator',
2784
+ changeDetection: ChangeDetectionStrategy.OnPush,
2785
+ host: {
2786
+ '[class]': 'classes()',
2787
+ role: 'separator',
2788
+ },
2789
+ template: '',
2790
+ }]
2791
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
2792
+ class ItemHeaderComponent {
2793
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
2794
+ classes = computed(() => cn('basis-full overflow-hidden rounded-lg', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
2795
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ItemHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2796
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: ItemHeaderComponent, isStandalone: true, selector: "ui-item-header", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2797
+ }
2798
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ItemHeaderComponent, decorators: [{
2799
+ type: Component,
2800
+ args: [{
2801
+ selector: 'ui-item-header',
2802
+ changeDetection: ChangeDetectionStrategy.OnPush,
2803
+ host: { '[class]': 'classes()' },
2804
+ template: `<ng-content />`,
2805
+ }]
2806
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
2807
+ class ItemMediaComponent {
2808
+ variant = input('default', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
2809
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
2810
+ item = inject(ItemComponent, { optional: true });
2811
+ classes = computed(() => cn(itemMediaVariants({ variant: this.variant(), size: this.item?.size() ?? 'default' }), this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
2812
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ItemMediaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2813
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: ItemMediaComponent, isStandalone: true, selector: "ui-item-media", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "attr.data-variant": "variant()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2814
+ }
2815
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ItemMediaComponent, decorators: [{
2816
+ type: Component,
2817
+ args: [{
2818
+ selector: 'ui-item-media',
2819
+ changeDetection: ChangeDetectionStrategy.OnPush,
2820
+ host: {
2821
+ '[class]': 'classes()',
2822
+ '[attr.data-variant]': 'variant()',
2823
+ },
2824
+ template: `<ng-content />`,
2825
+ }]
2826
+ }], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
2827
+ class ItemContentComponent {
2828
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
2829
+ classes = computed(() => cn('flex min-w-0 flex-1 basis-0 flex-col justify-center gap-0.5', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
2830
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ItemContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2831
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: ItemContentComponent, isStandalone: true, selector: "ui-item-content", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2832
+ }
2833
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ItemContentComponent, decorators: [{
2834
+ type: Component,
2835
+ args: [{
2836
+ selector: 'ui-item-content',
2837
+ changeDetection: ChangeDetectionStrategy.OnPush,
2838
+ host: { '[class]': 'classes()' },
2839
+ template: `<ng-content />`,
2840
+ }]
2841
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
2842
+ class ItemTitleComponent {
2843
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
2844
+ item = inject(ItemComponent, { optional: true });
2845
+ classes = computed(() => cn('block min-w-0 truncate font-medium text-foreground', ITEM_TITLE_CLASSES[this.item?.size() ?? 'default'], this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
2846
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ItemTitleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2847
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: ItemTitleComponent, isStandalone: true, selector: "ui-item-title", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2848
+ }
2849
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ItemTitleComponent, decorators: [{
2850
+ type: Component,
2851
+ args: [{
2852
+ selector: 'ui-item-title',
2853
+ changeDetection: ChangeDetectionStrategy.OnPush,
2854
+ host: { '[class]': 'classes()' },
2855
+ template: `<ng-content />`,
2856
+ }]
2857
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
2858
+ class ItemDescriptionComponent {
2859
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
2860
+ item = inject(ItemComponent, { optional: true });
2861
+ classes = computed(() => cn('block min-w-0 text-muted-foreground', ITEM_DESCRIPTION_CLASSES[this.item?.size() ?? 'default'], this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
2862
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ItemDescriptionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2863
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: ItemDescriptionComponent, isStandalone: true, selector: "ui-item-description", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2864
+ }
2865
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ItemDescriptionComponent, decorators: [{
2866
+ type: Component,
2867
+ args: [{
2868
+ selector: 'ui-item-description',
2869
+ changeDetection: ChangeDetectionStrategy.OnPush,
2870
+ host: { '[class]': 'classes()' },
2871
+ template: `<ng-content />`,
2872
+ }]
2873
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
2874
+ class ItemActionsComponent {
2875
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
2876
+ classes = computed(() => cn('ms-auto flex shrink-0 items-center gap-2', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
2877
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ItemActionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2878
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: ItemActionsComponent, isStandalone: true, selector: "ui-item-actions", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2879
+ }
2880
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ItemActionsComponent, decorators: [{
2881
+ type: Component,
2882
+ args: [{
2883
+ selector: 'ui-item-actions',
2884
+ changeDetection: ChangeDetectionStrategy.OnPush,
2885
+ host: { '[class]': 'classes()' },
2886
+ template: `<ng-content />`,
2887
+ }]
2888
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
2889
+ class ItemFooterComponent {
2890
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
2891
+ classes = computed(() => cn('basis-full text-sm text-muted-foreground', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
2892
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ItemFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2893
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: ItemFooterComponent, isStandalone: true, selector: "ui-item-footer", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2894
+ }
2895
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ItemFooterComponent, decorators: [{
2896
+ type: Component,
2897
+ args: [{
2898
+ selector: 'ui-item-footer',
2899
+ changeDetection: ChangeDetectionStrategy.OnPush,
2900
+ host: { '[class]': 'classes()' },
2901
+ template: `<ng-content />`,
2902
+ }]
2903
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
2904
+
2123
2905
  class LabelComponent {
2124
2906
  for = input(null, ...(ngDevMode ? [{ debugName: "for" }] : /* istanbul ignore next */ []));
2125
2907
  class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
@@ -4065,5 +4847,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImpo
4065
4847
  * Generated bundle index. Do not edit.
4066
4848
  */
4067
4849
 
4068
- export { AccordionComponent, AccordionContentComponent, AccordionContextBase, AccordionItemComponent, AccordionTriggerComponent, AlertComponent, AlertDescriptionComponent, AlertTitleComponent, AvatarComponent, AvatarFallbackComponent, AvatarImageComponent, BadgeComponent, BreadcrumbComponent, BreadcrumbEllipsisComponent, BreadcrumbItemComponent, BreadcrumbLinkComponent, BreadcrumbListComponent, BreadcrumbPageComponent, BreadcrumbSeparatorComponent, ButtonComponent, CalendarComponent, CardComponent, CardContentComponent, CardDescriptionComponent, CardFooterComponent, CardHeaderComponent, CardTitleComponent, CheckboxComponent, ComboboxComponent, CommandComponent, CommandContextBase, CommandEmptyComponent, CommandGroupComponent, CommandInputComponent, CommandItemComponent, CommandListComponent, CommandSeparatorComponent, CommandShortcutComponent, ContextMenuTriggerDirective, DatePickerComponent, DialogComponent, DialogContentComponent, DialogDescriptionComponent, DialogFooterComponent, DialogHeaderComponent, DialogTitleComponent, FormControlDirective, FormDescriptionComponent, FormFieldComponent, FormFieldContext, FormLabelComponent, FormMessageComponent, InputComponent, LabelComponent, MenuContentDirective, MenuItemComponent, MenuLabelComponent, MenuSeparatorComponent, MenuShortcutComponent, MenuSurfaceComponent, MenuTriggerDirective, OptionComponent, POPOVER_TRIGGER_DEFAULTS, PaginationComponent, PopoverContentDirective, PopoverTriggerDirective, ProgressComponent, RadioComponent, RadioGroupComponent, ScrollAreaComponent, SelectComponent, SeparatorComponent, SheetComponent, SheetContentComponent, SheetDescriptionComponent, SheetFooterComponent, SheetHeaderComponent, SheetTitleComponent, SkeletonComponent, SliderComponent, SwitchComponent, THEME_PANEL_LAYOUT_PORT, THEME_PANEL_THEME_PORT, TableBodyComponent, TableCaptionComponent, TableCellComponent, TableComponent, TableFooterComponent, TableHeadComponent, TableHeaderComponent, TableRowComponent, TabsComponent, TabsContentComponent, TabsContextBase, TabsListComponent, TabsTriggerComponent, TextareaComponent, ThemePanelComponent, ToastService, TooltipDirective, alertVariants, badgeVariants, buttonVariants, cn };
4850
+ export { AccordionComponent, AccordionContentComponent, AccordionContextBase, AccordionItemComponent, AccordionTriggerComponent, AlertActionComponent, AlertComponent, AlertDescriptionComponent, AlertTitleComponent, AvatarBadgeComponent, AvatarComponent, AvatarFallbackComponent, AvatarGroupComponent, AvatarGroupCountComponent, AvatarImageComponent, BadgeComponent, BreadcrumbComponent, BreadcrumbEllipsisComponent, BreadcrumbItemComponent, BreadcrumbLinkComponent, BreadcrumbListComponent, BreadcrumbPageComponent, BreadcrumbSeparatorComponent, ButtonComponent, CalendarComponent, CardActionComponent, CardComponent, CardContentComponent, CardDescriptionComponent, CardFooterComponent, CardHeaderComponent, CardTitleComponent, CheckboxComponent, ComboboxComponent, CommandComponent, CommandContextBase, CommandEmptyComponent, CommandGroupComponent, CommandInputComponent, CommandItemComponent, CommandListComponent, CommandSeparatorComponent, CommandShortcutComponent, ContextMenuTriggerDirective, DatePickerComponent, DialogCloseDirective, DialogComponent, DialogContentComponent, DialogDescriptionComponent, DialogFooterComponent, DialogHeaderComponent, DialogTitleComponent, FormControlDirective, FormDescriptionComponent, FormFieldComponent, FormFieldContext, FormLabelComponent, FormMessageComponent, InputComponent, InputGroupAddonComponent, InputGroupButtonComponent, InputGroupComponent, InputGroupInputComponent, InputGroupTextComponent, InputGroupTextareaComponent, ItemActionsComponent, ItemComponent, ItemContentComponent, ItemDescriptionComponent, ItemFooterComponent, ItemGroupComponent, ItemHeaderComponent, ItemMediaComponent, ItemSeparatorComponent, ItemTitleComponent, LabelComponent, MenuCheckboxItemComponent, MenuContentDirective, MenuFocusableItem, MenuGroupComponent, MenuItemComponent, MenuLabelComponent, MenuRadioGroupBase, MenuRadioGroupComponent, MenuRadioItemComponent, MenuSeparatorComponent, MenuShortcutComponent, MenuSurfaceComponent, MenuTriggerDirective, OptionComponent, POPOVER_TRIGGER_DEFAULTS, PaginationComponent, PopoverContentDirective, PopoverTriggerDirective, ProgressComponent, RadioComponent, RadioGroupComponent, ScrollAreaComponent, SelectComponent, SeparatorComponent, SheetComponent, SheetContentComponent, SheetDescriptionComponent, SheetFooterComponent, SheetHeaderComponent, SheetTitleComponent, SkeletonComponent, SliderComponent, SwitchComponent, THEME_PANEL_LAYOUT_PORT, THEME_PANEL_THEME_PORT, TableBodyComponent, TableCaptionComponent, TableCellComponent, TableComponent, TableFooterComponent, TableHeadComponent, TableHeaderComponent, TableRowComponent, TabsComponent, TabsContentComponent, TabsContextBase, TabsListComponent, TabsTriggerComponent, TextareaComponent, ThemePanelComponent, ToastService, TooltipDirective, alertVariants, badgeVariants, buttonVariants, cn, itemMediaVariants, itemVariants };
4069
4851
  //# sourceMappingURL=ojiepermana-angular-component.mjs.map