ng-blatui 1.28.1 → 1.29.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.
@@ -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 { input, computed, Directive, Component, signal, model, forwardRef, inject, PLATFORM_ID, effect, Injectable, ElementRef, ViewContainerRef, viewChild, afterNextRender, output, linkedSignal, ViewEncapsulation, DestroyRef } from '@angular/core';
4
+ import { InjectionToken, makeEnvironmentProviders, inject, computed, input, Directive, Component, signal, model, forwardRef, PLATFORM_ID, effect, Injectable, ElementRef, ViewContainerRef, viewChild, afterNextRender, output, linkedSignal, ViewEncapsulation, DestroyRef } from '@angular/core';
5
5
  import { cva } from 'class-variance-authority';
6
6
  import { NG_VALUE_ACCESSOR } from '@angular/forms';
7
7
  export { AccordionContent, AccordionGroup, AccordionPanel, AccordionTrigger, ɵɵDeferredContent, ɵɵDeferredContentAware } from '@angular/aria/accordion';
@@ -25,6 +25,104 @@ function cn(...inputs) {
25
25
  return twMerge(clsx(inputs));
26
26
  }
27
27
 
28
+ /** Built-in English defaults — used whenever no input or provider overrides a key. */
29
+ const BUI_DEFAULT_LABELS = {
30
+ backToTop: 'Back to top',
31
+ bannerDismiss: 'Dismiss',
32
+ bannerAnnouncement: 'Announcement',
33
+ cookieConsent: 'Cookie consent',
34
+ pagination: 'pagination',
35
+ paginationMore: 'More pages',
36
+ resizableHandle: 'Resize panel',
37
+ spinnerLoading: 'Loading',
38
+ topProgressLoading: 'Page loading',
39
+ audioPlayerSeek: 'Seek',
40
+ audioPlayerPlay: 'Play',
41
+ audioPlayerPause: 'Pause',
42
+ audioPlayerMute: 'Mute',
43
+ audioPlayerUnmute: 'Unmute',
44
+ breadcrumb: 'breadcrumb',
45
+ breadcrumbMore: 'More',
46
+ calendarPreviousMonth: 'Previous month',
47
+ calendarMonth: 'Month',
48
+ calendarYear: 'Year',
49
+ calendarNextMonth: 'Next month',
50
+ carouselPrevious: 'Previous slide',
51
+ carouselNext: 'Next slide',
52
+ carouselGoToSlide: 'Go to slide',
53
+ codeBlockCopy: 'Copy code',
54
+ codeBlockCopyShort: 'Copy',
55
+ codeBlockCopied: 'Copied',
56
+ colorPickerPick: 'Pick a color',
57
+ colorPickerHex: 'Color hex value',
58
+ comparisonSliderPosition: 'Comparison position',
59
+ comparisonTableIncluded: 'Included',
60
+ comparisonTableNotIncluded: 'Not included',
61
+ dataTableSearch: 'Search',
62
+ dataTableSelectAll: 'Select all rows',
63
+ dataTableSelectRow: 'Select row',
64
+ dock: 'Dock',
65
+ fileUploadDropzone: 'Click to upload or drag & drop',
66
+ fileUploadRemove: 'Remove file',
67
+ miniCartTrigger: 'Cart',
68
+ miniCart: 'Shopping cart',
69
+ notificationCenter: 'Notifications',
70
+ notificationCenterUnread: 'Unread',
71
+ notificationCenterMarkAllRead: 'Mark all read',
72
+ notificationCenterEmpty: 'No notifications',
73
+ numberInputDecrease: 'Decrease',
74
+ numberInputIncrease: 'Increase',
75
+ phoneInputCountry: 'Country code',
76
+ phoneInputNumber: 'Phone number',
77
+ productCardWishlist: 'Add to wishlist',
78
+ promptInputAttach: 'Attach file',
79
+ promptInputSend: 'Send',
80
+ quantitySelectorDecrease: 'Decrease quantity',
81
+ quantitySelectorIncrease: 'Increase quantity',
82
+ repeaterRemove: 'Remove row',
83
+ richTextEditorFormatting: 'Formatting',
84
+ scrollspy: 'On this page',
85
+ sonner: 'Notifications',
86
+ sonnerDismiss: 'Dismiss notification',
87
+ themeCustomizer: 'Theme customizer',
88
+ treeTableToggle: 'Toggle row',
89
+ videoPlay: 'Play video',
90
+ };
91
+ /**
92
+ * App-wide overrides for {@link BuiLabels}. Set it with {@link provideBuiLabels}.
93
+ * Components read it through {@link buiLabel}; anything left unset falls back to
94
+ * {@link BUI_DEFAULT_LABELS}.
95
+ */
96
+ const BUI_LABELS = new InjectionToken('BUI_LABELS');
97
+ /**
98
+ * Provide global overrides (typically translations) for ng-blatui's built-in
99
+ * labels. Add to your app config:
100
+ *
101
+ * ```ts
102
+ * providers: [provideBuiLabels({ bannerDismiss: 'Fermer', fileUploadRemove: 'Supprimer le fichier' })]
103
+ * ```
104
+ *
105
+ * Pass only the keys you want to change; the rest keep their English defaults.
106
+ */
107
+ function provideBuiLabels(labels) {
108
+ return makeEnvironmentProviders([{ provide: BUI_LABELS, useValue: labels }]);
109
+ }
110
+ /**
111
+ * Resolve a label, most-specific wins:
112
+ * per-instance input → global {@link provideBuiLabels} override → built-in English.
113
+ *
114
+ * Call from an injection context (a component field initializer):
115
+ *
116
+ * ```ts
117
+ * readonly dismissLabel = input<string>();
118
+ * protected readonly dismissText = buiLabel('bannerDismiss', this.dismissLabel);
119
+ * ```
120
+ */
121
+ function buiLabel(key, override) {
122
+ const overrides = inject(BUI_LABELS, { optional: true });
123
+ return computed(() => override() ?? overrides?.[key] ?? BUI_DEFAULT_LABELS[key]);
124
+ }
125
+
28
126
  const buttonVariants = cva("inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none 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 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", {
29
127
  variants: {
30
128
  variant: {
@@ -1463,6 +1561,9 @@ const FONTS = [
1463
1561
  * through {@link ThemeStore}, then exports a paste-ready stylesheet via "Copy CSS".
1464
1562
  */
1465
1563
  class BuiThemeCustomizer {
1564
+ ariaLabel = input(/* @ts-ignore */
1565
+ ...(ngDevMode ? [undefined, { debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
1566
+ ariaLabelText = buiLabel('themeCustomizer', this.ariaLabel);
1466
1567
  theme = inject(ThemeStore);
1467
1568
  open = signal(false, /* @ts-ignore */
1468
1569
  ...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
@@ -1544,7 +1645,7 @@ class BuiThemeCustomizer {
1544
1645
  }
1545
1646
  }
1546
1647
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiThemeCustomizer, deps: [], target: i0.ɵɵFactoryTarget.Component });
1547
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiThemeCustomizer, isStandalone: true, selector: "bui-theme-customizer", host: { attributes: { "data-slot": "theme-customizer" } }, ngImport: i0, template: `
1648
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiThemeCustomizer, isStandalone: true, selector: "bui-theme-customizer", inputs: { ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "theme-customizer" } }, ngImport: i0, template: `
1548
1649
  <button
1549
1650
  buiButton
1550
1651
  variant="outline"
@@ -1559,7 +1660,7 @@ class BuiThemeCustomizer {
1559
1660
  @if (open()) {
1560
1661
  <div
1561
1662
  role="dialog"
1562
- aria-label="Theme customizer"
1663
+ [attr.aria-label]="ariaLabelText()"
1563
1664
  class="fixed right-4 bottom-16 z-50 max-h-[80vh] w-[340px] space-y-5 overflow-y-auto rounded-lg border bg-popover p-4 text-popover-foreground shadow-lg"
1564
1665
  >
1565
1666
  <div class="flex items-center justify-between">
@@ -1783,7 +1884,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
1783
1884
  @if (open()) {
1784
1885
  <div
1785
1886
  role="dialog"
1786
- aria-label="Theme customizer"
1887
+ [attr.aria-label]="ariaLabelText()"
1787
1888
  class="fixed right-4 bottom-16 z-50 max-h-[80vh] w-[340px] space-y-5 overflow-y-auto rounded-lg border bg-popover p-4 text-popover-foreground shadow-lg"
1788
1889
  >
1789
1890
  <div class="flex items-center justify-between">
@@ -1986,7 +2087,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
1986
2087
  }
1987
2088
  `,
1988
2089
  }]
1989
- }] });
2090
+ }], propDecorators: { ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }] } });
1990
2091
 
1991
2092
  // eslint-disable-next-line @typescript-eslint/no-empty-function
1992
2093
  const noop$g = () => { };
@@ -2234,16 +2335,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
2234
2335
 
2235
2336
  /** Breadcrumb navigation landmark (`<nav aria-label="breadcrumb">`). */
2236
2337
  class BuiBreadcrumb {
2338
+ label = input(/* @ts-ignore */
2339
+ ...(ngDevMode ? [undefined, { debugName: "label" }] : /* istanbul ignore next */ []));
2340
+ labelText = buiLabel('breadcrumb', this.label);
2237
2341
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiBreadcrumb, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2238
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.2", type: BuiBreadcrumb, isStandalone: true, selector: "nav[buiBreadcrumb]", host: { attributes: { "aria-label": "breadcrumb", "data-slot": "breadcrumb" } }, ngImport: i0 });
2342
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: BuiBreadcrumb, isStandalone: true, selector: "nav[buiBreadcrumb]", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "breadcrumb" }, properties: { "attr.aria-label": "labelText()" } }, ngImport: i0 });
2239
2343
  }
2240
2344
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiBreadcrumb, decorators: [{
2241
2345
  type: Directive,
2242
2346
  args: [{
2243
2347
  selector: 'nav[buiBreadcrumb]',
2244
- host: { 'aria-label': 'breadcrumb', 'data-slot': 'breadcrumb' },
2348
+ host: { '[attr.aria-label]': 'labelText()', 'data-slot': 'breadcrumb' },
2245
2349
  }]
2246
- }] });
2350
+ }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }] } });
2247
2351
  class BuiBreadcrumbList {
2248
2352
  userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
2249
2353
  computedClass = computed(() => cn('flex flex-wrap items-center gap-1.5 text-sm break-words text-muted-foreground sm:gap-2.5', this.userClass()), /* @ts-ignore */
@@ -2359,10 +2463,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
2359
2463
  /** Collapsed breadcrumb indicator (ellipsis). */
2360
2464
  class BuiBreadcrumbEllipsis {
2361
2465
  userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
2466
+ moreLabel = input(/* @ts-ignore */
2467
+ ...(ngDevMode ? [undefined, { debugName: "moreLabel" }] : /* istanbul ignore next */ []));
2468
+ moreText = buiLabel('breadcrumbMore', this.moreLabel);
2362
2469
  computedClass = computed(() => cn('flex size-9 items-center justify-center', this.userClass()), /* @ts-ignore */
2363
2470
  ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
2364
2471
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiBreadcrumbEllipsis, deps: [], target: i0.ɵɵFactoryTarget.Component });
2365
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.2", type: BuiBreadcrumbEllipsis, isStandalone: true, selector: "li[buiBreadcrumbEllipsis]", inputs: { userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "breadcrumb-ellipsis", "role": "presentation", "aria-hidden": "true" }, properties: { "class": "computedClass()" } }, ngImport: i0, template: `
2472
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.2", type: BuiBreadcrumbEllipsis, isStandalone: true, selector: "li[buiBreadcrumbEllipsis]", inputs: { userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, moreLabel: { classPropertyName: "moreLabel", publicName: "moreLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "breadcrumb-ellipsis", "role": "presentation", "aria-hidden": "true" }, properties: { "class": "computedClass()" } }, ngImport: i0, template: `
2366
2473
  <svg
2367
2474
  viewBox="0 0 24 24"
2368
2475
  fill="none"
@@ -2376,7 +2483,7 @@ class BuiBreadcrumbEllipsis {
2376
2483
  <circle cx="19" cy="12" r="1" />
2377
2484
  <circle cx="5" cy="12" r="1" />
2378
2485
  </svg>
2379
- <span class="sr-only">More</span>
2486
+ <span class="sr-only">{{ moreText() }}</span>
2380
2487
  `, isInline: true });
2381
2488
  }
2382
2489
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiBreadcrumbEllipsis, decorators: [{
@@ -2403,10 +2510,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
2403
2510
  <circle cx="19" cy="12" r="1" />
2404
2511
  <circle cx="5" cy="12" r="1" />
2405
2512
  </svg>
2406
- <span class="sr-only">More</span>
2513
+ <span class="sr-only">{{ moreText() }}</span>
2407
2514
  `,
2408
2515
  }]
2409
- }], propDecorators: { userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
2516
+ }], propDecorators: { userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], moreLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "moreLabel", required: false }] }] } });
2410
2517
 
2411
2518
  /** Keyboard key styling, applied to a native `<kbd>` element. */
2412
2519
  class BuiKbd {
@@ -2914,10 +3021,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
2914
3021
  /** A spinning loading indicator (`role="status"`). */
2915
3022
  class BuiSpinner {
2916
3023
  userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
3024
+ label = input(/* @ts-ignore */
3025
+ ...(ngDevMode ? [undefined, { debugName: "label" }] : /* istanbul ignore next */ []));
3026
+ labelText = buiLabel('spinnerLoading', this.label);
2917
3027
  computedClass = computed(() => cn('inline-block size-4 animate-spin', this.userClass()), /* @ts-ignore */
2918
3028
  ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
2919
3029
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiSpinner, deps: [], target: i0.ɵɵFactoryTarget.Component });
2920
- 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: `
3030
+ 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 }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "spinner", "role": "status" }, properties: { "attr.aria-label": "labelText()", "class": "computedClass()" } }, ngImport: i0, template: `
2921
3031
  <svg
2922
3032
  viewBox="0 0 24 24"
2923
3033
  fill="none"
@@ -2939,7 +3049,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
2939
3049
  host: {
2940
3050
  'data-slot': 'spinner',
2941
3051
  role: 'status',
2942
- 'aria-label': 'Loading',
3052
+ '[attr.aria-label]': 'labelText()',
2943
3053
  '[class]': 'computedClass()',
2944
3054
  },
2945
3055
  template: `
@@ -2957,7 +3067,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
2957
3067
  </svg>
2958
3068
  `,
2959
3069
  }]
2960
- }], propDecorators: { userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
3070
+ }], propDecorators: { userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }] } });
2961
3071
 
2962
3072
  /** Copy-to-clipboard button: copies `value`, flips to a check, announces "Copied". */
2963
3073
  class BuiCopyButton {
@@ -3086,6 +3196,12 @@ class BuiBanner {
3086
3196
  persistKey = input(undefined, /* @ts-ignore */
3087
3197
  ...(ngDevMode ? [{ debugName: "persistKey" }] : /* istanbul ignore next */ []));
3088
3198
  userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
3199
+ announcementLabel = input(/* @ts-ignore */
3200
+ ...(ngDevMode ? [undefined, { debugName: "announcementLabel" }] : /* istanbul ignore next */ []));
3201
+ dismissLabel = input(/* @ts-ignore */
3202
+ ...(ngDevMode ? [undefined, { debugName: "dismissLabel" }] : /* istanbul ignore next */ []));
3203
+ announcementText = buiLabel('bannerAnnouncement', this.announcementLabel);
3204
+ dismissText = buiLabel('bannerDismiss', this.dismissLabel);
3089
3205
  show = signal(true, /* @ts-ignore */
3090
3206
  ...(ngDevMode ? [{ debugName: "show" }] : /* istanbul ignore next */ []));
3091
3207
  isBrowser = isPlatformBrowser(inject(PLATFORM_ID));
@@ -3105,14 +3221,14 @@ class BuiBanner {
3105
3221
  }
3106
3222
  }
3107
3223
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiBanner, deps: [], target: i0.ɵɵFactoryTarget.Component });
3108
- 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: `
3224
+ 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 }, announcementLabel: { classPropertyName: "announcementLabel", publicName: "announcementLabel", isSignal: true, isRequired: false, transformFunction: null }, dismissLabel: { classPropertyName: "dismissLabel", publicName: "dismissLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "banner", "role": "region" }, properties: { "attr.aria-label": "announcementText()", "hidden": "!show()", "class": "computedClass()" } }, ngImport: i0, template: `
3109
3225
  <div class="flex flex-1 flex-wrap items-center justify-center gap-x-3 gap-y-1">
3110
3226
  <ng-content />
3111
3227
  </div>
3112
3228
  @if (dismissible()) {
3113
3229
  <button
3114
3230
  type="button"
3115
- aria-label="Dismiss"
3231
+ [attr.aria-label]="dismissText()"
3116
3232
  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"
3117
3233
  (click)="dismiss()"
3118
3234
  >
@@ -3140,7 +3256,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
3140
3256
  host: {
3141
3257
  'data-slot': 'banner',
3142
3258
  role: 'region',
3143
- 'aria-label': 'Announcement',
3259
+ '[attr.aria-label]': 'announcementText()',
3144
3260
  '[hidden]': '!show()',
3145
3261
  '[class]': 'computedClass()',
3146
3262
  },
@@ -3151,7 +3267,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
3151
3267
  @if (dismissible()) {
3152
3268
  <button
3153
3269
  type="button"
3154
- aria-label="Dismiss"
3270
+ [attr.aria-label]="dismissText()"
3155
3271
  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"
3156
3272
  (click)="dismiss()"
3157
3273
  >
@@ -3172,7 +3288,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
3172
3288
  }
3173
3289
  `,
3174
3290
  }]
3175
- }], 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 }] }] } });
3291
+ }], 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 }] }], announcementLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "announcementLabel", required: false }] }], dismissLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "dismissLabel", required: false }] }] } });
3176
3292
 
3177
3293
  /** Scroll/border wrapper around a table. `variant="card"` adds a bordered card. */
3178
3294
  class BuiTableContainer {
@@ -3400,11 +3516,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
3400
3516
 
3401
3517
  /** Pagination navigation landmark. */
3402
3518
  class BuiPagination {
3519
+ ariaLabel = input(/* @ts-ignore */
3520
+ ...(ngDevMode ? [undefined, { debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
3403
3521
  userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
3522
+ ariaLabelText = buiLabel('pagination', this.ariaLabel);
3404
3523
  computedClass = computed(() => cn('mx-auto flex w-full justify-center', this.userClass()), /* @ts-ignore */
3405
3524
  ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
3406
3525
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiPagination, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3407
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: BuiPagination, isStandalone: true, selector: "nav[buiPagination]", inputs: { userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "navigation", "aria-label": "pagination", "data-slot": "pagination" }, properties: { "class": "computedClass()" } }, ngImport: i0 });
3526
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: BuiPagination, isStandalone: true, selector: "nav[buiPagination]", inputs: { ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "navigation", "data-slot": "pagination" }, properties: { "attr.aria-label": "ariaLabelText()", "class": "computedClass()" } }, ngImport: i0 });
3408
3527
  }
3409
3528
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiPagination, decorators: [{
3410
3529
  type: Directive,
@@ -3412,12 +3531,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
3412
3531
  selector: 'nav[buiPagination]',
3413
3532
  host: {
3414
3533
  role: 'navigation',
3415
- 'aria-label': 'pagination',
3534
+ '[attr.aria-label]': 'ariaLabelText()',
3416
3535
  'data-slot': 'pagination',
3417
3536
  '[class]': 'computedClass()',
3418
3537
  },
3419
3538
  }]
3420
- }], propDecorators: { userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
3539
+ }], propDecorators: { ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
3421
3540
  class BuiPaginationContent {
3422
3541
  userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
3423
3542
  computedClass = computed(() => cn('flex flex-row items-center gap-1', this.userClass()), /* @ts-ignore */
@@ -3479,10 +3598,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
3479
3598
  /** Ellipsis indicator for skipped pages. */
3480
3599
  class BuiPaginationEllipsis {
3481
3600
  userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
3601
+ moreLabel = input(/* @ts-ignore */
3602
+ ...(ngDevMode ? [undefined, { debugName: "moreLabel" }] : /* istanbul ignore next */ []));
3603
+ moreText = buiLabel('paginationMore', this.moreLabel);
3482
3604
  computedClass = computed(() => cn('flex size-9 items-center justify-center', this.userClass()), /* @ts-ignore */
3483
3605
  ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
3484
3606
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiPaginationEllipsis, deps: [], target: i0.ɵɵFactoryTarget.Component });
3485
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.2", type: BuiPaginationEllipsis, isStandalone: true, selector: "bui-pagination-ellipsis", inputs: { userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "pagination-ellipsis", "aria-hidden": "true" }, properties: { "class": "computedClass()" } }, ngImport: i0, template: `
3607
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.2", type: BuiPaginationEllipsis, isStandalone: true, selector: "bui-pagination-ellipsis", inputs: { userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, moreLabel: { classPropertyName: "moreLabel", publicName: "moreLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "pagination-ellipsis", "aria-hidden": "true" }, properties: { "class": "computedClass()" } }, ngImport: i0, template: `
3486
3608
  <svg
3487
3609
  viewBox="0 0 24 24"
3488
3610
  fill="none"
@@ -3496,7 +3618,7 @@ class BuiPaginationEllipsis {
3496
3618
  <circle cx="19" cy="12" r="1" />
3497
3619
  <circle cx="5" cy="12" r="1" />
3498
3620
  </svg>
3499
- <span class="sr-only">More pages</span>
3621
+ <span class="sr-only">{{ moreText() }}</span>
3500
3622
  `, isInline: true });
3501
3623
  }
