ng-blatui 1.3.0 → 1.5.0

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.
@@ -70,7 +70,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
70
70
  }], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
71
71
 
72
72
  const BASE = 'inline-flex items-center justify-center rounded-md border font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden';
73
- const SIZES = {
73
+ const SIZES$1 = {
74
74
  sm: 'px-1.5 py-px text-[0.625rem]',
75
75
  default: 'px-2 py-0.5 text-xs',
76
76
  lg: 'px-3 py-1 text-sm [&>svg]:size-3.5',
@@ -81,7 +81,7 @@ const VARIANTS = {
81
81
  destructive: 'border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60',
82
82
  outline: 'text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground',
83
83
  };
84
- const TONES = {
84
+ const TONES$1 = {
85
85
  success: {
86
86
  soft: 'border-transparent bg-success/10 text-success dark:bg-success/15',
87
87
  solid: 'border-transparent bg-success text-success-foreground',
@@ -143,8 +143,8 @@ class BuiBadge {
143
143
  userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
144
144
  computedClass = computed(() => {
145
145
  const tone = this.tone();
146
- const toneOrVariant = tone === null ? brandClass(this.variant()) : TONES[tone][intensityFor(this.variant())];
147
- return cn(BASE, SIZES[this.size()], toneOrVariant, this.userClass());
146
+ const toneOrVariant = tone === null ? brandClass(this.variant()) : TONES$1[tone][intensityFor(this.variant())];
147
+ return cn(BASE, SIZES$1[this.size()], toneOrVariant, this.userClass());
148
148
  }, /* @ts-ignore */
149
149
  ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
150
150
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiBadge, deps: [], target: i0.ɵɵFactoryTarget.Directive });
@@ -2250,6 +2250,665 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
2250
2250
  }]
2251
2251
  }], propDecorators: { userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
2252
2252
 
2253
+ /** Empty-state container. */
2254
+ class BuiEmpty {
2255
+ userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
2256
+ computedClass = computed(() => cn('flex min-w-0 flex-1 flex-col items-center justify-center gap-6 rounded-lg border border-dashed p-6 text-center text-balance md:p-12', this.userClass()), /* @ts-ignore */
2257
+ ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
2258
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiEmpty, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2259
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: BuiEmpty, isStandalone: true, selector: "[buiEmpty]", inputs: { userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "empty" }, properties: { "class": "computedClass()" } }, ngImport: i0 });
2260
+ }
2261
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiEmpty, decorators: [{
2262
+ type: Directive,
2263
+ args: [{
2264
+ selector: '[buiEmpty]',
2265
+ host: { 'data-slot': 'empty', '[class]': 'computedClass()' },
2266
+ }]
2267
+ }], propDecorators: { userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
2268
+ class BuiEmptyHeader {
2269
+ userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
2270
+ computedClass = computed(() => cn('flex max-w-sm flex-col items-center gap-2 text-center', this.userClass()), /* @ts-ignore */
2271
+ ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
2272
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiEmptyHeader, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2273
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: BuiEmptyHeader, isStandalone: true, selector: "[buiEmptyHeader]", inputs: { userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "empty-header" }, properties: { "class": "computedClass()" } }, ngImport: i0 });
2274
+ }
2275
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiEmptyHeader, decorators: [{
2276
+ type: Directive,
2277
+ args: [{
2278
+ selector: '[buiEmptyHeader]',
2279
+ host: { 'data-slot': 'empty-header', '[class]': 'computedClass()' },
2280
+ }]
2281
+ }], propDecorators: { userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
2282
+ class BuiEmptyMedia {
2283
+ variant = input('default', /* @ts-ignore */
2284
+ ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
2285
+ userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
2286
+ computedClass = computed(() => cn('mb-2 flex shrink-0 items-center justify-center', this.variant() === 'icon' &&
2287
+ "size-10 rounded-lg bg-muted text-foreground [&_svg:not([class*='size-'])]:size-6", this.userClass()), /* @ts-ignore */
2288
+ ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
2289
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiEmptyMedia, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2290
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: BuiEmptyMedia, isStandalone: true, selector: "[buiEmptyMedia]", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "empty-media" }, properties: { "attr.data-variant": "variant()", "class": "computedClass()" } }, ngImport: i0 });
2291
+ }
2292
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiEmptyMedia, decorators: [{
2293
+ type: Directive,
2294
+ args: [{
2295
+ selector: '[buiEmptyMedia]',
2296
+ host: {
2297
+ 'data-slot': 'empty-media',
2298
+ '[attr.data-variant]': 'variant()',
2299
+ '[class]': 'computedClass()',
2300
+ },
2301
+ }]
2302
+ }], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
2303
+ class BuiEmptyTitle {
2304
+ userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
2305
+ computedClass = computed(() => cn('text-lg font-medium tracking-tight', this.userClass()), /* @ts-ignore */
2306
+ ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
2307
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiEmptyTitle, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2308
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: BuiEmptyTitle, isStandalone: true, selector: "[buiEmptyTitle]", inputs: { userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "empty-title" }, properties: { "class": "computedClass()" } }, ngImport: i0 });
2309
+ }
2310
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiEmptyTitle, decorators: [{
2311
+ type: Directive,
2312
+ args: [{
2313
+ selector: '[buiEmptyTitle]',
2314
+ host: { 'data-slot': 'empty-title', '[class]': 'computedClass()' },
2315
+ }]
2316
+ }], propDecorators: { userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
2317
+ class BuiEmptyDescription {
2318
+ userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
2319
+ computedClass = computed(() => cn('text-sm/relaxed text-muted-foreground [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary', this.userClass()), /* @ts-ignore */
2320
+ ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
2321
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiEmptyDescription, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2322
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: BuiEmptyDescription, isStandalone: true, selector: "[buiEmptyDescription]", inputs: { userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "empty-description" }, properties: { "class": "computedClass()" } }, ngImport: i0 });
2323
+ }
2324
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiEmptyDescription, decorators: [{
2325
+ type: Directive,
2326
+ args: [{
2327
+ selector: '[buiEmptyDescription]',
2328
+ host: { 'data-slot': 'empty-description', '[class]': 'computedClass()' },
2329
+ }]
2330
+ }], propDecorators: { userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
2331
+ class BuiEmptyContent {
2332
+ userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
2333
+ computedClass = computed(() => cn('flex w-full max-w-sm min-w-0 flex-col items-center gap-4 text-sm text-balance', this.userClass()), /* @ts-ignore */
2334
+ ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
2335
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiEmptyContent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2336
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: BuiEmptyContent, isStandalone: true, selector: "[buiEmptyContent]", inputs: { userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "empty-content" }, properties: { "class": "computedClass()" } }, ngImport: i0 });
2337
+ }
2338
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiEmptyContent, decorators: [{
2339
+ type: Directive,
2340
+ args: [{
2341
+ selector: '[buiEmptyContent]',
2342
+ host: { 'data-slot': 'empty-content', '[class]': 'computedClass()' },
2343
+ }]
2344
+ }], propDecorators: { userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
2345
+
2346
+ const SIZES = {
2347
+ sm: 'max-w-3xl',
2348
+ md: 'max-w-5xl',
2349
+ lg: 'max-w-6xl',
2350
+ xl: 'max-w-7xl',
2351
+ prose: 'max-w-prose',
2352
+ full: 'max-w-full',
2353
+ };
2354
+ /** Centered, padded page container with a max-width scale. */
2355
+ class BuiContainer {
2356
+ size = input('lg', /* @ts-ignore */
2357
+ ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
2358
+ userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
2359
+ computedClass = computed(() => cn('mx-auto w-full px-4 sm:px-6 lg:px-8', SIZES[this.size()], this.userClass()), /* @ts-ignore */
2360
+ ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
2361
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiContainer, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2362
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: BuiContainer, isStandalone: true, selector: "[buiContainer]", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "container" }, properties: { "class": "computedClass()" } }, ngImport: i0 });
2363
+ }
2364
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiContainer, decorators: [{
2365
+ type: Directive,
2366
+ args: [{
2367
+ selector: '[buiContainer]',
2368
+ host: { 'data-slot': 'container', '[class]': 'computedClass()' },
2369
+ }]
2370
+ }], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
2371
+
2372
+ const FIELD_ORIENT = {
2373
+ vertical: 'flex-col [&>*]:w-full [&>.sr-only]:w-auto',
2374
+ horizontal: 'flex-row items-center [&>[data-slot=field-label]]:flex-auto',
2375
+ responsive: 'flex-col [&>*]:w-full @md/field-group:flex-row @md/field-group:items-center @md/field-group:[&>*]:w-auto',
2376
+ };
2377
+ /** A form field row grouping a label, control, description and error. */
2378
+ class BuiField {
2379
+ orientation = input('vertical', /* @ts-ignore */
2380
+ ...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
2381
+ userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
2382
+ computedClass = computed(() => cn('group/field flex w-full gap-2 data-[invalid=true]:text-destructive', FIELD_ORIENT[this.orientation()], this.userClass()), /* @ts-ignore */
2383
+ ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
2384
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiField, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2385
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: BuiField, isStandalone: true, selector: "[buiField]", inputs: { orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "group", "data-slot": "field" }, properties: { "attr.data-orientation": "orientation()", "class": "computedClass()" } }, ngImport: i0 });
2386
+ }
2387
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiField, decorators: [{
2388
+ type: Directive,
2389
+ args: [{
2390
+ selector: '[buiField]',
2391
+ host: {
2392
+ role: 'group',
2393
+ 'data-slot': 'field',
2394
+ '[attr.data-orientation]': 'orientation()',
2395
+ '[class]': 'computedClass()',
2396
+ },
2397
+ }]
2398
+ }], propDecorators: { orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
2399
+ class BuiFieldSet {
2400
+ userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
2401
+ computedClass = computed(() => cn('flex flex-col gap-6 has-[>[data-slot=radio-group]]:gap-3', this.userClass()), /* @ts-ignore */
2402
+ ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
2403
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiFieldSet, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2404
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: BuiFieldSet, isStandalone: true, selector: "fieldset[buiFieldSet]", inputs: { userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "field-set" }, properties: { "class": "computedClass()" } }, ngImport: i0 });
2405
+ }
2406
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiFieldSet, decorators: [{
2407
+ type: Directive,
2408
+ args: [{
2409
+ selector: 'fieldset[buiFieldSet]',
2410
+ host: { 'data-slot': 'field-set', '[class]': 'computedClass()' },
2411
+ }]
2412
+ }], propDecorators: { userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
2413
+ class BuiFieldLegend {
2414
+ variant = input('legend', /* @ts-ignore */
2415
+ ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
2416
+ userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
2417
+ computedClass = computed(() => cn('mb-3 font-medium data-[variant=label]:text-sm data-[variant=legend]:text-base', this.userClass()), /* @ts-ignore */
2418
+ ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
2419
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiFieldLegend, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2420
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: BuiFieldLegend, isStandalone: true, selector: "legend[buiFieldLegend]", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "field-legend" }, properties: { "attr.data-variant": "variant()", "class": "computedClass()" } }, ngImport: i0 });
2421
+ }
2422
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiFieldLegend, decorators: [{
2423
+ type: Directive,
2424
+ args: [{
2425
+ selector: 'legend[buiFieldLegend]',
2426
+ host: {
2427
+ 'data-slot': 'field-legend',
2428
+ '[attr.data-variant]': 'variant()',
2429
+ '[class]': 'computedClass()',
2430
+ },
2431
+ }]
2432
+ }], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
2433
+ class BuiFieldGroup {
2434
+ userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
2435
+ computedClass = computed(() => cn('group/field-group @container/field-group flex w-full flex-col gap-7', this.userClass()), /* @ts-ignore */
2436
+ ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
2437
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiFieldGroup, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2438
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: BuiFieldGroup, isStandalone: true, selector: "[buiFieldGroup]", inputs: { userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "field-group" }, properties: { "class": "computedClass()" } }, ngImport: i0 });
2439
+ }
2440
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiFieldGroup, decorators: [{
2441
+ type: Directive,
2442
+ args: [{
2443
+ selector: '[buiFieldGroup]',
2444
+ host: { 'data-slot': 'field-group', '[class]': 'computedClass()' },
2445
+ }]
2446
+ }], propDecorators: { userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
2447
+ class BuiFieldLabel {
2448
+ forId = input(undefined, { ...(ngDevMode ? { debugName: "forId" } : /* istanbul ignore next */ {}), alias: 'for' });
2449
+ userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
2450
+ computedClass = computed(() => cn('flex w-fit gap-2 text-sm leading-snug font-medium select-none group-data-[disabled=true]/field:opacity-50', this.userClass()), /* @ts-ignore */
2451
+ ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
2452
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiFieldLabel, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2453
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: BuiFieldLabel, isStandalone: true, selector: "label[buiFieldLabel]", inputs: { forId: { classPropertyName: "forId", publicName: "for", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "field-label" }, properties: { "attr.for": "forId()", "class": "computedClass()" } }, ngImport: i0 });
2454
+ }
2455
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiFieldLabel, decorators: [{
2456
+ type: Directive,
2457
+ args: [{
2458
+ selector: 'label[buiFieldLabel]',
2459
+ host: { 'data-slot': 'field-label', '[attr.for]': 'forId()', '[class]': 'computedClass()' },
2460
+ }]
2461
+ }], propDecorators: { forId: [{ type: i0.Input, args: [{ isSignal: true, alias: "for", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
2462
+ class BuiFieldTitle {
2463
+ userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
2464
+ computedClass = computed(() => cn('flex w-fit items-center gap-2 text-sm leading-snug font-medium', this.userClass()), /* @ts-ignore */
2465
+ ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
2466
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiFieldTitle, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2467
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: BuiFieldTitle, isStandalone: true, selector: "[buiFieldTitle]", inputs: { userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "field-title" }, properties: { "class": "computedClass()" } }, ngImport: i0 });
2468
+ }
2469
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiFieldTitle, decorators: [{
2470
+ type: Directive,
2471
+ args: [{
2472
+ selector: '[buiFieldTitle]',
2473
+ host: { 'data-slot': 'field-title', '[class]': 'computedClass()' },
2474
+ }]
2475
+ }], propDecorators: { userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
2476
+ class BuiFieldDescription {
2477
+ userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
2478
+ computedClass = computed(() => cn('text-sm leading-normal font-normal text-muted-foreground', this.userClass()), /* @ts-ignore */
2479
+ ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
2480
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiFieldDescription, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2481
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: BuiFieldDescription, isStandalone: true, selector: "p[buiFieldDescription]", inputs: { userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "field-description" }, properties: { "class": "computedClass()" } }, ngImport: i0 });
2482
+ }
2483
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiFieldDescription, decorators: [{
2484
+ type: Directive,
2485
+ args: [{
2486
+ selector: 'p[buiFieldDescription]',
2487
+ host: { 'data-slot': 'field-description', '[class]': 'computedClass()' },
2488
+ }]
2489
+ }], propDecorators: { userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
2490
+ class BuiFieldContent {
2491
+ userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
2492
+ computedClass = computed(() => cn('group/field-content flex flex-1 flex-col gap-1.5 leading-snug', this.userClass()), /* @ts-ignore */
2493
+ ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
2494
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiFieldContent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2495
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: BuiFieldContent, isStandalone: true, selector: "[buiFieldContent]", inputs: { userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "field-content" }, properties: { "class": "computedClass()" } }, ngImport: i0 });
2496
+ }
2497
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiFieldContent, decorators: [{
2498
+ type: Directive,
2499
+ args: [{
2500
+ selector: '[buiFieldContent]',
2501
+ host: { 'data-slot': 'field-content', '[class]': 'computedClass()' },
2502
+ }]
2503
+ }], propDecorators: { userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
2504
+ /** Field validation message (`role="alert"`). */
2505
+ class BuiFieldError {
2506
+ userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
2507
+ computedClass = computed(() => cn('text-sm font-normal text-destructive', this.userClass()), /* @ts-ignore */
2508
+ ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
2509
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiFieldError, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2510
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: BuiFieldError, isStandalone: true, selector: "[buiFieldError]", inputs: { userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "alert", "data-slot": "field-error" }, properties: { "class": "computedClass()" } }, ngImport: i0 });
2511
+ }
2512
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiFieldError, decorators: [{
2513
+ type: Directive,
2514
+ args: [{
2515
+ selector: '[buiFieldError]',
2516
+ host: { role: 'alert', 'data-slot': 'field-error', '[class]': 'computedClass()' },
2517
+ }]
2518
+ }], propDecorators: { userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
2519
+ /** Labelled divider between fields. */
2520
+ class BuiFieldSeparator {
2521
+ userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
2522
+ computedClass = computed(() => cn('relative -my-2 block h-5 text-sm', this.userClass()), /* @ts-ignore */
2523
+ ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
2524
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiFieldSeparator, deps: [], target: i0.ɵɵFactoryTarget.Component });
2525
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.2", type: BuiFieldSeparator, isStandalone: true, selector: "bui-field-separator", inputs: { userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "field-separator" }, properties: { "class": "computedClass()" } }, ngImport: i0, template: `
2526
+ <div class="absolute inset-0 top-1/2 h-px bg-border"></div>
2527
+ <span class="relative mx-auto block w-fit bg-background px-2 text-muted-foreground">
2528
+ <ng-content />
2529
+ </span>
2530
+ `, isInline: true });
2531
+ }
2532
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiFieldSeparator, decorators: [{
2533
+ type: Component,
2534
+ args: [{
2535
+ selector: 'bui-field-separator',
2536
+ host: { 'data-slot': 'field-separator', '[class]': 'computedClass()' },
2537
+ template: `
2538
+ <div class="absolute inset-0 top-1/2 h-px bg-border"></div>
2539
+ <span class="relative mx-auto block w-fit bg-background px-2 text-muted-foreground">
2540
+ <ng-content />
2541
+ </span>
2542
+ `,
2543
+ }]
2544
+ }], propDecorators: { userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
2545
+
2546
+ /** Accessible disclosure: a trigger toggles the visibility of its content. */
2547
+ class BuiCollapsible {
2548
+ open = model(false, /* @ts-ignore */
2549
+ ...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
2550
+ contentId = inject(_IdGenerator).getId('bui-collapsible-');
2551
+ toggle() {
2552
+ this.open.update((value) => !value);
2553
+ }
2554
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiCollapsible, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2555
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: BuiCollapsible, isStandalone: true, selector: "[buiCollapsible]", inputs: { open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "openChange" }, host: { attributes: { "data-slot": "collapsible" } }, exportAs: ["buiCollapsible"], ngImport: i0 });
2556
+ }
2557
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiCollapsible, decorators: [{
2558
+ type: Directive,
2559
+ args: [{
2560
+ selector: '[buiCollapsible]',
2561
+ exportAs: 'buiCollapsible',
2562
+ host: { 'data-slot': 'collapsible' },
2563
+ }]
2564
+ }], propDecorators: { open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }, { type: i0.Output, args: ["openChange"] }] } });
2565
+ class BuiCollapsibleTrigger {
2566
+ collapsible = inject(BuiCollapsible);
2567
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiCollapsibleTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2568
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.2", type: BuiCollapsibleTrigger, isStandalone: true, selector: "button[buiCollapsibleTrigger]", host: { attributes: { "type": "button", "data-slot": "collapsible-trigger" }, listeners: { "click": "collapsible.toggle()" }, properties: { "attr.aria-expanded": "collapsible.open()", "attr.aria-controls": "collapsible.contentId", "attr.data-state": "collapsible.open() ? 'open' : 'closed'" } }, ngImport: i0 });
2569
+ }
2570
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiCollapsibleTrigger, decorators: [{
2571
+ type: Directive,
2572
+ args: [{
2573
+ selector: 'button[buiCollapsibleTrigger]',
2574
+ host: {
2575
+ type: 'button',
2576
+ 'data-slot': 'collapsible-trigger',
2577
+ '[attr.aria-expanded]': 'collapsible.open()',
2578
+ '[attr.aria-controls]': 'collapsible.contentId',
2579
+ '[attr.data-state]': "collapsible.open() ? 'open' : 'closed'",
2580
+ '(click)': 'collapsible.toggle()',
2581
+ },
2582
+ }]
2583
+ }] });
2584
+ class BuiCollapsibleContent {
2585
+ collapsible = inject(BuiCollapsible);
2586
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiCollapsibleContent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2587
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.2", type: BuiCollapsibleContent, isStandalone: true, selector: "[buiCollapsibleContent]", host: { attributes: { "data-slot": "collapsible-content" }, properties: { "id": "collapsible.contentId", "hidden": "!collapsible.open()", "attr.data-state": "collapsible.open() ? 'open' : 'closed'" } }, ngImport: i0 });
2588
+ }
2589
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiCollapsibleContent, decorators: [{
2590
+ type: Directive,
2591
+ args: [{
2592
+ selector: '[buiCollapsibleContent]',
2593
+ host: {
2594
+ 'data-slot': 'collapsible-content',
2595
+ '[id]': 'collapsible.contentId',
2596
+ '[hidden]': '!collapsible.open()',
2597
+ '[attr.data-state]': "collapsible.open() ? 'open' : 'closed'",
2598
+ },
2599
+ }]
2600
+ }] });
2601
+
2602
+ const toggleVariants = cva("inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-[color,box-shadow] outline-none hover:bg-muted hover:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", {
2603
+ variants: {
2604
+ variant: {
2605
+ default: 'bg-transparent',
2606
+ outline: 'border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground',
2607
+ },
2608
+ size: {
2609
+ default: 'h-9 min-w-9 px-2',
2610
+ sm: 'h-8 min-w-8 px-1.5',
2611
+ lg: 'h-10 min-w-10 px-2.5',
2612
+ },
2613
+ },
2614
+ defaultVariants: { variant: 'default', size: 'default' },
2615
+ });
2616
+ /** A two-state toggle button (`aria-pressed`). */
2617
+ class BuiToggle {
2618
+ pressed = model(false, /* @ts-ignore */
2619
+ ...(ngDevMode ? [{ debugName: "pressed" }] : /* istanbul ignore next */ []));
2620
+ variant = input('default', /* @ts-ignore */
2621
+ ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
2622
+ size = input('default', /* @ts-ignore */
2623
+ ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
2624
+ userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
2625
+ computedClass = computed(() => cn(toggleVariants({ variant: this.variant(), size: this.size() }), this.userClass()), /* @ts-ignore */
2626
+ ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
2627
+ toggle() {
2628
+ this.pressed.update((value) => !value);
2629
+ }
2630
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiToggle, deps: [], target: i0.ɵɵFactoryTarget.Component });
2631
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.2", type: BuiToggle, isStandalone: true, selector: "button[buiToggle]", inputs: { pressed: { classPropertyName: "pressed", publicName: "pressed", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { pressed: "pressedChange" }, host: { attributes: { "type": "button", "data-slot": "toggle" }, listeners: { "click": "toggle()" }, properties: { "attr.aria-pressed": "pressed()", "attr.data-state": "pressed() ? 'on' : 'off'", "class": "computedClass()" } }, ngImport: i0, template: `<ng-content />`, isInline: true });
2632
+ }
2633
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiToggle, decorators: [{
2634
+ type: Component,
2635
+ args: [{
2636
+ selector: 'button[buiToggle]',
2637
+ host: {
2638
+ type: 'button',
2639
+ 'data-slot': 'toggle',
2640
+ '[attr.aria-pressed]': 'pressed()',
2641
+ '[attr.data-state]': "pressed() ? 'on' : 'off'",
2642
+ '[class]': 'computedClass()',
2643
+ '(click)': 'toggle()',
2644
+ },
2645
+ template: `<ng-content />`,
2646
+ }]
2647
+ }], propDecorators: { pressed: [{ type: i0.Input, args: [{ isSignal: true, alias: "pressed", required: false }] }, { type: i0.Output, args: ["pressedChange"] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
2648
+
2649
+ /** A spinning loading indicator (`role="status"`). */
2650
+ class BuiSpinner {
2651
+ userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
2652
+ computedClass = computed(() => cn('inline-block size-4 animate-spin', this.userClass()), /* @ts-ignore */
2653
+ ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
2654
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiSpinner, deps: [], target: i0.ɵɵFactoryTarget.Component });
2655
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.2", type: BuiSpinner, isStandalone: true, selector: "bui-spinner", inputs: { userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "spinner", "role": "status", "aria-label": "Loading" }, properties: { "class": "computedClass()" } }, ngImport: i0, template: `
2656
+ <svg
2657
+ viewBox="0 0 24 24"
2658
+ fill="none"
2659
+ stroke="currentColor"
2660
+ stroke-width="2"
2661
+ stroke-linecap="round"
2662
+ stroke-linejoin="round"
2663
+ aria-hidden="true"
2664
+ class="size-full"
2665
+ >
2666
+ <path d="M21 12a9 9 0 1 1-6.219-8.56" />
2667
+ </svg>
2668
+ `, isInline: true });
2669
+ }
2670
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiSpinner, decorators: [{
2671
+ type: Component,
2672
+ args: [{
2673
+ selector: 'bui-spinner',
2674
+ host: {
2675
+ 'data-slot': 'spinner',
2676
+ role: 'status',
2677
+ 'aria-label': 'Loading',
2678
+ '[class]': 'computedClass()',
2679
+ },
2680
+ template: `
2681
+ <svg
2682
+ viewBox="0 0 24 24"
2683
+ fill="none"
2684
+ stroke="currentColor"
2685
+ stroke-width="2"
2686
+ stroke-linecap="round"
2687
+ stroke-linejoin="round"
2688
+ aria-hidden="true"
2689
+ class="size-full"
2690
+ >
2691
+ <path d="M21 12a9 9 0 1 1-6.219-8.56" />
2692
+ </svg>
2693
+ `,
2694
+ }]
2695
+ }], propDecorators: { userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
2696
+
2697
+ /** Copy-to-clipboard button: copies `value`, flips to a check, announces "Copied". */
2698
+ class BuiCopyButton {
2699
+ value = input('', /* @ts-ignore */
2700
+ ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
2701
+ label = input('Copy', /* @ts-ignore */
2702
+ ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
2703
+ userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
2704
+ copied = signal(false, /* @ts-ignore */
2705
+ ...(ngDevMode ? [{ debugName: "copied" }] : /* istanbul ignore next */ []));
2706
+ computedClass = computed(() => cn('inline-flex h-8 items-center justify-center gap-1.5 rounded-md px-2 text-sm font-medium text-muted-foreground transition-colors outline-none hover:bg-accent hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50', this.userClass()), /* @ts-ignore */
2707
+ ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
2708
+ async copy() {
2709
+ try {
2710
+ await navigator.clipboard.writeText(this.value());
2711
+ this.copied.set(true);
2712
+ setTimeout(() => {
2713
+ this.copied.set(false);
2714
+ }, 1500);
2715
+ }
2716
+ catch {
2717
+ // Clipboard unavailable — ignore.
2718
+ }
2719
+ }
2720
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiCopyButton, deps: [], target: i0.ɵɵFactoryTarget.Component });
2721
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiCopyButton, isStandalone: true, selector: "button[buiCopyButton]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "type": "button", "data-slot": "copy-button" }, listeners: { "click": "copy()" }, properties: { "attr.aria-label": "copied() ? 'Copied' : label()", "class": "computedClass()" } }, ngImport: i0, template: `
2722
+ <span class="grid size-4 place-items-center *:col-start-1 *:row-start-1">
2723
+ @if (copied()) {
2724
+ <svg
2725
+ viewBox="0 0 24 24"
2726
+ fill="none"
2727
+ stroke="currentColor"
2728
+ stroke-width="2"
2729
+ stroke-linecap="round"
2730
+ stroke-linejoin="round"
2731
+ aria-hidden="true"
2732
+ class="size-4 text-success"
2733
+ >
2734
+ <path d="M20 6 9 17l-5-5" />
2735
+ </svg>
2736
+ } @else {
2737
+ <svg
2738
+ viewBox="0 0 24 24"
2739
+ fill="none"
2740
+ stroke="currentColor"
2741
+ stroke-width="2"
2742
+ stroke-linecap="round"
2743
+ stroke-linejoin="round"
2744
+ aria-hidden="true"
2745
+ class="size-4"
2746
+ >
2747
+ <rect width="14" height="14" x="8" y="8" rx="2" ry="2" />
2748
+ <path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2" />
2749
+ </svg>
2750
+ }
2751
+ </span>
2752
+ <ng-content />
2753
+ <span class="sr-only" aria-live="polite">{{ copied() ? 'Copied' : '' }}</span>
2754
+ `, isInline: true });
2755
+ }
2756
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiCopyButton, decorators: [{
2757
+ type: Component,
2758
+ args: [{
2759
+ selector: 'button[buiCopyButton]',
2760
+ host: {
2761
+ type: 'button',
2762
+ 'data-slot': 'copy-button',
2763
+ '[attr.aria-label]': "copied() ? 'Copied' : label()",
2764
+ '[class]': 'computedClass()',
2765
+ '(click)': 'copy()',
2766
+ },
2767
+ template: `
2768
+ <span class="grid size-4 place-items-center *:col-start-1 *:row-start-1">
2769
+ @if (copied()) {
2770
+ <svg
2771
+ viewBox="0 0 24 24"
2772
+ fill="none"
2773
+ stroke="currentColor"
2774
+ stroke-width="2"
2775
+ stroke-linecap="round"
2776
+ stroke-linejoin="round"
2777
+ aria-hidden="true"
2778
+ class="size-4 text-success"
2779
+ >
2780
+ <path d="M20 6 9 17l-5-5" />
2781
+ </svg>
2782
+ } @else {
2783
+ <svg
2784
+ viewBox="0 0 24 24"
2785
+ fill="none"
2786
+ stroke="currentColor"
2787
+ stroke-width="2"
2788
+ stroke-linecap="round"
2789
+ stroke-linejoin="round"
2790
+ aria-hidden="true"
2791
+ class="size-4"
2792
+ >
2793
+ <rect width="14" height="14" x="8" y="8" rx="2" ry="2" />
2794
+ <path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2" />
2795
+ </svg>
2796
+ }
2797
+ </span>
2798
+ <ng-content />
2799
+ <span class="sr-only" aria-live="polite">{{ copied() ? 'Copied' : '' }}</span>
2800
+ `,
2801
+ }]
2802
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
2803
+
2804
+ const TONES = {
2805
+ default: 'bg-muted text-foreground border-border',
2806
+ primary: 'bg-primary text-primary-foreground border-transparent',
2807
+ info: 'bg-info/10 text-info border-info/25',
2808
+ success: 'bg-success/10 text-success border-success/25',
2809
+ warning: 'bg-warning/10 text-warning border-warning/25',
2810
+ danger: 'bg-destructive/10 text-destructive border-destructive/25',
2811
+ };
2812
+ /**
2813
+ * Full-width announcement bar. Optionally dismissible and (with `persistKey`) remembers
2814
+ * the dismissal in localStorage. SSR-safe — localStorage is only touched in the browser.
2815
+ */
2816
+ class BuiBanner {
2817
+ tone = input('default', /* @ts-ignore */
2818
+ ...(ngDevMode ? [{ debugName: "tone" }] : /* istanbul ignore next */ []));
2819
+ dismissible = input(true, /* @ts-ignore */
2820
+ ...(ngDevMode ? [{ debugName: "dismissible" }] : /* istanbul ignore next */ []));
2821
+ persistKey = input(undefined, /* @ts-ignore */
2822
+ ...(ngDevMode ? [{ debugName: "persistKey" }] : /* istanbul ignore next */ []));
2823
+ userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
2824
+ show = signal(true, /* @ts-ignore */
2825
+ ...(ngDevMode ? [{ debugName: "show" }] : /* istanbul ignore next */ []));
2826
+ isBrowser = isPlatformBrowser(inject(PLATFORM_ID));
2827
+ computedClass = computed(() => cn('relative flex w-full items-center gap-3 border-b px-4 py-2.5 text-sm', TONES[this.tone()], this.userClass()), /* @ts-ignore */
2828
+ ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
2829
+ ngOnInit() {
2830
+ const key = this.persistKey();
2831
+ if (this.isBrowser && key && localStorage.getItem(`bui-banner-${key}`) === '1') {
2832
+ this.show.set(false);
2833
+ }
2834
+ }
2835
+ dismiss() {
2836
+ this.show.set(false);
2837
+ const key = this.persistKey();
2838
+ if (this.isBrowser && key) {
2839
+ localStorage.setItem(`bui-banner-${key}`, '1');
2840
+ }
2841
+ }
2842
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiBanner, deps: [], target: i0.ɵɵFactoryTarget.Component });
2843
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiBanner, isStandalone: true, selector: "bui-banner", inputs: { tone: { classPropertyName: "tone", publicName: "tone", isSignal: true, isRequired: false, transformFunction: null }, dismissible: { classPropertyName: "dismissible", publicName: "dismissible", isSignal: true, isRequired: false, transformFunction: null }, persistKey: { classPropertyName: "persistKey", publicName: "persistKey", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "banner", "role": "region", "aria-label": "Announcement" }, properties: { "hidden": "!show()", "class": "computedClass()" } }, ngImport: i0, template: `
2844
+ <div class="flex flex-1 flex-wrap items-center justify-center gap-x-3 gap-y-1">
2845
+ <ng-content />
2846
+ </div>
2847
+ @if (dismissible()) {
2848
+ <button
2849
+ type="button"
2850
+ aria-label="Dismiss"
2851
+ class="shrink-0 rounded-md p-1 opacity-70 transition-opacity outline-none hover:opacity-100 focus-visible:ring-2 focus-visible:ring-current/40"
2852
+ (click)="dismiss()"
2853
+ >
2854
+ <svg
2855
+ viewBox="0 0 24 24"
2856
+ fill="none"
2857
+ stroke="currentColor"
2858
+ stroke-width="2"
2859
+ stroke-linecap="round"
2860
+ stroke-linejoin="round"
2861
+ aria-hidden="true"
2862
+ class="size-4"
2863
+ >
2864
+ <path d="M18 6 6 18" />
2865
+ <path d="m6 6 12 12" />
2866
+ </svg>
2867
+ </button>
2868
+ }
2869
+ `, isInline: true });
2870
+ }
2871
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiBanner, decorators: [{
2872
+ type: Component,
2873
+ args: [{
2874
+ selector: 'bui-banner',
2875
+ host: {
2876
+ 'data-slot': 'banner',
2877
+ role: 'region',
2878
+ 'aria-label': 'Announcement',
2879
+ '[hidden]': '!show()',
2880
+ '[class]': 'computedClass()',
2881
+ },
2882
+ template: `
2883
+ <div class="flex flex-1 flex-wrap items-center justify-center gap-x-3 gap-y-1">
2884
+ <ng-content />
2885
+ </div>
2886
+ @if (dismissible()) {
2887
+ <button
2888
+ type="button"
2889
+ aria-label="Dismiss"
2890
+ class="shrink-0 rounded-md p-1 opacity-70 transition-opacity outline-none hover:opacity-100 focus-visible:ring-2 focus-visible:ring-current/40"
2891
+ (click)="dismiss()"
2892
+ >
2893
+ <svg
2894
+ viewBox="0 0 24 24"
2895
+ fill="none"
2896
+ stroke="currentColor"
2897
+ stroke-width="2"
2898
+ stroke-linecap="round"
2899
+ stroke-linejoin="round"
2900
+ aria-hidden="true"
2901
+ class="size-4"
2902
+ >
2903
+ <path d="M18 6 6 18" />
2904
+ <path d="m6 6 12 12" />
2905
+ </svg>
2906
+ </button>
2907
+ }
2908
+ `,
2909
+ }]
2910
+ }], propDecorators: { tone: [{ type: i0.Input, args: [{ isSignal: true, alias: "tone", required: false }] }], dismissible: [{ type: i0.Input, args: [{ isSignal: true, alias: "dismissible", required: false }] }], persistKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "persistKey", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
2911
+
2253
2912
  /*
2254
2913
  * Public API Surface of ng-blatui
2255
2914
  */
@@ -2258,5 +2917,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
2258
2917
  * Generated bundle index. Do not edit.
2259
2918
  */
2260
2919
 
2261
- export { BuiAccordion, BuiAccordionContent, BuiAccordionItem, BuiAccordionTrigger, BuiAlert, BuiAlertDescription, BuiAlertTitle, BuiAspectRatio, BuiAvatar, BuiBadge, BuiBreadcrumb, BuiBreadcrumbEllipsis, BuiBreadcrumbItem, BuiBreadcrumbLink, BuiBreadcrumbList, BuiBreadcrumbPage, BuiBreadcrumbSeparator, BuiButton, BuiButtonGroup, BuiButtonGroupText, BuiCard, BuiCardAction, BuiCardContent, BuiCardDescription, BuiCardFooter, BuiCardHeader, BuiCardTitle, BuiCheckbox, BuiDialogContent, BuiDialogDescription, BuiDialogFooter, BuiDialogHeader, BuiDialogTitle, BuiInput, BuiKbd, BuiLabel, BuiProgress, BuiRadioGroup, BuiRadioGroupItem, BuiSeparator, BuiSkeleton, BuiSwitch, BuiTabList, BuiTabPanel, BuiTabTrigger, BuiTabs, BuiTextarea, BuiThemeCustomizer, BuiTooltip, BuiTooltipContent, THEME_TOKENS, ThemeStore, buttonVariants, cn };
2920
+ export { BuiAccordion, BuiAccordionContent, BuiAccordionItem, BuiAccordionTrigger, BuiAlert, BuiAlertDescription, BuiAlertTitle, BuiAspectRatio, BuiAvatar, BuiBadge, BuiBanner, BuiBreadcrumb, BuiBreadcrumbEllipsis, BuiBreadcrumbItem, BuiBreadcrumbLink, BuiBreadcrumbList, BuiBreadcrumbPage, BuiBreadcrumbSeparator, BuiButton, BuiButtonGroup, BuiButtonGroupText, BuiCard, BuiCardAction, BuiCardContent, BuiCardDescription, BuiCardFooter, BuiCardHeader, BuiCardTitle, BuiCheckbox, BuiCollapsible, BuiCollapsibleContent, BuiCollapsibleTrigger, BuiContainer, BuiCopyButton, BuiDialogContent, BuiDialogDescription, BuiDialogFooter, BuiDialogHeader, BuiDialogTitle, BuiEmpty, BuiEmptyContent, BuiEmptyDescription, BuiEmptyHeader, BuiEmptyMedia, BuiEmptyTitle, BuiField, BuiFieldContent, BuiFieldDescription, BuiFieldError, BuiFieldGroup, BuiFieldLabel, BuiFieldLegend, BuiFieldSeparator, BuiFieldSet, BuiFieldTitle, BuiInput, BuiKbd, BuiLabel, BuiProgress, BuiRadioGroup, BuiRadioGroupItem, BuiSeparator, BuiSkeleton, BuiSpinner, BuiSwitch, BuiTabList, BuiTabPanel, BuiTabTrigger, BuiTabs, BuiTextarea, BuiThemeCustomizer, BuiToggle, BuiTooltip, BuiTooltipContent, THEME_TOKENS, ThemeStore, buttonVariants, cn, toggleVariants };
2262
2921
  //# sourceMappingURL=ng-blatui.mjs.map