3502
3624
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiPaginationEllipsis, decorators: [{
@@ -3518,10 +3640,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
3518
3640
  <circle cx="19" cy="12" r="1" />
3519
3641
  <circle cx="5" cy="12" r="1" />
3520
3642
  </svg>
3521
- <span class="sr-only">More pages</span>
3643
+ <span class="sr-only">{{ moreText() }}</span>
3522
3644
  `,
3523
3645
  }]
3524
- }], propDecorators: { userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
3646
+ }], propDecorators: { userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], moreLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "moreLabel", required: false }] }] } });
3525
3647
 
3526
3648
  const POPOVER_POSITIONS = {
3527
3649
  bottom: { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: 4 },
@@ -4260,6 +4382,15 @@ class BuiCodeBlock {
4260
4382
  filename = input(null, /* @ts-ignore */
4261
4383
  ...(ngDevMode ? [{ debugName: "filename" }] : /* istanbul ignore next */ []));
4262
4384
  userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
4385
+ copyLabel = input(/* @ts-ignore */
4386
+ ...(ngDevMode ? [undefined, { debugName: "copyLabel" }] : /* istanbul ignore next */ []));
4387
+ copyShortLabel = input(/* @ts-ignore */
4388
+ ...(ngDevMode ? [undefined, { debugName: "copyShortLabel" }] : /* istanbul ignore next */ []));
4389
+ copiedLabel = input(/* @ts-ignore */
4390
+ ...(ngDevMode ? [undefined, { debugName: "copiedLabel" }] : /* istanbul ignore next */ []));
4391
+ copyText = buiLabel('codeBlockCopy', this.copyLabel);
4392
+ copyShortText = buiLabel('codeBlockCopyShort', this.copyShortLabel);
4393
+ copiedText = buiLabel('codeBlockCopied', this.copiedLabel);
4263
4394
  copied = signal(false, /* @ts-ignore */
4264
4395
  ...(ngDevMode ? [{ debugName: "copied" }] : /* istanbul ignore next */ []));
4265
4396
  computedClass = computed(() => cn('group/code-block relative block overflow-hidden rounded-lg border border-zinc-800 bg-zinc-950 text-zinc-100', this.userClass()), /* @ts-ignore */
@@ -4277,27 +4408,27 @@ class BuiCodeBlock {
4277
4408
  }
4278
4409
  }
4279
4410
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiCodeBlock, deps: [], target: i0.ɵɵFactoryTarget.Component });
4280
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiCodeBlock, isStandalone: true, selector: "bui-code-block", inputs: { code: { classPropertyName: "code", publicName: "code", isSignal: true, isRequired: false, transformFunction: null }, filename: { classPropertyName: "filename", publicName: "filename", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "code-block" }, properties: { "class": "computedClass()" } }, ngImport: i0, template: `
4411
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiCodeBlock, isStandalone: true, selector: "bui-code-block", inputs: { code: { classPropertyName: "code", publicName: "code", isSignal: true, isRequired: false, transformFunction: null }, filename: { classPropertyName: "filename", publicName: "filename", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, copyLabel: { classPropertyName: "copyLabel", publicName: "copyLabel", isSignal: true, isRequired: false, transformFunction: null }, copyShortLabel: { classPropertyName: "copyShortLabel", publicName: "copyShortLabel", isSignal: true, isRequired: false, transformFunction: null }, copiedLabel: { classPropertyName: "copiedLabel", publicName: "copiedLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "code-block" }, properties: { "class": "computedClass()" } }, ngImport: i0, template: `
4281
4412
  @if (filename()) {
4282
4413
  <div class="flex items-center justify-between border-b border-white/10 px-4 py-2">
4283
4414
  <span class="font-mono text-xs text-zinc-400">{{ filename() }}</span>
4284
4415
  <button
4285
4416
  type="button"
4286
- aria-label="Copy code"
4417
+ [attr.aria-label]="copyText()"
4287
4418
  class="text-xs text-zinc-400 transition-colors hover:text-zinc-100"
4288
4419
  (click)="copy()"
4289
4420
  >
4290
- {{ copied() ? 'Copied' : 'Copy' }}
4421
+ {{ copied() ? copiedText() : copyShortText() }}
4291
4422
  </button>
4292
4423
  </div>
4293
4424
  } @else {
4294
4425
  <button
4295
4426
  type="button"
4296
- aria-label="Copy code"
4427
+ [attr.aria-label]="copyText()"
4297
4428
  class="absolute end-2 top-2 z-10 rounded-md px-1.5 py-1 text-xs text-zinc-400 opacity-0 transition-all group-hover/code-block:opacity-100 hover:bg-white/10 hover:text-zinc-100 focus-visible:opacity-100"
4298
4429
  (click)="copy()"
4299
4430
  >
4300
- {{ copied() ? 'Copied' : 'Copy' }}
4431
+ {{ copied() ? copiedText() : copyShortText() }}
4301
4432
  </button>
4302
4433
  }
4303
4434
  <pre
@@ -4316,21 +4447,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
4316
4447
  <span class="font-mono text-xs text-zinc-400">{{ filename() }}</span>
4317
4448
  <button
4318
4449
  type="button"
4319
- aria-label="Copy code"
4450
+ [attr.aria-label]="copyText()"
4320
4451
  class="text-xs text-zinc-400 transition-colors hover:text-zinc-100"
4321
4452
  (click)="copy()"
4322
4453
  >
4323
- {{ copied() ? 'Copied' : 'Copy' }}
4454
+ {{ copied() ? copiedText() : copyShortText() }}
4324
4455
  </button>
4325
4456
  </div>
4326
4457
  } @else {
4327
4458
  <button
4328
4459
  type="button"
4329
- aria-label="Copy code"
4460
+ [attr.aria-label]="copyText()"
4330
4461
  class="absolute end-2 top-2 z-10 rounded-md px-1.5 py-1 text-xs text-zinc-400 opacity-0 transition-all group-hover/code-block:opacity-100 hover:bg-white/10 hover:text-zinc-100 focus-visible:opacity-100"
4331
4462
  (click)="copy()"
4332
4463
  >
4333
- {{ copied() ? 'Copied' : 'Copy' }}
4464
+ {{ copied() ? copiedText() : copyShortText() }}
4334
4465
  </button>
4335
4466
  }
4336
4467
  <pre
@@ -4338,7 +4469,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
4338
4469
  ><code class="font-mono">{{ code() }}</code></pre>
4339
4470
  `,
4340
4471
  }]
4341
- }], propDecorators: { code: [{ type: i0.Input, args: [{ isSignal: true, alias: "code", required: false }] }], filename: [{ type: i0.Input, args: [{ isSignal: true, alias: "filename", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
4472
+ }], propDecorators: { code: [{ type: i0.Input, args: [{ isSignal: true, alias: "code", required: false }] }], filename: [{ type: i0.Input, args: [{ isSignal: true, alias: "filename", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], copyLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "copyLabel", required: false }] }], copyShortLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "copyShortLabel", required: false }] }], copiedLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "copiedLabel", required: false }] }] } });
4342
4473
 
4343
4474
  // eslint-disable-next-line @typescript-eslint/no-empty-function
4344
4475
  const noop$e = () => { };
@@ -4805,7 +4936,13 @@ class BuiQuantitySelector {
4805
4936
  ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
4806
4937
  ariaLabel = input('Quantity', /* @ts-ignore */
4807
4938
  ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
4939
+ decreaseLabel = input(/* @ts-ignore */
4940
+ ...(ngDevMode ? [undefined, { debugName: "decreaseLabel" }] : /* istanbul ignore next */ []));
4941
+ increaseLabel = input(/* @ts-ignore */
4942
+ ...(ngDevMode ? [undefined, { debugName: "increaseLabel" }] : /* istanbul ignore next */ []));
4808
4943
  userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
4944
+ decreaseText = buiLabel('quantitySelectorDecrease', this.decreaseLabel);
4945
+ increaseText = buiLabel('quantitySelectorIncrease', this.increaseLabel);
4809
4946
  atMin = computed(() => this.value() <= this.min(), /* @ts-ignore */
4810
4947
  ...(ngDevMode ? [{ debugName: "atMin" }] : /* istanbul ignore next */ []));
4811
4948
  atMax = computed(() => {
@@ -4848,10 +4985,10 @@ class BuiQuantitySelector {
4848
4985
  return result;
4849
4986
  }
4850
4987
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiQuantitySelector, deps: [], target: i0.ɵɵFactoryTarget.Component });
4851
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.2", type: BuiQuantitySelector, isStandalone: true, selector: "bui-quantity-selector", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, step: { classPropertyName: "step", publicName: "step", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { attributes: { "data-slot": "quantity-selector", "role": "group" }, properties: { "class": "computedClass()" } }, ngImport: i0, template: `
4988
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.2", type: BuiQuantitySelector, isStandalone: true, selector: "bui-quantity-selector", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, step: { classPropertyName: "step", publicName: "step", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, decreaseLabel: { classPropertyName: "decreaseLabel", publicName: "decreaseLabel", isSignal: true, isRequired: false, transformFunction: null }, increaseLabel: { classPropertyName: "increaseLabel", publicName: "increaseLabel", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { attributes: { "data-slot": "quantity-selector", "role": "group" }, properties: { "class": "computedClass()" } }, ngImport: i0, template: `
4852
4989
  <button
4853
4990
  type="button"
4854
- aria-label="Decrease quantity"
4991
+ [attr.aria-label]="decreaseText()"
4855
4992
  [disabled]="disabled() || atMin()"
4856
4993
  [class]="btnClass('e')"
4857
4994
  (click)="dec()"
@@ -4882,7 +5019,7 @@ class BuiQuantitySelector {
4882
5019
  />
4883
5020
  <button
4884
5021
  type="button"
4885
- aria-label="Increase quantity"
5022
+ [attr.aria-label]="increaseText()"
4886
5023
  [disabled]="disabled() || atMax()"
4887
5024
  [class]="btnClass('s')"
4888
5025
  (click)="inc()"
@@ -4908,7 +5045,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
4908
5045
  template: `
4909
5046
  <button
4910
5047
  type="button"
4911
- aria-label="Decrease quantity"
5048
+ [attr.aria-label]="decreaseText()"
4912
5049
  [disabled]="disabled() || atMin()"
4913
5050
  [class]="btnClass('e')"
4914
5051
  (click)="dec()"
@@ -4939,7 +5076,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
4939
5076
  />
4940
5077
  <button
4941
5078
  type="button"
4942
- aria-label="Increase quantity"
5079
+ [attr.aria-label]="increaseText()"
4943
5080
  [disabled]="disabled() || atMax()"
4944
5081
  [class]="btnClass('s')"
4945
5082
  (click)="inc()"
@@ -4957,7 +5094,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
4957
5094
  </button>
4958
5095
  `,
4959
5096
  }]
4960
- }], 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 }] }], step: [{ type: i0.Input, args: [{ isSignal: true, alias: "step", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
5097
+ }], 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 }] }], step: [{ type: i0.Input, args: [{ isSignal: true, alias: "step", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], decreaseLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "decreaseLabel", required: false }] }], increaseLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "increaseLabel", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
4961
5098
 
4962
5099
  /**
4963
5100
  * Confirm dialog styling (`role="alertdialog"`). Open it with the CDK `Dialog` service
@@ -5552,6 +5689,12 @@ class BuiComparisonTable {
5552
5689
  featureLabel = input('Feature', /* @ts-ignore */
5553
5690
  ...(ngDevMode ? [{ debugName: "featureLabel" }] : /* istanbul ignore next */ []));
5554
5691
  userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
5692
+ includedLabel = input(/* @ts-ignore */
5693
+ ...(ngDevMode ? [undefined, { debugName: "includedLabel" }] : /* istanbul ignore next */ []));
5694
+ notIncludedLabel = input(/* @ts-ignore */
5695
+ ...(ngDevMode ? [undefined, { debugName: "notIncludedLabel" }] : /* istanbul ignore next */ []));
5696
+ includedText = buiLabel('comparisonTableIncluded', this.includedLabel);
5697
+ notIncludedText = buiLabel('comparisonTableNotIncluded', this.notIncludedLabel);
5555
5698
  highlightIndex = computed(() => {
5556
5699
  const highlight = this.highlight();
5557
5700
  if (typeof highlight === 'number') {
@@ -5563,7 +5706,7 @@ class BuiComparisonTable {
5563
5706
  computedClass = computed(() => cn('w-full overflow-x-auto rounded-xl border', this.userClass()), /* @ts-ignore */
5564
5707
  ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
5565
5708
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiComparisonTable, deps: [], target: i0.ɵɵFactoryTarget.Component });
5566
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiComparisonTable, isStandalone: true, selector: "bui-comparison-table", inputs: { tiers: { classPropertyName: "tiers", publicName: "tiers", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, highlight: { classPropertyName: "highlight", publicName: "highlight", isSignal: true, isRequired: false, transformFunction: null }, featureLabel: { classPropertyName: "featureLabel", publicName: "featureLabel", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "comparison-table" }, properties: { "class": "computedClass()" } }, ngImport: i0, template: `
5709
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiComparisonTable, isStandalone: true, selector: "bui-comparison-table", inputs: { tiers: { classPropertyName: "tiers", publicName: "tiers", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, highlight: { classPropertyName: "highlight", publicName: "highlight", isSignal: true, isRequired: false, transformFunction: null }, featureLabel: { classPropertyName: "featureLabel", publicName: "featureLabel", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, includedLabel: { classPropertyName: "includedLabel", publicName: "includedLabel", isSignal: true, isRequired: false, transformFunction: null }, notIncludedLabel: { classPropertyName: "notIncludedLabel", publicName: "notIncludedLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "comparison-table" }, properties: { "class": "computedClass()" } }, ngImport: i0, template: `
5567
5710
  <table class="w-full text-sm">
5568
5711
  <caption class="sr-only">
5569
5712
  {{
@@ -5604,13 +5747,13 @@ class BuiComparisonTable {
5604
5747
  stroke-width="2"
5605
5748
  stroke-linecap="round"
5606
5749
  stroke-linejoin="round"
5607
- aria-label="Included"
5750
+ [attr.aria-label]="includedText()"
5608
5751
  class="mx-auto size-4 text-primary"
5609
5752
  >
5610
5753
  <path d="M20 6 9 17l-5-5" />
5611
5754
  </svg>
5612
5755
  } @else if (value === false || value === null) {
5613
- <span class="text-muted-foreground" aria-label="Not included">—</span>
5756
+ <span class="text-muted-foreground" [attr.aria-label]="notIncludedText()">—</span>
5614
5757
  } @else {
5615
5758
  {{ value }}
5616
5759
  }
@@ -5668,13 +5811,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
5668
5811
  stroke-width="2"
5669
5812
  stroke-linecap="round"
5670
5813
  stroke-linejoin="round"
5671
- aria-label="Included"
5814
+ [attr.aria-label]="includedText()"
5672
5815
  class="mx-auto size-4 text-primary"
5673
5816
  >
5674
5817
  <path d="M20 6 9 17l-5-5" />
5675
5818
  </svg>
5676
5819
  } @else if (value === false || value === null) {
5677
- <span class="text-muted-foreground" aria-label="Not included">—</span>
5820
+ <span class="text-muted-foreground" [attr.aria-label]="notIncludedText()">—</span>
5678
5821
  } @else {
5679
5822
  {{ value }}
5680
5823
  }
@@ -5686,7 +5829,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
5686
5829
  </table>
5687
5830
  `,
5688
5831
  }]
5689
- }], propDecorators: { tiers: [{ type: i0.Input, args: [{ isSignal: true, alias: "tiers", required: false }] }], rows: [{ type: i0.Input, args: [{ isSignal: true, alias: "rows", required: false }] }], highlight: [{ type: i0.Input, args: [{ isSignal: true, alias: "highlight", required: false }] }], featureLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "featureLabel", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
5832
+ }], propDecorators: { tiers: [{ type: i0.Input, args: [{ isSignal: true, alias: "tiers", required: false }] }], rows: [{ type: i0.Input, args: [{ isSignal: true, alias: "rows", required: false }] }], highlight: [{ type: i0.Input, args: [{ isSignal: true, alias: "highlight", required: false }] }], featureLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "featureLabel", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], includedLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "includedLabel", required: false }] }], notIncludedLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "notIncludedLabel", required: false }] }] } });
5690
5833
 
5691
5834
  /**
5692
5835
  * A card that flips to reveal its back. Default content is the front; project the back
@@ -6308,6 +6451,9 @@ class BuiBackToTop {
6308
6451
  variant = input('primary', /* @ts-ignore */
6309
6452
  ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
6310
6453
  userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
6454
+ label = input(/* @ts-ignore */
6455
+ ...(ngDevMode ? [undefined, { debugName: "label" }] : /* istanbul ignore next */ []));
6456
+ labelText = buiLabel('backToTop', this.label);
6311
6457
  shown = signal(false, /* @ts-ignore */
6312
6458
  ...(ngDevMode ? [{ debugName: "shown" }] : /* istanbul ignore next */ []));
6313
6459
  variantClass = computed(() => VARIANTS$1[this.variant()], /* @ts-ignore */
@@ -6326,10 +6472,10 @@ class BuiBackToTop {
6326
6472
  globalThis.scrollTo({ top: 0, behavior: 'smooth' });
6327
6473
  }
6328
6474
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiBackToTop, deps: [], target: i0.ɵɵFactoryTarget.Component });
6329
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.2", type: BuiBackToTop, isStandalone: true, selector: "bui-back-to-top", inputs: { threshold: { classPropertyName: "threshold", publicName: "threshold", isSignal: true, isRequired: false, transformFunction: null }, 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": "back-to-top" }, listeners: { "window:scroll": "onScroll()" }, properties: { "hidden": "!shown()", "class": "computedClass()" } }, ngImport: i0, template: `
6475
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.2", type: BuiBackToTop, isStandalone: true, selector: "bui-back-to-top", inputs: { threshold: { classPropertyName: "threshold", publicName: "threshold", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "back-to-top" }, listeners: { "window:scroll": "onScroll()" }, properties: { "hidden": "!shown()", "class": "computedClass()" } }, ngImport: i0, template: `
6330
6476
  <button
6331
6477
  type="button"
6332
- aria-label="Back to top"
6478
+ [attr.aria-label]="labelText()"
6333
6479
  class="inline-flex size-10 items-center justify-center rounded-full shadow-md transition-colors outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50"
6334
6480
  [class]="variantClass()"
6335
6481
  (click)="toTop()"
@@ -6363,7 +6509,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
6363
6509
  template: `
6364
6510
  <button
6365
6511
  type="button"
6366
- aria-label="Back to top"
6512
+ [attr.aria-label]="labelText()"
6367
6513
  class="inline-flex size-10 items-center justify-center rounded-full shadow-md transition-colors outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50"
6368
6514
  [class]="variantClass()"
6369
6515
  (click)="toTop()"
@@ -6384,7 +6530,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
6384
6530
  </button>
6385
6531
  `,
6386
6532
  }]
6387
- }], ctorParameters: () => [], propDecorators: { threshold: [{ type: i0.Input, args: [{ isSignal: true, alias: "threshold", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
6533
+ }], ctorParameters: () => [], propDecorators: { threshold: [{ type: i0.Input, args: [{ isSignal: true, alias: "threshold", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }] } });
6388
6534
 
6389
6535
  // eslint-disable-next-line @typescript-eslint/no-empty-function
6390
6536
  const noop$a = () => { };
@@ -7764,6 +7910,12 @@ class BuiNumberInput {
7764
7910
  ariaLabel = input('', /* @ts-ignore */
7765
7911
  ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
7766
7912
  userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
7913
+ decreaseLabel = input(/* @ts-ignore */
7914
+ ...(ngDevMode ? [undefined, { debugName: "decreaseLabel" }] : /* istanbul ignore next */ []));
7915
+ increaseLabel = input(/* @ts-ignore */
7916
+ ...(ngDevMode ? [undefined, { debugName: "increaseLabel" }] : /* istanbul ignore next */ []));
7917
+ decreaseText = buiLabel('numberInputDecrease', this.decreaseLabel);
7918
+ increaseText = buiLabel('numberInputIncrease', this.increaseLabel);
7767
7919
  onChange = noop$9;
7768
7920
  onTouched = noop$9;
7769
7921
  btnClass = computed(() => cn(BTN, BTN_SIZE[this.size()]), /* @ts-ignore */
@@ -7815,7 +7967,7 @@ class BuiNumberInput {
7815
7967
  this.disabled.set(isDisabled);
7816
7968
  }
7817
7969
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiNumberInput, deps: [], target: i0.ɵɵFactoryTarget.Component });
7818
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.2", type: BuiNumberInput, isStandalone: true, selector: "bui-number-input", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, stepBy: { classPropertyName: "stepBy", publicName: "step", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", disabled: "disabledChange" }, host: { attributes: { "data-slot": "number-input" }, properties: { "class": "computedClass()" } }, providers: [
7970
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.2", type: BuiNumberInput, isStandalone: true, selector: "bui-number-input", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, stepBy: { classPropertyName: "stepBy", publicName: "step", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, decreaseLabel: { classPropertyName: "decreaseLabel", publicName: "decreaseLabel", isSignal: true, isRequired: false, transformFunction: null }, increaseLabel: { classPropertyName: "increaseLabel", publicName: "increaseLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", disabled: "disabledChange" }, host: { attributes: { "data-slot": "number-input" }, properties: { "class": "computedClass()" } }, providers: [
7819
7971
  { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => BuiNumberInput), multi: true },
7820
7972
  ], ngImport: i0, template: `
7821
7973
  <button
@@ -7823,7 +7975,7 @@ class BuiNumberInput {
7823
7975
  [class]="btnClass() + ' rounded-l-md'"
7824
7976
  (click)="step(-1)"
7825
7977
  [disabled]="disabled() || atMin()"
7826
- aria-label="Decrease"
7978
+ [attr.aria-label]="decreaseText()"
7827
7979
  >
7828
7980
  <svg
7829
7981
  viewBox="0 0 24 24"
@@ -7856,7 +8008,7 @@ class BuiNumberInput {
7856
8008
  [class]="btnClass() + ' rounded-r-md'"
7857
8009
  (click)="step(1)"
7858
8010
  [disabled]="disabled() || atMax()"
7859
- aria-label="Increase"
8011
+ [attr.aria-label]="increaseText()"
7860
8012
  >
7861
8013
  <svg
7862
8014
  viewBox="0 0 24 24"
@@ -7887,7 +8039,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
7887
8039
  [class]="btnClass() + ' rounded-l-md'"
7888
8040
  (click)="step(-1)"
7889
8041
  [disabled]="disabled() || atMin()"
7890
- aria-label="Decrease"
8042
+ [attr.aria-label]="decreaseText()"
7891
8043
  >
7892
8044
  <svg
7893
8045
  viewBox="0 0 24 24"
@@ -7920,7 +8072,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
7920
8072
  [class]="btnClass() + ' rounded-r-md'"
7921
8073
  (click)="step(1)"
7922
8074
  [disabled]="disabled() || atMax()"
7923
- aria-label="Increase"
8075
+ [attr.aria-label]="increaseText()"
7924
8076
  >
7925
8077
  <svg
7926
8078
  viewBox="0 0 24 24"
@@ -7937,7 +8089,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
7937
8089
  </button>
7938
8090
  `,
7939
8091
  }]
7940
- }], 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 }] }], stepBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "step", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }, { type: i0.Output, args: ["disabledChange"] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
8092
+ }], 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 }] }], stepBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "step", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }, { type: i0.Output, args: ["disabledChange"] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], decreaseLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "decreaseLabel", required: false }] }], increaseLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "increaseLabel", required: false }] }] } });
7941
8093
 
7942
8094
  /** A radio-group of product variants, rendered as pills or colour swatches. */
7943
8095
  class BuiVariantSelector {
@@ -8578,6 +8730,9 @@ class BuiProductCard {
8578
8730
  wishlist = input(false, /* @ts-ignore */
8579
8731
  ...(ngDevMode ? [{ debugName: "wishlist" }] : /* istanbul ignore next */ []));
8580
8732
  userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
8733
+ wishlistLabel = input(/* @ts-ignore */
8734
+ ...(ngDevMode ? [undefined, { debugName: "wishlistLabel" }] : /* istanbul ignore next */ []));
8735
+ wishlistText = buiLabel('productCardWishlist', this.wishlistLabel);
8581
8736
  wished = signal(false, /* @ts-ignore */
8582
8737
  ...(ngDevMode ? [{ debugName: "wished" }] : /* istanbul ignore next */ []));
8583
8738
  alt = computed(() => this.imageAlt() || this.title(), /* @ts-ignore */
@@ -8596,7 +8751,7 @@ class BuiProductCard {
8596
8751
  computedClass = computed(() => cn('group flex flex-col overflow-hidden rounded-xl border bg-card text-card-foreground shadow-sm', this.userClass()), /* @ts-ignore */
8597
8752
  ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
8598
8753
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiProductCard, deps: [], target: i0.ɵɵFactoryTarget.Component });
8599
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiProductCard, isStandalone: true, selector: "bui-product-card", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, href: { classPropertyName: "href", publicName: "href", isSignal: true, isRequired: false, transformFunction: null }, image: { classPropertyName: "image", publicName: "image", isSignal: true, isRequired: false, transformFunction: null }, imageAlt: { classPropertyName: "imageAlt", publicName: "imageAlt", isSignal: true, isRequired: false, transformFunction: null }, price: { classPropertyName: "price", publicName: "price", isSignal: true, isRequired: false, transformFunction: null }, compareAt: { classPropertyName: "compareAt", publicName: "compareAt", isSignal: true, isRequired: false, transformFunction: null }, currency: { classPropertyName: "currency", publicName: "currency", isSignal: true, isRequired: false, transformFunction: null }, badge: { classPropertyName: "badge", publicName: "badge", isSignal: true, isRequired: false, transformFunction: null }, category: { classPropertyName: "category", publicName: "category", isSignal: true, isRequired: false, transformFunction: null }, rating: { classPropertyName: "rating", publicName: "rating", isSignal: true, isRequired: false, transformFunction: null }, reviews: { classPropertyName: "reviews", publicName: "reviews", isSignal: true, isRequired: false, transformFunction: null }, wishlist: { classPropertyName: "wishlist", publicName: "wishlist", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "product-card" }, properties: { "class": "computedClass()" } }, ngImport: i0, template: `
8754
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiProductCard, isStandalone: true, selector: "bui-product-card", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, href: { classPropertyName: "href", publicName: "href", isSignal: true, isRequired: false, transformFunction: null }, image: { classPropertyName: "image", publicName: "image", isSignal: true, isRequired: false, transformFunction: null }, imageAlt: { classPropertyName: "imageAlt", publicName: "imageAlt", isSignal: true, isRequired: false, transformFunction: null }, price: { classPropertyName: "price", publicName: "price", isSignal: true, isRequired: false, transformFunction: null }, compareAt: { classPropertyName: "compareAt", publicName: "compareAt", isSignal: true, isRequired: false, transformFunction: null }, currency: { classPropertyName: "currency", publicName: "currency", isSignal: true, isRequired: false, transformFunction: null }, badge: { classPropertyName: "badge", publicName: "badge", isSignal: true, isRequired: false, transformFunction: null }, category: { classPropertyName: "category", publicName: "category", isSignal: true, isRequired: false, transformFunction: null }, rating: { classPropertyName: "rating", publicName: "rating", isSignal: true, isRequired: false, transformFunction: null }, reviews: { classPropertyName: "reviews", publicName: "reviews", isSignal: true, isRequired: false, transformFunction: null }, wishlist: { classPropertyName: "wishlist", publicName: "wishlist", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, wishlistLabel: { classPropertyName: "wishlistLabel", publicName: "wishlistLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "product-card" }, properties: { "class": "computedClass()" } }, ngImport: i0, template: `
8600
8755
  <div class="relative aspect-square overflow-hidden bg-muted">
8601
8756
  <img
8602
8757
  [src]="image()"
@@ -8614,7 +8769,7 @@ class BuiProductCard {
8614
8769
  type="button"
8615
8770
  class="absolute end-2 top-2 inline-flex size-8 items-center justify-center rounded-full border bg-background/80 shadow-sm backdrop-blur transition-colors hover:bg-background"
8616
8771
  [attr.aria-pressed]="wished()"
8617
- aria-label="Add to wishlist"
8772
+ [attr.aria-label]="wishlistText()"
8618
8773
  (click)="wished.set(!wished())"
8619
8774
  >
8620
8775
  <svg
@@ -8696,7 +8851,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
8696
8851
  type="button"
8697
8852
  class="absolute end-2 top-2 inline-flex size-8 items-center justify-center rounded-full border bg-background/80 shadow-sm backdrop-blur transition-colors hover:bg-background"
8698
8853
  [attr.aria-pressed]="wished()"
8699
- aria-label="Add to wishlist"
8854
+ [attr.aria-label]="wishlistText()"
8700
8855
  (click)="wished.set(!wished())"
8701
8856
  >
8702
8857
  <svg
@@ -8754,7 +8909,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
8754
8909
  </div>
8755
8910
  `,
8756
8911
  }]
8757
- }], propDecorators: { title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], href: [{ type: i0.Input, args: [{ isSignal: true, alias: "href", required: false }] }], image: [{ type: i0.Input, args: [{ isSignal: true, alias: "image", required: false }] }], imageAlt: [{ type: i0.Input, args: [{ isSignal: true, alias: "imageAlt", required: false }] }], price: [{ type: i0.Input, args: [{ isSignal: true, alias: "price", required: false }] }], compareAt: [{ type: i0.Input, args: [{ isSignal: true, alias: "compareAt", required: false }] }], currency: [{ type: i0.Input, args: [{ isSignal: true, alias: "currency", required: false }] }], badge: [{ type: i0.Input, args: [{ isSignal: true, alias: "badge", required: false }] }], category: [{ type: i0.Input, args: [{ isSignal: true, alias: "category", required: false }] }], rating: [{ type: i0.Input, args: [{ isSignal: true, alias: "rating", required: false }] }], reviews: [{ type: i0.Input, args: [{ isSignal: true, alias: "reviews", required: false }] }], wishlist: [{ type: i0.Input, args: [{ isSignal: true, alias: "wishlist", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
8912
+ }], propDecorators: { title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], href: [{ type: i0.Input, args: [{ isSignal: true, alias: "href", required: false }] }], image: [{ type: i0.Input, args: [{ isSignal: true, alias: "image", required: false }] }], imageAlt: [{ type: i0.Input, args: [{ isSignal: true, alias: "imageAlt", required: false }] }], price: [{ type: i0.Input, args: [{ isSignal: true, alias: "price", required: false }] }], compareAt: [{ type: i0.Input, args: [{ isSignal: true, alias: "compareAt", required: false }] }], currency: [{ type: i0.Input, args: [{ isSignal: true, alias: "currency", required: false }] }], badge: [{ type: i0.Input, args: [{ isSignal: true, alias: "badge", required: false }] }], category: [{ type: i0.Input, args: [{ isSignal: true, alias: "category", required: false }] }], rating: [{ type: i0.Input, args: [{ isSignal: true, alias: "rating", required: false }] }], reviews: [{ type: i0.Input, args: [{ isSignal: true, alias: "reviews", required: false }] }], wishlist: [{ type: i0.Input, args: [{ isSignal: true, alias: "wishlist", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], wishlistLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "wishlistLabel", required: false }] }] } });
8758
8913
 
8759
8914
  /**
8760
8915
  * Types and deletes a cycling list of words. The animated text is `aria-hidden`; an sr-only
@@ -9350,6 +9505,9 @@ class BuiScrollspy {
9350
9505
  items = input([], /* @ts-ignore */
9351
9506
  ...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
9352
9507
  userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
9508
+ label = input(/* @ts-ignore */
9509
+ ...(ngDevMode ? [undefined, { debugName: "label" }] : /* istanbul ignore next */ []));
9510
+ labelText = buiLabel('scrollspy', this.label);
9353
9511
  document = inject(ElementRef).nativeElement.ownerDocument;
9354
9512
  active = signal('', /* @ts-ignore */
9355
9513
  ...(ngDevMode ? [{ debugName: "active" }] : /* istanbul ignore next */ []));
@@ -9391,8 +9549,8 @@ class BuiScrollspy {
9391
9549
  }
9392
9550
  }
9393
9551
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiScrollspy, deps: [], target: i0.ɵɵFactoryTarget.Component });
9394
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiScrollspy, isStandalone: true, selector: "bui-scrollspy", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "scrollspy" }, properties: { "class": "computedClass()" } }, ngImport: i0, template: `
9395
- <nav aria-label="On this page">
9552
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiScrollspy, isStandalone: true, selector: "bui-scrollspy", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "scrollspy" }, properties: { "class": "computedClass()" } }, ngImport: i0, template: `
9553
+ <nav [attr.aria-label]="labelText()">
9396
9554
  <ul class="space-y-1 text-sm">
9397
9555
  @for (item of items(); track item.href) {
9398
9556
  <li>
@@ -9415,7 +9573,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
9415
9573
  selector: 'bui-scrollspy',
9416
9574
  host: { 'data-slot': 'scrollspy', '[class]': 'computedClass()' },
9417
9575
  template: `
9418
- <nav aria-label="On this page">
9576
+ <nav [attr.aria-label]="labelText()">
9419
9577
  <ul class="space-y-1 text-sm">
9420
9578
  @for (item of items(); track item.href) {
9421
9579
  <li>
@@ -9432,7 +9590,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
9432
9590
  </nav>
9433
9591
  `,
9434
9592
  }]
9435
- }], ctorParameters: () => [], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
9593
+ }], ctorParameters: () => [], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }] } });
9436
9594
 
9437
9595
  // eslint-disable-next-line @typescript-eslint/no-empty-function
9438
9596
  const noop$8 = () => { };
@@ -11194,6 +11352,12 @@ class BuiPhoneInput {
11194
11352
  placeholder = input('Phone number', /* @ts-ignore */
11195
11353
  ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
11196
11354
  userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
11355
+ countryLabel = input(/* @ts-ignore */
11356
+ ...(ngDevMode ? [undefined, { debugName: "countryLabel" }] : /* istanbul ignore next */ []));
11357
+ numberLabel = input(/* @ts-ignore */
11358
+ ...(ngDevMode ? [undefined, { debugName: "numberLabel" }] : /* istanbul ignore next */ []));
11359
+ countryText = buiLabel('phoneInputCountry', this.countryLabel);
11360
+ numberText = buiLabel('phoneInputNumber', this.numberLabel);
11197
11361
  countries = COUNTRIES;
11198
11362
  computedClass = computed(() => cn('flex w-full items-stretch', this.userClass()), /* @ts-ignore */
11199
11363
  ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
@@ -11204,11 +11368,11 @@ class BuiPhoneInput {
11204
11368
  this.value.set(event.target.value);
11205
11369
  }
11206
11370
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiPhoneInput, deps: [], target: i0.ɵɵFactoryTarget.Component });
11207
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiPhoneInput, isStandalone: true, selector: "bui-phone-input", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, country: { classPropertyName: "country", publicName: "country", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", country: "countryChange" }, host: { attributes: { "data-slot": "phone-input" }, properties: { "class": "computedClass()" } }, ngImport: i0, template: `
11371
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiPhoneInput, isStandalone: true, selector: "bui-phone-input", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, country: { classPropertyName: "country", publicName: "country", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, countryLabel: { classPropertyName: "countryLabel", publicName: "countryLabel", isSignal: true, isRequired: false, transformFunction: null }, numberLabel: { classPropertyName: "numberLabel", publicName: "numberLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", country: "countryChange" }, host: { attributes: { "data-slot": "phone-input" }, properties: { "class": "computedClass()" } }, ngImport: i0, template: `
11208
11372
  <select
11209
11373
  [value]="country()"
11210
11374
  class="h-9 rounded-md rounded-r-none border border-r-0 border-input bg-background ps-2 pe-1 text-sm outline-none focus-visible:z-10 focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50"
11211
- aria-label="Country code"
11375
+ [attr.aria-label]="countryText()"
11212
11376
  (change)="onCountry($event)"
11213
11377
  >
11214
11378
  @for (option of countries; track option.code) {
@@ -11221,7 +11385,7 @@ class BuiPhoneInput {
11221
11385
  [placeholder]="placeholder()"
11222
11386
  [attr.name]="name() || null"
11223
11387
  [attr.id]="id() || null"
11224
- aria-label="Phone number"
11388
+ [attr.aria-label]="numberText()"
11225
11389
  class="h-9 w-full min-w-0 rounded-md rounded-l-none border border-input bg-transparent px-3 text-sm shadow-xs outline-none focus-visible:z-10 focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50"
11226
11390
  (input)="onNumber($event)"
11227
11391
  />
@@ -11236,7 +11400,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
11236
11400
  <select
11237
11401
  [value]="country()"
11238
11402
  class="h-9 rounded-md rounded-r-none border border-r-0 border-input bg-background ps-2 pe-1 text-sm outline-none focus-visible:z-10 focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50"
11239
- aria-label="Country code"
11403
+ [attr.aria-label]="countryText()"
11240
11404
  (change)="onCountry($event)"
11241
11405
  >
11242
11406
  @for (option of countries; track option.code) {
@@ -11249,13 +11413,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
11249
11413
  [placeholder]="placeholder()"
11250
11414
  [attr.name]="name() || null"
11251
11415
  [attr.id]="id() || null"
11252
- aria-label="Phone number"
11416
+ [attr.aria-label]="numberText()"
11253
11417
  class="h-9 w-full min-w-0 rounded-md rounded-l-none border border-input bg-transparent px-3 text-sm shadow-xs outline-none focus-visible:z-10 focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50"
11254
11418
  (input)="onNumber($event)"
11255
11419
  />
11256
11420
  `,
11257
11421
  }]
11258
- }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], country: [{ type: i0.Input, args: [{ isSignal: true, alias: "country", required: false }] }, { type: i0.Output, args: ["countryChange"] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
11422
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], country: [{ type: i0.Input, args: [{ isSignal: true, alias: "country", required: false }] }, { type: i0.Output, args: ["countryChange"] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], countryLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "countryLabel", required: false }] }], numberLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "numberLabel", required: false }] }] } });
11259
11423
 
11260
11424
  /** A chat composer: an autosizing textarea with a send button. Emits `submitted` on send. */
11261
11425
  class BuiPromptInput {
@@ -11269,8 +11433,14 @@ class BuiPromptInput {
11269
11433
  ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
11270
11434
  ariaLabel = input('Message', /* @ts-ignore */
11271
11435
  ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
11436
+ attachLabel = input(/* @ts-ignore */
11437
+ ...(ngDevMode ? [undefined, { debugName: "attachLabel" }] : /* istanbul ignore next */ []));
11438
+ sendLabel = input(/* @ts-ignore */
11439
+ ...(ngDevMode ? [undefined, { debugName: "sendLabel" }] : /* istanbul ignore next */ []));
11272
11440
  submitted = output();
11273
11441
  userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
11442
+ attachText = buiLabel('promptInputAttach', this.attachLabel);
11443
+ sendText = buiLabel('promptInputSend', this.sendLabel);
11274
11444
  ta = viewChild('ta', /* @ts-ignore */
11275
11445
  ...(ngDevMode ? [{ debugName: "ta" }] : /* istanbul ignore next */ []));
11276
11446
  computedClass = computed(() => cn('flex flex-col rounded-xl border border-input bg-transparent focus-within:border-ring focus-within:ring-[3px] focus-within:ring-ring/50', this.userClass()), /* @ts-ignore */
@@ -11309,7 +11479,7 @@ class BuiPromptInput {
11309
11479
  element.style.height = `${element.scrollHeight}px`;
11310
11480
  }
11311
11481
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiPromptInput, deps: [], target: i0.ɵɵFactoryTarget.Component });
11312
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiPromptInput, isStandalone: true, selector: "bui-prompt-input", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, attachable: { classPropertyName: "attachable", publicName: "attachable", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", submitted: "submitted" }, host: { attributes: { "data-slot": "prompt-input" }, properties: { "class": "computedClass()" } }, viewQueries: [{ propertyName: "ta", first: true, predicate: ["ta"], descendants: true, isSignal: true }], ngImport: i0, template: `
11482
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiPromptInput, isStandalone: true, selector: "bui-prompt-input", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, attachable: { classPropertyName: "attachable", publicName: "attachable", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, attachLabel: { classPropertyName: "attachLabel", publicName: "attachLabel", isSignal: true, isRequired: false, transformFunction: null }, sendLabel: { classPropertyName: "sendLabel", publicName: "sendLabel", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", submitted: "submitted" }, host: { attributes: { "data-slot": "prompt-input" }, properties: { "class": "computedClass()" } }, viewQueries: [{ propertyName: "ta", first: true, predicate: ["ta"], descendants: true, isSignal: true }], ngImport: i0, template: `
11313
11483
  <textarea
11314
11484
  #ta
11315
11485
  rows="1"
@@ -11325,7 +11495,7 @@ class BuiPromptInput {
11325
11495
  @if (attachable()) {
11326
11496
  <button
11327
11497
  type="button"
11328
- aria-label="Attach file"
11498
+ [attr.aria-label]="attachText()"
11329
11499
  class="inline-flex size-8 items-center justify-center text-muted-foreground hover:text-foreground"
11330
11500
  >
11331
11501
  <svg
@@ -11348,7 +11518,7 @@ class BuiPromptInput {
11348
11518
  type="button"
11349
11519
  class="ml-auto inline-flex size-8 items-center justify-center rounded-md bg-primary text-primary-foreground disabled:opacity-50"
11350
11520
  [disabled]="disabled() || value().trim() === ''"
11351
- aria-label="Send"
11521
+ [attr.aria-label]="sendText()"
11352
11522
  (click)="send()"
11353
11523
  >
11354
11524
  <svg
@@ -11389,7 +11559,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
11389
11559
  @if (attachable()) {
11390
11560
  <button
11391
11561
  type="button"
11392
- aria-label="Attach file"
11562
+ [attr.aria-label]="attachText()"
11393
11563
  class="inline-flex size-8 items-center justify-center text-muted-foreground hover:text-foreground"
11394
11564
  >
11395
11565
  <svg
@@ -11412,7 +11582,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
11412
11582
  type="button"
11413
11583
  class="ml-auto inline-flex size-8 items-center justify-center rounded-md bg-primary text-primary-foreground disabled:opacity-50"
11414
11584
  [disabled]="disabled() || value().trim() === ''"
11415
- aria-label="Send"
11585
+ [attr.aria-label]="sendText()"
11416
11586
  (click)="send()"
11417
11587
  >
11418
11588
  <svg
@@ -11432,7 +11602,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
11432
11602
  </div>
11433
11603
  `,
11434
11604
  }]
11435
- }], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], attachable: [{ type: i0.Input, args: [{ isSignal: true, alias: "attachable", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], submitted: [{ type: i0.Output, args: ["submitted"] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], ta: [{ type: i0.ViewChild, args: ['ta', { isSignal: true }] }] } });
11605
+ }], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], attachable: [{ type: i0.Input, args: [{ isSignal: true, alias: "attachable", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], attachLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "attachLabel", required: false }] }], sendLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "sendLabel", required: false }] }], submitted: [{ type: i0.Output, args: ["submitted"] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], ta: [{ type: i0.ViewChild, args: ['ta', { isSignal: true }] }] } });
11436
11606
 
11437
11607
  /** A contribution-style heatmap grid (7 rows). Pass `data` or get a deterministic demo. */
11438
11608
  class BuiHeatmap {
@@ -11715,7 +11885,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
11715
11885
  class BuiResizableHandle {
11716
11886
  withHandle = input(false, /* @ts-ignore */
11717
11887
  ...(ngDevMode ? [{ debugName: "withHandle" }] : /* istanbul ignore next */ []));
11888
+ ariaLabel = input(/* @ts-ignore */
11889
+ ...(ngDevMode ? [undefined, { debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
11718
11890
  userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
11891
+ ariaLabelText = buiLabel('resizableHandle', this.ariaLabel);
11719
11892
  group = inject(BuiResizablePanelGroup);
11720
11893
  roundedSize = computed(() => Math.round(this.group.size()), /* @ts-ignore */
11721
11894
  ...(ngDevMode ? [{ debugName: "roundedSize" }] : /* istanbul ignore next */ []));
@@ -11735,7 +11908,7 @@ class BuiResizableHandle {
11735
11908
  }
11736
11909
  }
11737
11910
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiResizableHandle, deps: [], target: i0.ɵɵFactoryTarget.Component });
11738
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiResizableHandle, isStandalone: true, selector: "bui-resizable-handle", inputs: { withHandle: { classPropertyName: "withHandle", publicName: "withHandle", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "resizable-handle", "role": "separator", "tabindex": "0", "aria-label": "Resize panel", "aria-valuemin": "10", "aria-valuemax": "90" }, listeners: { "pointerdown": "group.startDrag()", "keydown": "onKeydown($event)" }, properties: { "attr.aria-orientation": "group.direction() === 'horizontal' ? 'vertical' : 'horizontal'", "attr.aria-valuenow": "roundedSize()", "class": "computedClass()" } }, ngImport: i0, template: `
11911
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiResizableHandle, isStandalone: true, selector: "bui-resizable-handle", inputs: { withHandle: { classPropertyName: "withHandle", publicName: "withHandle", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "resizable-handle", "role": "separator", "tabindex": "0", "aria-valuemin": "10", "aria-valuemax": "90" }, listeners: { "pointerdown": "group.startDrag()", "keydown": "onKeydown($event)" }, properties: { "attr.aria-label": "ariaLabelText()", "attr.aria-orientation": "group.direction() === 'horizontal' ? 'vertical' : 'horizontal'", "attr.aria-valuenow": "roundedSize()", "class": "computedClass()" } }, ngImport: i0, template: `
11739
11912
  @if (withHandle()) {
11740
11913
  <span
11741
11914
  class="absolute top-1/2 left-1/2 flex h-4 w-1 -translate-x-1/2 -translate-y-1/2 items-center justify-center rounded-full bg-border"
@@ -11751,7 +11924,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
11751
11924
  'data-slot': 'resizable-handle',
11752
11925
  role: 'separator',
11753
11926
  tabindex: '0',
11754
- 'aria-label': 'Resize panel',
11927
+ '[attr.aria-label]': 'ariaLabelText()',
11755
11928
  'aria-valuemin': '10',
11756
11929
  'aria-valuemax': '90',
11757
11930
  '[attr.aria-orientation]': "group.direction() === 'horizontal' ? 'vertical' : 'horizontal'",
@@ -11768,7 +11941,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
11768
11941
  }
11769
11942
  `,
11770
11943
  }]
11771
- }], propDecorators: { withHandle: [{ type: i0.Input, args: [{ isSignal: true, alias: "withHandle", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
11944
+ }], propDecorators: { withHandle: [{ type: i0.Input, args: [{ isSignal: true, alias: "withHandle", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
11772
11945
 
11773
11946
  /** A styled HTML5 video with a poster + play-button facade. */
11774
11947
  class BuiVideo {
@@ -11789,6 +11962,9 @@ class BuiVideo {
11789
11962
  rounded = input('rounded-xl', /* @ts-ignore */
11790
11963
  ...(ngDevMode ? [{ debugName: "rounded" }] : /* istanbul ignore next */ []));
11791
11964
  userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
11965
+ playLabel = input(/* @ts-ignore */
11966
+ ...(ngDevMode ? [undefined, { debugName: "playLabel" }] : /* istanbul ignore next */ []));
11967
+ playText = buiLabel('videoPlay', this.playLabel);
11792
11968
  v = viewChild('v', /* @ts-ignore */
11793
11969
  ...(ngDevMode ? [{ debugName: "v" }] : /* istanbul ignore next */ []));
11794
11970
  started = signal(false, /* @ts-ignore */
@@ -11821,7 +11997,7 @@ class BuiVideo {
11821
11997
  }
11822
11998
  }
11823
11999
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiVideo, deps: [], target: i0.ɵɵFactoryTarget.Component });
11824
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiVideo, isStandalone: true, selector: "bui-video", inputs: { src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: false, transformFunction: null }, poster: { classPropertyName: "poster", publicName: "poster", isSignal: true, isRequired: false, transformFunction: null }, aspect: { classPropertyName: "aspect", publicName: "aspect", isSignal: true, isRequired: false, transformFunction: null }, controls: { classPropertyName: "controls", publicName: "controls", isSignal: true, isRequired: false, transformFunction: null }, autoplay: { classPropertyName: "autoplay", publicName: "autoplay", isSignal: true, isRequired: false, transformFunction: null }, loop: { classPropertyName: "loop", publicName: "loop", isSignal: true, isRequired: false, transformFunction: null }, muted: { classPropertyName: "muted", publicName: "muted", isSignal: true, isRequired: false, transformFunction: null }, rounded: { classPropertyName: "rounded", publicName: "rounded", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "video" }, properties: { "class": "computedClass()", "style.aspect-ratio": "ratioValue()" } }, viewQueries: [{ propertyName: "v", first: true, predicate: ["v"], descendants: true, isSignal: true }], ngImport: i0, template: `
12000
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiVideo, isStandalone: true, selector: "bui-video", inputs: { src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: false, transformFunction: null }, poster: { classPropertyName: "poster", publicName: "poster", isSignal: true, isRequired: false, transformFunction: null }, aspect: { classPropertyName: "aspect", publicName: "aspect", isSignal: true, isRequired: false, transformFunction: null }, controls: { classPropertyName: "controls", publicName: "controls", isSignal: true, isRequired: false, transformFunction: null }, autoplay: { classPropertyName: "autoplay", publicName: "autoplay", isSignal: true, isRequired: false, transformFunction: null }, loop: { classPropertyName: "loop", publicName: "loop", isSignal: true, isRequired: false, transformFunction: null }, muted: { classPropertyName: "muted", publicName: "muted", isSignal: true, isRequired: false, transformFunction: null }, rounded: { classPropertyName: "rounded", publicName: "rounded", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, playLabel: { classPropertyName: "playLabel", publicName: "playLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "video" }, properties: { "class": "computedClass()", "style.aspect-ratio": "ratioValue()" } }, viewQueries: [{ propertyName: "v", first: true, predicate: ["v"], descendants: true, isSignal: true }], ngImport: i0, template: `
11825
12001
  <video
11826
12002
  #v
11827
12003
  [src]="src() || null"
@@ -11840,7 +12016,7 @@ class BuiVideo {
11840
12016
  <button
11841
12017
  type="button"
11842
12018
  class="absolute inset-0 flex items-center justify-center bg-black/30 transition-colors hover:bg-black/40"
11843
- aria-label="Play video"
12019
+ [attr.aria-label]="playText()"
11844
12020
  (click)="play()"
11845
12021
  >
11846
12022
  <span
@@ -11882,7 +12058,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
11882
12058
  <button
11883
12059
  type="button"
11884
12060
  class="absolute inset-0 flex items-center justify-center bg-black/30 transition-colors hover:bg-black/40"
11885
- aria-label="Play video"
12061
+ [attr.aria-label]="playText()"
11886
12062
  (click)="play()"
11887
12063
  >
11888
12064
  <span
@@ -11896,7 +12072,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
11896
12072
  }
11897
12073
  `,
11898
12074
  }]
11899
- }], propDecorators: { src: [{ type: i0.Input, args: [{ isSignal: true, alias: "src", required: false }] }], poster: [{ type: i0.Input, args: [{ isSignal: true, alias: "poster", required: false }] }], aspect: [{ type: i0.Input, args: [{ isSignal: true, alias: "aspect", required: false }] }], controls: [{ type: i0.Input, args: [{ isSignal: true, alias: "controls", required: false }] }], autoplay: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoplay", required: false }] }], loop: [{ type: i0.Input, args: [{ isSignal: true, alias: "loop", required: false }] }], muted: [{ type: i0.Input, args: [{ isSignal: true, alias: "muted", required: false }] }], rounded: [{ type: i0.Input, args: [{ isSignal: true, alias: "rounded", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], v: [{ type: i0.ViewChild, args: ['v', { isSignal: true }] }] } });
12075
+ }], propDecorators: { src: [{ type: i0.Input, args: [{ isSignal: true, alias: "src", required: false }] }], poster: [{ type: i0.Input, args: [{ isSignal: true, alias: "poster", required: false }] }], aspect: [{ type: i0.Input, args: [{ isSignal: true, alias: "aspect", required: false }] }], controls: [{ type: i0.Input, args: [{ isSignal: true, alias: "controls", required: false }] }], autoplay: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoplay", required: false }] }], loop: [{ type: i0.Input, args: [{ isSignal: true, alias: "loop", required: false }] }], muted: [{ type: i0.Input, args: [{ isSignal: true, alias: "muted", required: false }] }], rounded: [{ type: i0.Input, args: [{ isSignal: true, alias: "rounded", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], playLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "playLabel", required: false }] }], v: [{ type: i0.ViewChild, args: ['v', { isSignal: true }] }] } });
11900
12076
 
11901
12077
  const DEFAULT_SWATCHES = [
11902
12078
  '#ef4444',
@@ -11919,6 +12095,12 @@ class BuiColorPicker {
11919
12095
  disabled = input(false, /* @ts-ignore */
11920
12096
  ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
11921
12097
  userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
12098
+ pickLabel = input(/* @ts-ignore */
12099
+ ...(ngDevMode ? [undefined, { debugName: "pickLabel" }] : /* istanbul ignore next */ []));
12100
+ hexLabel = input(/* @ts-ignore */
12101
+ ...(ngDevMode ? [undefined, { debugName: "hexLabel" }] : /* istanbul ignore next */ []));
12102
+ pickText = buiLabel('colorPickerPick', this.pickLabel);
12103
+ hexText = buiLabel('colorPickerHex', this.hexLabel);
11922
12104
  palette = computed(() => this.swatches() ?? DEFAULT_SWATCHES, /* @ts-ignore */
11923
12105
  ...(ngDevMode ? [{ debugName: "palette" }] : /* istanbul ignore next */ []));
11924
12106
  computedClass = computed(() => cn('inline-block', this.userClass()), /* @ts-ignore */
@@ -11930,7 +12112,7 @@ class BuiColorPicker {
11930
12112
  this.value.set(event.target.value);
11931
12113
  }
11932
12114
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiColorPicker, deps: [], target: i0.ɵɵFactoryTarget.Component });
11933
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiColorPicker, isStandalone: true, selector: "bui-color-picker", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, swatches: { classPropertyName: "swatches", publicName: "swatches", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { attributes: { "data-slot": "color-picker" }, properties: { "class": "computedClass()" } }, ngImport: i0, template: `
12115
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiColorPicker, isStandalone: true, selector: "bui-color-picker", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, swatches: { classPropertyName: "swatches", publicName: "swatches", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, pickLabel: { classPropertyName: "pickLabel", publicName: "pickLabel", isSignal: true, isRequired: false, transformFunction: null }, hexLabel: { classPropertyName: "hexLabel", publicName: "hexLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { attributes: { "data-slot": "color-picker" }, properties: { "class": "computedClass()" } }, ngImport: i0, template: `
11934
12116
  <div class="flex items-center gap-2">
11935
12117
  <label
11936
12118
  class="relative size-9 shrink-0 overflow-hidden rounded-md border border-input"
@@ -11941,7 +12123,7 @@ class BuiColorPicker {
11941
12123
  [value]="value()"
11942
12124
  [disabled]="disabled()"
11943
12125
  class="absolute inset-0 size-full cursor-pointer opacity-0"
11944
- aria-label="Pick a color"
12126
+ [attr.aria-label]="pickText()"
11945
12127
  (input)="onPick($event)"
11946
12128
  />
11947
12129
  </label>
@@ -11950,7 +12132,7 @@ class BuiColorPicker {
11950
12132
  [value]="value()"
11951
12133
  [disabled]="disabled()"
11952
12134
  class="h-9 w-28 rounded-md border border-input bg-transparent px-2 font-mono text-sm uppercase outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50"
11953
- aria-label="Color hex value"
12135
+ [attr.aria-label]="hexText()"
11954
12136
  (input)="onText($event)"
11955
12137
  />
11956
12138
  </div>
@@ -11984,7 +12166,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
11984
12166
  [value]="value()"
11985
12167
  [disabled]="disabled()"
11986
12168
  class="absolute inset-0 size-full cursor-pointer opacity-0"
11987
- aria-label="Pick a color"
12169
+ [attr.aria-label]="pickText()"
11988
12170
  (input)="onPick($event)"
11989
12171
  />
11990
12172
  </label>
@@ -11993,7 +12175,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
11993
12175
  [value]="value()"
11994
12176
  [disabled]="disabled()"
11995
12177
  class="h-9 w-28 rounded-md border border-input bg-transparent px-2 font-mono text-sm uppercase outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50"
11996
- aria-label="Color hex value"
12178
+ [attr.aria-label]="hexText()"
11997
12179
  (input)="onText($event)"
11998
12180
  />
11999
12181
  </div>
@@ -12011,7 +12193,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
12011
12193
  </div>
12012
12194
  `,
12013
12195
  }]
12014
- }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], swatches: [{ type: i0.Input, args: [{ isSignal: true, alias: "swatches", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
12196
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], swatches: [{ type: i0.Input, args: [{ isSignal: true, alias: "swatches", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], pickLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "pickLabel", required: false }] }], hexLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "hexLabel", required: false }] }] } });
12015
12197
 
12016
12198
  /** A GDPR cookie banner. Persists the choice in localStorage (skipped in `demo` mode). */
12017
12199
  class BuiCookieConsent {
@@ -12023,6 +12205,9 @@ class BuiCookieConsent {
12023
12205
  ...(ngDevMode ? [{ debugName: "storageKey" }] : /* istanbul ignore next */ []));
12024
12206
  decided = output();
12025
12207
  userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
12208
+ ariaLabel = input(/* @ts-ignore */
12209
+ ...(ngDevMode ? [undefined, { debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
12210
+ ariaLabelText = buiLabel('cookieConsent', this.ariaLabel);
12026
12211
  visible = signal(false, /* @ts-ignore */
12027
12212
  ...(ngDevMode ? [{ debugName: "visible" }] : /* istanbul ignore next */ []));
12028
12213
  computedClass = computed(() => cn('flex flex-col items-start gap-3 rounded-lg border bg-card p-4 shadow-lg sm:flex-row sm:items-center sm:justify-between', this.userClass()), /* @ts-ignore */
@@ -12044,7 +12229,7 @@ class BuiCookieConsent {
12044
12229
  this.decided.emit(isAccepted);
12045
12230
  }
12046
12231
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiCookieConsent, deps: [], target: i0.ɵɵFactoryTarget.Component });
12047
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.2", type: BuiCookieConsent, isStandalone: true, selector: "bui-cookie-consent", inputs: { message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: false, transformFunction: null }, demo: { classPropertyName: "demo", publicName: "demo", isSignal: true, isRequired: false, transformFunction: null }, storageKey: { classPropertyName: "storageKey", publicName: "storageKey", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { decided: "decided" }, host: { attributes: { "data-slot": "cookie-consent", "role": "region", "aria-label": "Cookie consent" }, properties: { "class": "computedClass()", "hidden": "!visible()" } }, ngImport: i0, template: `
12232
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.2", type: BuiCookieConsent, isStandalone: true, selector: "bui-cookie-consent", inputs: { message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: false, transformFunction: null }, demo: { classPropertyName: "demo", publicName: "demo", isSignal: true, isRequired: false, transformFunction: null }, storageKey: { classPropertyName: "storageKey", publicName: "storageKey", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { decided: "decided" }, host: { attributes: { "data-slot": "cookie-consent", "role": "region" }, properties: { "attr.aria-label": "ariaLabelText()", "class": "computedClass()", "hidden": "!visible()" } }, ngImport: i0, template: `
12048
12233
  <p class="text-sm text-muted-foreground">{{ message() }}</p>
12049
12234
  <div class="flex shrink-0 gap-2">
12050
12235
  <button
@@ -12071,7 +12256,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
12071
12256
  host: {
12072
12257
  'data-slot': 'cookie-consent',
12073
12258
  role: 'region',
12074
- 'aria-label': 'Cookie consent',
12259
+ '[attr.aria-label]': 'ariaLabelText()',
12075
12260
  '[class]': 'computedClass()',
12076
12261
  '[hidden]': '!visible()',
12077
12262
  },
@@ -12095,7 +12280,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
12095
12280
  </div>
12096
12281
  `,
12097
12282
  }]
12098
- }], ctorParameters: () => [], propDecorators: { message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: false }] }], demo: [{ type: i0.Input, args: [{ isSignal: true, alias: "demo", required: false }] }], storageKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "storageKey", required: false }] }], decided: [{ type: i0.Output, args: ["decided"] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
12283
+ }], ctorParameters: () => [], propDecorators: { message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: false }] }], demo: [{ type: i0.Input, args: [{ isSignal: true, alias: "demo", required: false }] }], storageKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "storageKey", required: false }] }], decided: [{ type: i0.Output, args: ["decided"] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }] } });
12099
12284
 
12100
12285
  /**
12101
12286
  * Emits `more` when a sentinel scrolls into view (IntersectionObserver) or the fallback
@@ -12244,6 +12429,21 @@ class BuiAudioPlayer {
12244
12429
  compact = input(false, /* @ts-ignore */
12245
12430
  ...(ngDevMode ? [{ debugName: "compact" }] : /* istanbul ignore next */ []));
12246
12431
  userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
12432
+ seekLabel = input(/* @ts-ignore */
12433
+ ...(ngDevMode ? [undefined, { debugName: "seekLabel" }] : /* istanbul ignore next */ []));
12434
+ playLabel = input(/* @ts-ignore */
12435
+ ...(ngDevMode ? [undefined, { debugName: "playLabel" }] : /* istanbul ignore next */ []));
12436
+ pauseLabel = input(/* @ts-ignore */
12437
+ ...(ngDevMode ? [undefined, { debugName: "pauseLabel" }] : /* istanbul ignore next */ []));
12438
+ muteLabel = input(/* @ts-ignore */
12439
+ ...(ngDevMode ? [undefined, { debugName: "muteLabel" }] : /* istanbul ignore next */ []));
12440
+ unmuteLabel = input(/* @ts-ignore */
12441
+ ...(ngDevMode ? [undefined, { debugName: "unmuteLabel" }] : /* istanbul ignore next */ []));
12442
+ seekText = buiLabel('audioPlayerSeek', this.seekLabel);
12443
+ playText = buiLabel('audioPlayerPlay', this.playLabel);
12444
+ pauseText = buiLabel('audioPlayerPause', this.pauseLabel);
12445
+ muteText = buiLabel('audioPlayerMute', this.muteLabel);
12446
+ unmuteText = buiLabel('audioPlayerUnmute', this.unmuteLabel);
12247
12447
  a = viewChild('a', /* @ts-ignore */
12248
12448
  ...(ngDevMode ? [{ debugName: "a" }] : /* istanbul ignore next */ []));
12249
12449
  playing = signal(false, /* @ts-ignore */
@@ -12303,7 +12503,7 @@ class BuiAudioPlayer {
12303
12503
  return `${minutes}:${rest.toString().padStart(2, '0')}`;
12304
12504
  }
12305
12505
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiAudioPlayer, deps: [], target: i0.ɵɵFactoryTarget.Component });
12306
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiAudioPlayer, isStandalone: true, selector: "bui-audio-player", inputs: { src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, artist: { classPropertyName: "artist", publicName: "artist", isSignal: true, isRequired: false, transformFunction: null }, autoplay: { classPropertyName: "autoplay", publicName: "autoplay", isSignal: true, isRequired: false, transformFunction: null }, compact: { classPropertyName: "compact", publicName: "compact", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "audio-player" }, properties: { "class": "computedClass()" } }, viewQueries: [{ propertyName: "a", first: true, predicate: ["a"], descendants: true, isSignal: true }], ngImport: i0, template: `
12506
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiAudioPlayer, isStandalone: true, selector: "bui-audio-player", inputs: { src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, artist: { classPropertyName: "artist", publicName: "artist", isSignal: true, isRequired: false, transformFunction: null }, autoplay: { classPropertyName: "autoplay", publicName: "autoplay", isSignal: true, isRequired: false, transformFunction: null }, compact: { classPropertyName: "compact", publicName: "compact", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, seekLabel: { classPropertyName: "seekLabel", publicName: "seekLabel", isSignal: true, isRequired: false, transformFunction: null }, playLabel: { classPropertyName: "playLabel", publicName: "playLabel", isSignal: true, isRequired: false, transformFunction: null }, pauseLabel: { classPropertyName: "pauseLabel", publicName: "pauseLabel", isSignal: true, isRequired: false, transformFunction: null }, muteLabel: { classPropertyName: "muteLabel", publicName: "muteLabel", isSignal: true, isRequired: false, transformFunction: null }, unmuteLabel: { classPropertyName: "unmuteLabel", publicName: "unmuteLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "audio-player" }, properties: { "class": "computedClass()" } }, viewQueries: [{ propertyName: "a", first: true, predicate: ["a"], descendants: true, isSignal: true }], ngImport: i0, template: `
12307
12507
  <audio
12308
12508
  #a
12309
12509
  [src]="src() || null"
@@ -12319,7 +12519,7 @@ class BuiAudioPlayer {
12319
12519
  <button
12320
12520
  type="button"
12321
12521
  class="inline-flex size-9 shrink-0 items-center justify-center rounded-full bg-primary text-primary-foreground"
12322
- [attr.aria-label]="playing() ? 'Pause' : 'Play'"
12522
+ [attr.aria-label]="playing() ? pauseText() : playText()"
12323
12523
  (click)="toggle()"
12324
12524
  >
12325
12525
  <svg class="size-4" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
@@ -12346,7 +12546,7 @@ class BuiAudioPlayer {
12346
12546
  [max]="duration() || 0"
12347
12547
  [value]="current()"
12348
12548
  class="h-1 flex-1 accent-primary"
12349
- aria-label="Seek"
12549
+ [attr.aria-label]="seekText()"
12350
12550
  (input)="seek($event)"
12351
12551
  />
12352
12552
  <span class="text-xs text-muted-foreground tabular-nums">{{ format(duration()) }}</span>
@@ -12354,7 +12554,7 @@ class BuiAudioPlayer {
12354
12554
  <button
12355
12555
  type="button"
12356
12556
  class="shrink-0 text-muted-foreground hover:text-foreground"
12357
- [attr.aria-label]="muted() ? 'Unmute' : 'Mute'"
12557
+ [attr.aria-label]="muted() ? unmuteText() : muteText()"
12358
12558
  (click)="toggleMute()"
12359
12559
  >
12360
12560
  <svg class="size-4" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
@@ -12391,7 +12591,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
12391
12591
  <button
12392
12592
  type="button"
12393
12593
  class="inline-flex size-9 shrink-0 items-center justify-center rounded-full bg-primary text-primary-foreground"
12394
- [attr.aria-label]="playing() ? 'Pause' : 'Play'"
12594
+ [attr.aria-label]="playing() ? pauseText() : playText()"
12395
12595
  (click)="toggle()"
12396
12596
  >
12397
12597
  <svg class="size-4" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
@@ -12418,7 +12618,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
12418
12618
  [max]="duration() || 0"
12419
12619
  [value]="current()"
12420
12620
  class="h-1 flex-1 accent-primary"
12421
- aria-label="Seek"
12621
+ [attr.aria-label]="seekText()"
12422
12622
  (input)="seek($event)"
12423
12623
  />
12424
12624
  <span class="text-xs text-muted-foreground tabular-nums">{{ format(duration()) }}</span>
@@ -12426,7 +12626,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
12426
12626
  <button
12427
12627
  type="button"
12428
12628
  class="shrink-0 text-muted-foreground hover:text-foreground"
12429
- [attr.aria-label]="muted() ? 'Unmute' : 'Mute'"
12629
+ [attr.aria-label]="muted() ? unmuteText() : muteText()"
12430
12630
  (click)="toggleMute()"
12431
12631
  >
12432
12632
  <svg class="size-4" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
@@ -12442,7 +12642,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
12442
12642
  }
12443
12643
  `,
12444
12644
  }]
12445
- }], propDecorators: { src: [{ type: i0.Input, args: [{ isSignal: true, alias: "src", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], artist: [{ type: i0.Input, args: [{ isSignal: true, alias: "artist", required: false }] }], autoplay: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoplay", required: false }] }], compact: [{ type: i0.Input, args: [{ isSignal: true, alias: "compact", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], a: [{ type: i0.ViewChild, args: ['a', { isSignal: true }] }] } });
12645
+ }], propDecorators: { src: [{ type: i0.Input, args: [{ isSignal: true, alias: "src", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], artist: [{ type: i0.Input, args: [{ isSignal: true, alias: "artist", required: false }] }], autoplay: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoplay", required: false }] }], compact: [{ type: i0.Input, args: [{ isSignal: true, alias: "compact", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], seekLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "seekLabel", required: false }] }], playLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "playLabel", required: false }] }], pauseLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "pauseLabel", required: false }] }], muteLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "muteLabel", required: false }] }], unmuteLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "unmuteLabel", required: false }] }], a: [{ type: i0.ViewChild, args: ['a', { isSignal: true }] }] } });
12446
12646
 
12447
12647
  /** A canvas signature pad with draw, undo and clear. SSR-safe (canvas set up in the browser). */
12448
12648
  class BuiSignaturePad {
@@ -12609,6 +12809,9 @@ class BuiDock {
12609
12809
  distance = input(120, /* @ts-ignore */
12610
12810
  ...(ngDevMode ? [{ debugName: "distance" }] : /* istanbul ignore next */ []));
12611
12811
  userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
12812
+ label = input(/* @ts-ignore */
12813
+ ...(ngDevMode ? [undefined, { debugName: "label" }] : /* istanbul ignore next */ []));
12814
+ labelText = buiLabel('dock', this.label);
12612
12815
  mouseX = signal(null, /* @ts-ignore */
12613
12816
  ...(ngDevMode ? [{ debugName: "mouseX" }] : /* istanbul ignore next */ []));
12614
12817
  computedClass = computed(() => cn('inline-block', this.userClass()), /* @ts-ignore */
@@ -12625,9 +12828,9 @@ class BuiDock {
12625
12828
  return 1 + (this.magnify() - 1) * (1 - distance / this.distance());
12626
12829
  }
12627
12830
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiDock, deps: [], target: i0.ɵɵFactoryTarget.Component });
12628
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.2", type: BuiDock, isStandalone: true, selector: "bui-dock", inputs: { magnify: { classPropertyName: "magnify", publicName: "magnify", isSignal: true, isRequired: false, transformFunction: null }, distance: { classPropertyName: "distance", publicName: "distance", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "dock" }, listeners: { "mousemove": "mouseX.set($event.clientX)", "mouseleave": "mouseX.set(null)" }, properties: { "class": "computedClass()" } }, ngImport: i0, template: `
12831
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.2", type: BuiDock, isStandalone: true, selector: "bui-dock", inputs: { magnify: { classPropertyName: "magnify", publicName: "magnify", isSignal: true, isRequired: false, transformFunction: null }, distance: { classPropertyName: "distance", publicName: "distance", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "dock" }, listeners: { "mousemove": "mouseX.set($event.clientX)", "mouseleave": "mouseX.set(null)" }, properties: { "class": "computedClass()" } }, ngImport: i0, template: `
12629
12832
  <nav
12630
- aria-label="Dock"
12833
+ [attr.aria-label]="labelText()"
12631
12834
  class="flex items-end gap-2 rounded-2xl border bg-card/80 p-2 shadow-lg backdrop-blur"
12632
12835
  >
12633
12836
  <ng-content />
@@ -12646,14 +12849,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
12646
12849
  },
12647
12850
  template: `
12648
12851
  <nav
12649
- aria-label="Dock"
12852
+ [attr.aria-label]="labelText()"
12650
12853
  class="flex items-end gap-2 rounded-2xl border bg-card/80 p-2 shadow-lg backdrop-blur"
12651
12854
  >
12652
12855
  <ng-content />
12653
12856
  </nav>
12654
12857
  `,
12655
12858
  }]
12656
- }], propDecorators: { magnify: [{ type: i0.Input, args: [{ isSignal: true, alias: "magnify", required: false }] }], distance: [{ type: i0.Input, args: [{ isSignal: true, alias: "distance", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
12859
+ }], propDecorators: { magnify: [{ type: i0.Input, args: [{ isSignal: true, alias: "magnify", required: false }] }], distance: [{ type: i0.Input, args: [{ isSignal: true, alias: "distance", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }] } });
12657
12860
 
12658
12861
  /** A magnifying tile inside a `bui-dock`. */
12659
12862
  class BuiDockItem {
@@ -12868,7 +13071,10 @@ class BuiRepeater {
12868
13071
  ...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
12869
13072
  addLabel = input('Add row', /* @ts-ignore */
12870
13073
  ...(ngDevMode ? [{ debugName: "addLabel" }] : /* istanbul ignore next */ []));
13074
+ removeLabel = input(/* @ts-ignore */
13075
+ ...(ngDevMode ? [undefined, { debugName: "removeLabel" }] : /* istanbul ignore next */ []));
12871
13076
  userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
13077
+ removeText = buiLabel('repeaterRemove', this.removeLabel);
12872
13078
  atMax = computed(() => {
12873
13079
  const max = this.max();
12874
13080
  return max !== null && this.rows().length >= max;
@@ -12899,7 +13105,7 @@ class BuiRepeater {
12899
13105
  this.rows.set(this.rows().map((row, index_) => (index_ === index ? { ...row, [key]: value } : row)));
12900
13106
  }
12901
13107
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiRepeater, deps: [], target: i0.ɵɵFactoryTarget.Component });
12902
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiRepeater, isStandalone: true, selector: "bui-repeater", inputs: { fields: { classPropertyName: "fields", publicName: "fields", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, addLabel: { classPropertyName: "addLabel", publicName: "addLabel", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { rows: "rowsChange" }, host: { attributes: { "data-slot": "repeater" }, properties: { "class": "computedClass()" } }, ngImport: i0, template: `
13108
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiRepeater, isStandalone: true, selector: "bui-repeater", inputs: { fields: { classPropertyName: "fields", publicName: "fields", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, addLabel: { classPropertyName: "addLabel", publicName: "addLabel", isSignal: true, isRequired: false, transformFunction: null }, removeLabel: { classPropertyName: "removeLabel", publicName: "removeLabel", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { rows: "rowsChange" }, host: { attributes: { "data-slot": "repeater" }, properties: { "class": "computedClass()" } }, ngImport: i0, template: `
12903
13109
  @for (row of rows(); track $index; let i = $index) {
12904
13110
  <div class="flex items-end gap-2">
12905
13111
  @for (field of fields(); track field.key) {
@@ -12920,7 +13126,7 @@ class BuiRepeater {
12920
13126
  type="button"
12921
13127
  class="inline-flex size-9 shrink-0 items-center justify-center rounded-md border border-input text-muted-foreground hover:bg-accent disabled:opacity-50"
12922
13128
  [disabled]="rows().length <= min()"
12923
- aria-label="Remove row"
13129
+ [attr.aria-label]="removeText()"
12924
13130
  (click)="removeRow(i)"
12925
13131
  >
12926
13132
  <svg
@@ -12989,7 +13195,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
12989
13195
  type="button"
12990
13196
  class="inline-flex size-9 shrink-0 items-center justify-center rounded-md border border-input text-muted-foreground hover:bg-accent disabled:opacity-50"
12991
13197
  [disabled]="rows().length <= min()"
12992
- aria-label="Remove row"
13198
+ [attr.aria-label]="removeText()"
12993
13199
  (click)="removeRow(i)"
12994
13200
  >
12995
13201
  <svg
@@ -13032,7 +13238,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
13032
13238
  </button>
13033
13239
  `,
13034
13240
  }]
13035
- }], propDecorators: { fields: [{ type: i0.Input, args: [{ isSignal: true, alias: "fields", required: false }] }], rows: [{ type: i0.Input, args: [{ isSignal: true, alias: "rows", required: false }] }, { type: i0.Output, args: ["rowsChange"] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], addLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "addLabel", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
13241
+ }], propDecorators: { fields: [{ type: i0.Input, args: [{ isSignal: true, alias: "fields", required: false }] }], rows: [{ type: i0.Input, args: [{ isSignal: true, alias: "rows", required: false }] }, { type: i0.Output, args: ["rowsChange"] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], addLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "addLabel", required: false }] }], removeLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "removeLabel", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
13036
13242
 
13037
13243
  /** A bell trigger with a dropdown feed of notifications and an unread badge. */
13038
13244
  class BuiNotificationCenter {
@@ -13041,6 +13247,18 @@ class BuiNotificationCenter {
13041
13247
  open = model(false, /* @ts-ignore */
13042
13248
  ...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
13043
13249
  userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
13250
+ ariaLabel = input(/* @ts-ignore */
13251
+ ...(ngDevMode ? [undefined, { debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
13252
+ unreadLabel = input(/* @ts-ignore */
13253
+ ...(ngDevMode ? [undefined, { debugName: "unreadLabel" }] : /* istanbul ignore next */ []));
13254
+ markAllReadLabel = input(/* @ts-ignore */
13255
+ ...(ngDevMode ? [undefined, { debugName: "markAllReadLabel" }] : /* istanbul ignore next */ []));
13256
+ emptyLabel = input(/* @ts-ignore */
13257
+ ...(ngDevMode ? [undefined, { debugName: "emptyLabel" }] : /* istanbul ignore next */ []));
13258
+ ariaText = buiLabel('notificationCenter', this.ariaLabel);
13259
+ unreadText = buiLabel('notificationCenterUnread', this.unreadLabel);
13260
+ markAllReadText = buiLabel('notificationCenterMarkAllRead', this.markAllReadLabel);
13261
+ emptyText = buiLabel('notificationCenterEmpty', this.emptyLabel);
13044
13262
  markedRead = signal(new Set(), /* @ts-ignore */
13045
13263
  ...(ngDevMode ? [{ debugName: "markedRead" }] : /* istanbul ignore next */ []));
13046
13264
  unread = computed(() => this.notifications().filter((_, index) => !this.isRead(index)).length, /* @ts-ignore */
@@ -13054,12 +13272,12 @@ class BuiNotificationCenter {
13054
13272
  this.markedRead.set(new Set(this.notifications().map((_, index) => index)));
13055
13273
  }
13056
13274
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiNotificationCenter, deps: [], target: i0.ɵɵFactoryTarget.Component });
13057
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiNotificationCenter, isStandalone: true, selector: "bui-notification-center", inputs: { notifications: { classPropertyName: "notifications", publicName: "notifications", isSignal: true, isRequired: false, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "openChange" }, host: { attributes: { "data-slot": "notification-center" }, properties: { "class": "computedClass()" } }, ngImport: i0, template: `
13275
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiNotificationCenter, isStandalone: true, selector: "bui-notification-center", inputs: { notifications: { classPropertyName: "notifications", publicName: "notifications", isSignal: true, isRequired: false, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, unreadLabel: { classPropertyName: "unreadLabel", publicName: "unreadLabel", isSignal: true, isRequired: false, transformFunction: null }, markAllReadLabel: { classPropertyName: "markAllReadLabel", publicName: "markAllReadLabel", isSignal: true, isRequired: false, transformFunction: null }, emptyLabel: { classPropertyName: "emptyLabel", publicName: "emptyLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "openChange" }, host: { attributes: { "data-slot": "notification-center" }, properties: { "class": "computedClass()" } }, ngImport: i0, template: `
13058
13276
  <button
13059
13277
  type="button"
13060
13278
  class="relative inline-flex size-9 items-center justify-center rounded-md border border-input hover:bg-accent"
13061
13279
  [attr.aria-expanded]="open()"
13062
- aria-label="Notifications"
13280
+ [attr.aria-label]="ariaText()"
13063
13281
  (click)="open.set(!open())"
13064
13282
  >
13065
13283
  <svg
@@ -13087,12 +13305,12 @@ class BuiNotificationCenter {
13087
13305
  <div
13088
13306
  class="absolute end-0 z-50 mt-2 w-80 rounded-lg border bg-popover text-popover-foreground shadow-md"
13089
13307
  role="region"
13090
- aria-label="Notifications"
13308
+ [attr.aria-label]="ariaText()"
13091
13309
  >
13092
13310
  <div class="flex items-center justify-between border-b p-3">
13093
- <span class="text-sm font-medium">Notifications</span>
13311
+ <span class="text-sm font-medium">{{ ariaText() }}</span>
13094
13312
  <button type="button" class="text-xs font-medium text-primary" (click)="markAllRead()">
13095
- Mark all read
13313
+ {{ markAllReadText() }}
13096
13314
  </button>
13097
13315
  </div>
13098
13316
  <ul class="max-h-80 overflow-auto">
@@ -13113,12 +13331,12 @@ class BuiNotificationCenter {
13113
13331
  @if (!isRead(i)) {
13114
13332
  <span
13115
13333
  class="mt-1.5 size-2 shrink-0 rounded-full bg-primary"
13116
- aria-label="Unread"
13334
+ [attr.aria-label]="unreadText()"
13117
13335
  ></span>
13118
13336
  }
13119
13337
  </li>
13120
13338
  } @empty {
13121
- <li class="p-6 text-center text-sm text-muted-foreground">No notifications</li>
13339
+ <li class="p-6 text-center text-sm text-muted-foreground">{{ emptyText() }}</li>
13122
13340
  }
13123
13341
  </ul>
13124
13342
  </div>
@@ -13135,7 +13353,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
13135
13353
  type="button"
13136
13354
  class="relative inline-flex size-9 items-center justify-center rounded-md border border-input hover:bg-accent"
13137
13355
  [attr.aria-expanded]="open()"
13138
- aria-label="Notifications"
13356
+ [attr.aria-label]="ariaText()"
13139
13357
  (click)="open.set(!open())"
13140
13358
  >
13141
13359
  <svg
@@ -13163,12 +13381,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
13163
13381
  <div
13164
13382
  class="absolute end-0 z-50 mt-2 w-80 rounded-lg border bg-popover text-popover-foreground shadow-md"
13165
13383
  role="region"
13166
- aria-label="Notifications"
13384
+ [attr.aria-label]="ariaText()"
13167
13385
  >
13168
13386
  <div class="flex items-center justify-between border-b p-3">
13169
- <span class="text-sm font-medium">Notifications</span>
13387
+ <span class="text-sm font-medium">{{ ariaText() }}</span>
13170
13388
  <button type="button" class="text-xs font-medium text-primary" (click)="markAllRead()">
13171
- Mark all read
13389
+ {{ markAllReadText() }}
13172
13390
  </button>
13173
13391
  </div>
13174
13392
  <ul class="max-h-80 overflow-auto">
@@ -13189,19 +13407,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
13189
13407
  @if (!isRead(i)) {
13190
13408
  <span
13191
13409
  class="mt-1.5 size-2 shrink-0 rounded-full bg-primary"
13192
- aria-label="Unread"
13410
+ [attr.aria-label]="unreadText()"
13193
13411
  ></span>
13194
13412
  }
13195
13413
  </li>
13196
13414
  } @empty {
13197
- <li class="p-6 text-center text-sm text-muted-foreground">No notifications</li>
13415
+ <li class="p-6 text-center text-sm text-muted-foreground">{{ emptyText() }}</li>
13198
13416
  }
13199
13417
  </ul>
13200
13418
  </div>
13201
13419
  }
13202
13420
  `,
13203
13421
  }]
13204
- }], propDecorators: { notifications: [{ type: i0.Input, args: [{ isSignal: true, alias: "notifications", required: false }] }], open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }, { type: i0.Output, args: ["openChange"] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
13422
+ }], propDecorators: { notifications: [{ type: i0.Input, args: [{ isSignal: true, alias: "notifications", required: false }] }], open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }, { type: i0.Output, args: ["openChange"] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], unreadLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "unreadLabel", required: false }] }], markAllReadLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "markAllReadLabel", required: false }] }], emptyLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "emptyLabel", required: false }] }] } });
13205
13423
 
13206
13424
  /** A single JSON node; renders nested objects/arrays recursively. */
13207
13425
  class BuiJsonViewerNode {
@@ -13535,6 +13753,12 @@ class BuiMiniCart {
13535
13753
  open = model(false, /* @ts-ignore */
13536
13754
  ...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
13537
13755
  userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
13756
+ triggerLabel = input(/* @ts-ignore */
13757
+ ...(ngDevMode ? [undefined, { debugName: "triggerLabel" }] : /* istanbul ignore next */ []));
13758
+ label = input(/* @ts-ignore */
13759
+ ...(ngDevMode ? [undefined, { debugName: "label" }] : /* istanbul ignore next */ []));
13760
+ triggerText = buiLabel('miniCartTrigger', this.triggerLabel);
13761
+ labelText = buiLabel('miniCart', this.label);
13538
13762
  count = computed(() => this.items().reduce((total, item) => total + item.qty, 0), /* @ts-ignore */
13539
13763
  ...(ngDevMode ? [{ debugName: "count" }] : /* istanbul ignore next */ []));
13540
13764
  subtotal = computed(() => this.items().reduce((total, item) => total + item.price * item.qty, 0), /* @ts-ignore */
@@ -13546,12 +13770,12 @@ class BuiMiniCart {
13546
13770
  value.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 }));
13547
13771
  }
13548
13772
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiMiniCart, deps: [], target: i0.ɵɵFactoryTarget.Component });
13549
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiMiniCart, isStandalone: true, selector: "bui-mini-cart", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, currency: { classPropertyName: "currency", publicName: "currency", isSignal: true, isRequired: false, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "openChange" }, host: { attributes: { "data-slot": "mini-cart" }, properties: { "class": "computedClass()" } }, ngImport: i0, template: `
13773
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiMiniCart, isStandalone: true, selector: "bui-mini-cart", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, currency: { classPropertyName: "currency", publicName: "currency", isSignal: true, isRequired: false, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, triggerLabel: { classPropertyName: "triggerLabel", publicName: "triggerLabel", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "openChange" }, host: { attributes: { "data-slot": "mini-cart" }, properties: { "class": "computedClass()" } }, ngImport: i0, template: `
13550
13774
  <button
13551
13775
  type="button"
13552
13776
  class="relative inline-flex size-9 items-center justify-center rounded-md border border-input hover:bg-accent"
13553
13777
  [attr.aria-expanded]="open()"
13554
- aria-label="Cart"
13778
+ [attr.aria-label]="triggerText()"
13555
13779
  (click)="open.set(!open())"
13556
13780
  >
13557
13781
  <svg
@@ -13580,7 +13804,7 @@ class BuiMiniCart {
13580
13804
  <div
13581
13805
  class="absolute end-0 z-50 mt-2 w-80 rounded-lg border bg-popover text-popover-foreground shadow-md"
13582
13806
  role="dialog"
13583
- aria-label="Shopping cart"
13807
+ [attr.aria-label]="labelText()"
13584
13808
  >
13585
13809
  <div class="border-b p-3 text-sm font-medium">Your cart</div>
13586
13810
  @if (items().length === 0) {
@@ -13634,7 +13858,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
13634
13858
  type="button"
13635
13859
  class="relative inline-flex size-9 items-center justify-center rounded-md border border-input hover:bg-accent"
13636
13860
  [attr.aria-expanded]="open()"
13637
- aria-label="Cart"
13861
+ [attr.aria-label]="triggerText()"
13638
13862
  (click)="open.set(!open())"
13639
13863
  >
13640
13864
  <svg
@@ -13663,7 +13887,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
13663
13887
  <div
13664
13888
  class="absolute end-0 z-50 mt-2 w-80 rounded-lg border bg-popover text-popover-foreground shadow-md"
13665
13889
  role="dialog"
13666
- aria-label="Shopping cart"
13890
+ [attr.aria-label]="labelText()"
13667
13891
  >
13668
13892
  <div class="border-b p-3 text-sm font-medium">Your cart</div>
13669
13893
  @if (items().length === 0) {
@@ -13707,7 +13931,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
13707
13931
  }
13708
13932
  `,
13709
13933
  }]
13710
- }], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], currency: [{ type: i0.Input, args: [{ isSignal: true, alias: "currency", required: false }] }], open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }, { type: i0.Output, args: ["openChange"] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
13934
+ }], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], currency: [{ type: i0.Input, args: [{ isSignal: true, alias: "currency", required: false }] }], open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }, { type: i0.Output, args: ["openChange"] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], triggerLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "triggerLabel", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }] } });
13711
13935
 
13712
13936
  /** An SVG beam connecting two elements (by selector) with a travelling light. SSR-safe. */
13713
13937
  class BuiAnimatedBeam {
@@ -13931,6 +14155,9 @@ class BuiTreeTable {
13931
14155
  rows = input([], /* @ts-ignore */
13932
14156
  ...(ngDevMode ? [{ debugName: "rows" }] : /* istanbul ignore next */ []));
13933
14157
  userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
14158
+ toggleLabel = input(/* @ts-ignore */
14159
+ ...(ngDevMode ? [undefined, { debugName: "toggleLabel" }] : /* istanbul ignore next */ []));
14160
+ toggleText = buiLabel('treeTableToggle', this.toggleLabel);
13934
14161
  overrides = signal(new Map(), /* @ts-ignore */
13935
14162
  ...(ngDevMode ? [{ debugName: "overrides" }] : /* istanbul ignore next */ []));
13936
14163
  defaults = computed(() => {
@@ -13989,7 +14216,7 @@ class BuiTreeTable {
13989
14216
  return '';
13990
14217
  }
13991
14218
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiTreeTable, deps: [], target: i0.ɵɵFactoryTarget.Component });
13992
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiTreeTable, isStandalone: true, selector: "bui-tree-table", inputs: { columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "tree-table" }, properties: { "class": "computedClass()" } }, ngImport: i0, template: `
14219
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiTreeTable, isStandalone: true, selector: "bui-tree-table", inputs: { columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, toggleLabel: { classPropertyName: "toggleLabel", publicName: "toggleLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "tree-table" }, properties: { "class": "computedClass()" } }, ngImport: i0, template: `
13993
14220
  <table class="w-full text-sm">
13994
14221
  <thead>
13995
14222
  <tr class="border-b">
@@ -14015,7 +14242,7 @@ class BuiTreeTable {
14015
14242
  type="button"
14016
14243
  class="text-muted-foreground hover:text-foreground"
14017
14244
  [attr.aria-expanded]="isOpen(row.path)"
14018
- aria-label="Toggle row"
14245
+ [attr.aria-label]="toggleText()"
14019
14246
  (click)="toggle(row.path)"
14020
14247
  >
14021
14248
  <svg
@@ -14077,7 +14304,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
14077
14304
  type="button"
14078
14305
  class="text-muted-foreground hover:text-foreground"
14079
14306
  [attr.aria-expanded]="isOpen(row.path)"
14080
- aria-label="Toggle row"
14307
+ [attr.aria-label]="toggleText()"
14081
14308
  (click)="toggle(row.path)"
14082
14309
  >
14083
14310
  <svg
@@ -14108,7 +14335,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
14108
14335
  </table>
14109
14336
  `,
14110
14337
  }]
14111
- }], propDecorators: { columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: false }] }], rows: [{ type: i0.Input, args: [{ isSignal: true, alias: "rows", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
14338
+ }], propDecorators: { columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: false }] }], rows: [{ type: i0.Input, args: [{ isSignal: true, alias: "rows", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], toggleLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "toggleLabel", required: false }] }] } });
14112
14339
 
14113
14340
  // HTML is escaped first, then a safe subset of markdown is applied, so user input can't inject markup.
14114
14341
  function renderMarkdown(markdown) {
@@ -14255,6 +14482,18 @@ class BuiCalendar {
14255
14482
  disabled = model(false, /* @ts-ignore */
14256
14483
  ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
14257
14484
  userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
14485
+ previousMonthLabel = input(/* @ts-ignore */
14486
+ ...(ngDevMode ? [undefined, { debugName: "previousMonthLabel" }] : /* istanbul ignore next */ []));
14487
+ monthSelectLabel = input(/* @ts-ignore */
14488
+ ...(ngDevMode ? [undefined, { debugName: "monthSelectLabel" }] : /* istanbul ignore next */ []));
14489
+ yearLabel = input(/* @ts-ignore */
14490
+ ...(ngDevMode ? [undefined, { debugName: "yearLabel" }] : /* istanbul ignore next */ []));
14491
+ nextMonthLabel = input(/* @ts-ignore */
14492
+ ...(ngDevMode ? [undefined, { debugName: "nextMonthLabel" }] : /* istanbul ignore next */ []));
14493
+ previousMonthText = buiLabel('calendarPreviousMonth', this.previousMonthLabel);
14494
+ monthText = buiLabel('calendarMonth', this.monthSelectLabel);
14495
+ yearText = buiLabel('calendarYear', this.yearLabel);
14496
+ nextMonthText = buiLabel('calendarNextMonth', this.nextMonthLabel);
14258
14497
  onChange = noop$4;
14259
14498
  onTouched = noop$4;
14260
14499
  view = signal(new Date(new Date().getFullYear(), new Date().getMonth(), 1), /* @ts-ignore */
@@ -14421,14 +14660,14 @@ class BuiCalendar {
14421
14660
  return false;
14422
14661
  }
14423
14662
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiCalendar, deps: [], target: i0.ɵɵFactoryTarget.Component });
14424
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiCalendar, isStandalone: true, selector: "bui-calendar", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, range: { classPropertyName: "range", publicName: "range", isSignal: true, isRequired: false, transformFunction: null }, values: { classPropertyName: "values", publicName: "values", isSignal: true, isRequired: false, transformFunction: null }, months: { classPropertyName: "months", publicName: "months", isSignal: true, isRequired: false, transformFunction: null }, weekStart: { classPropertyName: "weekStart", publicName: "weekStart", isSignal: true, isRequired: false, transformFunction: null }, minDate: { classPropertyName: "minDate", publicName: "minDate", isSignal: true, isRequired: false, transformFunction: null }, maxDate: { classPropertyName: "maxDate", publicName: "maxDate", isSignal: true, isRequired: false, transformFunction: null }, disabledDates: { classPropertyName: "disabledDates", publicName: "disabledDates", isSignal: true, isRequired: false, transformFunction: null }, disableWeekends: { classPropertyName: "disableWeekends", publicName: "disableWeekends", isSignal: true, isRequired: false, transformFunction: null }, showWeekNumbers: { classPropertyName: "showWeekNumbers", publicName: "showWeekNumbers", isSignal: true, isRequired: false, transformFunction: null }, captionLayout: { classPropertyName: "captionLayout", publicName: "captionLayout", isSignal: true, isRequired: false, transformFunction: null }, hideOutsideDays: { classPropertyName: "hideOutsideDays", publicName: "hideOutsideDays", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", range: "rangeChange", values: "valuesChange", disabled: "disabledChange" }, host: { attributes: { "data-slot": "calendar" }, listeners: { "focusout": "onTouched()" }, properties: { "class": "computedClass()" } }, providers: [
14663
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiCalendar, isStandalone: true, selector: "bui-calendar", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, range: { classPropertyName: "range", publicName: "range", isSignal: true, isRequired: false, transformFunction: null }, values: { classPropertyName: "values", publicName: "values", isSignal: true, isRequired: false, transformFunction: null }, months: { classPropertyName: "months", publicName: "months", isSignal: true, isRequired: false, transformFunction: null }, weekStart: { classPropertyName: "weekStart", publicName: "weekStart", isSignal: true, isRequired: false, transformFunction: null }, minDate: { classPropertyName: "minDate", publicName: "minDate", isSignal: true, isRequired: false, transformFunction: null }, maxDate: { classPropertyName: "maxDate", publicName: "maxDate", isSignal: true, isRequired: false, transformFunction: null }, disabledDates: { classPropertyName: "disabledDates", publicName: "disabledDates", isSignal: true, isRequired: false, transformFunction: null }, disableWeekends: { classPropertyName: "disableWeekends", publicName: "disableWeekends", isSignal: true, isRequired: false, transformFunction: null }, showWeekNumbers: { classPropertyName: "showWeekNumbers", publicName: "showWeekNumbers", isSignal: true, isRequired: false, transformFunction: null }, captionLayout: { classPropertyName: "captionLayout", publicName: "captionLayout", isSignal: true, isRequired: false, transformFunction: null }, hideOutsideDays: { classPropertyName: "hideOutsideDays", publicName: "hideOutsideDays", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, previousMonthLabel: { classPropertyName: "previousMonthLabel", publicName: "previousMonthLabel", isSignal: true, isRequired: false, transformFunction: null }, monthSelectLabel: { classPropertyName: "monthSelectLabel", publicName: "monthSelectLabel", isSignal: true, isRequired: false, transformFunction: null }, yearLabel: { classPropertyName: "yearLabel", publicName: "yearLabel", isSignal: true, isRequired: false, transformFunction: null }, nextMonthLabel: { classPropertyName: "nextMonthLabel", publicName: "nextMonthLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", range: "rangeChange", values: "valuesChange", disabled: "disabledChange" }, host: { attributes: { "data-slot": "calendar" }, listeners: { "focusout": "onTouched()" }, properties: { "class": "computedClass()" } }, providers: [
14425
14664
  { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => BuiCalendar), multi: true },
14426
14665
  ], ngImport: i0, template: `
14427
14666
  <div class="flex items-center justify-between pb-2">
14428
14667
  <button
14429
14668
  type="button"
14430
14669
  class="inline-flex size-7 items-center justify-center rounded-md hover:bg-accent"
14431
- aria-label="Previous month"
14670
+ [attr.aria-label]="previousMonthText()"
14432
14671
  (click)="changeMonth(-1)"
14433
14672
  >
14434
14673
  <svg
@@ -14447,7 +14686,7 @@ class BuiCalendar {
14447
14686
  @if (months() === 1 && captionLayout() === 'dropdown') {
14448
14687
  <div class="flex items-center gap-1">
14449
14688
  <select
14450
- aria-label="Month"
14689
+ [attr.aria-label]="monthText()"
14451
14690
  class="rounded-md border-0 bg-transparent py-1 text-sm font-medium outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50"
14452
14691
  [value]="viewMonth()"
14453
14692
  (change)="setMonth($event)"
@@ -14457,7 +14696,7 @@ class BuiCalendar {
14457
14696
  }
14458
14697
  </select>
14459
14698
  <select
14460
- aria-label="Year"
14699
+ [attr.aria-label]="yearText()"
14461
14700
  class="rounded-md border-0 bg-transparent py-1 text-sm font-medium outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50"
14462
14701
  [value]="viewYear()"
14463
14702
  (change)="setYear($event)"
@@ -14475,7 +14714,7 @@ class BuiCalendar {
14475
14714
  <button
14476
14715
  type="button"
14477
14716
  class="inline-flex size-7 items-center justify-center rounded-md hover:bg-accent"
14478
- aria-label="Next month"
14717
+ [attr.aria-label]="nextMonthText()"
14479
14718
  (click)="changeMonth(1)"
14480
14719
  >
14481
14720
  <svg
@@ -14562,7 +14801,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
14562
14801
  <button
14563
14802
  type="button"
14564
14803
  class="inline-flex size-7 items-center justify-center rounded-md hover:bg-accent"
14565
- aria-label="Previous month"
14804
+ [attr.aria-label]="previousMonthText()"
14566
14805
  (click)="changeMonth(-1)"
14567
14806
  >
14568
14807
  <svg
@@ -14581,7 +14820,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
14581
14820
  @if (months() === 1 && captionLayout() === 'dropdown') {
14582
14821
  <div class="flex items-center gap-1">
14583
14822
  <select
14584
- aria-label="Month"
14823
+ [attr.aria-label]="monthText()"
14585
14824
  class="rounded-md border-0 bg-transparent py-1 text-sm font-medium outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50"
14586
14825
  [value]="viewMonth()"
14587
14826
  (change)="setMonth($event)"
@@ -14591,7 +14830,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
14591
14830
  }
14592
14831
  </select>
14593
14832
  <select
14594
- aria-label="Year"
14833
+ [attr.aria-label]="yearText()"
14595
14834
  class="rounded-md border-0 bg-transparent py-1 text-sm font-medium outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50"
14596
14835
  [value]="viewYear()"
14597
14836
  (change)="setYear($event)"
@@ -14609,7 +14848,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
14609
14848
  <button
14610
14849
  type="button"
14611
14850
  class="inline-flex size-7 items-center justify-center rounded-md hover:bg-accent"
14612
- aria-label="Next month"
14851
+ [attr.aria-label]="nextMonthText()"
14613
14852
  (click)="changeMonth(1)"
14614
14853
  >
14615
14854
  <svg
@@ -14683,7 +14922,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
14683
14922
  </div>
14684
14923
  `,
14685
14924
  }]
14686
- }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], range: [{ type: i0.Input, args: [{ isSignal: true, alias: "range", required: false }] }, { type: i0.Output, args: ["rangeChange"] }], values: [{ type: i0.Input, args: [{ isSignal: true, alias: "values", required: false }] }, { type: i0.Output, args: ["valuesChange"] }], months: [{ type: i0.Input, args: [{ isSignal: true, alias: "months", required: false }] }], weekStart: [{ type: i0.Input, args: [{ isSignal: true, alias: "weekStart", required: false }] }], minDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "minDate", required: false }] }], maxDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxDate", required: false }] }], disabledDates: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabledDates", required: false }] }], disableWeekends: [{ type: i0.Input, args: [{ isSignal: true, alias: "disableWeekends", required: false }] }], showWeekNumbers: [{ type: i0.Input, args: [{ isSignal: true, alias: "showWeekNumbers", required: false }] }], captionLayout: [{ type: i0.Input, args: [{ isSignal: true, alias: "captionLayout", required: false }] }], hideOutsideDays: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideOutsideDays", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }, { type: i0.Output, args: ["disabledChange"] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
14925
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], range: [{ type: i0.Input, args: [{ isSignal: true, alias: "range", required: false }] }, { type: i0.Output, args: ["rangeChange"] }], values: [{ type: i0.Input, args: [{ isSignal: true, alias: "values", required: false }] }, { type: i0.Output, args: ["valuesChange"] }], months: [{ type: i0.Input, args: [{ isSignal: true, alias: "months", required: false }] }], weekStart: [{ type: i0.Input, args: [{ isSignal: true, alias: "weekStart", required: false }] }], minDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "minDate", required: false }] }], maxDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxDate", required: false }] }], disabledDates: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabledDates", required: false }] }], disableWeekends: [{ type: i0.Input, args: [{ isSignal: true, alias: "disableWeekends", required: false }] }], showWeekNumbers: [{ type: i0.Input, args: [{ isSignal: true, alias: "showWeekNumbers", required: false }] }], captionLayout: [{ type: i0.Input, args: [{ isSignal: true, alias: "captionLayout", required: false }] }], hideOutsideDays: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideOutsideDays", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }, { type: i0.Output, args: ["disabledChange"] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], previousMonthLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "previousMonthLabel", required: false }] }], monthSelectLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "monthSelectLabel", required: false }] }], yearLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "yearLabel", required: false }] }], nextMonthLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "nextMonthLabel", required: false }] }] } });
14687
14926
 
14688
14927
  // eslint-disable-next-line @typescript-eslint/no-empty-function
14689
14928
  const noop$3 = () => { };
@@ -14826,7 +15065,7 @@ class BuiDatePicker {
14826
15065
  />
14827
15066
  </div>
14828
15067
  }
14829
- `, isInline: true, dependencies: [{ kind: "component", type: BuiCalendar, selector: "bui-calendar", inputs: ["value", "mode", "range", "values", "months", "weekStart", "minDate", "maxDate", "disabledDates", "disableWeekends", "showWeekNumbers", "captionLayout", "hideOutsideDays", "disabled", "class"], outputs: ["valueChange", "rangeChange", "valuesChange", "disabledChange"] }] });
15068
+ `, isInline: true, dependencies: [{ kind: "component", type: BuiCalendar, selector: "bui-calendar", inputs: ["value", "mode", "range", "values", "months", "weekStart", "minDate", "maxDate", "disabledDates", "disableWeekends", "showWeekNumbers", "captionLayout", "hideOutsideDays", "disabled", "class", "previousMonthLabel", "monthSelectLabel", "yearLabel", "nextMonthLabel"], outputs: ["valueChange", "rangeChange", "valuesChange", "disabledChange"] }] });
14830
15069
  }
14831
15070
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiDatePicker, decorators: [{
14832
15071
  type: Component,
@@ -14898,6 +15137,15 @@ class BuiCarousel {
14898
15137
  perView = input(1, /* @ts-ignore */
14899
15138
  ...(ngDevMode ? [{ debugName: "perView" }] : /* istanbul ignore next */ []));
14900
15139
  userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
15140
+ previousLabel = input(/* @ts-ignore */
15141
+ ...(ngDevMode ? [undefined, { debugName: "previousLabel" }] : /* istanbul ignore next */ []));
15142
+ nextLabel = input(/* @ts-ignore */
15143
+ ...(ngDevMode ? [undefined, { debugName: "nextLabel" }] : /* istanbul ignore next */ []));
15144
+ goToSlideLabel = input(/* @ts-ignore */
15145
+ ...(ngDevMode ? [undefined, { debugName: "goToSlideLabel" }] : /* istanbul ignore next */ []));
15146
+ previousText = buiLabel('carouselPrevious', this.previousLabel);
15147
+ nextText = buiLabel('carouselNext', this.nextLabel);
15148
+ goToSlideText = buiLabel('carouselGoToSlide', this.goToSlideLabel);
14901
15149
  track = viewChild('track', /* @ts-ignore */
14902
15150
  ...(ngDevMode ? [{ debugName: "track" }] : /* istanbul ignore next */ []));
14903
15151
  count = signal(0, /* @ts-ignore */
@@ -14937,7 +15185,7 @@ class BuiCarousel {
14937
15185
  this.index.set(Math.min(this.maxIndex(), this.index() + 1));
14938
15186
  }
14939
15187
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiCarousel, deps: [], target: i0.ɵɵFactoryTarget.Component });
14940
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiCarousel, isStandalone: true, selector: "bui-carousel", inputs: { index: { classPropertyName: "index", publicName: "index", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, perView: { classPropertyName: "perView", publicName: "perView", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { index: "indexChange" }, host: { attributes: { "data-slot": "carousel", "role": "region", "aria-roledescription": "carousel" }, properties: { "class": "computedClass()" } }, viewQueries: [{ propertyName: "track", first: true, predicate: ["track"], descendants: true, isSignal: true }], ngImport: i0, template: `
15188
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiCarousel, isStandalone: true, selector: "bui-carousel", inputs: { index: { classPropertyName: "index", publicName: "index", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, perView: { classPropertyName: "perView", publicName: "perView", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, previousLabel: { classPropertyName: "previousLabel", publicName: "previousLabel", isSignal: true, isRequired: false, transformFunction: null }, nextLabel: { classPropertyName: "nextLabel", publicName: "nextLabel", isSignal: true, isRequired: false, transformFunction: null }, goToSlideLabel: { classPropertyName: "goToSlideLabel", publicName: "goToSlideLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { index: "indexChange" }, host: { attributes: { "data-slot": "carousel", "role": "region", "aria-roledescription": "carousel" }, properties: { "class": "computedClass()" } }, viewQueries: [{ propertyName: "track", first: true, predicate: ["track"], descendants: true, isSignal: true }], ngImport: i0, template: `
14941
15189
  <div [class]="viewportClass()">
14942
15190
  <div
14943
15191
  #track
@@ -14952,7 +15200,7 @@ class BuiCarousel {
14952
15200
  type="button"
14953
15201
  [class]="prevClass()"
14954
15202
  [disabled]="index() === 0"
14955
- aria-label="Previous slide"
15203
+ [attr.aria-label]="previousText()"
14956
15204
  (click)="prev()"
14957
15205
  >
14958
15206
  <svg
@@ -14972,7 +15220,7 @@ class BuiCarousel {
14972
15220
  type="button"
14973
15221
  [class]="nextClass()"
14974
15222
  [disabled]="index() >= maxIndex()"
14975
- aria-label="Next slide"
15223
+ [attr.aria-label]="nextText()"
14976
15224
  (click)="next()"
14977
15225
  >
14978
15226
  <svg
@@ -14995,7 +15243,7 @@ class BuiCarousel {
14995
15243
  type="button"
14996
15244
  class="size-2 rounded-full transition-colors"
14997
15245
  [class]="dot === index() ? 'bg-primary' : 'bg-muted'"
14998
- [attr.aria-label]="'Go to slide ' + (dot + 1)"
15246
+ [attr.aria-label]="goToSlideText() + ' ' + (dot + 1)"
14999
15247
  [attr.aria-current]="dot === index() ? 'true' : null"
15000
15248
  (click)="index.set(dot)"
15001
15249
  ></button>
@@ -15029,7 +15277,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
15029
15277
  type="button"
15030
15278
  [class]="prevClass()"
15031
15279
  [disabled]="index() === 0"
15032
- aria-label="Previous slide"
15280
+ [attr.aria-label]="previousText()"
15033
15281
  (click)="prev()"
15034
15282
  >
15035
15283
  <svg
@@ -15049,7 +15297,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
15049
15297
  type="button"
15050
15298
  [class]="nextClass()"
15051
15299
  [disabled]="index() >= maxIndex()"
15052
- aria-label="Next slide"
15300
+ [attr.aria-label]="nextText()"
15053
15301
  (click)="next()"
15054
15302
  >
15055
15303
  <svg
@@ -15072,7 +15320,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
15072
15320
  type="button"
15073
15321
  class="size-2 rounded-full transition-colors"
15074
15322
  [class]="dot === index() ? 'bg-primary' : 'bg-muted'"
15075
- [attr.aria-label]="'Go to slide ' + (dot + 1)"
15323
+ [attr.aria-label]="goToSlideText() + ' ' + (dot + 1)"
15076
15324
  [attr.aria-current]="dot === index() ? 'true' : null"
15077
15325
  (click)="index.set(dot)"
15078
15326
  ></button>
@@ -15081,7 +15329,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
15081
15329
  }
15082
15330
  `,
15083
15331
  }]
15084
- }], ctorParameters: () => [], propDecorators: { index: [{ type: i0.Input, args: [{ isSignal: true, alias: "index", required: false }] }, { type: i0.Output, args: ["indexChange"] }], orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], perView: [{ type: i0.Input, args: [{ isSignal: true, alias: "perView", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], track: [{ type: i0.ViewChild, args: ['track', { isSignal: true }] }] } });
15332
+ }], ctorParameters: () => [], propDecorators: { index: [{ type: i0.Input, args: [{ isSignal: true, alias: "index", required: false }] }, { type: i0.Output, args: ["indexChange"] }], orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], perView: [{ type: i0.Input, args: [{ isSignal: true, alias: "perView", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], previousLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "previousLabel", required: false }] }], nextLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "nextLabel", required: false }] }], goToSlideLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "goToSlideLabel", required: false }] }], track: [{ type: i0.ViewChild, args: ['track', { isSignal: true }] }] } });
15085
15333
 
15086
15334
  /** A command palette: a filterable, keyboard-navigable list of grouped actions. */
15087
15335
  class BuiCommand {
@@ -15605,6 +15853,15 @@ class BuiDataTable {
15605
15853
  pageSize = input(5, /* @ts-ignore */
15606
15854
  ...(ngDevMode ? [{ debugName: "pageSize" }] : /* istanbul ignore next */ []));
15607
15855
  userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
15856
+ searchLabel = input(/* @ts-ignore */
15857
+ ...(ngDevMode ? [undefined, { debugName: "searchLabel" }] : /* istanbul ignore next */ []));
15858
+ selectAllLabel = input(/* @ts-ignore */
15859
+ ...(ngDevMode ? [undefined, { debugName: "selectAllLabel" }] : /* istanbul ignore next */ []));
15860
+ selectRowLabel = input(/* @ts-ignore */
15861
+ ...(ngDevMode ? [undefined, { debugName: "selectRowLabel" }] : /* istanbul ignore next */ []));
15862
+ searchText = buiLabel('dataTableSearch', this.searchLabel);
15863
+ selectAllText = buiLabel('dataTableSelectAll', this.selectAllLabel);
15864
+ selectRowText = buiLabel('dataTableSelectRow', this.selectRowLabel);
15608
15865
  query = signal('', /* @ts-ignore */
15609
15866
  ...(ngDevMode ? [{ debugName: "query" }] : /* istanbul ignore next */ []));
15610
15867
  sortKey = signal('', /* @ts-ignore */
@@ -15690,14 +15947,14 @@ class BuiDataTable {
15690
15947
  this.selectedRows.set(isChecked ? new Set(this.filtered()) : new Set());
15691
15948
  }
15692
15949
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiDataTable, deps: [], target: i0.ɵɵFactoryTarget.Component });
15693
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiDataTable, isStandalone: true, selector: "bui-data-table", inputs: { columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, searchable: { classPropertyName: "searchable", publicName: "searchable", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholder: { classPropertyName: "searchPlaceholder", publicName: "searchPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, selectable: { classPropertyName: "selectable", publicName: "selectable", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "data-table" }, properties: { "class": "computedClass()" } }, ngImport: i0, template: `
15950
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiDataTable, isStandalone: true, selector: "bui-data-table", inputs: { columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, searchable: { classPropertyName: "searchable", publicName: "searchable", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholder: { classPropertyName: "searchPlaceholder", publicName: "searchPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, selectable: { classPropertyName: "selectable", publicName: "selectable", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, searchLabel: { classPropertyName: "searchLabel", publicName: "searchLabel", isSignal: true, isRequired: false, transformFunction: null }, selectAllLabel: { classPropertyName: "selectAllLabel", publicName: "selectAllLabel", isSignal: true, isRequired: false, transformFunction: null }, selectRowLabel: { classPropertyName: "selectRowLabel", publicName: "selectRowLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "data-table" }, properties: { "class": "computedClass()" } }, ngImport: i0, template: `
15694
15951
  @if (searchable()) {
15695
15952
  <input
15696
15953
  type="search"
15697
15954
  [value]="query()"
15698
15955
  [placeholder]="searchPlaceholder()"
15699
15956
  class="mb-3 h-9 w-full max-w-xs rounded-md border border-input bg-transparent px-3 text-sm shadow-xs outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50"
15700
- aria-label="Search"
15957
+ [attr.aria-label]="searchText()"
15701
15958
  (input)="onSearch($event)"
15702
15959
  />
15703
15960
  }
@@ -15711,7 +15968,7 @@ class BuiDataTable {
15711
15968
  type="checkbox"
15712
15969
  [checked]="allSelected()"
15713
15970
  [indeterminate]="someSelected()"
15714
- aria-label="Select all rows"
15971
+ [attr.aria-label]="selectAllText()"
15715
15972
  (change)="toggleAll($event)"
15716
15973
  />
15717
15974
  </th>
@@ -15744,7 +16001,7 @@ class BuiDataTable {
15744
16001
  <input
15745
16002
  type="checkbox"
15746
16003
  [checked]="isSelected(row)"
15747
- aria-label="Select row"
16004
+ [attr.aria-label]="selectRowText()"
15748
16005
  (change)="toggleRow(row)"
15749
16006
  />
15750
16007
  </td>
@@ -15803,7 +16060,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
15803
16060
  [value]="query()"
15804
16061
  [placeholder]="searchPlaceholder()"
15805
16062
  class="mb-3 h-9 w-full max-w-xs rounded-md border border-input bg-transparent px-3 text-sm shadow-xs outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50"
15806
- aria-label="Search"
16063
+ [attr.aria-label]="searchText()"
15807
16064
  (input)="onSearch($event)"
15808
16065
  />
15809
16066
  }
@@ -15817,7 +16074,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
15817
16074
  type="checkbox"
15818
16075
  [checked]="allSelected()"
15819
16076
  [indeterminate]="someSelected()"
15820
- aria-label="Select all rows"
16077
+ [attr.aria-label]="selectAllText()"
15821
16078
  (change)="toggleAll($event)"
15822
16079
  />
15823
16080
  </th>
@@ -15850,7 +16107,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
15850
16107
  <input
15851
16108
  type="checkbox"
15852
16109
  [checked]="isSelected(row)"
15853
- aria-label="Select row"
16110
+ [attr.aria-label]="selectRowText()"
15854
16111
  (change)="toggleRow(row)"
15855
16112
  />
15856
16113
  </td>
@@ -15897,7 +16154,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
15897
16154
  </div>
15898
16155
  `,
15899
16156
  }]
15900
- }], propDecorators: { columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: false }] }], rows: [{ type: i0.Input, args: [{ isSignal: true, alias: "rows", required: false }] }], searchable: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchable", required: false }] }], searchPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchPlaceholder", required: false }] }], selectable: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectable", required: false }] }], pageSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageSize", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
16157
+ }], propDecorators: { columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: false }] }], rows: [{ type: i0.Input, args: [{ isSignal: true, alias: "rows", required: false }] }], searchable: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchable", required: false }] }], searchPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchPlaceholder", required: false }] }], selectable: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectable", required: false }] }], pageSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageSize", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], searchLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchLabel", required: false }] }], selectAllLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectAllLabel", required: false }] }], selectRowLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectRowLabel", required: false }] }] } });
15901
16158
 
15902
16159
  const PALETTE = ['#6366f1', '#22c55e', '#f59e0b', '#ec4899', '#06b6d4'];
15903
16160
  const WIDTH = 600;
@@ -16237,7 +16494,7 @@ class BuiDatetimePicker {
16237
16494
  </div>
16238
16495
  </div>
16239
16496
  }
16240
- `, isInline: true, dependencies: [{ kind: "component", type: BuiCalendar, selector: "bui-calendar", inputs: ["value", "mode", "range", "values", "months", "weekStart", "minDate", "maxDate", "disabledDates", "disableWeekends", "showWeekNumbers", "captionLayout", "hideOutsideDays", "disabled", "class"], outputs: ["valueChange", "rangeChange", "valuesChange", "disabledChange"] }, { kind: "component", type: BuiTimeField, selector: "bui-time-field", inputs: ["value", "name", "id", "min", "max", "seconds", "disabled", "mode", "minuteStep", "ariaLabel", "class"], outputs: ["valueChange", "disabledChange"] }] });
16497
+ `, isInline: true, dependencies: [{ kind: "component", type: BuiCalendar, selector: "bui-calendar", inputs: ["value", "mode", "range", "values", "months", "weekStart", "minDate", "maxDate", "disabledDates", "disableWeekends", "showWeekNumbers", "captionLayout", "hideOutsideDays", "disabled", "class", "previousMonthLabel", "monthSelectLabel", "yearLabel", "nextMonthLabel"], outputs: ["valueChange", "rangeChange", "valuesChange", "disabledChange"] }, { kind: "component", type: BuiTimeField, selector: "bui-time-field", inputs: ["value", "name", "id", "min", "max", "seconds", "disabled", "mode", "minuteStep", "ariaLabel", "class"], outputs: ["valueChange", "disabledChange"] }] });
16241
16498
  }
16242
16499
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiDatetimePicker, decorators: [{
16243
16500
  type: Component,
@@ -16686,6 +16943,9 @@ class BuiComparisonSlider {
16686
16943
  value = model(50, /* @ts-ignore */
16687
16944
  ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
16688
16945
  userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
16946
+ positionLabel = input(/* @ts-ignore */
16947
+ ...(ngDevMode ? [undefined, { debugName: "positionLabel" }] : /* istanbul ignore next */ []));
16948
+ positionText = buiLabel('comparisonSliderPosition', this.positionLabel);
16689
16949
  clip = computed(() => `inset(0 ${100 - this.value()}% 0 0)`, /* @ts-ignore */
16690
16950
  ...(ngDevMode ? [{ debugName: "clip" }] : /* istanbul ignore next */ []));
16691
16951
  computedClass = computed(() => cn('block', this.userClass()), /* @ts-ignore */
@@ -16694,7 +16954,7 @@ class BuiComparisonSlider {
16694
16954
  this.value.set(Number(event.target.value));
16695
16955
  }
16696
16956
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiComparisonSlider, deps: [], target: i0.ɵɵFactoryTarget.Component });
16697
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiComparisonSlider, isStandalone: true, selector: "bui-comparison-slider", inputs: { before: { classPropertyName: "before", publicName: "before", isSignal: true, isRequired: false, transformFunction: null }, after: { classPropertyName: "after", publicName: "after", isSignal: true, isRequired: false, transformFunction: null }, beforeLabel: { classPropertyName: "beforeLabel", publicName: "beforeLabel", isSignal: true, isRequired: false, transformFunction: null }, afterLabel: { classPropertyName: "afterLabel", publicName: "afterLabel", isSignal: true, isRequired: false, transformFunction: null }, beforeAlt: { classPropertyName: "beforeAlt", publicName: "beforeAlt", isSignal: true, isRequired: false, transformFunction: null }, afterAlt: { classPropertyName: "afterAlt", publicName: "afterAlt", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { attributes: { "data-slot": "comparison-slider" }, properties: { "class": "computedClass()" } }, ngImport: i0, template: `
16957
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiComparisonSlider, isStandalone: true, selector: "bui-comparison-slider", inputs: { before: { classPropertyName: "before", publicName: "before", isSignal: true, isRequired: false, transformFunction: null }, after: { classPropertyName: "after", publicName: "after", isSignal: true, isRequired: false, transformFunction: null }, beforeLabel: { classPropertyName: "beforeLabel", publicName: "beforeLabel", isSignal: true, isRequired: false, transformFunction: null }, afterLabel: { classPropertyName: "afterLabel", publicName: "afterLabel", isSignal: true, isRequired: false, transformFunction: null }, beforeAlt: { classPropertyName: "beforeAlt", publicName: "beforeAlt", isSignal: true, isRequired: false, transformFunction: null }, afterAlt: { classPropertyName: "afterAlt", publicName: "afterAlt", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, positionLabel: { classPropertyName: "positionLabel", publicName: "positionLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { attributes: { "data-slot": "comparison-slider" }, properties: { "class": "computedClass()" } }, ngImport: i0, template: `
16698
16958
  <div class="relative overflow-hidden rounded-lg select-none">
16699
16959
  <img [src]="after()" [alt]="afterAlt()" class="block w-full" draggable="false" />
16700
16960
  <div class="absolute inset-0 overflow-hidden" [style.clip-path]="clip()">
@@ -16724,7 +16984,7 @@ class BuiComparisonSlider {
16724
16984
  min="0"
16725
16985
  max="100"
16726
16986
  [value]="value()"
16727
- aria-label="Comparison position"
16987
+ [attr.aria-label]="positionText()"
16728
16988
  class="absolute inset-0 size-full cursor-ew-resize opacity-0"
16729
16989
  (input)="onInput($event)"
16730
16990
  />
@@ -16766,14 +17026,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
16766
17026
  min="0"
16767
17027
  max="100"
16768
17028
  [value]="value()"
16769
- aria-label="Comparison position"
17029
+ [attr.aria-label]="positionText()"
16770
17030
  class="absolute inset-0 size-full cursor-ew-resize opacity-0"
16771
17031
  (input)="onInput($event)"
16772
17032
  />
16773
17033
  </div>
16774
17034
  `,
16775
17035
  }]
16776
- }], propDecorators: { before: [{ type: i0.Input, args: [{ isSignal: true, alias: "before", required: false }] }], after: [{ type: i0.Input, args: [{ isSignal: true, alias: "after", required: false }] }], beforeLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "beforeLabel", required: false }] }], afterLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "afterLabel", required: false }] }], beforeAlt: [{ type: i0.Input, args: [{ isSignal: true, alias: "beforeAlt", required: false }] }], afterAlt: [{ type: i0.Input, args: [{ isSignal: true, alias: "afterAlt", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
17036
+ }], propDecorators: { before: [{ type: i0.Input, args: [{ isSignal: true, alias: "before", required: false }] }], after: [{ type: i0.Input, args: [{ isSignal: true, alias: "after", required: false }] }], beforeLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "beforeLabel", required: false }] }], afterLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "afterLabel", required: false }] }], beforeAlt: [{ type: i0.Input, args: [{ isSignal: true, alias: "beforeAlt", required: false }] }], afterAlt: [{ type: i0.Input, args: [{ isSignal: true, alias: "afterAlt", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], positionLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "positionLabel", required: false }] }] } });
16777
17037
 
16778
17038
  function formatSize(bytes) {
16779
17039
  if (bytes < 1024) {
@@ -16798,6 +17058,12 @@ class BuiFileUpload {
16798
17058
  ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
16799
17059
  filesChange = output();
16800
17060
  userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
17061
+ dropzoneLabel = input(/* @ts-ignore */
17062
+ ...(ngDevMode ? [undefined, { debugName: "dropzoneLabel" }] : /* istanbul ignore next */ []));
17063
+ removeLabel = input(/* @ts-ignore */
17064
+ ...(ngDevMode ? [undefined, { debugName: "removeLabel" }] : /* istanbul ignore next */ []));
17065
+ dropzoneText = buiLabel('fileUploadDropzone', this.dropzoneLabel);
17066
+ removeText = buiLabel('fileUploadRemove', this.removeLabel);
16801
17067
  dragging = signal(false, /* @ts-ignore */
16802
17068
  ...(ngDevMode ? [{ debugName: "dragging" }] : /* istanbul ignore next */ []));
16803
17069
  files = signal([], /* @ts-ignore */
@@ -16825,7 +17091,7 @@ class BuiFileUpload {
16825
17091
  this.filesChange.emit(next);
16826
17092
  }
16827
17093
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiFileUpload, deps: [], target: i0.ɵɵFactoryTarget.Component });
16828
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiFileUpload, isStandalone: true, selector: "bui-file-upload", inputs: { multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, accept: { classPropertyName: "accept", publicName: "accept", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { filesChange: "filesChange" }, host: { attributes: { "data-slot": "file-upload" }, properties: { "class": "computedClass()" } }, ngImport: i0, template: `
17094
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiFileUpload, isStandalone: true, selector: "bui-file-upload", inputs: { multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, accept: { classPropertyName: "accept", publicName: "accept", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, dropzoneLabel: { classPropertyName: "dropzoneLabel", publicName: "dropzoneLabel", isSignal: true, isRequired: false, transformFunction: null }, removeLabel: { classPropertyName: "removeLabel", publicName: "removeLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { filesChange: "filesChange" }, host: { attributes: { "data-slot": "file-upload" }, properties: { "class": "computedClass()" } }, ngImport: i0, template: `
16829
17095
  <label [class]="zoneClass()">
16830
17096
  <input
16831
17097
  type="file"
@@ -16848,7 +17114,7 @@ class BuiFileUpload {
16848
17114
  >
16849
17115
  <path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4M17 8l-5-5-5 5M12 3v12" />
16850
17116
  </svg>
16851
- <span class="text-sm font-medium">Click to upload or drag &amp; drop</span>
17117
+ <span class="text-sm font-medium">{{ dropzoneText() }}</span>
16852
17118
  @if (hint()) {
16853
17119
  <span class="text-xs text-muted-foreground">{{ hint() }}</span>
16854
17120
  }
@@ -16877,7 +17143,7 @@ class BuiFileUpload {
16877
17143
  <button
16878
17144
  type="button"
16879
17145
  class="rounded-sm p-1 hover:bg-accent"
16880
- aria-label="Remove file"
17146
+ [attr.aria-label]="removeText()"
16881
17147
  (click)="remove(file)"
16882
17148
  >
16883
17149
  <svg
@@ -16927,7 +17193,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
16927
17193
  >
16928
17194
  <path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4M17 8l-5-5-5 5M12 3v12" />
16929
17195
  </svg>
16930
- <span class="text-sm font-medium">Click to upload or drag &amp; drop</span>
17196
+ <span class="text-sm font-medium">{{ dropzoneText() }}</span>
16931
17197
  @if (hint()) {
16932
17198
  <span class="text-xs text-muted-foreground">{{ hint() }}</span>
16933
17199
  }
@@ -16956,7 +17222,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
16956
17222
  <button
16957
17223
  type="button"
16958
17224
  class="rounded-sm p-1 hover:bg-accent"
16959
- aria-label="Remove file"
17225
+ [attr.aria-label]="removeText()"
16960
17226
  (click)="remove(file)"
16961
17227
  >
16962
17228
  <svg
@@ -16978,7 +17244,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
16978
17244
  }
16979
17245
  `,
16980
17246
  }]
16981
- }], propDecorators: { multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], accept: [{ type: i0.Input, args: [{ isSignal: true, alias: "accept", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], hint: [{ type: i0.Input, args: [{ isSignal: true, alias: "hint", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], filesChange: [{ type: i0.Output, args: ["filesChange"] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
17247
+ }], propDecorators: { multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], accept: [{ type: i0.Input, args: [{ isSignal: true, alias: "accept", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], hint: [{ type: i0.Input, args: [{ isSignal: true, alias: "hint", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], filesChange: [{ type: i0.Output, args: ["filesChange"] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], dropzoneLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "dropzoneLabel", required: false }] }], removeLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "removeLabel", required: false }] }] } });
16982
17248
 
16983
17249
  /**
16984
17250
  * An NProgress-style top loading bar. Drive it with `start()` / `set(0..1)` / `done()`,
@@ -16992,6 +17258,9 @@ class BuiTopProgress {
16992
17258
  demo = input(false, /* @ts-ignore */
16993
17259
  ...(ngDevMode ? [{ debugName: "demo" }] : /* istanbul ignore next */ []));
16994
17260
  userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
17261
+ ariaLabel = input(/* @ts-ignore */
17262
+ ...(ngDevMode ? [undefined, { debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
17263
+ ariaLabelText = buiLabel('topProgressLoading', this.ariaLabel);
16995
17264
  progress = signal(0, /* @ts-ignore */
16996
17265
  ...(ngDevMode ? [{ debugName: "progress" }] : /* istanbul ignore next */ []));
16997
17266
  visible = signal(false, /* @ts-ignore */
@@ -17059,7 +17328,7 @@ class BuiTopProgress {
17059
17328
  this.timer = undefined;
17060
17329
  }
17061
17330
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiTopProgress, deps: [], target: i0.ɵɵFactoryTarget.Component });
17062
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.2", type: BuiTopProgress, isStandalone: true, selector: "bui-top-progress", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, demo: { classPropertyName: "demo", publicName: "demo", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "top-progress", "role": "progressbar", "aria-label": "Page loading" }, properties: { "class": "computedClass()", "style.height.px": "height()", "attr.aria-valuenow": "visible() ? round(progress() * 100) : null" } }, ngImport: i0, template: `
17331
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.2", type: BuiTopProgress, isStandalone: true, selector: "bui-top-progress", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, demo: { classPropertyName: "demo", publicName: "demo", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "top-progress", "role": "progressbar" }, properties: { "class": "computedClass()", "style.height.px": "height()", "attr.aria-label": "ariaLabelText()", "attr.aria-valuenow": "visible() ? round(progress() * 100) : null" } }, ngImport: i0, template: `
17063
17332
  <div
17064
17333
  class="h-full transition-all duration-200 ease-out"
17065
17334
  [style.width.%]="visible() ? progress() * 100 : 0"
@@ -17077,7 +17346,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
17077
17346
  '[class]': 'computedClass()',
17078
17347
  '[style.height.px]': 'height()',
17079
17348
  role: 'progressbar',
17080
- 'aria-label': 'Page loading',
17349
+ '[attr.aria-label]': 'ariaLabelText()',
17081
17350
  '[attr.aria-valuenow]': 'visible() ? round(progress() * 100) : null',
17082
17351
  },
17083
17352
  template: `
@@ -17089,7 +17358,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
17089
17358
  ></div>
17090
17359
  `,
17091
17360
  }]
17092
- }], ctorParameters: () => [], propDecorators: { color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }], demo: [{ type: i0.Input, args: [{ isSignal: true, alias: "demo", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
17361
+ }], ctorParameters: () => [], propDecorators: { color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }], demo: [{ type: i0.Input, args: [{ isSignal: true, alias: "demo", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }] } });
17093
17362
 
17094
17363
  const POSITION$1 = {
17095
17364
  bottom: 'inset-x-0 bottom-0 max-h-[85vh] rounded-t-xl border-t',
@@ -17362,6 +17631,12 @@ const TONE = {
17362
17631
  class BuiSonner {
17363
17632
  position = input('bottom-right', /* @ts-ignore */
17364
17633
  ...(ngDevMode ? [{ debugName: "position" }] : /* istanbul ignore next */ []));
17634
+ ariaLabel = input(/* @ts-ignore */
17635
+ ...(ngDevMode ? [undefined, { debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
17636
+ dismissLabel = input(/* @ts-ignore */
17637
+ ...(ngDevMode ? [undefined, { debugName: "dismissLabel" }] : /* istanbul ignore next */ []));
17638
+ ariaLabelText = buiLabel('sonner', this.ariaLabel);
17639
+ dismissText = buiLabel('sonnerDismiss', this.dismissLabel);
17365
17640
  toaster = inject(BuiToaster);
17366
17641
  regionClass = computed(() => cn('pointer-events-none fixed z-[100] flex flex-col gap-2', POSITION[this.position()]), /* @ts-ignore */
17367
17642
  ...(ngDevMode ? [{ debugName: "regionClass" }] : /* istanbul ignore next */ []));
@@ -17373,8 +17648,8 @@ class BuiSonner {
17373
17648
  this.toaster.dismiss(toast.id);
17374
17649
  }
17375
17650
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiSonner, deps: [], target: i0.ɵɵFactoryTarget.Component });
17376
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiSonner, isStandalone: true, selector: "bui-sonner", inputs: { position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "sonner" } }, ngImport: i0, template: `
17377
- <div role="region" aria-label="Notifications" [class]="regionClass()">
17651
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiSonner, isStandalone: true, selector: "bui-sonner", inputs: { position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, dismissLabel: { classPropertyName: "dismissLabel", publicName: "dismissLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "sonner" } }, ngImport: i0, template: `
17652
+ <div role="region" [attr.aria-label]="ariaLabelText()" [class]="regionClass()">
17378
17653
  @for (toast of toaster.toasts(); track toast.id) {
17379
17654
  <div
17380
17655
  role="status"
@@ -17400,7 +17675,7 @@ class BuiSonner {
17400
17675
  <button
17401
17676
  type="button"
17402
17677
  class="shrink-0 opacity-70 hover:opacity-100"
17403
- aria-label="Dismiss notification"
17678
+ [attr.aria-label]="dismissText()"
17404
17679
  (click)="toaster.dismiss(toast.id)"
17405
17680
  >
17406
17681
  <svg
@@ -17426,7 +17701,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
17426
17701
  selector: 'bui-sonner',
17427
17702
  host: { 'data-slot': 'sonner' },
17428
17703
  template: `
17429
- <div role="region" aria-label="Notifications" [class]="regionClass()">
17704
+ <div role="region" [attr.aria-label]="ariaLabelText()" [class]="regionClass()">
17430
17705
  @for (toast of toaster.toasts(); track toast.id) {
17431
17706
  <div
17432
17707
  role="status"
@@ -17452,7 +17727,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
17452
17727
  <button
17453
17728
  type="button"
17454
17729
  class="shrink-0 opacity-70 hover:opacity-100"
17455
- aria-label="Dismiss notification"
17730
+ [attr.aria-label]="dismissText()"
17456
17731
  (click)="toaster.dismiss(toast.id)"
17457
17732
  >
17458
17733
  <svg
@@ -17472,7 +17747,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
17472
17747
  </div>
17473
17748
  `,
17474
17749
  }]
17475
- }], propDecorators: { position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }] } });
17750
+ }], propDecorators: { position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], dismissLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "dismissLabel", required: false }] }] } });
17476
17751
 
17477
17752
  /** A horizontal navigation menu with hover/click dropdown panels. */
17478
17753
  class BuiNavigationMenu {
@@ -18345,9 +18620,12 @@ class BuiRichTextEditor {
18345
18620
  ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
18346
18621
  ariaLabel = input('Rich text editor', /* @ts-ignore */
18347
18622
  ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
18623
+ formattingLabel = input(/* @ts-ignore */
18624
+ ...(ngDevMode ? [undefined, { debugName: "formattingLabel" }] : /* istanbul ignore next */ []));
18348
18625
  name = input('', /* @ts-ignore */
18349
18626
  ...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
18350
18627
  userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
18628
+ formattingText = buiLabel('richTextEditorFormatting', this.formattingLabel);
18351
18629
  tools = TOOLS;
18352
18630
  editor = viewChild('editor', /* @ts-ignore */
18353
18631
  ...(ngDevMode ? [{ debugName: "editor" }] : /* istanbul ignore next */ []));
@@ -18377,10 +18655,10 @@ class BuiRichTextEditor {
18377
18655
  }
18378
18656
  }
18379
18657
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiRichTextEditor, deps: [], target: i0.ɵɵFactoryTarget.Component });
18380
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiRichTextEditor, isStandalone: true, selector: "bui-rich-text-editor", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { attributes: { "data-slot": "rich-text-editor" }, properties: { "class": "computedClass()" } }, viewQueries: [{ propertyName: "editor", first: true, predicate: ["editor"], descendants: true, isSignal: true }], ngImport: i0, template: `
18658
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiRichTextEditor, isStandalone: true, selector: "bui-rich-text-editor", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, formattingLabel: { classPropertyName: "formattingLabel", publicName: "formattingLabel", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { attributes: { "data-slot": "rich-text-editor" }, properties: { "class": "computedClass()" } }, viewQueries: [{ propertyName: "editor", first: true, predicate: ["editor"], descendants: true, isSignal: true }], ngImport: i0, template: `
18381
18659
  <div
18382
18660
  role="toolbar"
18383
- aria-label="Formatting"
18661
+ [attr.aria-label]="formattingText()"
18384
18662
  class="flex flex-wrap gap-0.5 border-b bg-muted/40 p-1"
18385
18663
  >
18386
18664
  @for (tool of tools; track tool.cmd) {
@@ -18416,7 +18694,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
18416
18694
  template: `
18417
18695
  <div
18418
18696
  role="toolbar"
18419
- aria-label="Formatting"
18697
+ [attr.aria-label]="formattingText()"
18420
18698
  class="flex flex-wrap gap-0.5 border-b bg-muted/40 p-1"
18421
18699
  >
18422
18700
  @for (tool of tools; track tool.cmd) {
@@ -18444,7 +18722,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
18444
18722
  ></div>
18445
18723
  `,
18446
18724
  }]
18447
- }], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], editor: [{ type: i0.ViewChild, args: ['editor', { isSignal: true }] }] } });
18725
+ }], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], formattingLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "formattingLabel", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], editor: [{ type: i0.ViewChild, args: ['editor', { isSignal: true }] }] } });
18448
18726
 
18449
18727
  /** A collapsible vertical navigation sidebar. Toggle width with the `open` model. */
18450
18728
  class BuiSidebar {
@@ -19174,5 +19452,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
19174
19452
  * Generated bundle index. Do not edit.
19175
19453
  */
19176
19454
 
19177
- export { BuiAccent, BuiAccordion, BuiAccordionContent, BuiAccordionItem, BuiAccordionTrigger, BuiAddToCart, BuiAlert, BuiAlertDescription, BuiAlertDialogAction, BuiAlertDialogCancel, BuiAlertDialogContent, BuiAlertDialogDescription, BuiAlertDialogFooter, BuiAlertDialogHeader, BuiAlertDialogTitle, BuiAlertTitle, BuiAnimatedBeam, BuiAspectRatio, BuiAudioPlayer, BuiAurora, BuiAutocomplete, BuiAutosizeTextarea, BuiAvatar, BuiAvatarGroup, BuiBackToTop, BuiBadge, BuiBanner, BuiBentoGrid, BuiBentoItem, BuiBorderBeam, BuiBottomNavigation, BuiBottomNavigationItem, BuiBreadcrumb, BuiBreadcrumbEllipsis, BuiBreadcrumbItem, BuiBreadcrumbLink, BuiBreadcrumbList, BuiBreadcrumbPage, BuiBreadcrumbSeparator, BuiButton, BuiButtonGroup, BuiButtonGroupText, BuiCalendar, BuiCard, BuiCardAction, BuiCardContent, BuiCardDescription, BuiCardFooter, BuiCardHeader, BuiCardTitle, BuiCarousel, BuiChart, BuiChat, BuiChatMessage, BuiCheckbox, BuiCitation, BuiCodeBlock, BuiCollapsible, BuiCollapsibleContent, BuiCollapsibleTrigger, BuiColorPicker, BuiCombobox, BuiCommand, BuiComparisonSlider, BuiComparisonTable, BuiConfetti, BuiContainer, BuiContextMenu, BuiCookieConsent, BuiCopyButton, BuiCountdown, BuiDataTable, BuiDatePicker, BuiDatetimePicker, BuiDescriptionItem, BuiDescriptionList, BuiDialogContent, BuiDialogDescription, BuiDialogFooter, BuiDialogHeader, BuiDialogTitle, BuiDiffViewer, BuiDock, BuiDockItem, BuiDotPattern, BuiDrawer, BuiDropdownMenu, BuiDropdownMenuItem, BuiDropdownMenuLabel, BuiDropdownMenuSeparator, BuiEditable, BuiEmpty, BuiEmptyContent, BuiEmptyDescription, BuiEmptyHeader, BuiEmptyMedia, BuiEmptyTitle, BuiField, BuiFieldContent, BuiFieldDescription, BuiFieldError, BuiFieldGroup, BuiFieldLabel, BuiFieldLegend, BuiFieldSeparator, BuiFieldSet, BuiFieldTitle, BuiFileUpload, BuiFlipCard, BuiGallery, BuiGantt, BuiGradientText, BuiGridPattern, BuiHeatmap, BuiHoverCard, BuiHoverCardContent, BuiImage, BuiInfiniteScroll, BuiInput, BuiInputGroup, BuiInputGroupAddon, BuiInputGroupButton, BuiInputGroupInput, BuiInputGroupText, BuiInputMask, BuiInputOtp, BuiItem, BuiItemActions, BuiItemContent, BuiItemDescription, BuiItemGroup, BuiItemMedia, BuiItemTitle, BuiJsonViewer, BuiJsonViewerNode, BuiKanban, BuiKbd, BuiKbdGroup, BuiKnob, BuiLabel, BuiLink, BuiLoadingOverlay, BuiMap, BuiMarkdownEditor, BuiMarquee, BuiMasonry, BuiMentionInput, BuiMenubar, BuiMenubarTrigger, BuiMeteors, BuiMeter, BuiMiniCart, BuiNavigationMenu, BuiNotificationCenter, BuiNumberInput, BuiNumberTicker, BuiOnboardingTour, BuiOrgChart, BuiOrgChartNode, BuiPageHeader, BuiPagination, BuiPaginationContent, BuiPaginationEllipsis, BuiPaginationItem, BuiPaginationLink, BuiParallax, BuiPasswordStrength, BuiPhoneInput, BuiPopover, BuiPopoverContent, BuiPresence, BuiPrice, BuiProductCard, BuiProgress, BuiPromptInput, BuiQrCode, BuiQuantitySelector, BuiQuote, BuiRadioGroup, BuiRadioGroupItem, BuiRating, BuiReasoning, BuiRepeater, BuiResizableHandle, BuiResizablePanel, BuiResizablePanelGroup, BuiRichTextEditor, BuiScheduler, BuiScrollArea, BuiScrollspy, BuiSegmentedControl, BuiSelect, BuiSeparator, BuiSheet, BuiSidebar, BuiSidebarMenuButton, BuiSignaturePad, BuiSkeleton, BuiSlider, BuiSonner, BuiSparkline, BuiSpeedDial, BuiSpinner, BuiSpotlightCard, BuiStack, BuiStat, BuiStepper, BuiStepperItem, BuiStreamingText, BuiSwitch, BuiTabList, BuiTabPanel, BuiTabTrigger, BuiTable, BuiTableBody, BuiTableCaption, BuiTableCell, BuiTableContainer, BuiTableFooter, BuiTableHead, BuiTableHeader, BuiTableRow, BuiTabs, BuiTagsInput, BuiTerminal, BuiTextReveal, BuiTextarea, BuiThemeCustomizer, BuiTiltCard, BuiTimeField, BuiTimeline, BuiTimelineItem, BuiToaster, BuiToggle, BuiToggleGroup, BuiToggleGroupItem, BuiToolCall, BuiTooltip, BuiTooltipContent, BuiTopProgress, BuiTree, BuiTreeNode, BuiTreeTable, BuiTypewriter, BuiTypography, BuiVariantSelector, BuiVideo, BuiVisuallyHidden, THEME_TOKENS, ThemeStore, buttonVariants, cn, encodeQr, toggleVariants };
19455
+ export { BUI_DEFAULT_LABELS, BUI_LABELS, BuiAccent, BuiAccordion, BuiAccordionContent, BuiAccordionItem, BuiAccordionTrigger, BuiAddToCart, BuiAlert, BuiAlertDescription, BuiAlertDialogAction, BuiAlertDialogCancel, BuiAlertDialogContent, BuiAlertDialogDescription, BuiAlertDialogFooter, BuiAlertDialogHeader, BuiAlertDialogTitle, BuiAlertTitle, BuiAnimatedBeam, BuiAspectRatio, BuiAudioPlayer, BuiAurora, BuiAutocomplete, BuiAutosizeTextarea, BuiAvatar, BuiAvatarGroup, BuiBackToTop, BuiBadge, BuiBanner, BuiBentoGrid, BuiBentoItem, BuiBorderBeam, BuiBottomNavigation, BuiBottomNavigationItem, BuiBreadcrumb, BuiBreadcrumbEllipsis, BuiBreadcrumbItem, BuiBreadcrumbLink, BuiBreadcrumbList, BuiBreadcrumbPage, BuiBreadcrumbSeparator, BuiButton, BuiButtonGroup, BuiButtonGroupText, BuiCalendar, BuiCard, BuiCardAction, BuiCardContent, BuiCardDescription, BuiCardFooter, BuiCardHeader, BuiCardTitle, BuiCarousel, BuiChart, BuiChat, BuiChatMessage, BuiCheckbox, BuiCitation, BuiCodeBlock, BuiCollapsible, BuiCollapsibleContent, BuiCollapsibleTrigger, BuiColorPicker, BuiCombobox, BuiCommand, BuiComparisonSlider, BuiComparisonTable, BuiConfetti, BuiContainer, BuiContextMenu, BuiCookieConsent, BuiCopyButton, BuiCountdown, BuiDataTable, BuiDatePicker, BuiDatetimePicker, BuiDescriptionItem, BuiDescriptionList, BuiDialogContent, BuiDialogDescription, BuiDialogFooter, BuiDialogHeader, BuiDialogTitle, BuiDiffViewer, BuiDock, BuiDockItem, BuiDotPattern, BuiDrawer, BuiDropdownMenu, BuiDropdownMenuItem, BuiDropdownMenuLabel, BuiDropdownMenuSeparator, BuiEditable, BuiEmpty, BuiEmptyContent, BuiEmptyDescription, BuiEmptyHeader, BuiEmptyMedia, BuiEmptyTitle, BuiField, BuiFieldContent, BuiFieldDescription, BuiFieldError, BuiFieldGroup, BuiFieldLabel, BuiFieldLegend, BuiFieldSeparator, BuiFieldSet, BuiFieldTitle, BuiFileUpload, BuiFlipCard, BuiGallery, BuiGantt, BuiGradientText, BuiGridPattern, BuiHeatmap, BuiHoverCard, BuiHoverCardContent, BuiImage, BuiInfiniteScroll, BuiInput, BuiInputGroup, BuiInputGroupAddon, BuiInputGroupButton, BuiInputGroupInput, BuiInputGroupText, BuiInputMask, BuiInputOtp, BuiItem, BuiItemActions, BuiItemContent, BuiItemDescription, BuiItemGroup, BuiItemMedia, BuiItemTitle, BuiJsonViewer, BuiJsonViewerNode, BuiKanban, BuiKbd, BuiKbdGroup, BuiKnob, BuiLabel, BuiLink, BuiLoadingOverlay, BuiMap, BuiMarkdownEditor, BuiMarquee, BuiMasonry, BuiMentionInput, BuiMenubar, BuiMenubarTrigger, BuiMeteors, BuiMeter, BuiMiniCart, BuiNavigationMenu, BuiNotificationCenter, BuiNumberInput, BuiNumberTicker, BuiOnboardingTour, BuiOrgChart, BuiOrgChartNode, BuiPageHeader, BuiPagination, BuiPaginationContent, BuiPaginationEllipsis, BuiPaginationItem, BuiPaginationLink, BuiParallax, BuiPasswordStrength, BuiPhoneInput, BuiPopover, BuiPopoverContent, BuiPresence, BuiPrice, BuiProductCard, BuiProgress, BuiPromptInput, BuiQrCode, BuiQuantitySelector, BuiQuote, BuiRadioGroup, BuiRadioGroupItem, BuiRating, BuiReasoning, BuiRepeater, BuiResizableHandle, BuiResizablePanel, BuiResizablePanelGroup, BuiRichTextEditor, BuiScheduler, BuiScrollArea, BuiScrollspy, BuiSegmentedControl, BuiSelect, BuiSeparator, BuiSheet, BuiSidebar, BuiSidebarMenuButton, BuiSignaturePad, BuiSkeleton, BuiSlider, BuiSonner, BuiSparkline, BuiSpeedDial, BuiSpinner, BuiSpotlightCard, BuiStack, BuiStat, BuiStepper, BuiStepperItem, BuiStreamingText, BuiSwitch, BuiTabList, BuiTabPanel, BuiTabTrigger, BuiTable, BuiTableBody, BuiTableCaption, BuiTableCell, BuiTableContainer, BuiTableFooter, BuiTableHead, BuiTableHeader, BuiTableRow, BuiTabs, BuiTagsInput, BuiTerminal, BuiTextReveal, BuiTextarea, BuiThemeCustomizer, BuiTiltCard, BuiTimeField, BuiTimeline, BuiTimelineItem, BuiToaster, BuiToggle, BuiToggleGroup, BuiToggleGroupItem, BuiToolCall, BuiTooltip, BuiTooltipContent, BuiTopProgress, BuiTree, BuiTreeNode, BuiTreeTable, BuiTypewriter, BuiTypography, BuiVariantSelector, BuiVideo, BuiVisuallyHidden, THEME_TOKENS, ThemeStore, buiLabel, buttonVariants, cn, encodeQr, provideBuiLabels, toggleVariants };
19178
19456
  //# sourceMappingURL=ng-blatui.mjs.map