ng-blatui 1.28.1 → 1.30.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.
- package/fesm2022/ng-blatui.mjs +1055 -187
- package/fesm2022/ng-blatui.mjs.map +1 -1
- package/package.json +1 -1
- package/types/ng-blatui.d.ts +978 -37
package/fesm2022/ng-blatui.mjs
CHANGED
|
@@ -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 {
|
|
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: {
|
|
@@ -53,8 +151,10 @@ const buttonVariants = cva("inline-flex shrink-0 items-center justify-center gap
|
|
|
53
151
|
* semantics, focus and keyboard behavior (accessibility for free).
|
|
54
152
|
*/
|
|
55
153
|
class BuiButton {
|
|
154
|
+
/** Visual style of the button. */
|
|
56
155
|
variant = input('default', /* @ts-ignore */
|
|
57
156
|
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
157
|
+
/** Size preset controlling height, padding and icon scale. */
|
|
58
158
|
size = input('default', /* @ts-ignore */
|
|
59
159
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
60
160
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -139,10 +239,13 @@ function intensityFor(variant) {
|
|
|
139
239
|
* element so it stays in the document flow and screen-reader friendly.
|
|
140
240
|
*/
|
|
141
241
|
class BuiBadge {
|
|
242
|
+
/** Brand variant, or the intensity (`soft`/`solid`/`outline`) when a `tone` is set. */
|
|
142
243
|
variant = input('default', /* @ts-ignore */
|
|
143
244
|
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
245
|
+
/** Optional semantic tone; when set it overrides the brand variant's color. */
|
|
144
246
|
tone = input(null, /* @ts-ignore */
|
|
145
247
|
...(ngDevMode ? [{ debugName: "tone" }] : /* istanbul ignore next */ []));
|
|
248
|
+
/** Badge size preset. */
|
|
146
249
|
size = input('default', /* @ts-ignore */
|
|
147
250
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
148
251
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -193,8 +296,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
193
296
|
* `[decorative]="false"` for a semantic `role="separator"` with `aria-orientation`.
|
|
194
297
|
*/
|
|
195
298
|
class BuiSeparator {
|
|
299
|
+
/** Axis the separator runs along, also driving its sizing. */
|
|
196
300
|
orientation = input('horizontal', /* @ts-ignore */
|
|
197
301
|
...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
|
|
302
|
+
/** Whether the separator is purely visual; `false` exposes a semantic `role="separator"`. */
|
|
198
303
|
decorative = input(true, /* @ts-ignore */
|
|
199
304
|
...(ngDevMode ? [{ debugName: "decorative" }] : /* istanbul ignore next */ []));
|
|
200
305
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -248,6 +353,7 @@ const CARD_VARIANTS = {
|
|
|
248
353
|
};
|
|
249
354
|
/** BlatUI card container. Use `variant="sectioned"` with the header/content/footer parts. */
|
|
250
355
|
class BuiCard {
|
|
356
|
+
/** Card layout style: simple padded box or sectioned container. */
|
|
251
357
|
variant = input('default', /* @ts-ignore */
|
|
252
358
|
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
253
359
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -365,8 +471,10 @@ const ALERT_TONES = {
|
|
|
365
471
|
* (`default | destructive`) or semantic `tone` (`success | warning | danger | info | neutral`).
|
|
366
472
|
*/
|
|
367
473
|
class BuiAlert {
|
|
474
|
+
/** Brand style; ignored when `tone` is set. */
|
|
368
475
|
variant = input('default', /* @ts-ignore */
|
|
369
476
|
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
477
|
+
/** Semantic tone; when set, overrides `variant`. */
|
|
370
478
|
tone = input(null, /* @ts-ignore */
|
|
371
479
|
...(ngDevMode ? [{ debugName: "tone" }] : /* istanbul ignore next */ []));
|
|
372
480
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -423,6 +531,7 @@ const INPUT_SIZES = {
|
|
|
423
531
|
};
|
|
424
532
|
/** Applies BlatUI input styling to a native `<input>` (keeps native validation & a11y). */
|
|
425
533
|
class BuiInput {
|
|
534
|
+
/** Size preset controlling input height, padding and text size. */
|
|
426
535
|
size = input('default', /* @ts-ignore */
|
|
427
536
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
428
537
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -451,6 +560,7 @@ const TEXTAREA_SIZES = {
|
|
|
451
560
|
};
|
|
452
561
|
/** Applies BlatUI textarea styling to a native `<textarea>` (auto-grows via field-sizing). */
|
|
453
562
|
class BuiTextarea {
|
|
563
|
+
/** Size preset controlling minimum height, padding and text size. */
|
|
454
564
|
size = input('default', /* @ts-ignore */
|
|
455
565
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
456
566
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -476,8 +586,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
476
586
|
* (valuemin/max/now/text). Set `[indeterminate]="true"` for an unknown-duration bar.
|
|
477
587
|
*/
|
|
478
588
|
class BuiProgress {
|
|
589
|
+
/** Completion percentage from 0 to 100; values are clamped to that range. */
|
|
479
590
|
value = input(0, /* @ts-ignore */
|
|
480
591
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
592
|
+
/** Show an unknown-duration animation instead of a fixed value. */
|
|
481
593
|
indeterminate = input(false, /* @ts-ignore */
|
|
482
594
|
...(ngDevMode ? [{ debugName: "indeterminate" }] : /* istanbul ignore next */ []));
|
|
483
595
|
/** Render a circular ring instead of a linear bar. */
|
|
@@ -489,6 +601,7 @@ class BuiProgress {
|
|
|
489
601
|
/** Stroke width of the circular ring, in pixels. */
|
|
490
602
|
thickness = input(4, /* @ts-ignore */
|
|
491
603
|
...(ngDevMode ? [{ debugName: "thickness" }] : /* istanbul ignore next */ []));
|
|
604
|
+
/** Accessible label announced for the progress bar. */
|
|
492
605
|
ariaLabel = input('Progress', /* @ts-ignore */
|
|
493
606
|
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
494
607
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -620,8 +733,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
620
733
|
* the projected fallback (initials, icon). Falls back automatically on load error.
|
|
621
734
|
*/
|
|
622
735
|
class BuiAvatar {
|
|
736
|
+
/** Image URL to display; when unset or on load error the fallback is shown. */
|
|
623
737
|
src = input(null, /* @ts-ignore */
|
|
624
738
|
...(ngDevMode ? [{ debugName: "src" }] : /* istanbul ignore next */ []));
|
|
739
|
+
/** Alternative text for the avatar image. */
|
|
625
740
|
alt = input('', /* @ts-ignore */
|
|
626
741
|
...(ngDevMode ? [{ debugName: "alt" }] : /* istanbul ignore next */ []));
|
|
627
742
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -686,10 +801,13 @@ const CHECKBOX_BASE = 'peer border-input dark:bg-input/30 data-[state=checked]:b
|
|
|
686
801
|
* with `[(checked)]` two-way binding and tri-state `[(indeterminate)]`.
|
|
687
802
|
*/
|
|
688
803
|
class BuiCheckbox {
|
|
804
|
+
/** Whether the box is checked. Two-way bindable with `[(checked)]`. */
|
|
689
805
|
checked = model(false, /* @ts-ignore */
|
|
690
806
|
...(ngDevMode ? [{ debugName: "checked" }] : /* istanbul ignore next */ []));
|
|
807
|
+
/** Whether the box shows the mixed/indeterminate state. Two-way bindable with `[(indeterminate)]`. */
|
|
691
808
|
indeterminate = model(false, /* @ts-ignore */
|
|
692
809
|
...(ngDevMode ? [{ debugName: "indeterminate" }] : /* istanbul ignore next */ []));
|
|
810
|
+
/** Whether the checkbox is disabled. Two-way bindable with `[(disabled)]`. */
|
|
693
811
|
disabled = model(false, /* @ts-ignore */
|
|
694
812
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
695
813
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -846,10 +964,13 @@ const THUMB_BASE = 'bg-background dark:data-[state=unchecked]:bg-foreground dark
|
|
|
846
964
|
* binding; keyboard activation (Space/Enter) and focus come from the native button.
|
|
847
965
|
*/
|
|
848
966
|
class BuiSwitch {
|
|
967
|
+
/** Whether the switch is on. Two-way bindable with `[(checked)]`. */
|
|
849
968
|
checked = model(false, /* @ts-ignore */
|
|
850
969
|
...(ngDevMode ? [{ debugName: "checked" }] : /* istanbul ignore next */ []));
|
|
970
|
+
/** Whether the switch is disabled. Two-way bindable with `[(disabled)]`. */
|
|
851
971
|
disabled = model(false, /* @ts-ignore */
|
|
852
972
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
973
|
+
/** Track and thumb size. */
|
|
853
974
|
size = input('default', /* @ts-ignore */
|
|
854
975
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
855
976
|
/** Optional SVG path `d` shown inside the thumb when checked. */
|
|
@@ -1463,6 +1584,9 @@ const FONTS = [
|
|
|
1463
1584
|
* through {@link ThemeStore}, then exports a paste-ready stylesheet via "Copy CSS".
|
|
1464
1585
|
*/
|
|
1465
1586
|
class BuiThemeCustomizer {
|
|
1587
|
+
ariaLabel = input(/* @ts-ignore */
|
|
1588
|
+
...(ngDevMode ? [undefined, { debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
1589
|
+
ariaLabelText = buiLabel('themeCustomizer', this.ariaLabel);
|
|
1466
1590
|
theme = inject(ThemeStore);
|
|
1467
1591
|
open = signal(false, /* @ts-ignore */
|
|
1468
1592
|
...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
|
|
@@ -1544,7 +1668,7 @@ class BuiThemeCustomizer {
|
|
|
1544
1668
|
}
|
|
1545
1669
|
}
|
|
1546
1670
|
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: `
|
|
1671
|
+
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
1672
|
<button
|
|
1549
1673
|
buiButton
|
|
1550
1674
|
variant="outline"
|
|
@@ -1559,7 +1683,7 @@ class BuiThemeCustomizer {
|
|
|
1559
1683
|
@if (open()) {
|
|
1560
1684
|
<div
|
|
1561
1685
|
role="dialog"
|
|
1562
|
-
aria-label="
|
|
1686
|
+
[attr.aria-label]="ariaLabelText()"
|
|
1563
1687
|
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
1688
|
>
|
|
1565
1689
|
<div class="flex items-center justify-between">
|
|
@@ -1783,7 +1907,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
1783
1907
|
@if (open()) {
|
|
1784
1908
|
<div
|
|
1785
1909
|
role="dialog"
|
|
1786
|
-
aria-label="
|
|
1910
|
+
[attr.aria-label]="ariaLabelText()"
|
|
1787
1911
|
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
1912
|
>
|
|
1789
1913
|
<div class="flex items-center justify-between">
|
|
@@ -1986,7 +2110,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
1986
2110
|
}
|
|
1987
2111
|
`,
|
|
1988
2112
|
}]
|
|
1989
|
-
}] });
|
|
2113
|
+
}], propDecorators: { ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }] } });
|
|
1990
2114
|
|
|
1991
2115
|
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
1992
2116
|
const noop$g = () => { };
|
|
@@ -1995,8 +2119,10 @@ const noop$g = () => { };
|
|
|
1995
2119
|
* `buiRadioItem` buttons; `[(value)]` two-way binds the selected value.
|
|
1996
2120
|
*/
|
|
1997
2121
|
class BuiRadioGroup {
|
|
2122
|
+
/** Selected radio value. Two-way bindable with `[(value)]`. */
|
|
1998
2123
|
value = model(null, /* @ts-ignore */
|
|
1999
2124
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
2125
|
+
/** Whether the whole group is disabled. Two-way bindable with `[(disabled)]`. */
|
|
2000
2126
|
disabled = model(false, /* @ts-ignore */
|
|
2001
2127
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
2002
2128
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -2062,8 +2188,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
2062
2188
|
}], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], 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 }] }] } });
|
|
2063
2189
|
const ITEM = 'border-input text-primary dark:bg-input/30 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive flex aspect-square size-4 shrink-0 items-center justify-center rounded-full border shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50';
|
|
2064
2190
|
class BuiRadioGroupItem {
|
|
2191
|
+
/** Value this item contributes to the group when selected. */
|
|
2065
2192
|
value = input.required(/* @ts-ignore */
|
|
2066
2193
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
2194
|
+
/** Whether this individual radio item is disabled. */
|
|
2067
2195
|
disabled = input(false, /* @ts-ignore */
|
|
2068
2196
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
2069
2197
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -2122,6 +2250,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
2122
2250
|
const CONTENT_BASE = 'z-50 w-fit max-w-xs rounded-md px-3 py-1.5 text-xs shadow-md bg-primary text-primary-foreground';
|
|
2123
2251
|
/** Floating tooltip bubble rendered into a CDK overlay. */
|
|
2124
2252
|
class BuiTooltipContent {
|
|
2253
|
+
/** Text rendered inside the tooltip bubble. */
|
|
2125
2254
|
text = input('', /* @ts-ignore */
|
|
2126
2255
|
...(ngDevMode ? [{ debugName: "text" }] : /* istanbul ignore next */ []));
|
|
2127
2256
|
/** Extra classes (e.g. a colour override) merged over the base bubble styles. */
|
|
@@ -2159,7 +2288,9 @@ const FALLBACK = {
|
|
|
2159
2288
|
* a hover delay with `delay`, and the bubble colour with `tooltipClass`.
|
|
2160
2289
|
*/
|
|
2161
2290
|
class BuiTooltip {
|
|
2291
|
+
/** Tooltip text; bound via the `buiTooltip` attribute. */
|
|
2162
2292
|
text = input.required({ ...(ngDevMode ? { debugName: "text" } : /* istanbul ignore next */ {}), alias: 'buiTooltip' });
|
|
2293
|
+
/** Preferred placement side relative to the host, with an automatic flip fallback. */
|
|
2163
2294
|
side = input('top', /* @ts-ignore */
|
|
2164
2295
|
...(ngDevMode ? [{ debugName: "side" }] : /* istanbul ignore next */ []));
|
|
2165
2296
|
/** Delay in milliseconds before the tooltip appears on hover/focus. */
|
|
@@ -2234,16 +2365,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
2234
2365
|
|
|
2235
2366
|
/** Breadcrumb navigation landmark (`<nav aria-label="breadcrumb">`). */
|
|
2236
2367
|
class BuiBreadcrumb {
|
|
2368
|
+
/** Accessible label for the breadcrumb navigation landmark. */
|
|
2369
|
+
label = input(/* @ts-ignore */
|
|
2370
|
+
...(ngDevMode ? [undefined, { debugName: "label" }] : /* istanbul ignore next */ []));
|
|
2371
|
+
labelText = buiLabel('breadcrumb', this.label);
|
|
2237
2372
|
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: "
|
|
2373
|
+
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
2374
|
}
|
|
2240
2375
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiBreadcrumb, decorators: [{
|
|
2241
2376
|
type: Directive,
|
|
2242
2377
|
args: [{
|
|
2243
2378
|
selector: 'nav[buiBreadcrumb]',
|
|
2244
|
-
host: { 'aria-label': '
|
|
2379
|
+
host: { '[attr.aria-label]': 'labelText()', 'data-slot': 'breadcrumb' },
|
|
2245
2380
|
}]
|
|
2246
|
-
}] });
|
|
2381
|
+
}], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }] } });
|
|
2247
2382
|
class BuiBreadcrumbList {
|
|
2248
2383
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
2249
2384
|
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 +2494,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
2359
2494
|
/** Collapsed breadcrumb indicator (ellipsis). */
|
|
2360
2495
|
class BuiBreadcrumbEllipsis {
|
|
2361
2496
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
2497
|
+
/** Screen-reader text for the collapsed ellipsis indicator. */
|
|
2498
|
+
moreLabel = input(/* @ts-ignore */
|
|
2499
|
+
...(ngDevMode ? [undefined, { debugName: "moreLabel" }] : /* istanbul ignore next */ []));
|
|
2500
|
+
moreText = buiLabel('breadcrumbMore', this.moreLabel);
|
|
2362
2501
|
computedClass = computed(() => cn('flex size-9 items-center justify-center', this.userClass()), /* @ts-ignore */
|
|
2363
2502
|
...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
|
|
2364
2503
|
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: `
|
|
2504
|
+
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
2505
|
<svg
|
|
2367
2506
|
viewBox="0 0 24 24"
|
|
2368
2507
|
fill="none"
|
|
@@ -2376,7 +2515,7 @@ class BuiBreadcrumbEllipsis {
|
|
|
2376
2515
|
<circle cx="19" cy="12" r="1" />
|
|
2377
2516
|
<circle cx="5" cy="12" r="1" />
|
|
2378
2517
|
</svg>
|
|
2379
|
-
<span class="sr-only">
|
|
2518
|
+
<span class="sr-only">{{ moreText() }}</span>
|
|
2380
2519
|
`, isInline: true });
|
|
2381
2520
|
}
|
|
2382
2521
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiBreadcrumbEllipsis, decorators: [{
|
|
@@ -2403,10 +2542,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
2403
2542
|
<circle cx="19" cy="12" r="1" />
|
|
2404
2543
|
<circle cx="5" cy="12" r="1" />
|
|
2405
2544
|
</svg>
|
|
2406
|
-
<span class="sr-only">
|
|
2545
|
+
<span class="sr-only">{{ moreText() }}</span>
|
|
2407
2546
|
`,
|
|
2408
2547
|
}]
|
|
2409
|
-
}], propDecorators: { userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
|
|
2548
|
+
}], propDecorators: { userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], moreLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "moreLabel", required: false }] }] } });
|
|
2410
2549
|
|
|
2411
2550
|
/** Keyboard key styling, applied to a native `<kbd>` element. */
|
|
2412
2551
|
class BuiKbd {
|
|
@@ -2426,6 +2565,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
2426
2565
|
|
|
2427
2566
|
/** Constrains projected content to a given aspect ratio (e.g. `16 / 9`). */
|
|
2428
2567
|
class BuiAspectRatio {
|
|
2568
|
+
/** Aspect ratio for the content, as a CSS `aspect-ratio` value (e.g. `16 / 9`). */
|
|
2429
2569
|
ratio = input('1 / 1', /* @ts-ignore */
|
|
2430
2570
|
...(ngDevMode ? [{ debugName: "ratio" }] : /* istanbul ignore next */ []));
|
|
2431
2571
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -2449,6 +2589,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
2449
2589
|
|
|
2450
2590
|
/** Groups buttons (and inputs) into a single segmented control. */
|
|
2451
2591
|
class BuiButtonGroup {
|
|
2592
|
+
/** Layout direction of the grouped controls. */
|
|
2452
2593
|
orientation = input('horizontal', /* @ts-ignore */
|
|
2453
2594
|
...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
|
|
2454
2595
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -2515,6 +2656,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
2515
2656
|
}]
|
|
2516
2657
|
}], propDecorators: { userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
|
|
2517
2658
|
class BuiEmptyMedia {
|
|
2659
|
+
/** Media style; `icon` renders a muted rounded badge sized for an icon. */
|
|
2518
2660
|
variant = input('default', /* @ts-ignore */
|
|
2519
2661
|
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
2520
2662
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -2588,6 +2730,7 @@ const SIZES$5 = {
|
|
|
2588
2730
|
};
|
|
2589
2731
|
/** Centered, padded page container with a max-width scale. */
|
|
2590
2732
|
class BuiContainer {
|
|
2733
|
+
/** Maximum width preset for the container. */
|
|
2591
2734
|
size = input('lg', /* @ts-ignore */
|
|
2592
2735
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
2593
2736
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -2611,6 +2754,7 @@ const FIELD_ORIENT = {
|
|
|
2611
2754
|
};
|
|
2612
2755
|
/** A form field row grouping a label, control, description and error. */
|
|
2613
2756
|
class BuiField {
|
|
2757
|
+
/** How the label and control are arranged within the field. */
|
|
2614
2758
|
orientation = input('vertical', /* @ts-ignore */
|
|
2615
2759
|
...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
|
|
2616
2760
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -2646,6 +2790,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
2646
2790
|
}]
|
|
2647
2791
|
}], propDecorators: { userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
|
|
2648
2792
|
class BuiFieldLegend {
|
|
2793
|
+
/** Whether the legend is styled as a section legend or a smaller label. */
|
|
2649
2794
|
variant = input('legend', /* @ts-ignore */
|
|
2650
2795
|
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
2651
2796
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -2680,6 +2825,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
2680
2825
|
}]
|
|
2681
2826
|
}], propDecorators: { userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
|
|
2682
2827
|
class BuiFieldLabel {
|
|
2828
|
+
/** Id of the control this label is associated with (maps to the `for` attribute). */
|
|
2683
2829
|
forId = input(undefined, { ...(ngDevMode ? { debugName: "forId" } : /* istanbul ignore next */ {}), alias: 'for' });
|
|
2684
2830
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
2685
2831
|
computedClass = computed(() => cn('flex w-fit gap-2 text-sm leading-snug font-medium select-none group-data-[disabled=true]/field:opacity-50', this.userClass()), /* @ts-ignore */
|
|
@@ -2780,6 +2926,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
2780
2926
|
|
|
2781
2927
|
/** Accessible disclosure: a trigger toggles the visibility of its content. */
|
|
2782
2928
|
class BuiCollapsible {
|
|
2929
|
+
/** Whether the content is shown. Two-way bindable with `[(open)]`. */
|
|
2783
2930
|
open = model(false, /* @ts-ignore */
|
|
2784
2931
|
...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
|
|
2785
2932
|
contentId = inject(_IdGenerator).getId('bui-collapsible-');
|
|
@@ -2852,12 +2999,16 @@ const toggleVariants = cva("inline-flex items-center justify-center gap-2 rounde
|
|
|
2852
2999
|
});
|
|
2853
3000
|
/** A two-state toggle button (`aria-pressed`). */
|
|
2854
3001
|
class BuiToggle {
|
|
3002
|
+
/** Whether the toggle is pressed (on). Two-way bindable with `[(pressed)]`. */
|
|
2855
3003
|
pressed = model(false, /* @ts-ignore */
|
|
2856
3004
|
...(ngDevMode ? [{ debugName: "pressed" }] : /* istanbul ignore next */ []));
|
|
3005
|
+
/** Whether the toggle is disabled. Two-way bindable with `[(disabled)]`. */
|
|
2857
3006
|
disabled = model(false, /* @ts-ignore */
|
|
2858
3007
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
3008
|
+
/** Visual style: plain or outlined. */
|
|
2859
3009
|
variant = input('default', /* @ts-ignore */
|
|
2860
3010
|
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
3011
|
+
/** Button size. */
|
|
2861
3012
|
size = input('default', /* @ts-ignore */
|
|
2862
3013
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
2863
3014
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -2914,10 +3065,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
2914
3065
|
/** A spinning loading indicator (`role="status"`). */
|
|
2915
3066
|
class BuiSpinner {
|
|
2916
3067
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
3068
|
+
/** Overrides the localized accessible status label. */
|
|
3069
|
+
label = input(/* @ts-ignore */
|
|
3070
|
+
...(ngDevMode ? [undefined, { debugName: "label" }] : /* istanbul ignore next */ []));
|
|
3071
|
+
labelText = buiLabel('spinnerLoading', this.label);
|
|
2917
3072
|
computedClass = computed(() => cn('inline-block size-4 animate-spin', this.userClass()), /* @ts-ignore */
|
|
2918
3073
|
...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
|
|
2919
3074
|
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": "
|
|
3075
|
+
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
3076
|
<svg
|
|
2922
3077
|
viewBox="0 0 24 24"
|
|
2923
3078
|
fill="none"
|
|
@@ -2939,7 +3094,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
2939
3094
|
host: {
|
|
2940
3095
|
'data-slot': 'spinner',
|
|
2941
3096
|
role: 'status',
|
|
2942
|
-
'aria-label': '
|
|
3097
|
+
'[attr.aria-label]': 'labelText()',
|
|
2943
3098
|
'[class]': 'computedClass()',
|
|
2944
3099
|
},
|
|
2945
3100
|
template: `
|
|
@@ -2957,12 +3112,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
2957
3112
|
</svg>
|
|
2958
3113
|
`,
|
|
2959
3114
|
}]
|
|
2960
|
-
}], propDecorators: { userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
|
|
3115
|
+
}], propDecorators: { userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }] } });
|
|
2961
3116
|
|
|
2962
3117
|
/** Copy-to-clipboard button: copies `value`, flips to a check, announces "Copied". */
|
|
2963
3118
|
class BuiCopyButton {
|
|
3119
|
+
/** Text written to the clipboard when clicked. */
|
|
2964
3120
|
value = input('', /* @ts-ignore */
|
|
2965
3121
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
3122
|
+
/** Accessible label shown before copying. */
|
|
2966
3123
|
label = input('Copy', /* @ts-ignore */
|
|
2967
3124
|
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
2968
3125
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -3079,13 +3236,24 @@ const TONES$1 = {
|
|
|
3079
3236
|
* the dismissal in localStorage. SSR-safe — localStorage is only touched in the browser.
|
|
3080
3237
|
*/
|
|
3081
3238
|
class BuiBanner {
|
|
3239
|
+
/** Color tone (`default | primary | info | success | warning | danger`). */
|
|
3082
3240
|
tone = input('default', /* @ts-ignore */
|
|
3083
3241
|
...(ngDevMode ? [{ debugName: "tone" }] : /* istanbul ignore next */ []));
|
|
3242
|
+
/** Whether to show the dismiss button. */
|
|
3084
3243
|
dismissible = input(true, /* @ts-ignore */
|
|
3085
3244
|
...(ngDevMode ? [{ debugName: "dismissible" }] : /* istanbul ignore next */ []));
|
|
3245
|
+
/** When set, the dismissal is remembered in localStorage under this key. */
|
|
3086
3246
|
persistKey = input(undefined, /* @ts-ignore */
|
|
3087
3247
|
...(ngDevMode ? [{ debugName: "persistKey" }] : /* istanbul ignore next */ []));
|
|
3088
3248
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
3249
|
+
/** Overrides the localized accessible label for the announcement region. */
|
|
3250
|
+
announcementLabel = input(/* @ts-ignore */
|
|
3251
|
+
...(ngDevMode ? [undefined, { debugName: "announcementLabel" }] : /* istanbul ignore next */ []));
|
|
3252
|
+
/** Overrides the localized accessible label for the dismiss button. */
|
|
3253
|
+
dismissLabel = input(/* @ts-ignore */
|
|
3254
|
+
...(ngDevMode ? [undefined, { debugName: "dismissLabel" }] : /* istanbul ignore next */ []));
|
|
3255
|
+
announcementText = buiLabel('bannerAnnouncement', this.announcementLabel);
|
|
3256
|
+
dismissText = buiLabel('bannerDismiss', this.dismissLabel);
|
|
3089
3257
|
show = signal(true, /* @ts-ignore */
|
|
3090
3258
|
...(ngDevMode ? [{ debugName: "show" }] : /* istanbul ignore next */ []));
|
|
3091
3259
|
isBrowser = isPlatformBrowser(inject(PLATFORM_ID));
|
|
@@ -3105,14 +3273,14 @@ class BuiBanner {
|
|
|
3105
3273
|
}
|
|
3106
3274
|
}
|
|
3107
3275
|
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": "
|
|
3276
|
+
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
3277
|
<div class="flex flex-1 flex-wrap items-center justify-center gap-x-3 gap-y-1">
|
|
3110
3278
|
<ng-content />
|
|
3111
3279
|
</div>
|
|
3112
3280
|
@if (dismissible()) {
|
|
3113
3281
|
<button
|
|
3114
3282
|
type="button"
|
|
3115
|
-
aria-label="
|
|
3283
|
+
[attr.aria-label]="dismissText()"
|
|
3116
3284
|
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
3285
|
(click)="dismiss()"
|
|
3118
3286
|
>
|
|
@@ -3140,7 +3308,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
3140
3308
|
host: {
|
|
3141
3309
|
'data-slot': 'banner',
|
|
3142
3310
|
role: 'region',
|
|
3143
|
-
'aria-label': '
|
|
3311
|
+
'[attr.aria-label]': 'announcementText()',
|
|
3144
3312
|
'[hidden]': '!show()',
|
|
3145
3313
|
'[class]': 'computedClass()',
|
|
3146
3314
|
},
|
|
@@ -3151,7 +3319,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
3151
3319
|
@if (dismissible()) {
|
|
3152
3320
|
<button
|
|
3153
3321
|
type="button"
|
|
3154
|
-
aria-label="
|
|
3322
|
+
[attr.aria-label]="dismissText()"
|
|
3155
3323
|
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
3324
|
(click)="dismiss()"
|
|
3157
3325
|
>
|
|
@@ -3172,10 +3340,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
3172
3340
|
}
|
|
3173
3341
|
`,
|
|
3174
3342
|
}]
|
|
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 }] }] } });
|
|
3343
|
+
}], 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
3344
|
|
|
3177
3345
|
/** Scroll/border wrapper around a table. `variant="card"` adds a bordered card. */
|
|
3178
3346
|
class BuiTableContainer {
|
|
3347
|
+
/** Wrapper style; `card` adds a bordered, shadowed card around the table. */
|
|
3179
3348
|
variant = input('default', /* @ts-ignore */
|
|
3180
3349
|
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
3181
3350
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -3325,10 +3494,13 @@ function initials(name) {
|
|
|
3325
3494
|
}
|
|
3326
3495
|
/** Overlapping stack of avatars with an optional "+N" overflow counter. */
|
|
3327
3496
|
class BuiAvatarGroup {
|
|
3497
|
+
/** Avatars to display, in order. */
|
|
3328
3498
|
avatars = input([], /* @ts-ignore */
|
|
3329
3499
|
...(ngDevMode ? [{ debugName: "avatars" }] : /* istanbul ignore next */ []));
|
|
3500
|
+
/** Maximum avatars shown before the rest collapse into a "+N" counter. */
|
|
3330
3501
|
max = input(4, /* @ts-ignore */
|
|
3331
3502
|
...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
|
|
3503
|
+
/** Avatar size preset, which also controls overlap and ring width. */
|
|
3332
3504
|
size = input('default', /* @ts-ignore */
|
|
3333
3505
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
3334
3506
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -3400,11 +3572,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
3400
3572
|
|
|
3401
3573
|
/** Pagination navigation landmark. */
|
|
3402
3574
|
class BuiPagination {
|
|
3575
|
+
/** Accessible label for the navigation landmark; falls back to a localized default. */
|
|
3576
|
+
ariaLabel = input(/* @ts-ignore */
|
|
3577
|
+
...(ngDevMode ? [undefined, { debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
3403
3578
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
3579
|
+
ariaLabelText = buiLabel('pagination', this.ariaLabel);
|
|
3404
3580
|
computedClass = computed(() => cn('mx-auto flex w-full justify-center', this.userClass()), /* @ts-ignore */
|
|
3405
3581
|
...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
|
|
3406
3582
|
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", "
|
|
3583
|
+
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
3584
|
}
|
|
3409
3585
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiPagination, decorators: [{
|
|
3410
3586
|
type: Directive,
|
|
@@ -3412,12 +3588,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
3412
3588
|
selector: 'nav[buiPagination]',
|
|
3413
3589
|
host: {
|
|
3414
3590
|
role: 'navigation',
|
|
3415
|
-
'aria-label': '
|
|
3591
|
+
'[attr.aria-label]': 'ariaLabelText()',
|
|
3416
3592
|
'data-slot': 'pagination',
|
|
3417
3593
|
'[class]': 'computedClass()',
|
|
3418
3594
|
},
|
|
3419
3595
|
}]
|
|
3420
|
-
}], propDecorators: { userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
|
|
3596
|
+
}], propDecorators: { ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
|
|
3421
3597
|
class BuiPaginationContent {
|
|
3422
3598
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
3423
3599
|
computedClass = computed(() => cn('flex flex-row items-center gap-1', this.userClass()), /* @ts-ignore */
|
|
@@ -3452,8 +3628,10 @@ const LINK_SIZES = {
|
|
|
3452
3628
|
};
|
|
3453
3629
|
/** A pagination link; set `active` for the current page. */
|
|
3454
3630
|
class BuiPaginationLink {
|
|
3631
|
+
/** Whether this link represents the current page; sets `aria-current="page"`. */
|
|
3455
3632
|
active = input(false, /* @ts-ignore */
|
|
3456
3633
|
...(ngDevMode ? [{ debugName: "active" }] : /* istanbul ignore next */ []));
|
|
3634
|
+
/** Size variant controlling link dimensions and padding. */
|
|
3457
3635
|
size = input('icon', /* @ts-ignore */
|
|
3458
3636
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
3459
3637
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -3479,10 +3657,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
3479
3657
|
/** Ellipsis indicator for skipped pages. */
|
|
3480
3658
|
class BuiPaginationEllipsis {
|
|
3481
3659
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
3660
|
+
/** Visually-hidden label announcing skipped pages; falls back to a localized default. */
|
|
3661
|
+
moreLabel = input(/* @ts-ignore */
|
|
3662
|
+
...(ngDevMode ? [undefined, { debugName: "moreLabel" }] : /* istanbul ignore next */ []));
|
|
3663
|
+
moreText = buiLabel('paginationMore', this.moreLabel);
|
|
3482
3664
|
computedClass = computed(() => cn('flex size-9 items-center justify-center', this.userClass()), /* @ts-ignore */
|
|
3483
3665
|
...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
|
|
3484
3666
|
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: `
|
|
3667
|
+
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
3668
|
<svg
|
|
3487
3669
|
viewBox="0 0 24 24"
|
|
3488
3670
|
fill="none"
|
|
@@ -3496,7 +3678,7 @@ class BuiPaginationEllipsis {
|
|
|
3496
3678
|
<circle cx="19" cy="12" r="1" />
|
|
3497
3679
|
<circle cx="5" cy="12" r="1" />
|
|
3498
3680
|
</svg>
|
|
3499
|
-
<span class="sr-only">
|
|
3681
|
+
<span class="sr-only">{{ moreText() }}</span>
|
|
3500
3682
|
`, isInline: true });
|
|
3501
3683
|
}
|
|
3502
3684
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiPaginationEllipsis, decorators: [{
|
|
@@ -3518,10 +3700,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
3518
3700
|
<circle cx="19" cy="12" r="1" />
|
|
3519
3701
|
<circle cx="5" cy="12" r="1" />
|
|
3520
3702
|
</svg>
|
|
3521
|
-
<span class="sr-only">
|
|
3703
|
+
<span class="sr-only">{{ moreText() }}</span>
|
|
3522
3704
|
`,
|
|
3523
3705
|
}]
|
|
3524
|
-
}], propDecorators: { userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
|
|
3706
|
+
}], propDecorators: { userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], moreLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "moreLabel", required: false }] }] } });
|
|
3525
3707
|
|
|
3526
3708
|
const POPOVER_POSITIONS = {
|
|
3527
3709
|
bottom: { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: 4 },
|
|
@@ -3541,7 +3723,9 @@ const POPOVER_FALLBACK = {
|
|
|
3541
3723
|
* Closes on outside click and Escape. SSR-safe (the overlay is browser-only, on click).
|
|
3542
3724
|
*/
|
|
3543
3725
|
class BuiPopover {
|
|
3726
|
+
/** Template rendered as the popover content; bound via `[buiPopover]`. */
|
|
3544
3727
|
content = input.required({ ...(ngDevMode ? { debugName: "content" } : /* istanbul ignore next */ {}), alias: 'buiPopover' });
|
|
3728
|
+
/** Side of the trigger the popover opens on, with an automatic opposite-side fallback. */
|
|
3545
3729
|
side = input('bottom', /* @ts-ignore */
|
|
3546
3730
|
...(ngDevMode ? [{ debugName: "side" }] : /* istanbul ignore next */ []));
|
|
3547
3731
|
overlay = inject(Overlay);
|
|
@@ -3637,8 +3821,10 @@ const ITEM_SIZES = {
|
|
|
3637
3821
|
};
|
|
3638
3822
|
/** A list/row item; use on a `<div>` or an `<a>`. */
|
|
3639
3823
|
class BuiItem {
|
|
3824
|
+
/** Visual style of the item: transparent, outlined, or muted background. */
|
|
3640
3825
|
variant = input('default', /* @ts-ignore */
|
|
3641
3826
|
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
3827
|
+
/** Item density: standard padding or a more compact `sm` size. */
|
|
3642
3828
|
size = input('default', /* @ts-ignore */
|
|
3643
3829
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
3644
3830
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -3665,6 +3851,7 @@ const MEDIA_VARIANTS = {
|
|
|
3665
3851
|
image: 'size-10 overflow-hidden rounded-sm [&_img]:size-full [&_img]:object-cover',
|
|
3666
3852
|
};
|
|
3667
3853
|
class BuiItemMedia {
|
|
3854
|
+
/** Media presentation: plain, an icon tile, or a cropped image thumbnail. */
|
|
3668
3855
|
variant = input('default', /* @ts-ignore */
|
|
3669
3856
|
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
3670
3857
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -3812,6 +3999,7 @@ const ADDON_ALIGN = {
|
|
|
3812
3999
|
'block-end': 'order-last w-full justify-start px-3 pb-3',
|
|
3813
4000
|
};
|
|
3814
4001
|
class BuiInputGroupAddon {
|
|
4002
|
+
/** Where the addon sits relative to the input (inline or block, start or end). */
|
|
3815
4003
|
align = input('inline-start', /* @ts-ignore */
|
|
3816
4004
|
...(ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []));
|
|
3817
4005
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -3872,8 +4060,10 @@ const IG_BUTTON_SIZES = {
|
|
|
3872
4060
|
'icon-sm': 'size-8 p-0',
|
|
3873
4061
|
};
|
|
3874
4062
|
class BuiInputGroupButton {
|
|
4063
|
+
/** Visual style of the addon button. */
|
|
3875
4064
|
variant = input('ghost', /* @ts-ignore */
|
|
3876
4065
|
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
4066
|
+
/** Size preset for the addon button (text or icon variants). */
|
|
3877
4067
|
size = input('xs', /* @ts-ignore */
|
|
3878
4068
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
3879
4069
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -3892,6 +4082,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
3892
4082
|
|
|
3893
4083
|
/** Visually hides content while keeping it available to assistive tech (sr-only). */
|
|
3894
4084
|
class BuiVisuallyHidden {
|
|
4085
|
+
/** Whether the content becomes visible when focused (e.g. skip links). */
|
|
3895
4086
|
focusable = input(false, /* @ts-ignore */
|
|
3896
4087
|
...(ngDevMode ? [{ debugName: "focusable" }] : /* istanbul ignore next */ []));
|
|
3897
4088
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -3917,21 +4108,28 @@ const TONES = {
|
|
|
3917
4108
|
};
|
|
3918
4109
|
/** A labelled meter (`role="meter"`) for a measurement within a known range. */
|
|
3919
4110
|
class BuiMeter {
|
|
4111
|
+
/** Current measurement; clamped between `min` and `max`. */
|
|
3920
4112
|
value = input(0, /* @ts-ignore */
|
|
3921
4113
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
4114
|
+
/** Minimum value of the meter range. */
|
|
3922
4115
|
min = input(0, /* @ts-ignore */
|
|
3923
4116
|
...(ngDevMode ? [{ debugName: "min" }] : /* istanbul ignore next */ []));
|
|
4117
|
+
/** Maximum value of the meter range. */
|
|
3924
4118
|
max = input(100, /* @ts-ignore */
|
|
3925
4119
|
...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
|
|
4120
|
+
/** Optional text label shown above the meter bar. */
|
|
3926
4121
|
label = input(null, /* @ts-ignore */
|
|
3927
4122
|
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
4123
|
+
/** Fill colour tone; overridden by any matching threshold. */
|
|
3928
4124
|
tone = input('default', /* @ts-ignore */
|
|
3929
4125
|
...(ngDevMode ? [{ debugName: "tone" }] : /* istanbul ignore next */ []));
|
|
3930
4126
|
/** Auto-pick the fill tone by value: the highest threshold whose `at` ≤ value wins. */
|
|
3931
4127
|
thresholds = input([], /* @ts-ignore */
|
|
3932
4128
|
...(ngDevMode ? [{ debugName: "thresholds" }] : /* istanbul ignore next */ []));
|
|
4129
|
+
/** Whether to display the formatted value text next to the label. */
|
|
3933
4130
|
showValue = input(true, /* @ts-ignore */
|
|
3934
4131
|
...(ngDevMode ? [{ debugName: "showValue" }] : /* istanbul ignore next */ []));
|
|
4132
|
+
/** Unit suffix appended to the displayed value (e.g. "%"). */
|
|
3935
4133
|
unit = input('%', /* @ts-ignore */
|
|
3936
4134
|
...(ngDevMode ? [{ debugName: "unit" }] : /* istanbul ignore next */ []));
|
|
3937
4135
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -4035,14 +4233,19 @@ const TREND_CLASS = {
|
|
|
4035
4233
|
};
|
|
4036
4234
|
/** A KPI / statistic card: label, big value, and a trend-coloured change. */
|
|
4037
4235
|
class BuiStat {
|
|
4236
|
+
/** Small caption shown above the value. */
|
|
4038
4237
|
label = input(null, /* @ts-ignore */
|
|
4039
4238
|
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
4239
|
+
/** Primary statistic displayed as the large value. */
|
|
4040
4240
|
value = input('', /* @ts-ignore */
|
|
4041
4241
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
4242
|
+
/** Change indicator (e.g. "+12%"); coloured by trend. */
|
|
4042
4243
|
change = input(null, /* @ts-ignore */
|
|
4043
4244
|
...(ngDevMode ? [{ debugName: "change" }] : /* istanbul ignore next */ []));
|
|
4245
|
+
/** Explicit trend direction; inferred from `change`'s sign when null. */
|
|
4044
4246
|
trend = input(null, /* @ts-ignore */
|
|
4045
4247
|
...(ngDevMode ? [{ debugName: "trend" }] : /* istanbul ignore next */ []));
|
|
4248
|
+
/** Muted text shown next to the change value. */
|
|
4046
4249
|
caption = input(null, /* @ts-ignore */
|
|
4047
4250
|
...(ngDevMode ? [{ debugName: "caption" }] : /* istanbul ignore next */ []));
|
|
4048
4251
|
/** Optional inline sparkline drawn from a series of numbers. */
|
|
@@ -4161,9 +4364,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
4161
4364
|
* and stays open while the pointer is over the card. SSR-safe (browser-only, on hover).
|
|
4162
4365
|
*/
|
|
4163
4366
|
class BuiHoverCard {
|
|
4367
|
+
/** Template rendered inside the card; bound via the `buiHoverCard` attribute. */
|
|
4164
4368
|
content = input.required({ ...(ngDevMode ? { debugName: "content" } : /* istanbul ignore next */ {}), alias: 'buiHoverCard' });
|
|
4369
|
+
/** Delay in milliseconds before the card opens on hover/focus. */
|
|
4165
4370
|
openDelay = input(400, /* @ts-ignore */
|
|
4166
4371
|
...(ngDevMode ? [{ debugName: "openDelay" }] : /* istanbul ignore next */ []));
|
|
4372
|
+
/** Delay in milliseconds before the card closes after the pointer leaves. */
|
|
4167
4373
|
closeDelay = input(100, /* @ts-ignore */
|
|
4168
4374
|
...(ngDevMode ? [{ debugName: "closeDelay" }] : /* istanbul ignore next */ []));
|
|
4169
4375
|
overlay = inject(Overlay);
|
|
@@ -4255,11 +4461,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
4255
4461
|
|
|
4256
4462
|
/** A dark code panel with an optional filename header and a copy button. */
|
|
4257
4463
|
class BuiCodeBlock {
|
|
4464
|
+
/** Source code shown in the panel and copied to the clipboard. */
|
|
4258
4465
|
code = input('', /* @ts-ignore */
|
|
4259
4466
|
...(ngDevMode ? [{ debugName: "code" }] : /* istanbul ignore next */ []));
|
|
4467
|
+
/** Optional filename shown in the header; omit for the floating copy button. */
|
|
4260
4468
|
filename = input(null, /* @ts-ignore */
|
|
4261
4469
|
...(ngDevMode ? [{ debugName: "filename" }] : /* istanbul ignore next */ []));
|
|
4262
4470
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
4471
|
+
/** Accessible label for the copy button. */
|
|
4472
|
+
copyLabel = input(/* @ts-ignore */
|
|
4473
|
+
...(ngDevMode ? [undefined, { debugName: "copyLabel" }] : /* istanbul ignore next */ []));
|
|
4474
|
+
/** Short visible text for the copy button. */
|
|
4475
|
+
copyShortLabel = input(/* @ts-ignore */
|
|
4476
|
+
...(ngDevMode ? [undefined, { debugName: "copyShortLabel" }] : /* istanbul ignore next */ []));
|
|
4477
|
+
/** Text shown briefly after the code is copied. */
|
|
4478
|
+
copiedLabel = input(/* @ts-ignore */
|
|
4479
|
+
...(ngDevMode ? [undefined, { debugName: "copiedLabel" }] : /* istanbul ignore next */ []));
|
|
4480
|
+
copyText = buiLabel('codeBlockCopy', this.copyLabel);
|
|
4481
|
+
copyShortText = buiLabel('codeBlockCopyShort', this.copyShortLabel);
|
|
4482
|
+
copiedText = buiLabel('codeBlockCopied', this.copiedLabel);
|
|
4263
4483
|
copied = signal(false, /* @ts-ignore */
|
|
4264
4484
|
...(ngDevMode ? [{ debugName: "copied" }] : /* istanbul ignore next */ []));
|
|
4265
4485
|
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 +4497,27 @@ class BuiCodeBlock {
|
|
|
4277
4497
|
}
|
|
4278
4498
|
}
|
|
4279
4499
|
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: `
|
|
4500
|
+
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
4501
|
@if (filename()) {
|
|
4282
4502
|
<div class="flex items-center justify-between border-b border-white/10 px-4 py-2">
|
|
4283
4503
|
<span class="font-mono text-xs text-zinc-400">{{ filename() }}</span>
|
|
4284
4504
|
<button
|
|
4285
4505
|
type="button"
|
|
4286
|
-
aria-label="
|
|
4506
|
+
[attr.aria-label]="copyText()"
|
|
4287
4507
|
class="text-xs text-zinc-400 transition-colors hover:text-zinc-100"
|
|
4288
4508
|
(click)="copy()"
|
|
4289
4509
|
>
|
|
4290
|
-
{{ copied() ?
|
|
4510
|
+
{{ copied() ? copiedText() : copyShortText() }}
|
|
4291
4511
|
</button>
|
|
4292
4512
|
</div>
|
|
4293
4513
|
} @else {
|
|
4294
4514
|
<button
|
|
4295
4515
|
type="button"
|
|
4296
|
-
aria-label="
|
|
4516
|
+
[attr.aria-label]="copyText()"
|
|
4297
4517
|
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
4518
|
(click)="copy()"
|
|
4299
4519
|
>
|
|
4300
|
-
{{ copied() ?
|
|
4520
|
+
{{ copied() ? copiedText() : copyShortText() }}
|
|
4301
4521
|
</button>
|
|
4302
4522
|
}
|
|
4303
4523
|
<pre
|
|
@@ -4316,21 +4536,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
4316
4536
|
<span class="font-mono text-xs text-zinc-400">{{ filename() }}</span>
|
|
4317
4537
|
<button
|
|
4318
4538
|
type="button"
|
|
4319
|
-
aria-label="
|
|
4539
|
+
[attr.aria-label]="copyText()"
|
|
4320
4540
|
class="text-xs text-zinc-400 transition-colors hover:text-zinc-100"
|
|
4321
4541
|
(click)="copy()"
|
|
4322
4542
|
>
|
|
4323
|
-
{{ copied() ?
|
|
4543
|
+
{{ copied() ? copiedText() : copyShortText() }}
|
|
4324
4544
|
</button>
|
|
4325
4545
|
</div>
|
|
4326
4546
|
} @else {
|
|
4327
4547
|
<button
|
|
4328
4548
|
type="button"
|
|
4329
|
-
aria-label="
|
|
4549
|
+
[attr.aria-label]="copyText()"
|
|
4330
4550
|
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
4551
|
(click)="copy()"
|
|
4332
4552
|
>
|
|
4333
|
-
{{ copied() ?
|
|
4553
|
+
{{ copied() ? copiedText() : copyShortText() }}
|
|
4334
4554
|
</button>
|
|
4335
4555
|
}
|
|
4336
4556
|
<pre
|
|
@@ -4338,7 +4558,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
4338
4558
|
><code class="font-mono">{{ code() }}</code></pre>
|
|
4339
4559
|
`,
|
|
4340
4560
|
}]
|
|
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 }] }] } });
|
|
4561
|
+
}], 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
4562
|
|
|
4343
4563
|
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
4344
4564
|
const noop$e = () => { };
|
|
@@ -4349,23 +4569,31 @@ const noop$e = () => { };
|
|
|
4349
4569
|
* only read inside browser event handlers.
|
|
4350
4570
|
*/
|
|
4351
4571
|
class BuiSlider {
|
|
4572
|
+
/** Current value (lower thumb in range mode). Two-way bindable with `[(value)]`. */
|
|
4352
4573
|
value = model(0, /* @ts-ignore */
|
|
4353
4574
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
4354
4575
|
/** Enable a second thumb; binds `endValue` as the upper handle. */
|
|
4355
4576
|
range = input(false, /* @ts-ignore */
|
|
4356
4577
|
...(ngDevMode ? [{ debugName: "range" }] : /* istanbul ignore next */ []));
|
|
4578
|
+
/** Upper thumb value in range mode. Two-way bindable with `[(endValue)]`. */
|
|
4357
4579
|
endValue = model(100, /* @ts-ignore */
|
|
4358
4580
|
...(ngDevMode ? [{ debugName: "endValue" }] : /* istanbul ignore next */ []));
|
|
4581
|
+
/** Minimum selectable value. */
|
|
4359
4582
|
min = input(0, /* @ts-ignore */
|
|
4360
4583
|
...(ngDevMode ? [{ debugName: "min" }] : /* istanbul ignore next */ []));
|
|
4584
|
+
/** Maximum selectable value. */
|
|
4361
4585
|
max = input(100, /* @ts-ignore */
|
|
4362
4586
|
...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
|
|
4587
|
+
/** Increment between selectable values. */
|
|
4363
4588
|
step = input(1, /* @ts-ignore */
|
|
4364
4589
|
...(ngDevMode ? [{ debugName: "step" }] : /* istanbul ignore next */ []));
|
|
4590
|
+
/** Whether the slider is disabled. Two-way bindable with `[(disabled)]`. */
|
|
4365
4591
|
disabled = model(false, /* @ts-ignore */
|
|
4366
4592
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
4593
|
+
/** Layout direction of the slider. */
|
|
4367
4594
|
orientation = input('horizontal', /* @ts-ignore */
|
|
4368
4595
|
...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
|
|
4596
|
+
/** Accessible label for the thumb(s). */
|
|
4369
4597
|
ariaLabel = input('Value', /* @ts-ignore */
|
|
4370
4598
|
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
4371
4599
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -4623,18 +4851,25 @@ const noop$d = () => { };
|
|
|
4623
4851
|
const STAR_SIZE = { sm: 'size-4', default: 'size-5', lg: 'size-6' };
|
|
4624
4852
|
/** A star rating (`role="radiogroup"`) with hover preview and keyboard support. */
|
|
4625
4853
|
class BuiRating {
|
|
4854
|
+
/** Current rating. Two-way bindable with `[(value)]`. */
|
|
4626
4855
|
value = model(0, /* @ts-ignore */
|
|
4627
4856
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
4857
|
+
/** Number of stars shown. */
|
|
4628
4858
|
max = input(5, /* @ts-ignore */
|
|
4629
4859
|
...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
|
|
4860
|
+
/** Whether the rating is display-only and cannot be changed. */
|
|
4630
4861
|
readonly = input(false, /* @ts-ignore */
|
|
4631
4862
|
...(ngDevMode ? [{ debugName: "readonly" }] : /* istanbul ignore next */ []));
|
|
4863
|
+
/** Whether the rating is disabled. Two-way bindable with `[(disabled)]`. */
|
|
4632
4864
|
disabled = model(false, /* @ts-ignore */
|
|
4633
4865
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
4866
|
+
/** Size of each star. */
|
|
4634
4867
|
size = input('default', /* @ts-ignore */
|
|
4635
4868
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
4869
|
+
/** Tailwind text-color class applied to filled stars. */
|
|
4636
4870
|
color = input('text-amber-500', /* @ts-ignore */
|
|
4637
4871
|
...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
|
|
4872
|
+
/** Accessible label for the rating group. */
|
|
4638
4873
|
ariaLabel = input(null, /* @ts-ignore */
|
|
4639
4874
|
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
4640
4875
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -4791,21 +5026,36 @@ const BTN_SIZE$1 = {
|
|
|
4791
5026
|
const FIELD_WIDTH = { sm: 'w-9', default: 'w-10', lg: 'w-12' };
|
|
4792
5027
|
/** A compact − [n] + quantity stepper (`role="group"` with a `spinbutton` field). */
|
|
4793
5028
|
class BuiQuantitySelector {
|
|
5029
|
+
/** Current quantity. Two-way bindable with `[(value)]`. */
|
|
4794
5030
|
value = model(1, /* @ts-ignore */
|
|
4795
5031
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
5032
|
+
/** Minimum allowed quantity. */
|
|
4796
5033
|
min = input(1, /* @ts-ignore */
|
|
4797
5034
|
...(ngDevMode ? [{ debugName: "min" }] : /* istanbul ignore next */ []));
|
|
5035
|
+
/** Maximum allowed quantity; unbounded when null. */
|
|
4798
5036
|
max = input(null, /* @ts-ignore */
|
|
4799
5037
|
...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
|
|
5038
|
+
/** Increment/decrement applied per button press. */
|
|
4800
5039
|
step = input(1, /* @ts-ignore */
|
|
4801
5040
|
...(ngDevMode ? [{ debugName: "step" }] : /* istanbul ignore next */ []));
|
|
5041
|
+
/** Size preset controlling height and button width. */
|
|
4802
5042
|
size = input('default', /* @ts-ignore */
|
|
4803
5043
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
5044
|
+
/** Whether the whole control is disabled. */
|
|
4804
5045
|
disabled = input(false, /* @ts-ignore */
|
|
4805
5046
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
5047
|
+
/** Accessible label for the numeric input field. */
|
|
4806
5048
|
ariaLabel = input('Quantity', /* @ts-ignore */
|
|
4807
5049
|
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
5050
|
+
/** Accessible label override for the decrease button. */
|
|
5051
|
+
decreaseLabel = input(/* @ts-ignore */
|
|
5052
|
+
...(ngDevMode ? [undefined, { debugName: "decreaseLabel" }] : /* istanbul ignore next */ []));
|
|
5053
|
+
/** Accessible label override for the increase button. */
|
|
5054
|
+
increaseLabel = input(/* @ts-ignore */
|
|
5055
|
+
...(ngDevMode ? [undefined, { debugName: "increaseLabel" }] : /* istanbul ignore next */ []));
|
|
4808
5056
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
5057
|
+
decreaseText = buiLabel('quantitySelectorDecrease', this.decreaseLabel);
|
|
5058
|
+
increaseText = buiLabel('quantitySelectorIncrease', this.increaseLabel);
|
|
4809
5059
|
atMin = computed(() => this.value() <= this.min(), /* @ts-ignore */
|
|
4810
5060
|
...(ngDevMode ? [{ debugName: "atMin" }] : /* istanbul ignore next */ []));
|
|
4811
5061
|
atMax = computed(() => {
|
|
@@ -4848,10 +5098,10 @@ class BuiQuantitySelector {
|
|
|
4848
5098
|
return result;
|
|
4849
5099
|
}
|
|
4850
5100
|
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: `
|
|
5101
|
+
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
5102
|
<button
|
|
4853
5103
|
type="button"
|
|
4854
|
-
aria-label="
|
|
5104
|
+
[attr.aria-label]="decreaseText()"
|
|
4855
5105
|
[disabled]="disabled() || atMin()"
|
|
4856
5106
|
[class]="btnClass('e')"
|
|
4857
5107
|
(click)="dec()"
|
|
@@ -4882,7 +5132,7 @@ class BuiQuantitySelector {
|
|
|
4882
5132
|
/>
|
|
4883
5133
|
<button
|
|
4884
5134
|
type="button"
|
|
4885
|
-
aria-label="
|
|
5135
|
+
[attr.aria-label]="increaseText()"
|
|
4886
5136
|
[disabled]="disabled() || atMax()"
|
|
4887
5137
|
[class]="btnClass('s')"
|
|
4888
5138
|
(click)="inc()"
|
|
@@ -4908,7 +5158,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
4908
5158
|
template: `
|
|
4909
5159
|
<button
|
|
4910
5160
|
type="button"
|
|
4911
|
-
aria-label="
|
|
5161
|
+
[attr.aria-label]="decreaseText()"
|
|
4912
5162
|
[disabled]="disabled() || atMin()"
|
|
4913
5163
|
[class]="btnClass('e')"
|
|
4914
5164
|
(click)="dec()"
|
|
@@ -4939,7 +5189,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
4939
5189
|
/>
|
|
4940
5190
|
<button
|
|
4941
5191
|
type="button"
|
|
4942
|
-
aria-label="
|
|
5192
|
+
[attr.aria-label]="increaseText()"
|
|
4943
5193
|
[disabled]="disabled() || atMax()"
|
|
4944
5194
|
[class]="btnClass('s')"
|
|
4945
5195
|
(click)="inc()"
|
|
@@ -4957,7 +5207,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
4957
5207
|
</button>
|
|
4958
5208
|
`,
|
|
4959
5209
|
}]
|
|
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 }] }] } });
|
|
5210
|
+
}], 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
5211
|
|
|
4962
5212
|
/**
|
|
4963
5213
|
* Confirm dialog styling (`role="alertdialog"`). Open it with the CDK `Dialog` service
|
|
@@ -5075,8 +5325,10 @@ const SIZES$3 = {
|
|
|
5075
5325
|
* browser (via `afterNextRender` and the `input` event).
|
|
5076
5326
|
*/
|
|
5077
5327
|
class BuiAutosizeTextarea {
|
|
5328
|
+
/** Size preset controlling minimum height, padding and text size. */
|
|
5078
5329
|
size = input('default', /* @ts-ignore */
|
|
5079
5330
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
5331
|
+
/** Maximum number of rows before the textarea scrolls instead of growing (null = unlimited). */
|
|
5080
5332
|
maxRows = input(null, /* @ts-ignore */
|
|
5081
5333
|
...(ngDevMode ? [{ debugName: "maxRows" }] : /* istanbul ignore next */ []));
|
|
5082
5334
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -5250,6 +5502,7 @@ const TYPOGRAPHY = {
|
|
|
5250
5502
|
};
|
|
5251
5503
|
/** Applies a typographic style. Put it on the matching element (e.g. `<h1 buiTypography variant="h1">`). */
|
|
5252
5504
|
class BuiTypography {
|
|
5505
|
+
/** Typographic style to apply (e.g. `h1`, `lead`, `blockquote`, `gradient`). */
|
|
5253
5506
|
variant = input('p', /* @ts-ignore */
|
|
5254
5507
|
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
5255
5508
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -5272,10 +5525,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
5272
5525
|
|
|
5273
5526
|
/** Decorative dotted background layer. Drop inside a `relative` container. */
|
|
5274
5527
|
class BuiDotPattern {
|
|
5528
|
+
/** Dot radius in pixels. */
|
|
5275
5529
|
size = input(1, /* @ts-ignore */
|
|
5276
5530
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
5531
|
+
/** Spacing between dots in pixels. */
|
|
5277
5532
|
gap = input(16, /* @ts-ignore */
|
|
5278
5533
|
...(ngDevMode ? [{ debugName: "gap" }] : /* istanbul ignore next */ []));
|
|
5534
|
+
/** Whether to fade the pattern with a radial mask toward the edges. */
|
|
5279
5535
|
mask = input(false, /* @ts-ignore */
|
|
5280
5536
|
...(ngDevMode ? [{ debugName: "mask" }] : /* istanbul ignore next */ []));
|
|
5281
5537
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -5308,10 +5564,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
5308
5564
|
|
|
5309
5565
|
/** Decorative grid background layer. Drop inside a `relative` container. */
|
|
5310
5566
|
class BuiGridPattern {
|
|
5567
|
+
/** Cell size (spacing between grid lines) in pixels. */
|
|
5311
5568
|
gap = input(24, /* @ts-ignore */
|
|
5312
5569
|
...(ngDevMode ? [{ debugName: "gap" }] : /* istanbul ignore next */ []));
|
|
5570
|
+
/** Thickness of the grid lines in pixels. */
|
|
5313
5571
|
lineWidth = input(1, /* @ts-ignore */
|
|
5314
5572
|
...(ngDevMode ? [{ debugName: "lineWidth" }] : /* istanbul ignore next */ []));
|
|
5573
|
+
/** Whether to fade the pattern with a radial mask toward the edges. */
|
|
5315
5574
|
mask = input(false, /* @ts-ignore */
|
|
5316
5575
|
...(ngDevMode ? [{ debugName: "mask" }] : /* istanbul ignore next */ []));
|
|
5317
5576
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -5349,10 +5608,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
5349
5608
|
const noop$c = () => { };
|
|
5350
5609
|
/** A single-select segmented control (`role="radiogroup"`) with arrow-key navigation. */
|
|
5351
5610
|
class BuiSegmentedControl {
|
|
5611
|
+
/** Currently selected segment value. Two-way bindable with `[(value)]`. */
|
|
5352
5612
|
value = model('', /* @ts-ignore */
|
|
5353
5613
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
5614
|
+
/** Available segments; plain strings are used as both value and label. */
|
|
5354
5615
|
options = input([], /* @ts-ignore */
|
|
5355
5616
|
...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
|
|
5617
|
+
/** Whether all segments are disabled. Two-way bindable with `[(disabled)]`. */
|
|
5356
5618
|
disabled = model(false, /* @ts-ignore */
|
|
5357
5619
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
5358
5620
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -5472,8 +5734,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
5472
5734
|
* helper classes `.prompt .ok .dim .path .warn` colour them.
|
|
5473
5735
|
*/
|
|
5474
5736
|
class BuiTerminal {
|
|
5737
|
+
/** Optional title shown in the terminal title bar. */
|
|
5475
5738
|
title = input(null, /* @ts-ignore */
|
|
5476
5739
|
...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
|
|
5740
|
+
/** Whether to show the macOS-style traffic-light buttons in the title bar. */
|
|
5477
5741
|
buttons = input(true, /* @ts-ignore */
|
|
5478
5742
|
...(ngDevMode ? [{ debugName: "buttons" }] : /* istanbul ignore next */ []));
|
|
5479
5743
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -5543,15 +5807,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
5543
5807
|
|
|
5544
5808
|
/** A data-driven feature-comparison / pricing table. */
|
|
5545
5809
|
class BuiComparisonTable {
|
|
5810
|
+
/** Column headers, one per pricing/feature tier. */
|
|
5546
5811
|
tiers = input([], /* @ts-ignore */
|
|
5547
5812
|
...(ngDevMode ? [{ debugName: "tiers" }] : /* istanbul ignore next */ []));
|
|
5813
|
+
/** Feature rows; each holds one value per tier. */
|
|
5548
5814
|
rows = input([], /* @ts-ignore */
|
|
5549
5815
|
...(ngDevMode ? [{ debugName: "rows" }] : /* istanbul ignore next */ []));
|
|
5816
|
+
/** Tier to emphasize, by index or tier name; `null` highlights none. */
|
|
5550
5817
|
highlight = input(null, /* @ts-ignore */
|
|
5551
5818
|
...(ngDevMode ? [{ debugName: "highlight" }] : /* istanbul ignore next */ []));
|
|
5819
|
+
/** Header text for the leading feature column. */
|
|
5552
5820
|
featureLabel = input('Feature', /* @ts-ignore */
|
|
5553
5821
|
...(ngDevMode ? [{ debugName: "featureLabel" }] : /* istanbul ignore next */ []));
|
|
5554
5822
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
5823
|
+
/** Accessible label for the included (check) icon. */
|
|
5824
|
+
includedLabel = input(/* @ts-ignore */
|
|
5825
|
+
...(ngDevMode ? [undefined, { debugName: "includedLabel" }] : /* istanbul ignore next */ []));
|
|
5826
|
+
/** Accessible label for the not-included (dash) marker. */
|
|
5827
|
+
notIncludedLabel = input(/* @ts-ignore */
|
|
5828
|
+
...(ngDevMode ? [undefined, { debugName: "notIncludedLabel" }] : /* istanbul ignore next */ []));
|
|
5829
|
+
includedText = buiLabel('comparisonTableIncluded', this.includedLabel);
|
|
5830
|
+
notIncludedText = buiLabel('comparisonTableNotIncluded', this.notIncludedLabel);
|
|
5555
5831
|
highlightIndex = computed(() => {
|
|
5556
5832
|
const highlight = this.highlight();
|
|
5557
5833
|
if (typeof highlight === 'number') {
|
|
@@ -5563,7 +5839,7 @@ class BuiComparisonTable {
|
|
|
5563
5839
|
computedClass = computed(() => cn('w-full overflow-x-auto rounded-xl border', this.userClass()), /* @ts-ignore */
|
|
5564
5840
|
...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
|
|
5565
5841
|
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: `
|
|
5842
|
+
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
5843
|
<table class="w-full text-sm">
|
|
5568
5844
|
<caption class="sr-only">
|
|
5569
5845
|
{{
|
|
@@ -5604,13 +5880,13 @@ class BuiComparisonTable {
|
|
|
5604
5880
|
stroke-width="2"
|
|
5605
5881
|
stroke-linecap="round"
|
|
5606
5882
|
stroke-linejoin="round"
|
|
5607
|
-
aria-label="
|
|
5883
|
+
[attr.aria-label]="includedText()"
|
|
5608
5884
|
class="mx-auto size-4 text-primary"
|
|
5609
5885
|
>
|
|
5610
5886
|
<path d="M20 6 9 17l-5-5" />
|
|
5611
5887
|
</svg>
|
|
5612
5888
|
} @else if (value === false || value === null) {
|
|
5613
|
-
<span class="text-muted-foreground" aria-label="
|
|
5889
|
+
<span class="text-muted-foreground" [attr.aria-label]="notIncludedText()">—</span>
|
|
5614
5890
|
} @else {
|
|
5615
5891
|
{{ value }}
|
|
5616
5892
|
}
|
|
@@ -5668,13 +5944,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
5668
5944
|
stroke-width="2"
|
|
5669
5945
|
stroke-linecap="round"
|
|
5670
5946
|
stroke-linejoin="round"
|
|
5671
|
-
aria-label="
|
|
5947
|
+
[attr.aria-label]="includedText()"
|
|
5672
5948
|
class="mx-auto size-4 text-primary"
|
|
5673
5949
|
>
|
|
5674
5950
|
<path d="M20 6 9 17l-5-5" />
|
|
5675
5951
|
</svg>
|
|
5676
5952
|
} @else if (value === false || value === null) {
|
|
5677
|
-
<span class="text-muted-foreground" aria-label="
|
|
5953
|
+
<span class="text-muted-foreground" [attr.aria-label]="notIncludedText()">—</span>
|
|
5678
5954
|
} @else {
|
|
5679
5955
|
{{ value }}
|
|
5680
5956
|
}
|
|
@@ -5686,15 +5962,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
5686
5962
|
</table>
|
|
5687
5963
|
`,
|
|
5688
5964
|
}]
|
|
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 }] }] } });
|
|
5965
|
+
}], 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
5966
|
|
|
5691
5967
|
/**
|
|
5692
5968
|
* A card that flips to reveal its back. Default content is the front; project the back
|
|
5693
5969
|
* with `[buiFlipBack]`. `trigger="hover"` (default) or `"click"` (keyboard-accessible).
|
|
5694
5970
|
*/
|
|
5695
5971
|
class BuiFlipCard {
|
|
5972
|
+
/** What flips the card: hover/focus or click/keypress. */
|
|
5696
5973
|
trigger = input('hover', /* @ts-ignore */
|
|
5697
5974
|
...(ngDevMode ? [{ debugName: "trigger" }] : /* istanbul ignore next */ []));
|
|
5975
|
+
/** Fixed card height as a CSS length. */
|
|
5698
5976
|
height = input('16rem', /* @ts-ignore */
|
|
5699
5977
|
...(ngDevMode ? [{ debugName: "height" }] : /* istanbul ignore next */ []));
|
|
5700
5978
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -5789,8 +6067,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
5789
6067
|
|
|
5790
6068
|
/** A card with a radial spotlight glow that follows the cursor on hover. */
|
|
5791
6069
|
class BuiSpotlightCard {
|
|
6070
|
+
/** Spotlight glow colour; defaults to a subtle foreground tint. */
|
|
5792
6071
|
color = input(null, /* @ts-ignore */
|
|
5793
6072
|
...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
|
|
6073
|
+
/** Spotlight radius in pixels. */
|
|
5794
6074
|
size = input(350, /* @ts-ignore */
|
|
5795
6075
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
5796
6076
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -5846,8 +6126,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
5846
6126
|
|
|
5847
6127
|
/** A card that tilts in 3D toward the cursor. SSR-safe (geometry read on mousemove). */
|
|
5848
6128
|
class BuiTiltCard {
|
|
6129
|
+
/** Maximum tilt angle in degrees on each axis. */
|
|
5849
6130
|
max = input(10, /* @ts-ignore */
|
|
5850
6131
|
...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
|
|
6132
|
+
/** Scale factor applied while the card is tilting. */
|
|
5851
6133
|
scaleTo = input(1.05, /* @ts-ignore */
|
|
5852
6134
|
...(ngDevMode ? [{ debugName: "scaleTo" }] : /* istanbul ignore next */ []));
|
|
5853
6135
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -5917,17 +6199,22 @@ const noop$b = () => { };
|
|
|
5917
6199
|
* (arrows, Home/End, Enter, Escape) and outside-click close. SSR-safe.
|
|
5918
6200
|
*/
|
|
5919
6201
|
class BuiSelect {
|
|
6202
|
+
/** Selected option value (single mode). Two-way bindable with `[(value)]`. */
|
|
5920
6203
|
value = model('', /* @ts-ignore */
|
|
5921
6204
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
5922
6205
|
/** Select several options; binds `values` instead of `value`. */
|
|
5923
6206
|
multiple = input(false, /* @ts-ignore */
|
|
5924
6207
|
...(ngDevMode ? [{ debugName: "multiple" }] : /* istanbul ignore next */ []));
|
|
6208
|
+
/** Selected option values (multiple mode). Two-way bindable with `[(values)]`. */
|
|
5925
6209
|
values = model([], /* @ts-ignore */
|
|
5926
6210
|
...(ngDevMode ? [{ debugName: "values" }] : /* istanbul ignore next */ []));
|
|
6211
|
+
/** Available options to choose from. */
|
|
5927
6212
|
options = input([], /* @ts-ignore */
|
|
5928
6213
|
...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
|
|
6214
|
+
/** Text shown on the trigger when nothing is selected. */
|
|
5929
6215
|
placeholder = input('Select…', /* @ts-ignore */
|
|
5930
6216
|
...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
6217
|
+
/** Whether the select is disabled. Two-way bindable with `[(disabled)]`. */
|
|
5931
6218
|
disabled = model(false, /* @ts-ignore */
|
|
5932
6219
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
5933
6220
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -6303,11 +6590,17 @@ const VARIANTS$1 = {
|
|
|
6303
6590
|
* `threshold` px. SSR-safe — the scroll position is only read in the browser.
|
|
6304
6591
|
*/
|
|
6305
6592
|
class BuiBackToTop {
|
|
6593
|
+
/** Pixel scroll distance before the button appears. */
|
|
6306
6594
|
threshold = input(300, /* @ts-ignore */
|
|
6307
6595
|
...(ngDevMode ? [{ debugName: "threshold" }] : /* istanbul ignore next */ []));
|
|
6596
|
+
/** Visual style of the button. */
|
|
6308
6597
|
variant = input('primary', /* @ts-ignore */
|
|
6309
6598
|
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
6310
6599
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
6600
|
+
/** Accessible label for the button; falls back to the i18n default. */
|
|
6601
|
+
label = input(/* @ts-ignore */
|
|
6602
|
+
...(ngDevMode ? [undefined, { debugName: "label" }] : /* istanbul ignore next */ []));
|
|
6603
|
+
labelText = buiLabel('backToTop', this.label);
|
|
6311
6604
|
shown = signal(false, /* @ts-ignore */
|
|
6312
6605
|
...(ngDevMode ? [{ debugName: "shown" }] : /* istanbul ignore next */ []));
|
|
6313
6606
|
variantClass = computed(() => VARIANTS$1[this.variant()], /* @ts-ignore */
|
|
@@ -6326,10 +6619,10 @@ class BuiBackToTop {
|
|
|
6326
6619
|
globalThis.scrollTo({ top: 0, behavior: 'smooth' });
|
|
6327
6620
|
}
|
|
6328
6621
|
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: `
|
|
6622
|
+
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
6623
|
<button
|
|
6331
6624
|
type="button"
|
|
6332
|
-
aria-label="
|
|
6625
|
+
[attr.aria-label]="labelText()"
|
|
6333
6626
|
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
6627
|
[class]="variantClass()"
|
|
6335
6628
|
(click)="toTop()"
|
|
@@ -6363,7 +6656,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
6363
6656
|
template: `
|
|
6364
6657
|
<button
|
|
6365
6658
|
type="button"
|
|
6366
|
-
aria-label="
|
|
6659
|
+
[attr.aria-label]="labelText()"
|
|
6367
6660
|
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
6661
|
[class]="variantClass()"
|
|
6369
6662
|
(click)="toTop()"
|
|
@@ -6384,7 +6677,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
6384
6677
|
</button>
|
|
6385
6678
|
`,
|
|
6386
6679
|
}]
|
|
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 }] }] } });
|
|
6680
|
+
}], 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
6681
|
|
|
6389
6682
|
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
6390
6683
|
const noop$a = () => { };
|
|
@@ -6393,17 +6686,22 @@ const noop$a = () => { };
|
|
|
6393
6686
|
* filtered listbox, using the `aria-activedescendant` pattern. Full keyboard + outside-click.
|
|
6394
6687
|
*/
|
|
6395
6688
|
class BuiCombobox {
|
|
6689
|
+
/** Selected option value (single mode). Two-way bindable with `[(value)]`. */
|
|
6396
6690
|
value = model('', /* @ts-ignore */
|
|
6397
6691
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
6398
6692
|
/** Select several options; binds `values` instead of `value`. */
|
|
6399
6693
|
multiple = input(false, /* @ts-ignore */
|
|
6400
6694
|
...(ngDevMode ? [{ debugName: "multiple" }] : /* istanbul ignore next */ []));
|
|
6695
|
+
/** Selected option values (multiple mode). Two-way bindable with `[(values)]`. */
|
|
6401
6696
|
values = model([], /* @ts-ignore */
|
|
6402
6697
|
...(ngDevMode ? [{ debugName: "values" }] : /* istanbul ignore next */ []));
|
|
6698
|
+
/** Available options to filter and choose from. */
|
|
6403
6699
|
options = input([], /* @ts-ignore */
|
|
6404
6700
|
...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
|
|
6701
|
+
/** Placeholder text shown in the search input. */
|
|
6405
6702
|
placeholder = input('Search…', /* @ts-ignore */
|
|
6406
6703
|
...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
6704
|
+
/** Whether the combobox is disabled. Two-way bindable with `[(disabled)]`. */
|
|
6407
6705
|
disabled = model(false, /* @ts-ignore */
|
|
6408
6706
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
6409
6707
|
/** When false, the field can't be typed in — it just opens the full list (select-like). */
|
|
@@ -6706,8 +7004,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
6706
7004
|
|
|
6707
7005
|
/** A live countdown to a target time (`role="timer"`). SSR-safe — ticks only in the browser. */
|
|
6708
7006
|
class BuiCountdown {
|
|
7007
|
+
/** Target moment to count down to, as a Date, timestamp, or date string. */
|
|
6709
7008
|
to = input.required(/* @ts-ignore */
|
|
6710
7009
|
...(ngDevMode ? [{ debugName: "to" }] : /* istanbul ignore next */ []));
|
|
7010
|
+
/** Text shown once the target time has passed. */
|
|
6711
7011
|
expired = input('Expired', /* @ts-ignore */
|
|
6712
7012
|
...(ngDevMode ? [{ debugName: "expired" }] : /* istanbul ignore next */ []));
|
|
6713
7013
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -6807,18 +7107,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
6807
7107
|
* `aria-hidden`; an sr-only span carries the final value (SSR/no-JS read the real number).
|
|
6808
7108
|
*/
|
|
6809
7109
|
class BuiNumberTicker {
|
|
7110
|
+
/** Target value to count up to. */
|
|
6810
7111
|
value = input(0, /* @ts-ignore */
|
|
6811
7112
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
7113
|
+
/** Starting value the animation counts from. */
|
|
6812
7114
|
from = input(0, /* @ts-ignore */
|
|
6813
7115
|
...(ngDevMode ? [{ debugName: "from" }] : /* istanbul ignore next */ []));
|
|
7116
|
+
/** Animation length in milliseconds; 0 snaps instantly. */
|
|
6814
7117
|
duration = input(1500, /* @ts-ignore */
|
|
6815
7118
|
...(ngDevMode ? [{ debugName: "duration" }] : /* istanbul ignore next */ []));
|
|
7119
|
+
/** Number of decimal places to display. */
|
|
6816
7120
|
decimals = input(0, /* @ts-ignore */
|
|
6817
7121
|
...(ngDevMode ? [{ debugName: "decimals" }] : /* istanbul ignore next */ []));
|
|
7122
|
+
/** Text prepended before the number. */
|
|
6818
7123
|
prefix = input('', /* @ts-ignore */
|
|
6819
7124
|
...(ngDevMode ? [{ debugName: "prefix" }] : /* istanbul ignore next */ []));
|
|
7125
|
+
/** Text appended after the number. */
|
|
6820
7126
|
suffix = input('', /* @ts-ignore */
|
|
6821
7127
|
...(ngDevMode ? [{ debugName: "suffix" }] : /* istanbul ignore next */ []));
|
|
7128
|
+
/** Thousands-group separator character. */
|
|
6822
7129
|
separator = input(',', /* @ts-ignore */
|
|
6823
7130
|
...(ngDevMode ? [{ debugName: "separator" }] : /* istanbul ignore next */ []));
|
|
6824
7131
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -6887,8 +7194,10 @@ const VARIANTS = {
|
|
|
6887
7194
|
};
|
|
6888
7195
|
/** A styled anchor. Set `external` for `target=_blank` + safe `rel`. */
|
|
6889
7196
|
class BuiLink {
|
|
7197
|
+
/** Visual style of the link: default, muted, or subtle. */
|
|
6890
7198
|
variant = input('default', /* @ts-ignore */
|
|
6891
7199
|
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
7200
|
+
/** Whether the link is external, adding `target=_blank` and safe `rel`. */
|
|
6892
7201
|
external = input(false, /* @ts-ignore */
|
|
6893
7202
|
...(ngDevMode ? [{ debugName: "external" }] : /* istanbul ignore next */ []));
|
|
6894
7203
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -6922,14 +7231,19 @@ const PRESETS = {
|
|
|
6922
7231
|
};
|
|
6923
7232
|
/** Renders accessible text painted with a CSS gradient, with an optional shimmer. */
|
|
6924
7233
|
class BuiGradientText {
|
|
7234
|
+
/** Named colour preset used when from/via/to are not set. */
|
|
6925
7235
|
preset = input('brand', /* @ts-ignore */
|
|
6926
7236
|
...(ngDevMode ? [{ debugName: "preset" }] : /* istanbul ignore next */ []));
|
|
7237
|
+
/** Gradient start colour; overrides the preset's first stop. */
|
|
6927
7238
|
from = input(null, /* @ts-ignore */
|
|
6928
7239
|
...(ngDevMode ? [{ debugName: "from" }] : /* istanbul ignore next */ []));
|
|
7240
|
+
/** Gradient middle colour; overrides the preset's second stop. */
|
|
6929
7241
|
via = input(null, /* @ts-ignore */
|
|
6930
7242
|
...(ngDevMode ? [{ debugName: "via" }] : /* istanbul ignore next */ []));
|
|
7243
|
+
/** Gradient end colour; overrides the preset's third stop. */
|
|
6931
7244
|
to = input(null, /* @ts-ignore */
|
|
6932
7245
|
...(ngDevMode ? [{ debugName: "to" }] : /* istanbul ignore next */ []));
|
|
7246
|
+
/** Whether to animate a horizontal shimmer across the gradient. */
|
|
6933
7247
|
animate = input(false, /* @ts-ignore */
|
|
6934
7248
|
...(ngDevMode ? [{ debugName: "animate" }] : /* istanbul ignore next */ []));
|
|
6935
7249
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -6962,10 +7276,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
6962
7276
|
* Provide the title via the `heading` input or by projecting content.
|
|
6963
7277
|
*/
|
|
6964
7278
|
class BuiPageHeader {
|
|
7279
|
+
/** Title text rendered in the heading (alternative to projecting content). */
|
|
6965
7280
|
heading = input('', /* @ts-ignore */
|
|
6966
7281
|
...(ngDevMode ? [{ debugName: "heading" }] : /* istanbul ignore next */ []));
|
|
7282
|
+
/** Optional supporting text shown beneath the heading. */
|
|
6967
7283
|
description = input('', /* @ts-ignore */
|
|
6968
7284
|
...(ngDevMode ? [{ debugName: "description" }] : /* istanbul ignore next */ []));
|
|
7285
|
+
/** Whether to render a bottom border separating the header from the page. */
|
|
6969
7286
|
separator = input(false, /* @ts-ignore */
|
|
6970
7287
|
...(ngDevMode ? [{ debugName: "separator" }] : /* istanbul ignore next */ []));
|
|
6971
7288
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -7013,12 +7330,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
7013
7330
|
|
|
7014
7331
|
/** A styled blockquote / testimonial with optional attribution (author, role, avatar). */
|
|
7015
7332
|
class BuiQuote {
|
|
7333
|
+
/** Name of the person credited in the attribution. */
|
|
7016
7334
|
author = input('', /* @ts-ignore */
|
|
7017
7335
|
...(ngDevMode ? [{ debugName: "author" }] : /* istanbul ignore next */ []));
|
|
7336
|
+
/** Role or title shown beneath the author. */
|
|
7018
7337
|
role = input('', /* @ts-ignore */
|
|
7019
7338
|
...(ngDevMode ? [{ debugName: "role" }] : /* istanbul ignore next */ []));
|
|
7339
|
+
/** URL of the author's avatar image. */
|
|
7020
7340
|
avatar = input('', /* @ts-ignore */
|
|
7021
7341
|
...(ngDevMode ? [{ debugName: "avatar" }] : /* istanbul ignore next */ []));
|
|
7342
|
+
/** Source URL for the quote, set as the blockquote's `cite` attribute. */
|
|
7022
7343
|
cite = input('', /* @ts-ignore */
|
|
7023
7344
|
...(ngDevMode ? [{ debugName: "cite" }] : /* istanbul ignore next */ []));
|
|
7024
7345
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -7114,14 +7435,19 @@ const SIZES$2 = { sm: 'text-sm', default: 'text-base', lg: 'text-2xl' };
|
|
|
7114
7435
|
const COMPARE_SIZES = { sm: 'text-xs', default: 'text-sm', lg: 'text-base' };
|
|
7115
7436
|
/** A price display with optional compare-at (strikethrough) and a discount badge. */
|
|
7116
7437
|
class BuiPrice {
|
|
7438
|
+
/** Current price amount to display. */
|
|
7117
7439
|
amount = input(0, /* @ts-ignore */
|
|
7118
7440
|
...(ngDevMode ? [{ debugName: "amount" }] : /* istanbul ignore next */ []));
|
|
7441
|
+
/** Original price; when higher than amount, shows as struck-through. */
|
|
7119
7442
|
compareAt = input(null, /* @ts-ignore */
|
|
7120
7443
|
...(ngDevMode ? [{ debugName: "compareAt" }] : /* istanbul ignore next */ []));
|
|
7444
|
+
/** Currency symbol prefixed to each value. */
|
|
7121
7445
|
currency = input('$', /* @ts-ignore */
|
|
7122
7446
|
...(ngDevMode ? [{ debugName: "currency" }] : /* istanbul ignore next */ []));
|
|
7447
|
+
/** Text size preset for the price. */
|
|
7123
7448
|
size = input('default', /* @ts-ignore */
|
|
7124
7449
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
7450
|
+
/** Whether to show the percentage-off discount badge when on sale. */
|
|
7125
7451
|
showDiscount = input(true, /* @ts-ignore */
|
|
7126
7452
|
...(ngDevMode ? [{ debugName: "showDiscount" }] : /* istanbul ignore next */ []));
|
|
7127
7453
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -7217,14 +7543,19 @@ const JUSTIFY = {
|
|
|
7217
7543
|
};
|
|
7218
7544
|
/** A flexbox stack layout helper (direction, gap, alignment). */
|
|
7219
7545
|
class BuiStack {
|
|
7546
|
+
/** Flex direction: vertical (`col`) or horizontal (`row`). */
|
|
7220
7547
|
direction = input('col', /* @ts-ignore */
|
|
7221
7548
|
...(ngDevMode ? [{ debugName: "direction" }] : /* istanbul ignore next */ []));
|
|
7549
|
+
/** Spacing between items, as a Tailwind gap step. */
|
|
7222
7550
|
gap = input('4', /* @ts-ignore */
|
|
7223
7551
|
...(ngDevMode ? [{ debugName: "gap" }] : /* istanbul ignore next */ []));
|
|
7552
|
+
/** Cross-axis alignment (`start`/`center`/`end`/`stretch`/`baseline`). */
|
|
7224
7553
|
align = input('', /* @ts-ignore */
|
|
7225
7554
|
...(ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []));
|
|
7555
|
+
/** Main-axis distribution (`start`/`center`/`end`/`between`/`around`/`evenly`). */
|
|
7226
7556
|
justify = input('', /* @ts-ignore */
|
|
7227
7557
|
...(ngDevMode ? [{ debugName: "justify" }] : /* istanbul ignore next */ []));
|
|
7558
|
+
/** Whether items wrap onto multiple lines when they overflow. */
|
|
7228
7559
|
wrap = input(false, /* @ts-ignore */
|
|
7229
7560
|
...(ngDevMode ? [{ debugName: "wrap" }] : /* istanbul ignore next */ []));
|
|
7230
7561
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -7246,8 +7577,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
7246
7577
|
* design tokens locally. Renders as `display: contents` so it adds no box.
|
|
7247
7578
|
*/
|
|
7248
7579
|
class BuiAccent {
|
|
7580
|
+
/** Accent color applied to the primary tokens; `null` leaves the theme unchanged. */
|
|
7249
7581
|
color = input(null, /* @ts-ignore */
|
|
7250
7582
|
...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
|
|
7583
|
+
/** Foreground color paired with the accent for text/icons on accented surfaces. */
|
|
7251
7584
|
foreground = input('#ffffff', /* @ts-ignore */
|
|
7252
7585
|
...(ngDevMode ? [{ debugName: "foreground" }] : /* istanbul ignore next */ []));
|
|
7253
7586
|
styleVars = computed(() => {
|
|
@@ -7296,14 +7629,19 @@ const LABELS = { online: 'Online', away: 'Away', busy: 'Busy', offline: 'Offline
|
|
|
7296
7629
|
const SIZES$1 = { sm: 'size-2', default: 'size-2.5', lg: 'size-3' };
|
|
7297
7630
|
/** A small status dot (online/away/busy/offline). Status is never colour-only — the label is always present. */
|
|
7298
7631
|
class BuiPresence {
|
|
7632
|
+
/** Presence state, which sets the dot color and default label. */
|
|
7299
7633
|
status = input('online', /* @ts-ignore */
|
|
7300
7634
|
...(ngDevMode ? [{ debugName: "status" }] : /* istanbul ignore next */ []));
|
|
7635
|
+
/** Size preset for the status dot. */
|
|
7301
7636
|
size = input('default', /* @ts-ignore */
|
|
7302
7637
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
7638
|
+
/** Whether to show a pulsing ping animation (only when `online`). */
|
|
7303
7639
|
pulse = input(false, /* @ts-ignore */
|
|
7304
7640
|
...(ngDevMode ? [{ debugName: "pulse" }] : /* istanbul ignore next */ []));
|
|
7641
|
+
/** Custom label text; defaults to the status name. */
|
|
7305
7642
|
label = input('', /* @ts-ignore */
|
|
7306
7643
|
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
7644
|
+
/** Whether to render the label visibly; otherwise it stays screen-reader only. */
|
|
7307
7645
|
showLabel = input(false, /* @ts-ignore */
|
|
7308
7646
|
...(ngDevMode ? [{ debugName: "showLabel" }] : /* istanbul ignore next */ []));
|
|
7309
7647
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -7373,10 +7711,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
7373
7711
|
|
|
7374
7712
|
/** A single timeline entry: a dot + connector line and a content area. */
|
|
7375
7713
|
class BuiTimelineItem {
|
|
7714
|
+
/** Timestamp label shown above the entry's title. */
|
|
7376
7715
|
time = input('', /* @ts-ignore */
|
|
7377
7716
|
...(ngDevMode ? [{ debugName: "time" }] : /* istanbul ignore next */ []));
|
|
7717
|
+
/** Heading text for the entry. */
|
|
7378
7718
|
title = input('', /* @ts-ignore */
|
|
7379
7719
|
...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
|
|
7720
|
+
/** Whether to highlight this entry as the current/active step. */
|
|
7380
7721
|
active = input(false, /* @ts-ignore */
|
|
7381
7722
|
...(ngDevMode ? [{ debugName: "active" }] : /* istanbul ignore next */ []));
|
|
7382
7723
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -7456,8 +7797,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
7456
7797
|
|
|
7457
7798
|
/** A description list (`<dl>`). Children should be `bui-description-item`. */
|
|
7458
7799
|
class BuiDescriptionList {
|
|
7800
|
+
/** Arrangement of each item's term and description, side by side or stacked. */
|
|
7459
7801
|
layout = input('horizontal', /* @ts-ignore */
|
|
7460
7802
|
...(ngDevMode ? [{ debugName: "layout" }] : /* istanbul ignore next */ []));
|
|
7803
|
+
/** Whether to render a bordered card with dividers between items. */
|
|
7461
7804
|
bordered = input(false, /* @ts-ignore */
|
|
7462
7805
|
...(ngDevMode ? [{ debugName: "bordered" }] : /* istanbul ignore next */ []));
|
|
7463
7806
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -7478,6 +7821,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
7478
7821
|
|
|
7479
7822
|
/** A term/description row. Inherits horizontal/bordered layout from its parent list. */
|
|
7480
7823
|
class BuiDescriptionItem {
|
|
7824
|
+
/** The term label shown in the row's `<dt>`. */
|
|
7481
7825
|
term = input('', /* @ts-ignore */
|
|
7482
7826
|
...(ngDevMode ? [{ debugName: "term" }] : /* istanbul ignore next */ []));
|
|
7483
7827
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -7526,8 +7870,10 @@ const GAPS = {
|
|
|
7526
7870
|
};
|
|
7527
7871
|
/** A Pinterest-style masonry grid using native CSS multi-column layout. */
|
|
7528
7872
|
class BuiMasonry {
|
|
7873
|
+
/** Maximum number of columns at the widest breakpoint (1-6, responsive). */
|
|
7529
7874
|
columns = input(3, /* @ts-ignore */
|
|
7530
7875
|
...(ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []));
|
|
7876
|
+
/** Spacing between items, as a Tailwind spacing key ('0', '2', '3', '4', '6', '8'). */
|
|
7531
7877
|
gap = input('4', /* @ts-ignore */
|
|
7532
7878
|
...(ngDevMode ? [{ debugName: "gap" }] : /* istanbul ignore next */ []));
|
|
7533
7879
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -7551,6 +7897,7 @@ const COLUMNS$1 = {
|
|
|
7551
7897
|
};
|
|
7552
7898
|
/** A bento grid container. Use `bui-bento-item` for cells. */
|
|
7553
7899
|
class BuiBentoGrid {
|
|
7900
|
+
/** Number of columns at the largest breakpoint (2, 3 or 4). */
|
|
7554
7901
|
columns = input(3, /* @ts-ignore */
|
|
7555
7902
|
...(ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []));
|
|
7556
7903
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -7571,12 +7918,16 @@ const COL_SPAN = { 1: '', 2: 'lg:col-span-2', 3: 'lg:col-span-3' };
|
|
|
7571
7918
|
const ROW_SPAN = { 1: '', 2: 'row-span-2' };
|
|
7572
7919
|
/** A bento grid cell with optional title/description and configurable span. */
|
|
7573
7920
|
class BuiBentoItem {
|
|
7921
|
+
/** Optional heading rendered above the projected content. */
|
|
7574
7922
|
title = input('', /* @ts-ignore */
|
|
7575
7923
|
...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
|
|
7924
|
+
/** Optional muted description rendered below the title. */
|
|
7576
7925
|
description = input('', /* @ts-ignore */
|
|
7577
7926
|
...(ngDevMode ? [{ debugName: "description" }] : /* istanbul ignore next */ []));
|
|
7927
|
+
/** How many grid columns the cell spans (1-3). */
|
|
7578
7928
|
colSpan = input(1, /* @ts-ignore */
|
|
7579
7929
|
...(ngDevMode ? [{ debugName: "colSpan" }] : /* istanbul ignore next */ []));
|
|
7930
|
+
/** How many grid rows the cell spans (1-2). */
|
|
7580
7931
|
rowSpan = input(1, /* @ts-ignore */
|
|
7581
7932
|
...(ngDevMode ? [{ debugName: "rowSpan" }] : /* istanbul ignore next */ []));
|
|
7582
7933
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -7620,10 +7971,13 @@ const COLUMNS = {
|
|
|
7620
7971
|
};
|
|
7621
7972
|
/** A responsive thumbnail grid. */
|
|
7622
7973
|
class BuiGallery {
|
|
7974
|
+
/** Images to display, given as URLs or `GalleryImage` objects. */
|
|
7623
7975
|
images = input([], /* @ts-ignore */
|
|
7624
7976
|
...(ngDevMode ? [{ debugName: "images" }] : /* istanbul ignore next */ []));
|
|
7977
|
+
/** Number of grid columns (1-6). */
|
|
7625
7978
|
columns = input(3, /* @ts-ignore */
|
|
7626
7979
|
...(ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []));
|
|
7980
|
+
/** Tailwind class controlling thumbnail corner rounding. */
|
|
7627
7981
|
rounded = input('rounded-lg', /* @ts-ignore */
|
|
7628
7982
|
...(ngDevMode ? [{ debugName: "rounded" }] : /* istanbul ignore next */ []));
|
|
7629
7983
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -7657,10 +8011,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
7657
8011
|
|
|
7658
8012
|
/** A veil with a spinner shown over its projected content while `show` is true. */
|
|
7659
8013
|
class BuiLoadingOverlay {
|
|
8014
|
+
/** Whether the loading veil is shown over the projected content. */
|
|
7660
8015
|
show = input(false, /* @ts-ignore */
|
|
7661
8016
|
...(ngDevMode ? [{ debugName: "show" }] : /* istanbul ignore next */ []));
|
|
8017
|
+
/** Text shown beneath the spinner; defaults to "Loading…" when empty. */
|
|
7662
8018
|
message = input('', /* @ts-ignore */
|
|
7663
8019
|
...(ngDevMode ? [{ debugName: "message" }] : /* istanbul ignore next */ []));
|
|
8020
|
+
/** Whether the veil blurs the content behind it. */
|
|
7664
8021
|
blur = input(true, /* @ts-ignore */
|
|
7665
8022
|
...(ngDevMode ? [{ debugName: "blur" }] : /* istanbul ignore next */ []));
|
|
7666
8023
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -7750,20 +8107,35 @@ const INPUT_SIZE = {
|
|
|
7750
8107
|
};
|
|
7751
8108
|
/** A numeric stepper: − / + buttons around a number field, with min/max/step clamping. */
|
|
7752
8109
|
class BuiNumberInput {
|
|
8110
|
+
/** Current number. Two-way bindable with `[(value)]`. */
|
|
7753
8111
|
value = model(0, /* @ts-ignore */
|
|
7754
8112
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
8113
|
+
/** Minimum allowed value, or null for no lower bound. */
|
|
7755
8114
|
min = input(null, /* @ts-ignore */
|
|
7756
8115
|
...(ngDevMode ? [{ debugName: "min" }] : /* istanbul ignore next */ []));
|
|
8116
|
+
/** Maximum allowed value, or null for no upper bound. */
|
|
7757
8117
|
max = input(null, /* @ts-ignore */
|
|
7758
8118
|
...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
|
|
8119
|
+
/** Amount added or subtracted per step. */
|
|
7759
8120
|
stepBy = input(1, { ...(ngDevMode ? { debugName: "stepBy" } : /* istanbul ignore next */ {}), alias: 'step' });
|
|
8121
|
+
/** Whether the control is disabled. Two-way bindable with `[(disabled)]`. */
|
|
7760
8122
|
disabled = model(false, /* @ts-ignore */
|
|
7761
8123
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
8124
|
+
/** Size preset controlling stepper button and field dimensions. */
|
|
7762
8125
|
size = input('default', /* @ts-ignore */
|
|
7763
8126
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
8127
|
+
/** Accessible label for the number field. */
|
|
7764
8128
|
ariaLabel = input('', /* @ts-ignore */
|
|
7765
8129
|
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
7766
8130
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
8131
|
+
/** Accessible label override for the decrease button. */
|
|
8132
|
+
decreaseLabel = input(/* @ts-ignore */
|
|
8133
|
+
...(ngDevMode ? [undefined, { debugName: "decreaseLabel" }] : /* istanbul ignore next */ []));
|
|
8134
|
+
/** Accessible label override for the increase button. */
|
|
8135
|
+
increaseLabel = input(/* @ts-ignore */
|
|
8136
|
+
...(ngDevMode ? [undefined, { debugName: "increaseLabel" }] : /* istanbul ignore next */ []));
|
|
8137
|
+
decreaseText = buiLabel('numberInputDecrease', this.decreaseLabel);
|
|
8138
|
+
increaseText = buiLabel('numberInputIncrease', this.increaseLabel);
|
|
7767
8139
|
onChange = noop$9;
|
|
7768
8140
|
onTouched = noop$9;
|
|
7769
8141
|
btnClass = computed(() => cn(BTN, BTN_SIZE[this.size()]), /* @ts-ignore */
|
|
@@ -7815,7 +8187,7 @@ class BuiNumberInput {
|
|
|
7815
8187
|
this.disabled.set(isDisabled);
|
|
7816
8188
|
}
|
|
7817
8189
|
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: [
|
|
8190
|
+
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
8191
|
{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => BuiNumberInput), multi: true },
|
|
7820
8192
|
], ngImport: i0, template: `
|
|
7821
8193
|
<button
|
|
@@ -7823,7 +8195,7 @@ class BuiNumberInput {
|
|
|
7823
8195
|
[class]="btnClass() + ' rounded-l-md'"
|
|
7824
8196
|
(click)="step(-1)"
|
|
7825
8197
|
[disabled]="disabled() || atMin()"
|
|
7826
|
-
aria-label="
|
|
8198
|
+
[attr.aria-label]="decreaseText()"
|
|
7827
8199
|
>
|
|
7828
8200
|
<svg
|
|
7829
8201
|
viewBox="0 0 24 24"
|
|
@@ -7856,7 +8228,7 @@ class BuiNumberInput {
|
|
|
7856
8228
|
[class]="btnClass() + ' rounded-r-md'"
|
|
7857
8229
|
(click)="step(1)"
|
|
7858
8230
|
[disabled]="disabled() || atMax()"
|
|
7859
|
-
aria-label="
|
|
8231
|
+
[attr.aria-label]="increaseText()"
|
|
7860
8232
|
>
|
|
7861
8233
|
<svg
|
|
7862
8234
|
viewBox="0 0 24 24"
|
|
@@ -7887,7 +8259,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
7887
8259
|
[class]="btnClass() + ' rounded-l-md'"
|
|
7888
8260
|
(click)="step(-1)"
|
|
7889
8261
|
[disabled]="disabled() || atMin()"
|
|
7890
|
-
aria-label="
|
|
8262
|
+
[attr.aria-label]="decreaseText()"
|
|
7891
8263
|
>
|
|
7892
8264
|
<svg
|
|
7893
8265
|
viewBox="0 0 24 24"
|
|
@@ -7920,7 +8292,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
7920
8292
|
[class]="btnClass() + ' rounded-r-md'"
|
|
7921
8293
|
(click)="step(1)"
|
|
7922
8294
|
[disabled]="disabled() || atMax()"
|
|
7923
|
-
aria-label="
|
|
8295
|
+
[attr.aria-label]="increaseText()"
|
|
7924
8296
|
>
|
|
7925
8297
|
<svg
|
|
7926
8298
|
viewBox="0 0 24 24"
|
|
@@ -7937,18 +8309,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
7937
8309
|
</button>
|
|
7938
8310
|
`,
|
|
7939
8311
|
}]
|
|
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 }] }] } });
|
|
8312
|
+
}], 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
8313
|
|
|
7942
8314
|
/** A radio-group of product variants, rendered as pills or colour swatches. */
|
|
7943
8315
|
class BuiVariantSelector {
|
|
8316
|
+
/** Selected variant value. Two-way bindable with `[(value)]`. */
|
|
7944
8317
|
value = model('', /* @ts-ignore */
|
|
7945
8318
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
8319
|
+
/** Available options, as plain strings or `VariantOption` objects. */
|
|
7946
8320
|
options = input([], /* @ts-ignore */
|
|
7947
8321
|
...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
|
|
8322
|
+
/** Render style: text pills or colour swatches. */
|
|
7948
8323
|
type = input('pill', /* @ts-ignore */
|
|
7949
8324
|
...(ngDevMode ? [{ debugName: "type" }] : /* istanbul ignore next */ []));
|
|
8325
|
+
/** Accessible label for the radio group. */
|
|
7950
8326
|
label = input('Variant', /* @ts-ignore */
|
|
7951
8327
|
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
8328
|
+
/** Whether the whole group is disabled. */
|
|
7952
8329
|
disabled = input(false, /* @ts-ignore */
|
|
7953
8330
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
7954
8331
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -8067,16 +8444,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
8067
8444
|
|
|
8068
8445
|
/** A tiny inline SVG trend chart (line + optional area). Pure, SSR-safe. */
|
|
8069
8446
|
class BuiSparkline {
|
|
8447
|
+
/** Numeric series to plot; needs at least two points to render. */
|
|
8070
8448
|
data = input([], /* @ts-ignore */
|
|
8071
8449
|
...(ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []));
|
|
8450
|
+
/** SVG width in pixels. */
|
|
8072
8451
|
width = input(100, /* @ts-ignore */
|
|
8073
8452
|
...(ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []));
|
|
8453
|
+
/** SVG height in pixels. */
|
|
8074
8454
|
height = input(28, /* @ts-ignore */
|
|
8075
8455
|
...(ngDevMode ? [{ debugName: "height" }] : /* istanbul ignore next */ []));
|
|
8456
|
+
/** Whether to draw the translucent area fill under the line. */
|
|
8076
8457
|
area = input(true, /* @ts-ignore */
|
|
8077
8458
|
...(ngDevMode ? [{ debugName: "area" }] : /* istanbul ignore next */ []));
|
|
8459
|
+
/** Line stroke width in pixels (also used as edge padding). */
|
|
8078
8460
|
strokeWidth = input(1.5, /* @ts-ignore */
|
|
8079
8461
|
...(ngDevMode ? [{ debugName: "strokeWidth" }] : /* istanbul ignore next */ []));
|
|
8462
|
+
/** Accessible label for the sparkline's `aria-label`. */
|
|
8080
8463
|
ariaLabel = input('Trend', /* @ts-ignore */
|
|
8081
8464
|
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
8082
8465
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -8183,13 +8566,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
8183
8566
|
const SIZES = { default: 'h-9 px-4 py-2', sm: 'h-8 gap-1.5 px-3', lg: 'h-10 px-6' };
|
|
8184
8567
|
/** A stateful add-to-cart button: idle → adding → added → idle. Emits `triggered` on click. */
|
|
8185
8568
|
class BuiAddToCart {
|
|
8569
|
+
/** Button text shown in the idle and adding states. */
|
|
8186
8570
|
label = input('Add to cart', /* @ts-ignore */
|
|
8187
8571
|
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
8572
|
+
/** Button text shown briefly in the added (success) state. */
|
|
8188
8573
|
addedLabel = input('Added', /* @ts-ignore */
|
|
8189
8574
|
...(ngDevMode ? [{ debugName: "addedLabel" }] : /* istanbul ignore next */ []));
|
|
8575
|
+
/** Size preset controlling height and padding. */
|
|
8190
8576
|
size = input('default', /* @ts-ignore */
|
|
8191
8577
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
8192
8578
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
8579
|
+
/** Emitted when the button is clicked to add the item. */
|
|
8193
8580
|
triggered = output();
|
|
8194
8581
|
state = signal('idle', /* @ts-ignore */
|
|
8195
8582
|
...(ngDevMode ? [{ debugName: "state" }] : /* istanbul ignore next */ []));
|
|
@@ -8364,18 +8751,25 @@ const TEXT_COLORS = [
|
|
|
8364
8751
|
];
|
|
8365
8752
|
/** A password field with a live strength meter and (optional) requirement checklist. */
|
|
8366
8753
|
class BuiPasswordStrength {
|
|
8754
|
+
/** Current password value. Two-way bindable with `[(password)]`. */
|
|
8367
8755
|
password = model('', /* @ts-ignore */
|
|
8368
8756
|
...(ngDevMode ? [{ debugName: "password" }] : /* istanbul ignore next */ []));
|
|
8757
|
+
/** Native `name` attribute for the input. */
|
|
8369
8758
|
name = input('password', /* @ts-ignore */
|
|
8370
8759
|
...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
|
|
8760
|
+
/** Input `id`; defaults to `name` when empty. */
|
|
8371
8761
|
id = input('', /* @ts-ignore */
|
|
8372
8762
|
...(ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []));
|
|
8763
|
+
/** Placeholder text for the input. */
|
|
8373
8764
|
placeholder = input('••••••••', /* @ts-ignore */
|
|
8374
8765
|
...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
8766
|
+
/** Whether the requirement checklist is shown. */
|
|
8375
8767
|
showChecklist = input(true, /* @ts-ignore */
|
|
8376
8768
|
...(ngDevMode ? [{ debugName: "showChecklist" }] : /* istanbul ignore next */ []));
|
|
8769
|
+
/** Minimum length required to satisfy the length rule. */
|
|
8377
8770
|
minLength = input(8, /* @ts-ignore */
|
|
8378
8771
|
...(ngDevMode ? [{ debugName: "minLength" }] : /* istanbul ignore next */ []));
|
|
8772
|
+
/** Accessible label for the input. */
|
|
8379
8773
|
label = input('Password', /* @ts-ignore */
|
|
8380
8774
|
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
8381
8775
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -8553,31 +8947,47 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
8553
8947
|
|
|
8554
8948
|
/** A product card: image, badge, wishlist, title, rating, price, and an action slot. */
|
|
8555
8949
|
class BuiProductCard {
|
|
8950
|
+
/** Product title shown as the card heading. */
|
|
8556
8951
|
title = input('', /* @ts-ignore */
|
|
8557
8952
|
...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
|
|
8953
|
+
/** Optional link; when set the title becomes an anchor to this URL. */
|
|
8558
8954
|
href = input('', /* @ts-ignore */
|
|
8559
8955
|
...(ngDevMode ? [{ debugName: "href" }] : /* istanbul ignore next */ []));
|
|
8956
|
+
/** Source URL of the product image. */
|
|
8560
8957
|
image = input('', /* @ts-ignore */
|
|
8561
8958
|
...(ngDevMode ? [{ debugName: "image" }] : /* istanbul ignore next */ []));
|
|
8959
|
+
/** Alt text for the image; falls back to the title when empty. */
|
|
8562
8960
|
imageAlt = input('', /* @ts-ignore */
|
|
8563
8961
|
...(ngDevMode ? [{ debugName: "imageAlt" }] : /* istanbul ignore next */ []));
|
|
8962
|
+
/** Current price; hides the price block when null. */
|
|
8564
8963
|
price = input(null, /* @ts-ignore */
|
|
8565
8964
|
...(ngDevMode ? [{ debugName: "price" }] : /* istanbul ignore next */ []));
|
|
8965
|
+
/** Original price for showing a strikethrough and discount. */
|
|
8566
8966
|
compareAt = input(null, /* @ts-ignore */
|
|
8567
8967
|
...(ngDevMode ? [{ debugName: "compareAt" }] : /* istanbul ignore next */ []));
|
|
8968
|
+
/** Currency symbol prefixed to the price. */
|
|
8568
8969
|
currency = input('$', /* @ts-ignore */
|
|
8569
8970
|
...(ngDevMode ? [{ debugName: "currency" }] : /* istanbul ignore next */ []));
|
|
8971
|
+
/** Badge text; auto-coloured for sale/new keywords. */
|
|
8570
8972
|
badge = input('', /* @ts-ignore */
|
|
8571
8973
|
...(ngDevMode ? [{ debugName: "badge" }] : /* istanbul ignore next */ []));
|
|
8974
|
+
/** Small category label shown above the title. */
|
|
8572
8975
|
category = input('', /* @ts-ignore */
|
|
8573
8976
|
...(ngDevMode ? [{ debugName: "category" }] : /* istanbul ignore next */ []));
|
|
8977
|
+
/** Star rating value; hides the rating row when null. */
|
|
8574
8978
|
rating = input(null, /* @ts-ignore */
|
|
8575
8979
|
...(ngDevMode ? [{ debugName: "rating" }] : /* istanbul ignore next */ []));
|
|
8980
|
+
/** Review count shown next to the rating, when set. */
|
|
8576
8981
|
reviews = input(null, /* @ts-ignore */
|
|
8577
8982
|
...(ngDevMode ? [{ debugName: "reviews" }] : /* istanbul ignore next */ []));
|
|
8983
|
+
/** Whether to show the wishlist (heart) toggle button. */
|
|
8578
8984
|
wishlist = input(false, /* @ts-ignore */
|
|
8579
8985
|
...(ngDevMode ? [{ debugName: "wishlist" }] : /* istanbul ignore next */ []));
|
|
8580
8986
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
8987
|
+
/** Accessible label override for the wishlist toggle button. */
|
|
8988
|
+
wishlistLabel = input(/* @ts-ignore */
|
|
8989
|
+
...(ngDevMode ? [undefined, { debugName: "wishlistLabel" }] : /* istanbul ignore next */ []));
|
|
8990
|
+
wishlistText = buiLabel('productCardWishlist', this.wishlistLabel);
|
|
8581
8991
|
wished = signal(false, /* @ts-ignore */
|
|
8582
8992
|
...(ngDevMode ? [{ debugName: "wished" }] : /* istanbul ignore next */ []));
|
|
8583
8993
|
alt = computed(() => this.imageAlt() || this.title(), /* @ts-ignore */
|
|
@@ -8596,7 +9006,7 @@ class BuiProductCard {
|
|
|
8596
9006
|
computedClass = computed(() => cn('group flex flex-col overflow-hidden rounded-xl border bg-card text-card-foreground shadow-sm', this.userClass()), /* @ts-ignore */
|
|
8597
9007
|
...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
|
|
8598
9008
|
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: `
|
|
9009
|
+
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
9010
|
<div class="relative aspect-square overflow-hidden bg-muted">
|
|
8601
9011
|
<img
|
|
8602
9012
|
[src]="image()"
|
|
@@ -8614,7 +9024,7 @@ class BuiProductCard {
|
|
|
8614
9024
|
type="button"
|
|
8615
9025
|
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
9026
|
[attr.aria-pressed]="wished()"
|
|
8617
|
-
aria-label="
|
|
9027
|
+
[attr.aria-label]="wishlistText()"
|
|
8618
9028
|
(click)="wished.set(!wished())"
|
|
8619
9029
|
>
|
|
8620
9030
|
<svg
|
|
@@ -8696,7 +9106,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
8696
9106
|
type="button"
|
|
8697
9107
|
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
9108
|
[attr.aria-pressed]="wished()"
|
|
8699
|
-
aria-label="
|
|
9109
|
+
[attr.aria-label]="wishlistText()"
|
|
8700
9110
|
(click)="wished.set(!wished())"
|
|
8701
9111
|
>
|
|
8702
9112
|
<svg
|
|
@@ -8754,23 +9164,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
8754
9164
|
</div>
|
|
8755
9165
|
`,
|
|
8756
9166
|
}]
|
|
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 }] }] } });
|
|
9167
|
+
}], 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
9168
|
|
|
8759
9169
|
/**
|
|
8760
9170
|
* Types and deletes a cycling list of words. The animated text is `aria-hidden`; an sr-only
|
|
8761
9171
|
* span carries the full word list so assistive tech reads it once. SSR-safe.
|
|
8762
9172
|
*/
|
|
8763
9173
|
class BuiTypewriter {
|
|
9174
|
+
/** Words cycled through by the typewriter. */
|
|
8764
9175
|
words = input([], /* @ts-ignore */
|
|
8765
9176
|
...(ngDevMode ? [{ debugName: "words" }] : /* istanbul ignore next */ []));
|
|
9177
|
+
/** Delay between typed characters, in milliseconds. */
|
|
8766
9178
|
typeSpeed = input(90, /* @ts-ignore */
|
|
8767
9179
|
...(ngDevMode ? [{ debugName: "typeSpeed" }] : /* istanbul ignore next */ []));
|
|
9180
|
+
/** Delay between deleted characters, in milliseconds. */
|
|
8768
9181
|
deleteSpeed = input(40, /* @ts-ignore */
|
|
8769
9182
|
...(ngDevMode ? [{ debugName: "deleteSpeed" }] : /* istanbul ignore next */ []));
|
|
9183
|
+
/** Pause once a word is fully typed before deleting, in milliseconds. */
|
|
8770
9184
|
pause = input(1600, /* @ts-ignore */
|
|
8771
9185
|
...(ngDevMode ? [{ debugName: "pause" }] : /* istanbul ignore next */ []));
|
|
9186
|
+
/** Whether to restart from the first word after the last. */
|
|
8772
9187
|
loop = input(true, /* @ts-ignore */
|
|
8773
9188
|
...(ngDevMode ? [{ debugName: "loop" }] : /* istanbul ignore next */ []));
|
|
9189
|
+
/** Whether to show the blinking cursor after the text. */
|
|
8774
9190
|
cursor = input(true, /* @ts-ignore */
|
|
8775
9191
|
...(ngDevMode ? [{ debugName: "cursor" }] : /* istanbul ignore next */ []));
|
|
8776
9192
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -8867,14 +9283,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
8867
9283
|
* an `aria-live` region carries the full passage up front. SSR-safe.
|
|
8868
9284
|
*/
|
|
8869
9285
|
class BuiStreamingText {
|
|
9286
|
+
/** Full passage to reveal; also announced up front via an `aria-live` region. */
|
|
8870
9287
|
text = input('', /* @ts-ignore */
|
|
8871
9288
|
...(ngDevMode ? [{ debugName: "text" }] : /* istanbul ignore next */ []));
|
|
9289
|
+
/** Delay in milliseconds between each revealed token. */
|
|
8872
9290
|
speed = input(18, /* @ts-ignore */
|
|
8873
9291
|
...(ngDevMode ? [{ debugName: "speed" }] : /* istanbul ignore next */ []));
|
|
9292
|
+
/** Delay in milliseconds before streaming begins. */
|
|
8874
9293
|
startDelay = input(0, /* @ts-ignore */
|
|
8875
9294
|
...(ngDevMode ? [{ debugName: "startDelay" }] : /* istanbul ignore next */ []));
|
|
9295
|
+
/** Granularity of the reveal — one character or one word at a time. */
|
|
8876
9296
|
by = input('char', /* @ts-ignore */
|
|
8877
9297
|
...(ngDevMode ? [{ debugName: "by" }] : /* istanbul ignore next */ []));
|
|
9298
|
+
/** Whether to show a blinking caret while streaming. */
|
|
8878
9299
|
caret = input(true, /* @ts-ignore */
|
|
8879
9300
|
...(ngDevMode ? [{ debugName: "caret" }] : /* istanbul ignore next */ []));
|
|
8880
9301
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -8949,10 +9370,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
8949
9370
|
|
|
8950
9371
|
/** A card whose border has a light beam continuously travelling around it. */
|
|
8951
9372
|
class BuiBorderBeam {
|
|
9373
|
+
/** Seconds for the beam to complete one full lap. */
|
|
8952
9374
|
duration = input(6, /* @ts-ignore */
|
|
8953
9375
|
...(ngDevMode ? [{ debugName: "duration" }] : /* istanbul ignore next */ []));
|
|
9376
|
+
/** Beam colour; defaults to the primary theme colour. */
|
|
8954
9377
|
color = input(null, /* @ts-ignore */
|
|
8955
9378
|
...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
|
|
9379
|
+
/** Border/beam thickness in pixels. */
|
|
8956
9380
|
size = input(2, /* @ts-ignore */
|
|
8957
9381
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
8958
9382
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -8985,8 +9409,10 @@ function pseudo(seed) {
|
|
|
8985
9409
|
}
|
|
8986
9410
|
/** Animated falling meteor streaks behind content. Decorative + SSR-safe. */
|
|
8987
9411
|
class BuiMeteors {
|
|
9412
|
+
/** Number of meteor streaks to render. */
|
|
8988
9413
|
count = input(20, /* @ts-ignore */
|
|
8989
9414
|
...(ngDevMode ? [{ debugName: "count" }] : /* istanbul ignore next */ []));
|
|
9415
|
+
/** Meteor colour; defaults to a translucent foreground tint. */
|
|
8990
9416
|
color = input(null, /* @ts-ignore */
|
|
8991
9417
|
...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
|
|
8992
9418
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -9044,8 +9470,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
9044
9470
|
|
|
9045
9471
|
/** An animated aurora / northern-lights gradient background with content overlaid. */
|
|
9046
9472
|
class BuiAurora {
|
|
9473
|
+
/** Blur radius of the aurora layer in pixels. */
|
|
9047
9474
|
blur = input(60, /* @ts-ignore */
|
|
9048
9475
|
...(ngDevMode ? [{ debugName: "blur" }] : /* istanbul ignore next */ []));
|
|
9476
|
+
/** Seconds for one full drift animation cycle. */
|
|
9049
9477
|
speed = input(12, /* @ts-ignore */
|
|
9050
9478
|
...(ngDevMode ? [{ debugName: "speed" }] : /* istanbul ignore next */ []));
|
|
9051
9479
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -9071,14 +9499,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
9071
9499
|
|
|
9072
9500
|
/** A seamless infinite scroll of `items` (logos, badges, testimonials…). */
|
|
9073
9501
|
class BuiMarquee {
|
|
9502
|
+
/** Items rendered in sequence and scrolled seamlessly. */
|
|
9074
9503
|
items = input([], /* @ts-ignore */
|
|
9075
9504
|
...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
|
|
9505
|
+
/** Scroll direction; `up`/`down` switch the marquee to a vertical track. */
|
|
9076
9506
|
direction = input('left', /* @ts-ignore */
|
|
9077
9507
|
...(ngDevMode ? [{ debugName: "direction" }] : /* istanbul ignore next */ []));
|
|
9508
|
+
/** Time for one full loop, as a CSS duration (e.g. `40s`). */
|
|
9078
9509
|
duration = input('40s', /* @ts-ignore */
|
|
9079
9510
|
...(ngDevMode ? [{ debugName: "duration" }] : /* istanbul ignore next */ []));
|
|
9511
|
+
/** Spacing between items, as a CSS length. */
|
|
9080
9512
|
gap = input('1rem', /* @ts-ignore */
|
|
9081
9513
|
...(ngDevMode ? [{ debugName: "gap" }] : /* istanbul ignore next */ []));
|
|
9514
|
+
/** Whether hovering pauses the scroll animation. */
|
|
9082
9515
|
pauseOnHover = input(true, /* @ts-ignore */
|
|
9083
9516
|
...(ngDevMode ? [{ debugName: "pauseOnHover" }] : /* istanbul ignore next */ []));
|
|
9084
9517
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -9158,6 +9591,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
9158
9591
|
|
|
9159
9592
|
/** A mobile bottom tab bar. Use `[buiBottomNavItem]` on each `<a>`/`<button>`. */
|
|
9160
9593
|
class BuiBottomNavigation {
|
|
9594
|
+
/** Accessible label applied to the navigation element. */
|
|
9161
9595
|
ariaLabel = input('Bottom navigation', /* @ts-ignore */
|
|
9162
9596
|
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
9163
9597
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -9180,10 +9614,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
9180
9614
|
|
|
9181
9615
|
/** A single bottom-navigation tab. Project the icon; pass `label`, `active`, `badge`. */
|
|
9182
9616
|
class BuiBottomNavigationItem {
|
|
9617
|
+
/** Caption shown beneath the projected icon; hidden when empty. */
|
|
9183
9618
|
label = input('', /* @ts-ignore */
|
|
9184
9619
|
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
9620
|
+
/** Whether this tab is the current page; sets `aria-current="page"`. */
|
|
9185
9621
|
active = input(false, /* @ts-ignore */
|
|
9186
9622
|
...(ngDevMode ? [{ debugName: "active" }] : /* istanbul ignore next */ []));
|
|
9623
|
+
/** Badge content; `true` renders a dot, a string/number renders a count, `null` shows nothing. */
|
|
9187
9624
|
badge = input(null, /* @ts-ignore */
|
|
9188
9625
|
...(ngDevMode ? [{ debugName: "badge" }] : /* istanbul ignore next */ []));
|
|
9189
9626
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -9242,6 +9679,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
9242
9679
|
* viewport. Server-renders fully revealed (no-JS safe). SSR-safe.
|
|
9243
9680
|
*/
|
|
9244
9681
|
class BuiTextReveal {
|
|
9682
|
+
/** Text split into words that brighten one by one as it scrolls into view. */
|
|
9245
9683
|
text = input('', /* @ts-ignore */
|
|
9246
9684
|
...(ngDevMode ? [{ debugName: "text" }] : /* istanbul ignore next */ []));
|
|
9247
9685
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -9301,8 +9739,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
9301
9739
|
|
|
9302
9740
|
/** Shifts its content relative to scroll for a depth/parallax effect. SSR-safe. */
|
|
9303
9741
|
class BuiParallax {
|
|
9742
|
+
/** Parallax intensity; higher moves content more per scroll. */
|
|
9304
9743
|
speed = input(0.3, /* @ts-ignore */
|
|
9305
9744
|
...(ngDevMode ? [{ debugName: "speed" }] : /* istanbul ignore next */ []));
|
|
9745
|
+
/** Axis along which the content shifts. */
|
|
9306
9746
|
axis = input('y', /* @ts-ignore */
|
|
9307
9747
|
...(ngDevMode ? [{ debugName: "axis" }] : /* istanbul ignore next */ []));
|
|
9308
9748
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -9347,9 +9787,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
9347
9787
|
|
|
9348
9788
|
/** A "on this page" nav that highlights the section currently in view (IntersectionObserver). */
|
|
9349
9789
|
class BuiScrollspy {
|
|
9790
|
+
/** Sections to track; each item links to and observes its `href` anchor. */
|
|
9350
9791
|
items = input([], /* @ts-ignore */
|
|
9351
9792
|
...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
|
|
9352
9793
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
9794
|
+
/** Accessible label for the nav element; falls back to a localized default. */
|
|
9795
|
+
label = input(/* @ts-ignore */
|
|
9796
|
+
...(ngDevMode ? [undefined, { debugName: "label" }] : /* istanbul ignore next */ []));
|
|
9797
|
+
labelText = buiLabel('scrollspy', this.label);
|
|
9353
9798
|
document = inject(ElementRef).nativeElement.ownerDocument;
|
|
9354
9799
|
active = signal('', /* @ts-ignore */
|
|
9355
9800
|
...(ngDevMode ? [{ debugName: "active" }] : /* istanbul ignore next */ []));
|
|
@@ -9391,8 +9836,8 @@ class BuiScrollspy {
|
|
|
9391
9836
|
}
|
|
9392
9837
|
}
|
|
9393
9838
|
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="
|
|
9839
|
+
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: `
|
|
9840
|
+
<nav [attr.aria-label]="labelText()">
|
|
9396
9841
|
<ul class="space-y-1 text-sm">
|
|
9397
9842
|
@for (item of items(); track item.href) {
|
|
9398
9843
|
<li>
|
|
@@ -9415,7 +9860,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
9415
9860
|
selector: 'bui-scrollspy',
|
|
9416
9861
|
host: { 'data-slot': 'scrollspy', '[class]': 'computedClass()' },
|
|
9417
9862
|
template: `
|
|
9418
|
-
<nav aria-label="
|
|
9863
|
+
<nav [attr.aria-label]="labelText()">
|
|
9419
9864
|
<ul class="space-y-1 text-sm">
|
|
9420
9865
|
@for (item of items(); track item.href) {
|
|
9421
9866
|
<li>
|
|
@@ -9432,25 +9877,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
9432
9877
|
</nav>
|
|
9433
9878
|
`,
|
|
9434
9879
|
}]
|
|
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 }] }] } });
|
|
9880
|
+
}], 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
9881
|
|
|
9437
9882
|
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
9438
9883
|
const noop$8 = () => { };
|
|
9439
9884
|
const SELECT_CLASS = 'h-9 rounded-md border border-input bg-background px-2 text-sm shadow-xs outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50';
|
|
9440
9885
|
/** A styled time field: a native `<input type="time">`, or hour/minute selects in `select` mode. */
|
|
9441
9886
|
class BuiTimeField {
|
|
9887
|
+
/** Selected time as `HH:mm`. Two-way bindable with `[(value)]`. */
|
|
9442
9888
|
value = model('', /* @ts-ignore */
|
|
9443
9889
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
9890
|
+
/** Native `name` attribute for the input. */
|
|
9444
9891
|
name = input('', /* @ts-ignore */
|
|
9445
9892
|
...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
|
|
9893
|
+
/** Native `id` attribute for the input. */
|
|
9446
9894
|
id = input('', /* @ts-ignore */
|
|
9447
9895
|
...(ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []));
|
|
9896
|
+
/** Earliest allowed time (`HH:mm`) in `input` mode. */
|
|
9448
9897
|
min = input('', /* @ts-ignore */
|
|
9449
9898
|
...(ngDevMode ? [{ debugName: "min" }] : /* istanbul ignore next */ []));
|
|
9899
|
+
/** Latest allowed time (`HH:mm`) in `input` mode. */
|
|
9450
9900
|
max = input('', /* @ts-ignore */
|
|
9451
9901
|
...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
|
|
9902
|
+
/** Whether to include seconds in `input` mode. */
|
|
9452
9903
|
seconds = input(false, /* @ts-ignore */
|
|
9453
9904
|
...(ngDevMode ? [{ debugName: "seconds" }] : /* istanbul ignore next */ []));
|
|
9905
|
+
/** Whether the field is disabled. Two-way bindable with `[(disabled)]`. */
|
|
9454
9906
|
disabled = model(false, /* @ts-ignore */
|
|
9455
9907
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
9456
9908
|
/** `select` renders hour + minute dropdowns instead of a native time input. */
|
|
@@ -9459,6 +9911,7 @@ class BuiTimeField {
|
|
|
9459
9911
|
/** Minute step used in `select` mode. */
|
|
9460
9912
|
minuteStep = input(5, /* @ts-ignore */
|
|
9461
9913
|
...(ngDevMode ? [{ debugName: "minuteStep" }] : /* istanbul ignore next */ []));
|
|
9914
|
+
/** Accessible label for the field. */
|
|
9462
9915
|
ariaLabel = input('', /* @ts-ignore */
|
|
9463
9916
|
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
9464
9917
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -9609,10 +10062,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
9609
10062
|
|
|
9610
10063
|
/** A group of toggle buttons (single or multiple selection). Use `button[buiToggleGroupItem]`. */
|
|
9611
10064
|
class BuiToggleGroup {
|
|
10065
|
+
/** Selection mode: single value or an array of values. */
|
|
9612
10066
|
type = input('single', /* @ts-ignore */
|
|
9613
10067
|
...(ngDevMode ? [{ debugName: "type" }] : /* istanbul ignore next */ []));
|
|
10068
|
+
/** Selected value(s). Two-way bindable with `[(value)]`. */
|
|
9614
10069
|
value = model(null, /* @ts-ignore */
|
|
9615
10070
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
10071
|
+
/** Layout direction of the group. */
|
|
9616
10072
|
orientation = input('horizontal', /* @ts-ignore */
|
|
9617
10073
|
...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
|
|
9618
10074
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -9658,8 +10114,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
9658
10114
|
|
|
9659
10115
|
/** A single item within a `bui-toggle-group`. */
|
|
9660
10116
|
class BuiToggleGroupItem {
|
|
10117
|
+
/** Value this item contributes to the parent group's selection. */
|
|
9661
10118
|
value = input('', /* @ts-ignore */
|
|
9662
10119
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
10120
|
+
/** Whether this item is disabled. */
|
|
9663
10121
|
disabled = input(false, /* @ts-ignore */
|
|
9664
10122
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
9665
10123
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -9692,12 +10150,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
9692
10150
|
const noop$7 = () => { };
|
|
9693
10151
|
/** A free-text tags input: type and press Enter (or comma) to add chips; Backspace removes. */
|
|
9694
10152
|
class BuiTagsInput {
|
|
10153
|
+
/** Current tags. Two-way bindable with `[(tags)]`. */
|
|
9695
10154
|
tags = model([], /* @ts-ignore */
|
|
9696
10155
|
...(ngDevMode ? [{ debugName: "tags" }] : /* istanbul ignore next */ []));
|
|
10156
|
+
/** Placeholder text shown in the entry field. */
|
|
9697
10157
|
placeholder = input('Add tag…', /* @ts-ignore */
|
|
9698
10158
|
...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
10159
|
+
/** Maximum number of tags allowed, or `null` for no limit. */
|
|
9699
10160
|
max = input(null, /* @ts-ignore */
|
|
9700
10161
|
...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
|
|
10162
|
+
/** Whether the input is disabled. Two-way bindable with `[(disabled)]`. */
|
|
9701
10163
|
disabled = model(false, /* @ts-ignore */
|
|
9702
10164
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
9703
10165
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -9822,10 +10284,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
9822
10284
|
|
|
9823
10285
|
/** Click-to-edit inline text: shows a value, swaps to an input on click. Enter commits, Escape cancels. */
|
|
9824
10286
|
class BuiEditable {
|
|
10287
|
+
/** Current text. Two-way bindable with `[(value)]`. */
|
|
9825
10288
|
value = model('', /* @ts-ignore */
|
|
9826
10289
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
10290
|
+
/** Text shown when the value is empty. */
|
|
9827
10291
|
placeholder = input('Empty', /* @ts-ignore */
|
|
9828
10292
|
...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
10293
|
+
/** Noun used in the field's accessible label. */
|
|
9829
10294
|
label = input('value', /* @ts-ignore */
|
|
9830
10295
|
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
9831
10296
|
/** Edit in a multi-line textarea instead of a single-line input. */
|
|
@@ -9952,10 +10417,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
9952
10417
|
|
|
9953
10418
|
/** A floating action button that expands to a stack of actions. Closes on Escape / outside click. */
|
|
9954
10419
|
class BuiSpeedDial {
|
|
10420
|
+
/** Actions revealed when the dial expands. */
|
|
9955
10421
|
actions = input([], /* @ts-ignore */
|
|
9956
10422
|
...(ngDevMode ? [{ debugName: "actions" }] : /* istanbul ignore next */ []));
|
|
10423
|
+
/** Direction the action stack expands relative to the trigger button. */
|
|
9957
10424
|
direction = input('up', /* @ts-ignore */
|
|
9958
10425
|
...(ngDevMode ? [{ debugName: "direction" }] : /* istanbul ignore next */ []));
|
|
10426
|
+
/** Accessible label for the trigger button. */
|
|
9959
10427
|
label = input('Open actions', /* @ts-ignore */
|
|
9960
10428
|
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
9961
10429
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -10086,18 +10554,25 @@ const CIRC = 2 * Math.PI * RADIUS;
|
|
|
10086
10554
|
const ARC = CIRC * 0.75;
|
|
10087
10555
|
/** A rotary dial input (role="slider"). Drag, scroll, or use the keyboard. 270° sweep. */
|
|
10088
10556
|
class BuiKnob {
|
|
10557
|
+
/** Current value. Two-way bindable with `[(value)]`. */
|
|
10089
10558
|
value = model(50, /* @ts-ignore */
|
|
10090
10559
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
10560
|
+
/** Minimum value at the start of the dial's sweep. */
|
|
10091
10561
|
min = input(0, /* @ts-ignore */
|
|
10092
10562
|
...(ngDevMode ? [{ debugName: "min" }] : /* istanbul ignore next */ []));
|
|
10563
|
+
/** Maximum value at the end of the dial's sweep. */
|
|
10093
10564
|
max = input(100, /* @ts-ignore */
|
|
10094
10565
|
...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
|
|
10566
|
+
/** Increment applied per arrow key, scroll or drag snap. */
|
|
10095
10567
|
step = input(1, /* @ts-ignore */
|
|
10096
10568
|
...(ngDevMode ? [{ debugName: "step" }] : /* istanbul ignore next */ []));
|
|
10569
|
+
/** Size preset controlling the knob's diameter and text size. */
|
|
10097
10570
|
size = input('default', /* @ts-ignore */
|
|
10098
10571
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
10572
|
+
/** Accessible label announced for the slider. */
|
|
10099
10573
|
label = input('Value', /* @ts-ignore */
|
|
10100
10574
|
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
10575
|
+
/** Whether the knob is disabled. Two-way bindable with `[(disabled)]`. */
|
|
10101
10576
|
disabled = model(false, /* @ts-ignore */
|
|
10102
10577
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
10103
10578
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -10342,16 +10817,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
10342
10817
|
|
|
10343
10818
|
/** A lazy image with a blurred placeholder / skeleton and a graceful error state. */
|
|
10344
10819
|
class BuiImage {
|
|
10820
|
+
/** Source URL of the full image to load. */
|
|
10345
10821
|
src = input('', /* @ts-ignore */
|
|
10346
10822
|
...(ngDevMode ? [{ debugName: "src" }] : /* istanbul ignore next */ []));
|
|
10823
|
+
/** Alternative text for the image. */
|
|
10347
10824
|
alt = input('', /* @ts-ignore */
|
|
10348
10825
|
...(ngDevMode ? [{ debugName: "alt" }] : /* istanbul ignore next */ []));
|
|
10826
|
+
/** CSS `aspect-ratio` reserved for the image (e.g. `16 / 9`). */
|
|
10349
10827
|
ratio = input('', /* @ts-ignore */
|
|
10350
10828
|
...(ngDevMode ? [{ debugName: "ratio" }] : /* istanbul ignore next */ []));
|
|
10829
|
+
/** URL of a low-res image shown blurred while the full image loads. */
|
|
10351
10830
|
placeholder = input('', /* @ts-ignore */
|
|
10352
10831
|
...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
10832
|
+
/** Tailwind class controlling corner rounding. */
|
|
10353
10833
|
rounded = input('rounded-lg', /* @ts-ignore */
|
|
10354
10834
|
...(ngDevMode ? [{ debugName: "rounded" }] : /* istanbul ignore next */ []));
|
|
10835
|
+
/** How the image fills its box: `cover` crops, `contain` letterboxes. */
|
|
10355
10836
|
fit = input('cover', /* @ts-ignore */
|
|
10356
10837
|
...(ngDevMode ? [{ debugName: "fit" }] : /* istanbul ignore next */ []));
|
|
10357
10838
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -10457,10 +10938,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
10457
10938
|
|
|
10458
10939
|
/** A collapsible "reasoning" / chain-of-thought disclosure. */
|
|
10459
10940
|
class BuiReasoning {
|
|
10941
|
+
/** Whether the disclosure is expanded. Two-way bindable with `[(open)]`. */
|
|
10460
10942
|
open = model(false, /* @ts-ignore */
|
|
10461
10943
|
...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
|
|
10944
|
+
/** Trigger label shown when no `duration` is set. */
|
|
10462
10945
|
label = input('Reasoning', /* @ts-ignore */
|
|
10463
10946
|
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
10947
|
+
/** When set, the trigger reads "Thought for {duration}" instead of `label`. */
|
|
10464
10948
|
duration = input('', /* @ts-ignore */
|
|
10465
10949
|
...(ngDevMode ? [{ debugName: "duration" }] : /* istanbul ignore next */ []));
|
|
10466
10950
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -10547,14 +11031,19 @@ const STATUS = {
|
|
|
10547
11031
|
};
|
|
10548
11032
|
/** An AI tool-call card with a status indicator and collapsible arguments / result. */
|
|
10549
11033
|
class BuiToolCall {
|
|
11034
|
+
/** Name of the invoked tool, shown as inline code in the header. */
|
|
10550
11035
|
name = input('tool', /* @ts-ignore */
|
|
10551
11036
|
...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
|
|
11037
|
+
/** Execution status; drives the colored status dot and label. */
|
|
10552
11038
|
status = input('success', /* @ts-ignore */
|
|
10553
11039
|
...(ngDevMode ? [{ debugName: "status" }] : /* istanbul ignore next */ []));
|
|
11040
|
+
/** Tool arguments shown in the collapsible body when present. */
|
|
10554
11041
|
args = input('', /* @ts-ignore */
|
|
10555
11042
|
...(ngDevMode ? [{ debugName: "args" }] : /* istanbul ignore next */ []));
|
|
11043
|
+
/** Tool result shown in the collapsible body when present. */
|
|
10556
11044
|
result = input('', /* @ts-ignore */
|
|
10557
11045
|
...(ngDevMode ? [{ debugName: "result" }] : /* istanbul ignore next */ []));
|
|
11046
|
+
/** Whether the arguments/result panel is expanded. Two-way bindable with `[(open)]`. */
|
|
10558
11047
|
open = model(false, /* @ts-ignore */
|
|
10559
11048
|
...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
|
|
10560
11049
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -10656,6 +11145,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
10656
11145
|
|
|
10657
11146
|
/** A scrollable conversation log (`role="log"`). Use `bui-chat-message` for bubbles. */
|
|
10658
11147
|
class BuiChat {
|
|
11148
|
+
/** Accessible label announced for the conversation log region. */
|
|
10659
11149
|
ariaLabel = input('Conversation', /* @ts-ignore */
|
|
10660
11150
|
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
10661
11151
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -10681,14 +11171,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
10681
11171
|
|
|
10682
11172
|
/** A chat bubble. `role="user"` aligns end with a primary bubble; otherwise assistant-styled. */
|
|
10683
11173
|
class BuiChatMessage {
|
|
11174
|
+
/** Author role; `'user'` aligns the bubble to the end with primary styling, else assistant-styled. */
|
|
10684
11175
|
role = input('assistant', /* @ts-ignore */
|
|
10685
11176
|
...(ngDevMode ? [{ debugName: "role" }] : /* istanbul ignore next */ []));
|
|
11177
|
+
/** Display name shown above the bubble; also seeds the fallback initials avatar. */
|
|
10686
11178
|
name = input('', /* @ts-ignore */
|
|
10687
11179
|
...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
|
|
11180
|
+
/** Optional timestamp text shown beside the name. */
|
|
10688
11181
|
time = input('', /* @ts-ignore */
|
|
10689
11182
|
...(ngDevMode ? [{ debugName: "time" }] : /* istanbul ignore next */ []));
|
|
11183
|
+
/** Avatar image URL; when empty, initials (or an emoji) are shown instead. */
|
|
10690
11184
|
avatar = input('', /* @ts-ignore */
|
|
10691
11185
|
...(ngDevMode ? [{ debugName: "avatar" }] : /* istanbul ignore next */ []));
|
|
11186
|
+
/** When true, shows an animated typing indicator instead of the message content. */
|
|
10692
11187
|
typing = input(false, /* @ts-ignore */
|
|
10693
11188
|
...(ngDevMode ? [{ debugName: "typing" }] : /* istanbul ignore next */ []));
|
|
10694
11189
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -10802,10 +11297,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
10802
11297
|
const PALETTE$1 = ['#6366f1', '#ec4899', '#f59e0b', '#10b981', '#3b82f6', '#ef4444'];
|
|
10803
11298
|
/** A celebratory particle burst. Project a trigger (or use the default button) to fire it. */
|
|
10804
11299
|
class BuiConfetti {
|
|
11300
|
+
/** Number of particles emitted per burst. */
|
|
10805
11301
|
count = input(80, /* @ts-ignore */
|
|
10806
11302
|
...(ngDevMode ? [{ debugName: "count" }] : /* istanbul ignore next */ []));
|
|
11303
|
+
/** Horizontal spread factor of the burst. */
|
|
10807
11304
|
spread = input(70, /* @ts-ignore */
|
|
10808
11305
|
...(ngDevMode ? [{ debugName: "spread" }] : /* istanbul ignore next */ []));
|
|
11306
|
+
/** Particle colours; defaults to the built-in palette. */
|
|
10809
11307
|
colors = input(null, /* @ts-ignore */
|
|
10810
11308
|
...(ngDevMode ? [{ debugName: "colors" }] : /* istanbul ignore next */ []));
|
|
10811
11309
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -10890,8 +11388,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
10890
11388
|
|
|
10891
11389
|
/** A step indicator. The `value` (1-based) marks the active step. Use `li[buiStepperItem]`. */
|
|
10892
11390
|
class BuiStepper {
|
|
11391
|
+
/** The active step as a 1-based index; items at lower values are marked completed. */
|
|
10893
11392
|
value = input(1, /* @ts-ignore */
|
|
10894
11393
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
11394
|
+
/** Layout direction of the steps, horizontal or vertical. */
|
|
10895
11395
|
orientation = input('horizontal', /* @ts-ignore */
|
|
10896
11396
|
...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
|
|
10897
11397
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -10936,6 +11436,7 @@ const INDICATOR = {
|
|
|
10936
11436
|
};
|
|
10937
11437
|
/** A single step within a `bui-stepper`. Resolves completed/active/inactive from the parent. */
|
|
10938
11438
|
class BuiStepperItem {
|
|
11439
|
+
/** This item's 1-based position; compared against the parent's value to derive its state. */
|
|
10939
11440
|
step = input(1, /* @ts-ignore */
|
|
10940
11441
|
...(ngDevMode ? [{ debugName: "step" }] : /* istanbul ignore next */ []));
|
|
10941
11442
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -11031,17 +11532,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
11031
11532
|
const noop$5 = () => { };
|
|
11032
11533
|
/** A one-time-password input: a row of single-character boxes with focus management + paste. */
|
|
11033
11534
|
class BuiInputOtp {
|
|
11535
|
+
/** Current code. Two-way bindable with `[(value)]`. */
|
|
11034
11536
|
value = model('', /* @ts-ignore */
|
|
11035
11537
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
11538
|
+
/** Number of character boxes (length of the code). */
|
|
11036
11539
|
maxlength = input(6, /* @ts-ignore */
|
|
11037
11540
|
...(ngDevMode ? [{ debugName: "maxlength" }] : /* istanbul ignore next */ []));
|
|
11541
|
+
/** Whether the input is disabled. Two-way bindable with `[(disabled)]`. */
|
|
11038
11542
|
disabled = model(false, /* @ts-ignore */
|
|
11039
11543
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
11544
|
+
/** Whether to allow letters as well as digits. */
|
|
11040
11545
|
alphanumeric = input(false, /* @ts-ignore */
|
|
11041
11546
|
...(ngDevMode ? [{ debugName: "alphanumeric" }] : /* istanbul ignore next */ []));
|
|
11042
11547
|
/** Insert a visual separator after every N boxes (0 = none). */
|
|
11043
11548
|
groupSize = input(0, /* @ts-ignore */
|
|
11044
11549
|
...(ngDevMode ? [{ debugName: "groupSize" }] : /* istanbul ignore next */ []));
|
|
11550
|
+
/** Base accessible label; each box appends its position. */
|
|
11045
11551
|
ariaLabel = input('One-time password', /* @ts-ignore */
|
|
11046
11552
|
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
11047
11553
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -11183,17 +11689,30 @@ const COUNTRIES = [
|
|
|
11183
11689
|
];
|
|
11184
11690
|
/** A phone number field with a country-code selector. */
|
|
11185
11691
|
class BuiPhoneInput {
|
|
11692
|
+
/** Entered phone number. Two-way bindable with `[(value)]`. */
|
|
11186
11693
|
value = model('', /* @ts-ignore */
|
|
11187
11694
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
11695
|
+
/** Selected country code. Two-way bindable with `[(country)]`. */
|
|
11188
11696
|
country = model('US', /* @ts-ignore */
|
|
11189
11697
|
...(ngDevMode ? [{ debugName: "country" }] : /* istanbul ignore next */ []));
|
|
11698
|
+
/** Name attribute applied to the number input for form submission. */
|
|
11190
11699
|
name = input('', /* @ts-ignore */
|
|
11191
11700
|
...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
|
|
11701
|
+
/** Id attribute applied to the number input. */
|
|
11192
11702
|
id = input('', /* @ts-ignore */
|
|
11193
11703
|
...(ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []));
|
|
11704
|
+
/** Placeholder text for the number input. */
|
|
11194
11705
|
placeholder = input('Phone number', /* @ts-ignore */
|
|
11195
11706
|
...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
11196
11707
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
11708
|
+
/** Accessible label override for the country selector. */
|
|
11709
|
+
countryLabel = input(/* @ts-ignore */
|
|
11710
|
+
...(ngDevMode ? [undefined, { debugName: "countryLabel" }] : /* istanbul ignore next */ []));
|
|
11711
|
+
/** Accessible label override for the number input. */
|
|
11712
|
+
numberLabel = input(/* @ts-ignore */
|
|
11713
|
+
...(ngDevMode ? [undefined, { debugName: "numberLabel" }] : /* istanbul ignore next */ []));
|
|
11714
|
+
countryText = buiLabel('phoneInputCountry', this.countryLabel);
|
|
11715
|
+
numberText = buiLabel('phoneInputNumber', this.numberLabel);
|
|
11197
11716
|
countries = COUNTRIES;
|
|
11198
11717
|
computedClass = computed(() => cn('flex w-full items-stretch', this.userClass()), /* @ts-ignore */
|
|
11199
11718
|
...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
|
|
@@ -11204,11 +11723,11 @@ class BuiPhoneInput {
|
|
|
11204
11723
|
this.value.set(event.target.value);
|
|
11205
11724
|
}
|
|
11206
11725
|
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: `
|
|
11726
|
+
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
11727
|
<select
|
|
11209
11728
|
[value]="country()"
|
|
11210
11729
|
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="
|
|
11730
|
+
[attr.aria-label]="countryText()"
|
|
11212
11731
|
(change)="onCountry($event)"
|
|
11213
11732
|
>
|
|
11214
11733
|
@for (option of countries; track option.code) {
|
|
@@ -11221,7 +11740,7 @@ class BuiPhoneInput {
|
|
|
11221
11740
|
[placeholder]="placeholder()"
|
|
11222
11741
|
[attr.name]="name() || null"
|
|
11223
11742
|
[attr.id]="id() || null"
|
|
11224
|
-
aria-label="
|
|
11743
|
+
[attr.aria-label]="numberText()"
|
|
11225
11744
|
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
11745
|
(input)="onNumber($event)"
|
|
11227
11746
|
/>
|
|
@@ -11236,7 +11755,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
11236
11755
|
<select
|
|
11237
11756
|
[value]="country()"
|
|
11238
11757
|
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="
|
|
11758
|
+
[attr.aria-label]="countryText()"
|
|
11240
11759
|
(change)="onCountry($event)"
|
|
11241
11760
|
>
|
|
11242
11761
|
@for (option of countries; track option.code) {
|
|
@@ -11249,28 +11768,42 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
11249
11768
|
[placeholder]="placeholder()"
|
|
11250
11769
|
[attr.name]="name() || null"
|
|
11251
11770
|
[attr.id]="id() || null"
|
|
11252
|
-
aria-label="
|
|
11771
|
+
[attr.aria-label]="numberText()"
|
|
11253
11772
|
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
11773
|
(input)="onNumber($event)"
|
|
11255
11774
|
/>
|
|
11256
11775
|
`,
|
|
11257
11776
|
}]
|
|
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 }] }] } });
|
|
11777
|
+
}], 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
11778
|
|
|
11260
11779
|
/** A chat composer: an autosizing textarea with a send button. Emits `submitted` on send. */
|
|
11261
11780
|
class BuiPromptInput {
|
|
11781
|
+
/** Current textarea content. Two-way bindable with `[(value)]`. */
|
|
11262
11782
|
value = model('', /* @ts-ignore */
|
|
11263
11783
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
11784
|
+
/** Placeholder text shown when the textarea is empty. */
|
|
11264
11785
|
placeholder = input('Send a message…', /* @ts-ignore */
|
|
11265
11786
|
...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
11787
|
+
/** Whether to show the attachment button. */
|
|
11266
11788
|
attachable = input(false, /* @ts-ignore */
|
|
11267
11789
|
...(ngDevMode ? [{ debugName: "attachable" }] : /* istanbul ignore next */ []));
|
|
11790
|
+
/** Disables the textarea and send button. */
|
|
11268
11791
|
disabled = input(false, /* @ts-ignore */
|
|
11269
11792
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
11793
|
+
/** Accessible label for the message textarea. */
|
|
11270
11794
|
ariaLabel = input('Message', /* @ts-ignore */
|
|
11271
11795
|
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
11796
|
+
/** Overrides the localized accessible label for the attachment button. */
|
|
11797
|
+
attachLabel = input(/* @ts-ignore */
|
|
11798
|
+
...(ngDevMode ? [undefined, { debugName: "attachLabel" }] : /* istanbul ignore next */ []));
|
|
11799
|
+
/** Overrides the localized accessible label for the send button. */
|
|
11800
|
+
sendLabel = input(/* @ts-ignore */
|
|
11801
|
+
...(ngDevMode ? [undefined, { debugName: "sendLabel" }] : /* istanbul ignore next */ []));
|
|
11802
|
+
/** Emitted with the trimmed message text when the user sends. */
|
|
11272
11803
|
submitted = output();
|
|
11273
11804
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
11805
|
+
attachText = buiLabel('promptInputAttach', this.attachLabel);
|
|
11806
|
+
sendText = buiLabel('promptInputSend', this.sendLabel);
|
|
11274
11807
|
ta = viewChild('ta', /* @ts-ignore */
|
|
11275
11808
|
...(ngDevMode ? [{ debugName: "ta" }] : /* istanbul ignore next */ []));
|
|
11276
11809
|
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 +11842,7 @@ class BuiPromptInput {
|
|
|
11309
11842
|
element.style.height = `${element.scrollHeight}px`;
|
|
11310
11843
|
}
|
|
11311
11844
|
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: `
|
|
11845
|
+
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
11846
|
<textarea
|
|
11314
11847
|
#ta
|
|
11315
11848
|
rows="1"
|
|
@@ -11325,7 +11858,7 @@ class BuiPromptInput {
|
|
|
11325
11858
|
@if (attachable()) {
|
|
11326
11859
|
<button
|
|
11327
11860
|
type="button"
|
|
11328
|
-
aria-label="
|
|
11861
|
+
[attr.aria-label]="attachText()"
|
|
11329
11862
|
class="inline-flex size-8 items-center justify-center text-muted-foreground hover:text-foreground"
|
|
11330
11863
|
>
|
|
11331
11864
|
<svg
|
|
@@ -11348,7 +11881,7 @@ class BuiPromptInput {
|
|
|
11348
11881
|
type="button"
|
|
11349
11882
|
class="ml-auto inline-flex size-8 items-center justify-center rounded-md bg-primary text-primary-foreground disabled:opacity-50"
|
|
11350
11883
|
[disabled]="disabled() || value().trim() === ''"
|
|
11351
|
-
aria-label="
|
|
11884
|
+
[attr.aria-label]="sendText()"
|
|
11352
11885
|
(click)="send()"
|
|
11353
11886
|
>
|
|
11354
11887
|
<svg
|
|
@@ -11389,7 +11922,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
11389
11922
|
@if (attachable()) {
|
|
11390
11923
|
<button
|
|
11391
11924
|
type="button"
|
|
11392
|
-
aria-label="
|
|
11925
|
+
[attr.aria-label]="attachText()"
|
|
11393
11926
|
class="inline-flex size-8 items-center justify-center text-muted-foreground hover:text-foreground"
|
|
11394
11927
|
>
|
|
11395
11928
|
<svg
|
|
@@ -11412,7 +11945,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
11412
11945
|
type="button"
|
|
11413
11946
|
class="ml-auto inline-flex size-8 items-center justify-center rounded-md bg-primary text-primary-foreground disabled:opacity-50"
|
|
11414
11947
|
[disabled]="disabled() || value().trim() === ''"
|
|
11415
|
-
aria-label="
|
|
11948
|
+
[attr.aria-label]="sendText()"
|
|
11416
11949
|
(click)="send()"
|
|
11417
11950
|
>
|
|
11418
11951
|
<svg
|
|
@@ -11432,10 +11965,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
11432
11965
|
</div>
|
|
11433
11966
|
`,
|
|
11434
11967
|
}]
|
|
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 }] }] } });
|
|
11968
|
+
}], 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
11969
|
|
|
11437
11970
|
/** A contribution-style heatmap grid (7 rows). Pass `data` or get a deterministic demo. */
|
|
11438
11971
|
class BuiHeatmap {
|
|
11972
|
+
/** Per-cell counts filled column-first; empty yields a demo dataset. */
|
|
11439
11973
|
data = input([], /* @ts-ignore */
|
|
11440
11974
|
...(ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []));
|
|
11441
11975
|
/** Smaller cells + tighter gaps. */
|
|
@@ -11512,12 +12046,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
11512
12046
|
|
|
11513
12047
|
/** An inline citation marker that reveals a source popover on hover / focus / click. */
|
|
11514
12048
|
class BuiCitation {
|
|
12049
|
+
/** Citation number shown in the inline `[n]` marker. */
|
|
11515
12050
|
index = input(1, /* @ts-ignore */
|
|
11516
12051
|
...(ngDevMode ? [{ debugName: "index" }] : /* istanbul ignore next */ []));
|
|
12052
|
+
/** Source title shown at the top of the popover. */
|
|
11517
12053
|
title = input('', /* @ts-ignore */
|
|
11518
12054
|
...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
|
|
12055
|
+
/** Source URL; its hostname is derived and shown in the popover. */
|
|
11519
12056
|
url = input('', /* @ts-ignore */
|
|
11520
12057
|
...(ngDevMode ? [{ debugName: "url" }] : /* istanbul ignore next */ []));
|
|
12058
|
+
/** Short excerpt from the source shown in the popover. */
|
|
11521
12059
|
snippet = input('', /* @ts-ignore */
|
|
11522
12060
|
...(ngDevMode ? [{ debugName: "snippet" }] : /* istanbul ignore next */ []));
|
|
11523
12061
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -11639,8 +12177,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
11639
12177
|
|
|
11640
12178
|
/** A two-panel resizable group. Hosts the shared size; the handle drags it. */
|
|
11641
12179
|
class BuiResizablePanelGroup {
|
|
12180
|
+
/** Layout axis the panels are arranged and resized along. */
|
|
11642
12181
|
direction = input('horizontal', /* @ts-ignore */
|
|
11643
12182
|
...(ngDevMode ? [{ debugName: "direction" }] : /* istanbul ignore next */ []));
|
|
12183
|
+
/** Size of the primary panel as a percentage (10-90). Two-way bindable with `[(size)]`. */
|
|
11644
12184
|
size = model(50, /* @ts-ignore */
|
|
11645
12185
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
11646
12186
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -11690,6 +12230,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
11690
12230
|
|
|
11691
12231
|
/** A panel inside a `bui-resizable-panel-group`. Mark one `primary` to make it the sized panel. */
|
|
11692
12232
|
class BuiResizablePanel {
|
|
12233
|
+
/** Whether this is the sized panel driven by the group's `size`; the other panel flexes. */
|
|
11693
12234
|
primary = input(false, /* @ts-ignore */
|
|
11694
12235
|
...(ngDevMode ? [{ debugName: "primary" }] : /* istanbul ignore next */ []));
|
|
11695
12236
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -11713,9 +12254,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
11713
12254
|
|
|
11714
12255
|
/** The draggable divider between two resizable panels. */
|
|
11715
12256
|
class BuiResizableHandle {
|
|
12257
|
+
/** Whether to render a visible grip indicator on the divider. */
|
|
11716
12258
|
withHandle = input(false, /* @ts-ignore */
|
|
11717
12259
|
...(ngDevMode ? [{ debugName: "withHandle" }] : /* istanbul ignore next */ []));
|
|
12260
|
+
/** Accessible label for the handle; falls back to a localized default. */
|
|
12261
|
+
ariaLabel = input(/* @ts-ignore */
|
|
12262
|
+
...(ngDevMode ? [undefined, { debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
11718
12263
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
12264
|
+
ariaLabelText = buiLabel('resizableHandle', this.ariaLabel);
|
|
11719
12265
|
group = inject(BuiResizablePanelGroup);
|
|
11720
12266
|
roundedSize = computed(() => Math.round(this.group.size()), /* @ts-ignore */
|
|
11721
12267
|
...(ngDevMode ? [{ debugName: "roundedSize" }] : /* istanbul ignore next */ []));
|
|
@@ -11735,7 +12281,7 @@ class BuiResizableHandle {
|
|
|
11735
12281
|
}
|
|
11736
12282
|
}
|
|
11737
12283
|
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-
|
|
12284
|
+
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
12285
|
@if (withHandle()) {
|
|
11740
12286
|
<span
|
|
11741
12287
|
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 +12297,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
11751
12297
|
'data-slot': 'resizable-handle',
|
|
11752
12298
|
role: 'separator',
|
|
11753
12299
|
tabindex: '0',
|
|
11754
|
-
'aria-label': '
|
|
12300
|
+
'[attr.aria-label]': 'ariaLabelText()',
|
|
11755
12301
|
'aria-valuemin': '10',
|
|
11756
12302
|
'aria-valuemax': '90',
|
|
11757
12303
|
'[attr.aria-orientation]': "group.direction() === 'horizontal' ? 'vertical' : 'horizontal'",
|
|
@@ -11768,27 +12314,39 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
11768
12314
|
}
|
|
11769
12315
|
`,
|
|
11770
12316
|
}]
|
|
11771
|
-
}], propDecorators: { withHandle: [{ type: i0.Input, args: [{ isSignal: true, alias: "withHandle", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
|
|
12317
|
+
}], 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
12318
|
|
|
11773
12319
|
/** A styled HTML5 video with a poster + play-button facade. */
|
|
11774
12320
|
class BuiVideo {
|
|
12321
|
+
/** Video source URL for the underlying `<video>` element. */
|
|
11775
12322
|
src = input('', /* @ts-ignore */
|
|
11776
12323
|
...(ngDevMode ? [{ debugName: "src" }] : /* istanbul ignore next */ []));
|
|
12324
|
+
/** Poster image URL shown before playback starts. */
|
|
11777
12325
|
poster = input('', /* @ts-ignore */
|
|
11778
12326
|
...(ngDevMode ? [{ debugName: "poster" }] : /* istanbul ignore next */ []));
|
|
12327
|
+
/** Aspect ratio: `video` (16/9), `square` (1/1), or any CSS ratio. */
|
|
11779
12328
|
aspect = input('video', /* @ts-ignore */
|
|
11780
12329
|
...(ngDevMode ? [{ debugName: "aspect" }] : /* istanbul ignore next */ []));
|
|
12330
|
+
/** Whether to show native controls once playback has started. */
|
|
11781
12331
|
controls = input(true, /* @ts-ignore */
|
|
11782
12332
|
...(ngDevMode ? [{ debugName: "controls" }] : /* istanbul ignore next */ []));
|
|
12333
|
+
/** Whether to start playing automatically (hides the play facade). */
|
|
11783
12334
|
autoplay = input(false, /* @ts-ignore */
|
|
11784
12335
|
...(ngDevMode ? [{ debugName: "autoplay" }] : /* istanbul ignore next */ []));
|
|
12336
|
+
/** Whether the video loops when it reaches the end. */
|
|
11785
12337
|
loop = input(false, /* @ts-ignore */
|
|
11786
12338
|
...(ngDevMode ? [{ debugName: "loop" }] : /* istanbul ignore next */ []));
|
|
12339
|
+
/** Whether the video starts muted. */
|
|
11787
12340
|
muted = input(false, /* @ts-ignore */
|
|
11788
12341
|
...(ngDevMode ? [{ debugName: "muted" }] : /* istanbul ignore next */ []));
|
|
12342
|
+
/** Tailwind border-radius utility applied to the container. */
|
|
11789
12343
|
rounded = input('rounded-xl', /* @ts-ignore */
|
|
11790
12344
|
...(ngDevMode ? [{ debugName: "rounded" }] : /* istanbul ignore next */ []));
|
|
11791
12345
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
12346
|
+
/** Accessible label override for the play-button facade. */
|
|
12347
|
+
playLabel = input(/* @ts-ignore */
|
|
12348
|
+
...(ngDevMode ? [undefined, { debugName: "playLabel" }] : /* istanbul ignore next */ []));
|
|
12349
|
+
playText = buiLabel('videoPlay', this.playLabel);
|
|
11792
12350
|
v = viewChild('v', /* @ts-ignore */
|
|
11793
12351
|
...(ngDevMode ? [{ debugName: "v" }] : /* istanbul ignore next */ []));
|
|
11794
12352
|
started = signal(false, /* @ts-ignore */
|
|
@@ -11821,7 +12379,7 @@ class BuiVideo {
|
|
|
11821
12379
|
}
|
|
11822
12380
|
}
|
|
11823
12381
|
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: `
|
|
12382
|
+
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
12383
|
<video
|
|
11826
12384
|
#v
|
|
11827
12385
|
[src]="src() || null"
|
|
@@ -11840,7 +12398,7 @@ class BuiVideo {
|
|
|
11840
12398
|
<button
|
|
11841
12399
|
type="button"
|
|
11842
12400
|
class="absolute inset-0 flex items-center justify-center bg-black/30 transition-colors hover:bg-black/40"
|
|
11843
|
-
aria-label="
|
|
12401
|
+
[attr.aria-label]="playText()"
|
|
11844
12402
|
(click)="play()"
|
|
11845
12403
|
>
|
|
11846
12404
|
<span
|
|
@@ -11882,7 +12440,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
11882
12440
|
<button
|
|
11883
12441
|
type="button"
|
|
11884
12442
|
class="absolute inset-0 flex items-center justify-center bg-black/30 transition-colors hover:bg-black/40"
|
|
11885
|
-
aria-label="
|
|
12443
|
+
[attr.aria-label]="playText()"
|
|
11886
12444
|
(click)="play()"
|
|
11887
12445
|
>
|
|
11888
12446
|
<span
|
|
@@ -11896,7 +12454,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
11896
12454
|
}
|
|
11897
12455
|
`,
|
|
11898
12456
|
}]
|
|
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 }] }] } });
|
|
12457
|
+
}], 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
12458
|
|
|
11901
12459
|
const DEFAULT_SWATCHES = [
|
|
11902
12460
|
'#ef4444',
|
|
@@ -11912,13 +12470,24 @@ const DEFAULT_SWATCHES = [
|
|
|
11912
12470
|
];
|
|
11913
12471
|
/** A colour picker: a native colour well, a hex field, and a swatch palette. */
|
|
11914
12472
|
class BuiColorPicker {
|
|
12473
|
+
/** Selected color as a hex string. Two-way bindable with `[(value)]`. */
|
|
11915
12474
|
value = model('#6366f1', /* @ts-ignore */
|
|
11916
12475
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
12476
|
+
/** Custom swatch palette; falls back to a built-in set when null. */
|
|
11917
12477
|
swatches = input(null, /* @ts-ignore */
|
|
11918
12478
|
...(ngDevMode ? [{ debugName: "swatches" }] : /* istanbul ignore next */ []));
|
|
12479
|
+
/** Whether the picker is disabled. */
|
|
11919
12480
|
disabled = input(false, /* @ts-ignore */
|
|
11920
12481
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
11921
12482
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
12483
|
+
/** Accessible label for the native color well. */
|
|
12484
|
+
pickLabel = input(/* @ts-ignore */
|
|
12485
|
+
...(ngDevMode ? [undefined, { debugName: "pickLabel" }] : /* istanbul ignore next */ []));
|
|
12486
|
+
/** Accessible label for the hex text field. */
|
|
12487
|
+
hexLabel = input(/* @ts-ignore */
|
|
12488
|
+
...(ngDevMode ? [undefined, { debugName: "hexLabel" }] : /* istanbul ignore next */ []));
|
|
12489
|
+
pickText = buiLabel('colorPickerPick', this.pickLabel);
|
|
12490
|
+
hexText = buiLabel('colorPickerHex', this.hexLabel);
|
|
11922
12491
|
palette = computed(() => this.swatches() ?? DEFAULT_SWATCHES, /* @ts-ignore */
|
|
11923
12492
|
...(ngDevMode ? [{ debugName: "palette" }] : /* istanbul ignore next */ []));
|
|
11924
12493
|
computedClass = computed(() => cn('inline-block', this.userClass()), /* @ts-ignore */
|
|
@@ -11930,7 +12499,7 @@ class BuiColorPicker {
|
|
|
11930
12499
|
this.value.set(event.target.value);
|
|
11931
12500
|
}
|
|
11932
12501
|
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: `
|
|
12502
|
+
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
12503
|
<div class="flex items-center gap-2">
|
|
11935
12504
|
<label
|
|
11936
12505
|
class="relative size-9 shrink-0 overflow-hidden rounded-md border border-input"
|
|
@@ -11941,7 +12510,7 @@ class BuiColorPicker {
|
|
|
11941
12510
|
[value]="value()"
|
|
11942
12511
|
[disabled]="disabled()"
|
|
11943
12512
|
class="absolute inset-0 size-full cursor-pointer opacity-0"
|
|
11944
|
-
aria-label="
|
|
12513
|
+
[attr.aria-label]="pickText()"
|
|
11945
12514
|
(input)="onPick($event)"
|
|
11946
12515
|
/>
|
|
11947
12516
|
</label>
|
|
@@ -11950,7 +12519,7 @@ class BuiColorPicker {
|
|
|
11950
12519
|
[value]="value()"
|
|
11951
12520
|
[disabled]="disabled()"
|
|
11952
12521
|
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="
|
|
12522
|
+
[attr.aria-label]="hexText()"
|
|
11954
12523
|
(input)="onText($event)"
|
|
11955
12524
|
/>
|
|
11956
12525
|
</div>
|
|
@@ -11984,7 +12553,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
11984
12553
|
[value]="value()"
|
|
11985
12554
|
[disabled]="disabled()"
|
|
11986
12555
|
class="absolute inset-0 size-full cursor-pointer opacity-0"
|
|
11987
|
-
aria-label="
|
|
12556
|
+
[attr.aria-label]="pickText()"
|
|
11988
12557
|
(input)="onPick($event)"
|
|
11989
12558
|
/>
|
|
11990
12559
|
</label>
|
|
@@ -11993,7 +12562,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
11993
12562
|
[value]="value()"
|
|
11994
12563
|
[disabled]="disabled()"
|
|
11995
12564
|
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="
|
|
12565
|
+
[attr.aria-label]="hexText()"
|
|
11997
12566
|
(input)="onText($event)"
|
|
11998
12567
|
/>
|
|
11999
12568
|
</div>
|
|
@@ -12011,18 +12580,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
12011
12580
|
</div>
|
|
12012
12581
|
`,
|
|
12013
12582
|
}]
|
|
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 }] }] } });
|
|
12583
|
+
}], 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
12584
|
|
|
12016
12585
|
/** A GDPR cookie banner. Persists the choice in localStorage (skipped in `demo` mode). */
|
|
12017
12586
|
class BuiCookieConsent {
|
|
12587
|
+
/** Consent message shown to the user. */
|
|
12018
12588
|
message = input('We use cookies to enhance your experience.', /* @ts-ignore */
|
|
12019
12589
|
...(ngDevMode ? [{ debugName: "message" }] : /* istanbul ignore next */ []));
|
|
12590
|
+
/** When true, always shows the banner and skips reading/writing localStorage. */
|
|
12020
12591
|
demo = input(false, /* @ts-ignore */
|
|
12021
12592
|
...(ngDevMode ? [{ debugName: "demo" }] : /* istanbul ignore next */ []));
|
|
12593
|
+
/** localStorage key under which the accept/decline choice is persisted. */
|
|
12022
12594
|
storageKey = input('bui-cookie-consent', /* @ts-ignore */
|
|
12023
12595
|
...(ngDevMode ? [{ debugName: "storageKey" }] : /* istanbul ignore next */ []));
|
|
12596
|
+
/** Emitted with `true` when the user accepts and `false` when they decline. */
|
|
12024
12597
|
decided = output();
|
|
12025
12598
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
12599
|
+
/** Overrides the localized accessible label for the consent region. */
|
|
12600
|
+
ariaLabel = input(/* @ts-ignore */
|
|
12601
|
+
...(ngDevMode ? [undefined, { debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
12602
|
+
ariaLabelText = buiLabel('cookieConsent', this.ariaLabel);
|
|
12026
12603
|
visible = signal(false, /* @ts-ignore */
|
|
12027
12604
|
...(ngDevMode ? [{ debugName: "visible" }] : /* istanbul ignore next */ []));
|
|
12028
12605
|
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 +12621,7 @@ class BuiCookieConsent {
|
|
|
12044
12621
|
this.decided.emit(isAccepted);
|
|
12045
12622
|
}
|
|
12046
12623
|
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": "
|
|
12624
|
+
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
12625
|
<p class="text-sm text-muted-foreground">{{ message() }}</p>
|
|
12049
12626
|
<div class="flex shrink-0 gap-2">
|
|
12050
12627
|
<button
|
|
@@ -12071,7 +12648,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
12071
12648
|
host: {
|
|
12072
12649
|
'data-slot': 'cookie-consent',
|
|
12073
12650
|
role: 'region',
|
|
12074
|
-
'aria-label': '
|
|
12651
|
+
'[attr.aria-label]': 'ariaLabelText()',
|
|
12075
12652
|
'[class]': 'computedClass()',
|
|
12076
12653
|
'[hidden]': '!visible()',
|
|
12077
12654
|
},
|
|
@@ -12095,19 +12672,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
12095
12672
|
</div>
|
|
12096
12673
|
`,
|
|
12097
12674
|
}]
|
|
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 }] }] } });
|
|
12675
|
+
}], 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
12676
|
|
|
12100
12677
|
/**
|
|
12101
12678
|
* Emits `more` when a sentinel scrolls into view (IntersectionObserver) or the fallback
|
|
12102
12679
|
* "Load more" button is pressed. Drive `loading` / `finished` from the consumer. SSR-safe.
|
|
12103
12680
|
*/
|
|
12104
12681
|
class BuiInfiniteScroll {
|
|
12682
|
+
/** Whether a load is in progress; shows the spinner and suppresses new emits. */
|
|
12105
12683
|
loading = input(false, /* @ts-ignore */
|
|
12106
12684
|
...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
|
|
12685
|
+
/** Whether all items are loaded; shows the end message and suppresses emits. */
|
|
12107
12686
|
finished = input(false, /* @ts-ignore */
|
|
12108
12687
|
...(ngDevMode ? [{ debugName: "finished" }] : /* istanbul ignore next */ []));
|
|
12688
|
+
/** Pixel margin below the viewport at which the sentinel triggers loading. */
|
|
12109
12689
|
threshold = input(200, /* @ts-ignore */
|
|
12110
12690
|
...(ngDevMode ? [{ debugName: "threshold" }] : /* istanbul ignore next */ []));
|
|
12691
|
+
/** Emits when the sentinel scrolls into view or the fallback button is pressed. */
|
|
12111
12692
|
more = output();
|
|
12112
12693
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
12113
12694
|
sentinel = viewChild('sentinel', /* @ts-ignore */
|
|
@@ -12232,18 +12813,42 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
12232
12813
|
|
|
12233
12814
|
/** A compact audio player around a native `<audio>`: play/pause, seek, time, mute. */
|
|
12234
12815
|
class BuiAudioPlayer {
|
|
12816
|
+
/** Audio source URL for the underlying `<audio>` element. */
|
|
12235
12817
|
src = input('', /* @ts-ignore */
|
|
12236
12818
|
...(ngDevMode ? [{ debugName: "src" }] : /* istanbul ignore next */ []));
|
|
12819
|
+
/** Track title shown next to the controls. */
|
|
12237
12820
|
title = input('', /* @ts-ignore */
|
|
12238
12821
|
...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
|
|
12822
|
+
/** Artist name shown under the title. */
|
|
12239
12823
|
artist = input('', /* @ts-ignore */
|
|
12240
12824
|
...(ngDevMode ? [{ debugName: "artist" }] : /* istanbul ignore next */ []));
|
|
12825
|
+
/** Whether to start playback automatically once loaded. */
|
|
12241
12826
|
autoplay = input(false, /* @ts-ignore */
|
|
12242
12827
|
...(ngDevMode ? [{ debugName: "autoplay" }] : /* istanbul ignore next */ []));
|
|
12243
12828
|
/** Condensed layout: hides the title block and mute button. */
|
|
12244
12829
|
compact = input(false, /* @ts-ignore */
|
|
12245
12830
|
...(ngDevMode ? [{ debugName: "compact" }] : /* istanbul ignore next */ []));
|
|
12246
12831
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
12832
|
+
/** Accessible label override for the seek slider. */
|
|
12833
|
+
seekLabel = input(/* @ts-ignore */
|
|
12834
|
+
...(ngDevMode ? [undefined, { debugName: "seekLabel" }] : /* istanbul ignore next */ []));
|
|
12835
|
+
/** Accessible label override for the play button. */
|
|
12836
|
+
playLabel = input(/* @ts-ignore */
|
|
12837
|
+
...(ngDevMode ? [undefined, { debugName: "playLabel" }] : /* istanbul ignore next */ []));
|
|
12838
|
+
/** Accessible label override for the pause button. */
|
|
12839
|
+
pauseLabel = input(/* @ts-ignore */
|
|
12840
|
+
...(ngDevMode ? [undefined, { debugName: "pauseLabel" }] : /* istanbul ignore next */ []));
|
|
12841
|
+
/** Accessible label override for the mute button. */
|
|
12842
|
+
muteLabel = input(/* @ts-ignore */
|
|
12843
|
+
...(ngDevMode ? [undefined, { debugName: "muteLabel" }] : /* istanbul ignore next */ []));
|
|
12844
|
+
/** Accessible label override for the unmute button. */
|
|
12845
|
+
unmuteLabel = input(/* @ts-ignore */
|
|
12846
|
+
...(ngDevMode ? [undefined, { debugName: "unmuteLabel" }] : /* istanbul ignore next */ []));
|
|
12847
|
+
seekText = buiLabel('audioPlayerSeek', this.seekLabel);
|
|
12848
|
+
playText = buiLabel('audioPlayerPlay', this.playLabel);
|
|
12849
|
+
pauseText = buiLabel('audioPlayerPause', this.pauseLabel);
|
|
12850
|
+
muteText = buiLabel('audioPlayerMute', this.muteLabel);
|
|
12851
|
+
unmuteText = buiLabel('audioPlayerUnmute', this.unmuteLabel);
|
|
12247
12852
|
a = viewChild('a', /* @ts-ignore */
|
|
12248
12853
|
...(ngDevMode ? [{ debugName: "a" }] : /* istanbul ignore next */ []));
|
|
12249
12854
|
playing = signal(false, /* @ts-ignore */
|
|
@@ -12303,7 +12908,7 @@ class BuiAudioPlayer {
|
|
|
12303
12908
|
return `${minutes}:${rest.toString().padStart(2, '0')}`;
|
|
12304
12909
|
}
|
|
12305
12910
|
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: `
|
|
12911
|
+
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
12912
|
<audio
|
|
12308
12913
|
#a
|
|
12309
12914
|
[src]="src() || null"
|
|
@@ -12319,7 +12924,7 @@ class BuiAudioPlayer {
|
|
|
12319
12924
|
<button
|
|
12320
12925
|
type="button"
|
|
12321
12926
|
class="inline-flex size-9 shrink-0 items-center justify-center rounded-full bg-primary text-primary-foreground"
|
|
12322
|
-
[attr.aria-label]="playing() ?
|
|
12927
|
+
[attr.aria-label]="playing() ? pauseText() : playText()"
|
|
12323
12928
|
(click)="toggle()"
|
|
12324
12929
|
>
|
|
12325
12930
|
<svg class="size-4" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
|
|
@@ -12346,7 +12951,7 @@ class BuiAudioPlayer {
|
|
|
12346
12951
|
[max]="duration() || 0"
|
|
12347
12952
|
[value]="current()"
|
|
12348
12953
|
class="h-1 flex-1 accent-primary"
|
|
12349
|
-
aria-label="
|
|
12954
|
+
[attr.aria-label]="seekText()"
|
|
12350
12955
|
(input)="seek($event)"
|
|
12351
12956
|
/>
|
|
12352
12957
|
<span class="text-xs text-muted-foreground tabular-nums">{{ format(duration()) }}</span>
|
|
@@ -12354,7 +12959,7 @@ class BuiAudioPlayer {
|
|
|
12354
12959
|
<button
|
|
12355
12960
|
type="button"
|
|
12356
12961
|
class="shrink-0 text-muted-foreground hover:text-foreground"
|
|
12357
|
-
[attr.aria-label]="muted() ?
|
|
12962
|
+
[attr.aria-label]="muted() ? unmuteText() : muteText()"
|
|
12358
12963
|
(click)="toggleMute()"
|
|
12359
12964
|
>
|
|
12360
12965
|
<svg class="size-4" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
|
|
@@ -12391,7 +12996,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
12391
12996
|
<button
|
|
12392
12997
|
type="button"
|
|
12393
12998
|
class="inline-flex size-9 shrink-0 items-center justify-center rounded-full bg-primary text-primary-foreground"
|
|
12394
|
-
[attr.aria-label]="playing() ?
|
|
12999
|
+
[attr.aria-label]="playing() ? pauseText() : playText()"
|
|
12395
13000
|
(click)="toggle()"
|
|
12396
13001
|
>
|
|
12397
13002
|
<svg class="size-4" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
|
|
@@ -12418,7 +13023,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
12418
13023
|
[max]="duration() || 0"
|
|
12419
13024
|
[value]="current()"
|
|
12420
13025
|
class="h-1 flex-1 accent-primary"
|
|
12421
|
-
aria-label="
|
|
13026
|
+
[attr.aria-label]="seekText()"
|
|
12422
13027
|
(input)="seek($event)"
|
|
12423
13028
|
/>
|
|
12424
13029
|
<span class="text-xs text-muted-foreground tabular-nums">{{ format(duration()) }}</span>
|
|
@@ -12426,7 +13031,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
12426
13031
|
<button
|
|
12427
13032
|
type="button"
|
|
12428
13033
|
class="shrink-0 text-muted-foreground hover:text-foreground"
|
|
12429
|
-
[attr.aria-label]="muted() ?
|
|
13034
|
+
[attr.aria-label]="muted() ? unmuteText() : muteText()"
|
|
12430
13035
|
(click)="toggleMute()"
|
|
12431
13036
|
>
|
|
12432
13037
|
<svg class="size-4" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
|
|
@@ -12442,12 +13047,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
12442
13047
|
}
|
|
12443
13048
|
`,
|
|
12444
13049
|
}]
|
|
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 }] }] } });
|
|
13050
|
+
}], 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
13051
|
|
|
12447
13052
|
/** A canvas signature pad with draw, undo and clear. SSR-safe (canvas set up in the browser). */
|
|
12448
13053
|
class BuiSignaturePad {
|
|
13054
|
+
/** Canvas height in pixels. */
|
|
12449
13055
|
height = input(200, /* @ts-ignore */
|
|
12450
13056
|
...(ngDevMode ? [{ debugName: "height" }] : /* istanbul ignore next */ []));
|
|
13057
|
+
/** Stroke color; falls back to the current text color when empty. */
|
|
12451
13058
|
penColor = input('', /* @ts-ignore */
|
|
12452
13059
|
...(ngDevMode ? [{ debugName: "penColor" }] : /* istanbul ignore next */ []));
|
|
12453
13060
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -12604,11 +13211,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
12604
13211
|
|
|
12605
13212
|
/** A macOS-style dock with a cursor-following fisheye magnify. Use `bui-dock-item` tiles. */
|
|
12606
13213
|
class BuiDock {
|
|
13214
|
+
/** Maximum scale factor applied to the tile directly under the cursor. */
|
|
12607
13215
|
magnify = input(1.6, /* @ts-ignore */
|
|
12608
13216
|
...(ngDevMode ? [{ debugName: "magnify" }] : /* istanbul ignore next */ []));
|
|
13217
|
+
/** Pixel radius around the cursor within which tiles are magnified. */
|
|
12609
13218
|
distance = input(120, /* @ts-ignore */
|
|
12610
13219
|
...(ngDevMode ? [{ debugName: "distance" }] : /* istanbul ignore next */ []));
|
|
12611
13220
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
13221
|
+
/** Accessible label for the dock navigation; falls back to the i18n default. */
|
|
13222
|
+
label = input(/* @ts-ignore */
|
|
13223
|
+
...(ngDevMode ? [undefined, { debugName: "label" }] : /* istanbul ignore next */ []));
|
|
13224
|
+
labelText = buiLabel('dock', this.label);
|
|
12612
13225
|
mouseX = signal(null, /* @ts-ignore */
|
|
12613
13226
|
...(ngDevMode ? [{ debugName: "mouseX" }] : /* istanbul ignore next */ []));
|
|
12614
13227
|
computedClass = computed(() => cn('inline-block', this.userClass()), /* @ts-ignore */
|
|
@@ -12625,9 +13238,9 @@ class BuiDock {
|
|
|
12625
13238
|
return 1 + (this.magnify() - 1) * (1 - distance / this.distance());
|
|
12626
13239
|
}
|
|
12627
13240
|
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: `
|
|
13241
|
+
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
13242
|
<nav
|
|
12630
|
-
aria-label="
|
|
13243
|
+
[attr.aria-label]="labelText()"
|
|
12631
13244
|
class="flex items-end gap-2 rounded-2xl border bg-card/80 p-2 shadow-lg backdrop-blur"
|
|
12632
13245
|
>
|
|
12633
13246
|
<ng-content />
|
|
@@ -12646,17 +13259,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
12646
13259
|
},
|
|
12647
13260
|
template: `
|
|
12648
13261
|
<nav
|
|
12649
|
-
aria-label="
|
|
13262
|
+
[attr.aria-label]="labelText()"
|
|
12650
13263
|
class="flex items-end gap-2 rounded-2xl border bg-card/80 p-2 shadow-lg backdrop-blur"
|
|
12651
13264
|
>
|
|
12652
13265
|
<ng-content />
|
|
12653
13266
|
</nav>
|
|
12654
13267
|
`,
|
|
12655
13268
|
}]
|
|
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 }] }] } });
|
|
13269
|
+
}], 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
13270
|
|
|
12658
13271
|
/** A magnifying tile inside a `bui-dock`. */
|
|
12659
13272
|
class BuiDockItem {
|
|
13273
|
+
/** Whether to show the active indicator dot beneath the tile. */
|
|
12660
13274
|
active = input(false, /* @ts-ignore */
|
|
12661
13275
|
...(ngDevMode ? [{ debugName: "active" }] : /* istanbul ignore next */ []));
|
|
12662
13276
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -12713,8 +13327,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
12713
13327
|
|
|
12714
13328
|
/** A single tree row; renders its own children recursively. */
|
|
12715
13329
|
class BuiTreeNode {
|
|
13330
|
+
/** Node data for this row, including its label and children. */
|
|
12716
13331
|
item = input.required(/* @ts-ignore */
|
|
12717
13332
|
...(ngDevMode ? [{ debugName: "item" }] : /* istanbul ignore next */ []));
|
|
13333
|
+
/** Depth of this node, used for indentation and `aria-level` (root is 1). */
|
|
12718
13334
|
level = input(1, /* @ts-ignore */
|
|
12719
13335
|
...(ngDevMode ? [{ debugName: "level" }] : /* istanbul ignore next */ []));
|
|
12720
13336
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -12824,8 +13440,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
12824
13440
|
|
|
12825
13441
|
/** A collapsible, data-driven hierarchical tree (`role="tree"`). */
|
|
12826
13442
|
class BuiTree {
|
|
13443
|
+
/** Root nodes of the tree to render. */
|
|
12827
13444
|
items = input([], /* @ts-ignore */
|
|
12828
13445
|
...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
|
|
13446
|
+
/** Accessible label for the tree's root element. */
|
|
12829
13447
|
ariaLabel = input('Tree', /* @ts-ignore */
|
|
12830
13448
|
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
12831
13449
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -12858,17 +13476,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
12858
13476
|
|
|
12859
13477
|
/** A dynamic list of repeatable form rows with add/remove and min/max bounds. */
|
|
12860
13478
|
class BuiRepeater {
|
|
13479
|
+
/** Column definitions rendered for every row. */
|
|
12861
13480
|
fields = input([], /* @ts-ignore */
|
|
12862
13481
|
...(ngDevMode ? [{ debugName: "fields" }] : /* istanbul ignore next */ []));
|
|
13482
|
+
/** Row data keyed by field key. Two-way bindable with `[(rows)]`. */
|
|
12863
13483
|
rows = model([], /* @ts-ignore */
|
|
12864
13484
|
...(ngDevMode ? [{ debugName: "rows" }] : /* istanbul ignore next */ []));
|
|
13485
|
+
/** Minimum number of rows that must remain (remove is disabled at this count). */
|
|
12865
13486
|
min = input(1, /* @ts-ignore */
|
|
12866
13487
|
...(ngDevMode ? [{ debugName: "min" }] : /* istanbul ignore next */ []));
|
|
13488
|
+
/** Maximum number of rows allowed, or null for unlimited. */
|
|
12867
13489
|
max = input(null, /* @ts-ignore */
|
|
12868
13490
|
...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
|
|
13491
|
+
/** Text shown on the add-row button. */
|
|
12869
13492
|
addLabel = input('Add row', /* @ts-ignore */
|
|
12870
13493
|
...(ngDevMode ? [{ debugName: "addLabel" }] : /* istanbul ignore next */ []));
|
|
13494
|
+
/** Accessible label override for the remove-row buttons. */
|
|
13495
|
+
removeLabel = input(/* @ts-ignore */
|
|
13496
|
+
...(ngDevMode ? [undefined, { debugName: "removeLabel" }] : /* istanbul ignore next */ []));
|
|
12871
13497
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
13498
|
+
removeText = buiLabel('repeaterRemove', this.removeLabel);
|
|
12872
13499
|
atMax = computed(() => {
|
|
12873
13500
|
const max = this.max();
|
|
12874
13501
|
return max !== null && this.rows().length >= max;
|
|
@@ -12899,7 +13526,7 @@ class BuiRepeater {
|
|
|
12899
13526
|
this.rows.set(this.rows().map((row, index_) => (index_ === index ? { ...row, [key]: value } : row)));
|
|
12900
13527
|
}
|
|
12901
13528
|
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: `
|
|
13529
|
+
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
13530
|
@for (row of rows(); track $index; let i = $index) {
|
|
12904
13531
|
<div class="flex items-end gap-2">
|
|
12905
13532
|
@for (field of fields(); track field.key) {
|
|
@@ -12920,7 +13547,7 @@ class BuiRepeater {
|
|
|
12920
13547
|
type="button"
|
|
12921
13548
|
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
13549
|
[disabled]="rows().length <= min()"
|
|
12923
|
-
aria-label="
|
|
13550
|
+
[attr.aria-label]="removeText()"
|
|
12924
13551
|
(click)="removeRow(i)"
|
|
12925
13552
|
>
|
|
12926
13553
|
<svg
|
|
@@ -12989,7 +13616,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
12989
13616
|
type="button"
|
|
12990
13617
|
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
13618
|
[disabled]="rows().length <= min()"
|
|
12992
|
-
aria-label="
|
|
13619
|
+
[attr.aria-label]="removeText()"
|
|
12993
13620
|
(click)="removeRow(i)"
|
|
12994
13621
|
>
|
|
12995
13622
|
<svg
|
|
@@ -13032,15 +13659,33 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
13032
13659
|
</button>
|
|
13033
13660
|
`,
|
|
13034
13661
|
}]
|
|
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 }] }] } });
|
|
13662
|
+
}], 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
13663
|
|
|
13037
13664
|
/** A bell trigger with a dropdown feed of notifications and an unread badge. */
|
|
13038
13665
|
class BuiNotificationCenter {
|
|
13666
|
+
/** Notification items rendered in the dropdown feed. */
|
|
13039
13667
|
notifications = input([], /* @ts-ignore */
|
|
13040
13668
|
...(ngDevMode ? [{ debugName: "notifications" }] : /* istanbul ignore next */ []));
|
|
13669
|
+
/** Whether the dropdown is open. Two-way bindable with `[(open)]`. */
|
|
13041
13670
|
open = model(false, /* @ts-ignore */
|
|
13042
13671
|
...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
|
|
13043
13672
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
13673
|
+
/** Accessible label for the trigger and dropdown region. */
|
|
13674
|
+
ariaLabel = input(/* @ts-ignore */
|
|
13675
|
+
...(ngDevMode ? [undefined, { debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
13676
|
+
/** Accessible label announced for the per-item unread dot. */
|
|
13677
|
+
unreadLabel = input(/* @ts-ignore */
|
|
13678
|
+
...(ngDevMode ? [undefined, { debugName: "unreadLabel" }] : /* istanbul ignore next */ []));
|
|
13679
|
+
/** Label for the "mark all as read" action button. */
|
|
13680
|
+
markAllReadLabel = input(/* @ts-ignore */
|
|
13681
|
+
...(ngDevMode ? [undefined, { debugName: "markAllReadLabel" }] : /* istanbul ignore next */ []));
|
|
13682
|
+
/** Text shown when there are no notifications. */
|
|
13683
|
+
emptyLabel = input(/* @ts-ignore */
|
|
13684
|
+
...(ngDevMode ? [undefined, { debugName: "emptyLabel" }] : /* istanbul ignore next */ []));
|
|
13685
|
+
ariaText = buiLabel('notificationCenter', this.ariaLabel);
|
|
13686
|
+
unreadText = buiLabel('notificationCenterUnread', this.unreadLabel);
|
|
13687
|
+
markAllReadText = buiLabel('notificationCenterMarkAllRead', this.markAllReadLabel);
|
|
13688
|
+
emptyText = buiLabel('notificationCenterEmpty', this.emptyLabel);
|
|
13044
13689
|
markedRead = signal(new Set(), /* @ts-ignore */
|
|
13045
13690
|
...(ngDevMode ? [{ debugName: "markedRead" }] : /* istanbul ignore next */ []));
|
|
13046
13691
|
unread = computed(() => this.notifications().filter((_, index) => !this.isRead(index)).length, /* @ts-ignore */
|
|
@@ -13054,12 +13699,12 @@ class BuiNotificationCenter {
|
|
|
13054
13699
|
this.markedRead.set(new Set(this.notifications().map((_, index) => index)));
|
|
13055
13700
|
}
|
|
13056
13701
|
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: `
|
|
13702
|
+
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
13703
|
<button
|
|
13059
13704
|
type="button"
|
|
13060
13705
|
class="relative inline-flex size-9 items-center justify-center rounded-md border border-input hover:bg-accent"
|
|
13061
13706
|
[attr.aria-expanded]="open()"
|
|
13062
|
-
aria-label="
|
|
13707
|
+
[attr.aria-label]="ariaText()"
|
|
13063
13708
|
(click)="open.set(!open())"
|
|
13064
13709
|
>
|
|
13065
13710
|
<svg
|
|
@@ -13087,12 +13732,12 @@ class BuiNotificationCenter {
|
|
|
13087
13732
|
<div
|
|
13088
13733
|
class="absolute end-0 z-50 mt-2 w-80 rounded-lg border bg-popover text-popover-foreground shadow-md"
|
|
13089
13734
|
role="region"
|
|
13090
|
-
aria-label="
|
|
13735
|
+
[attr.aria-label]="ariaText()"
|
|
13091
13736
|
>
|
|
13092
13737
|
<div class="flex items-center justify-between border-b p-3">
|
|
13093
|
-
<span class="text-sm font-medium">
|
|
13738
|
+
<span class="text-sm font-medium">{{ ariaText() }}</span>
|
|
13094
13739
|
<button type="button" class="text-xs font-medium text-primary" (click)="markAllRead()">
|
|
13095
|
-
|
|
13740
|
+
{{ markAllReadText() }}
|
|
13096
13741
|
</button>
|
|
13097
13742
|
</div>
|
|
13098
13743
|
<ul class="max-h-80 overflow-auto">
|
|
@@ -13113,12 +13758,12 @@ class BuiNotificationCenter {
|
|
|
13113
13758
|
@if (!isRead(i)) {
|
|
13114
13759
|
<span
|
|
13115
13760
|
class="mt-1.5 size-2 shrink-0 rounded-full bg-primary"
|
|
13116
|
-
aria-label="
|
|
13761
|
+
[attr.aria-label]="unreadText()"
|
|
13117
13762
|
></span>
|
|
13118
13763
|
}
|
|
13119
13764
|
</li>
|
|
13120
13765
|
} @empty {
|
|
13121
|
-
<li class="p-6 text-center text-sm text-muted-foreground">
|
|
13766
|
+
<li class="p-6 text-center text-sm text-muted-foreground">{{ emptyText() }}</li>
|
|
13122
13767
|
}
|
|
13123
13768
|
</ul>
|
|
13124
13769
|
</div>
|
|
@@ -13135,7 +13780,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
13135
13780
|
type="button"
|
|
13136
13781
|
class="relative inline-flex size-9 items-center justify-center rounded-md border border-input hover:bg-accent"
|
|
13137
13782
|
[attr.aria-expanded]="open()"
|
|
13138
|
-
aria-label="
|
|
13783
|
+
[attr.aria-label]="ariaText()"
|
|
13139
13784
|
(click)="open.set(!open())"
|
|
13140
13785
|
>
|
|
13141
13786
|
<svg
|
|
@@ -13163,12 +13808,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
13163
13808
|
<div
|
|
13164
13809
|
class="absolute end-0 z-50 mt-2 w-80 rounded-lg border bg-popover text-popover-foreground shadow-md"
|
|
13165
13810
|
role="region"
|
|
13166
|
-
aria-label="
|
|
13811
|
+
[attr.aria-label]="ariaText()"
|
|
13167
13812
|
>
|
|
13168
13813
|
<div class="flex items-center justify-between border-b p-3">
|
|
13169
|
-
<span class="text-sm font-medium">
|
|
13814
|
+
<span class="text-sm font-medium">{{ ariaText() }}</span>
|
|
13170
13815
|
<button type="button" class="text-xs font-medium text-primary" (click)="markAllRead()">
|
|
13171
|
-
|
|
13816
|
+
{{ markAllReadText() }}
|
|
13172
13817
|
</button>
|
|
13173
13818
|
</div>
|
|
13174
13819
|
<ul class="max-h-80 overflow-auto">
|
|
@@ -13189,26 +13834,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
13189
13834
|
@if (!isRead(i)) {
|
|
13190
13835
|
<span
|
|
13191
13836
|
class="mt-1.5 size-2 shrink-0 rounded-full bg-primary"
|
|
13192
|
-
aria-label="
|
|
13837
|
+
[attr.aria-label]="unreadText()"
|
|
13193
13838
|
></span>
|
|
13194
13839
|
}
|
|
13195
13840
|
</li>
|
|
13196
13841
|
} @empty {
|
|
13197
|
-
<li class="p-6 text-center text-sm text-muted-foreground">
|
|
13842
|
+
<li class="p-6 text-center text-sm text-muted-foreground">{{ emptyText() }}</li>
|
|
13198
13843
|
}
|
|
13199
13844
|
</ul>
|
|
13200
13845
|
</div>
|
|
13201
13846
|
}
|
|
13202
13847
|
`,
|
|
13203
13848
|
}]
|
|
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 }] }] } });
|
|
13849
|
+
}], 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
13850
|
|
|
13206
13851
|
/** A single JSON node; renders nested objects/arrays recursively. */
|
|
13207
13852
|
class BuiJsonViewerNode {
|
|
13853
|
+
/** Arbitrary JSON value rendered by this node. */
|
|
13208
13854
|
value = input(null, /* @ts-ignore */
|
|
13209
13855
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
13856
|
+
/** Object key or array index labeling this node, or null at the root. */
|
|
13210
13857
|
keyName = input(null, /* @ts-ignore */
|
|
13211
13858
|
...(ngDevMode ? [{ debugName: "keyName" }] : /* istanbul ignore next */ []));
|
|
13859
|
+
/** Whether this node starts expanded. */
|
|
13212
13860
|
expanded = input(true, /* @ts-ignore */
|
|
13213
13861
|
...(ngDevMode ? [{ debugName: "expanded" }] : /* istanbul ignore next */ []));
|
|
13214
13862
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -13390,8 +14038,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
13390
14038
|
|
|
13391
14039
|
/** A collapsible JSON tree viewer. Accepts an object/array or a JSON string. */
|
|
13392
14040
|
class BuiJsonViewer {
|
|
14041
|
+
/** Arbitrary JSON value to render; a string is parsed as JSON when possible. */
|
|
13393
14042
|
data = input(null, /* @ts-ignore */
|
|
13394
14043
|
...(ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []));
|
|
14044
|
+
/** Whether nodes start expanded. */
|
|
13395
14045
|
expanded = input(true, /* @ts-ignore */
|
|
13396
14046
|
...(ngDevMode ? [{ debugName: "expanded" }] : /* istanbul ignore next */ []));
|
|
13397
14047
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -13425,6 +14075,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
13425
14075
|
|
|
13426
14076
|
/** A single org-chart node (a card + recursive children). Rendered on an `<li>`. */
|
|
13427
14077
|
class BuiOrgChartNode {
|
|
14078
|
+
/** Node rendered as a card, with its `children` recursed into nested `<li>`s. */
|
|
13428
14079
|
node = input.required(/* @ts-ignore */
|
|
13429
14080
|
...(ngDevMode ? [{ debugName: "node" }] : /* istanbul ignore next */ []));
|
|
13430
14081
|
children = computed(() => this.node().children ?? [], /* @ts-ignore */
|
|
@@ -13501,6 +14152,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
13501
14152
|
|
|
13502
14153
|
/** A top-down organizational chart with pure-CSS connectors. Recursively renders nodes. */
|
|
13503
14154
|
class BuiOrgChart {
|
|
14155
|
+
/** Root node of the tree to render; `null` renders nothing. */
|
|
13504
14156
|
node = input(null, /* @ts-ignore */
|
|
13505
14157
|
...(ngDevMode ? [{ debugName: "node" }] : /* istanbul ignore next */ []));
|
|
13506
14158
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -13528,13 +14180,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
13528
14180
|
|
|
13529
14181
|
/** A cart trigger with an item-count badge and a dropdown with line items + subtotal. */
|
|
13530
14182
|
class BuiMiniCart {
|
|
14183
|
+
/** Line items in the cart, used for count and subtotal. */
|
|
13531
14184
|
items = input([], /* @ts-ignore */
|
|
13532
14185
|
...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
|
|
14186
|
+
/** Currency symbol prefixed to prices and subtotal. */
|
|
13533
14187
|
currency = input('$', /* @ts-ignore */
|
|
13534
14188
|
...(ngDevMode ? [{ debugName: "currency" }] : /* istanbul ignore next */ []));
|
|
14189
|
+
/** Whether the dropdown is open. Two-way bindable with `[(open)]`. */
|
|
13535
14190
|
open = model(false, /* @ts-ignore */
|
|
13536
14191
|
...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
|
|
13537
14192
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
14193
|
+
/** Accessible label override for the cart trigger button. */
|
|
14194
|
+
triggerLabel = input(/* @ts-ignore */
|
|
14195
|
+
...(ngDevMode ? [undefined, { debugName: "triggerLabel" }] : /* istanbul ignore next */ []));
|
|
14196
|
+
/** Accessible label override for the cart dropdown dialog. */
|
|
14197
|
+
label = input(/* @ts-ignore */
|
|
14198
|
+
...(ngDevMode ? [undefined, { debugName: "label" }] : /* istanbul ignore next */ []));
|
|
14199
|
+
triggerText = buiLabel('miniCartTrigger', this.triggerLabel);
|
|
14200
|
+
labelText = buiLabel('miniCart', this.label);
|
|
13538
14201
|
count = computed(() => this.items().reduce((total, item) => total + item.qty, 0), /* @ts-ignore */
|
|
13539
14202
|
...(ngDevMode ? [{ debugName: "count" }] : /* istanbul ignore next */ []));
|
|
13540
14203
|
subtotal = computed(() => this.items().reduce((total, item) => total + item.price * item.qty, 0), /* @ts-ignore */
|
|
@@ -13546,12 +14209,12 @@ class BuiMiniCart {
|
|
|
13546
14209
|
value.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 }));
|
|
13547
14210
|
}
|
|
13548
14211
|
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: `
|
|
14212
|
+
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
14213
|
<button
|
|
13551
14214
|
type="button"
|
|
13552
14215
|
class="relative inline-flex size-9 items-center justify-center rounded-md border border-input hover:bg-accent"
|
|
13553
14216
|
[attr.aria-expanded]="open()"
|
|
13554
|
-
aria-label="
|
|
14217
|
+
[attr.aria-label]="triggerText()"
|
|
13555
14218
|
(click)="open.set(!open())"
|
|
13556
14219
|
>
|
|
13557
14220
|
<svg
|
|
@@ -13580,7 +14243,7 @@ class BuiMiniCart {
|
|
|
13580
14243
|
<div
|
|
13581
14244
|
class="absolute end-0 z-50 mt-2 w-80 rounded-lg border bg-popover text-popover-foreground shadow-md"
|
|
13582
14245
|
role="dialog"
|
|
13583
|
-
aria-label="
|
|
14246
|
+
[attr.aria-label]="labelText()"
|
|
13584
14247
|
>
|
|
13585
14248
|
<div class="border-b p-3 text-sm font-medium">Your cart</div>
|
|
13586
14249
|
@if (items().length === 0) {
|
|
@@ -13634,7 +14297,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
13634
14297
|
type="button"
|
|
13635
14298
|
class="relative inline-flex size-9 items-center justify-center rounded-md border border-input hover:bg-accent"
|
|
13636
14299
|
[attr.aria-expanded]="open()"
|
|
13637
|
-
aria-label="
|
|
14300
|
+
[attr.aria-label]="triggerText()"
|
|
13638
14301
|
(click)="open.set(!open())"
|
|
13639
14302
|
>
|
|
13640
14303
|
<svg
|
|
@@ -13663,7 +14326,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
13663
14326
|
<div
|
|
13664
14327
|
class="absolute end-0 z-50 mt-2 w-80 rounded-lg border bg-popover text-popover-foreground shadow-md"
|
|
13665
14328
|
role="dialog"
|
|
13666
|
-
aria-label="
|
|
14329
|
+
[attr.aria-label]="labelText()"
|
|
13667
14330
|
>
|
|
13668
14331
|
<div class="border-b p-3 text-sm font-medium">Your cart</div>
|
|
13669
14332
|
@if (items().length === 0) {
|
|
@@ -13707,16 +14370,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
13707
14370
|
}
|
|
13708
14371
|
`,
|
|
13709
14372
|
}]
|
|
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 }] }] } });
|
|
14373
|
+
}], 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
14374
|
|
|
13712
14375
|
/** An SVG beam connecting two elements (by selector) with a travelling light. SSR-safe. */
|
|
13713
14376
|
class BuiAnimatedBeam {
|
|
14377
|
+
/** CSS selector of the element the beam starts from. */
|
|
13714
14378
|
from = input('', /* @ts-ignore */
|
|
13715
14379
|
...(ngDevMode ? [{ debugName: "from" }] : /* istanbul ignore next */ []));
|
|
14380
|
+
/** CSS selector of the element the beam ends at. */
|
|
13716
14381
|
to = input('', /* @ts-ignore */
|
|
13717
14382
|
...(ngDevMode ? [{ debugName: "to" }] : /* istanbul ignore next */ []));
|
|
14383
|
+
/** Upward bow of the connecting curve in pixels. */
|
|
13718
14384
|
curvature = input(0, /* @ts-ignore */
|
|
13719
14385
|
...(ngDevMode ? [{ debugName: "curvature" }] : /* istanbul ignore next */ []));
|
|
14386
|
+
/** Seconds for the travelling light to traverse the beam. */
|
|
13720
14387
|
duration = input(3, /* @ts-ignore */
|
|
13721
14388
|
...(ngDevMode ? [{ debugName: "duration" }] : /* istanbul ignore next */ []));
|
|
13722
14389
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -13854,10 +14521,13 @@ const ROW_CLASS = {
|
|
|
13854
14521
|
const SIGN = { same: ' ', add: '+', del: '-' };
|
|
13855
14522
|
/** A line-by-line text diff (LCS) rendered with +/- gutters. */
|
|
13856
14523
|
class BuiDiffViewer {
|
|
14524
|
+
/** Original text; lines removed relative to `after` are marked deleted. */
|
|
13857
14525
|
before = input('', /* @ts-ignore */
|
|
13858
14526
|
...(ngDevMode ? [{ debugName: "before" }] : /* istanbul ignore next */ []));
|
|
14527
|
+
/** Updated text; lines added relative to `before` are marked added. */
|
|
13859
14528
|
after = input('', /* @ts-ignore */
|
|
13860
14529
|
...(ngDevMode ? [{ debugName: "after" }] : /* istanbul ignore next */ []));
|
|
14530
|
+
/** Optional filename shown in the header above the diff. */
|
|
13861
14531
|
filename = input('', /* @ts-ignore */
|
|
13862
14532
|
...(ngDevMode ? [{ debugName: "filename" }] : /* istanbul ignore next */ []));
|
|
13863
14533
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -13926,11 +14596,17 @@ const ALIGN$2 = {
|
|
|
13926
14596
|
};
|
|
13927
14597
|
/** A table whose rows can nest and expand/collapse (flattened to visible rows). */
|
|
13928
14598
|
class BuiTreeTable {
|
|
14599
|
+
/** Column definitions in display order. */
|
|
13929
14600
|
columns = input([], /* @ts-ignore */
|
|
13930
14601
|
...(ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []));
|
|
14602
|
+
/** Top-level rows, each able to nest children via `children`. */
|
|
13931
14603
|
rows = input([], /* @ts-ignore */
|
|
13932
14604
|
...(ngDevMode ? [{ debugName: "rows" }] : /* istanbul ignore next */ []));
|
|
13933
14605
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
14606
|
+
/** Accessible label for the expand/collapse toggle button. */
|
|
14607
|
+
toggleLabel = input(/* @ts-ignore */
|
|
14608
|
+
...(ngDevMode ? [undefined, { debugName: "toggleLabel" }] : /* istanbul ignore next */ []));
|
|
14609
|
+
toggleText = buiLabel('treeTableToggle', this.toggleLabel);
|
|
13934
14610
|
overrides = signal(new Map(), /* @ts-ignore */
|
|
13935
14611
|
...(ngDevMode ? [{ debugName: "overrides" }] : /* istanbul ignore next */ []));
|
|
13936
14612
|
defaults = computed(() => {
|
|
@@ -13989,7 +14665,7 @@ class BuiTreeTable {
|
|
|
13989
14665
|
return '';
|
|
13990
14666
|
}
|
|
13991
14667
|
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: `
|
|
14668
|
+
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
14669
|
<table class="w-full text-sm">
|
|
13994
14670
|
<thead>
|
|
13995
14671
|
<tr class="border-b">
|
|
@@ -14015,7 +14691,7 @@ class BuiTreeTable {
|
|
|
14015
14691
|
type="button"
|
|
14016
14692
|
class="text-muted-foreground hover:text-foreground"
|
|
14017
14693
|
[attr.aria-expanded]="isOpen(row.path)"
|
|
14018
|
-
aria-label="
|
|
14694
|
+
[attr.aria-label]="toggleText()"
|
|
14019
14695
|
(click)="toggle(row.path)"
|
|
14020
14696
|
>
|
|
14021
14697
|
<svg
|
|
@@ -14077,7 +14753,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
14077
14753
|
type="button"
|
|
14078
14754
|
class="text-muted-foreground hover:text-foreground"
|
|
14079
14755
|
[attr.aria-expanded]="isOpen(row.path)"
|
|
14080
|
-
aria-label="
|
|
14756
|
+
[attr.aria-label]="toggleText()"
|
|
14081
14757
|
(click)="toggle(row.path)"
|
|
14082
14758
|
>
|
|
14083
14759
|
<svg
|
|
@@ -14108,7 +14784,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
14108
14784
|
</table>
|
|
14109
14785
|
`,
|
|
14110
14786
|
}]
|
|
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 }] }] } });
|
|
14787
|
+
}], 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
14788
|
|
|
14113
14789
|
// HTML is escaped first, then a safe subset of markdown is applied, so user input can't inject markup.
|
|
14114
14790
|
function renderMarkdown(markdown) {
|
|
@@ -14124,12 +14800,16 @@ function renderMarkdown(markdown) {
|
|
|
14124
14800
|
}
|
|
14125
14801
|
/** A markdown textarea with a live, sanitized HTML preview. */
|
|
14126
14802
|
class BuiMarkdownEditor {
|
|
14803
|
+
/** Markdown source text. Two-way bindable with `[(value)]`. */
|
|
14127
14804
|
value = model('', /* @ts-ignore */
|
|
14128
14805
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
14806
|
+
/** Name attribute applied to the textarea for form submission. */
|
|
14129
14807
|
name = input('', /* @ts-ignore */
|
|
14130
14808
|
...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
|
|
14809
|
+
/** Placeholder text shown while the textarea is empty. */
|
|
14131
14810
|
placeholder = input('Write markdown…', /* @ts-ignore */
|
|
14132
14811
|
...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
14812
|
+
/** Number of visible rows in the write textarea. */
|
|
14133
14813
|
rows = input(8, /* @ts-ignore */
|
|
14134
14814
|
...(ngDevMode ? [{ debugName: "rows" }] : /* istanbul ignore next */ []));
|
|
14135
14815
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -14217,6 +14897,7 @@ function isoOf(date) {
|
|
|
14217
14897
|
* Render several months side by side with `months`. SSR-safe.
|
|
14218
14898
|
*/
|
|
14219
14899
|
class BuiCalendar {
|
|
14900
|
+
/** Selected day (mode="single") as `yyyy-mm-dd`. Two-way bindable with `[(value)]`. */
|
|
14220
14901
|
value = model('', /* @ts-ignore */
|
|
14221
14902
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
14222
14903
|
/** Selection mode: `single` | `range` | `multiple`. */
|
|
@@ -14231,10 +14912,13 @@ class BuiCalendar {
|
|
|
14231
14912
|
/** Number of month grids to render side by side. */
|
|
14232
14913
|
months = input(1, /* @ts-ignore */
|
|
14233
14914
|
...(ngDevMode ? [{ debugName: "months" }] : /* istanbul ignore next */ []));
|
|
14915
|
+
/** First day of the week (0 = Sunday). */
|
|
14234
14916
|
weekStart = input(0, /* @ts-ignore */
|
|
14235
14917
|
...(ngDevMode ? [{ debugName: "weekStart" }] : /* istanbul ignore next */ []));
|
|
14918
|
+
/** Earliest selectable date (`yyyy-mm-dd`). */
|
|
14236
14919
|
minDate = input('', /* @ts-ignore */
|
|
14237
14920
|
...(ngDevMode ? [{ debugName: "minDate" }] : /* istanbul ignore next */ []));
|
|
14921
|
+
/** Latest selectable date (`yyyy-mm-dd`). */
|
|
14238
14922
|
maxDate = input('', /* @ts-ignore */
|
|
14239
14923
|
...(ngDevMode ? [{ debugName: "maxDate" }] : /* istanbul ignore next */ []));
|
|
14240
14924
|
/** Specific ISO dates (yyyy-mm-dd) to disable. */
|
|
@@ -14252,9 +14936,26 @@ class BuiCalendar {
|
|
|
14252
14936
|
/** Hide days that fall outside the current month. */
|
|
14253
14937
|
hideOutsideDays = input(false, /* @ts-ignore */
|
|
14254
14938
|
...(ngDevMode ? [{ debugName: "hideOutsideDays" }] : /* istanbul ignore next */ []));
|
|
14939
|
+
/** Whether the whole calendar is disabled. Two-way bindable with `[(disabled)]`. */
|
|
14255
14940
|
disabled = model(false, /* @ts-ignore */
|
|
14256
14941
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
14257
14942
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
14943
|
+
/** Accessible label for the previous-month button. */
|
|
14944
|
+
previousMonthLabel = input(/* @ts-ignore */
|
|
14945
|
+
...(ngDevMode ? [undefined, { debugName: "previousMonthLabel" }] : /* istanbul ignore next */ []));
|
|
14946
|
+
/** Accessible label for the month dropdown. */
|
|
14947
|
+
monthSelectLabel = input(/* @ts-ignore */
|
|
14948
|
+
...(ngDevMode ? [undefined, { debugName: "monthSelectLabel" }] : /* istanbul ignore next */ []));
|
|
14949
|
+
/** Accessible label for the year dropdown. */
|
|
14950
|
+
yearLabel = input(/* @ts-ignore */
|
|
14951
|
+
...(ngDevMode ? [undefined, { debugName: "yearLabel" }] : /* istanbul ignore next */ []));
|
|
14952
|
+
/** Accessible label for the next-month button. */
|
|
14953
|
+
nextMonthLabel = input(/* @ts-ignore */
|
|
14954
|
+
...(ngDevMode ? [undefined, { debugName: "nextMonthLabel" }] : /* istanbul ignore next */ []));
|
|
14955
|
+
previousMonthText = buiLabel('calendarPreviousMonth', this.previousMonthLabel);
|
|
14956
|
+
monthText = buiLabel('calendarMonth', this.monthSelectLabel);
|
|
14957
|
+
yearText = buiLabel('calendarYear', this.yearLabel);
|
|
14958
|
+
nextMonthText = buiLabel('calendarNextMonth', this.nextMonthLabel);
|
|
14258
14959
|
onChange = noop$4;
|
|
14259
14960
|
onTouched = noop$4;
|
|
14260
14961
|
view = signal(new Date(new Date().getFullYear(), new Date().getMonth(), 1), /* @ts-ignore */
|
|
@@ -14421,14 +15122,14 @@ class BuiCalendar {
|
|
|
14421
15122
|
return false;
|
|
14422
15123
|
}
|
|
14423
15124
|
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: [
|
|
15125
|
+
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
15126
|
{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => BuiCalendar), multi: true },
|
|
14426
15127
|
], ngImport: i0, template: `
|
|
14427
15128
|
<div class="flex items-center justify-between pb-2">
|
|
14428
15129
|
<button
|
|
14429
15130
|
type="button"
|
|
14430
15131
|
class="inline-flex size-7 items-center justify-center rounded-md hover:bg-accent"
|
|
14431
|
-
aria-label="
|
|
15132
|
+
[attr.aria-label]="previousMonthText()"
|
|
14432
15133
|
(click)="changeMonth(-1)"
|
|
14433
15134
|
>
|
|
14434
15135
|
<svg
|
|
@@ -14447,7 +15148,7 @@ class BuiCalendar {
|
|
|
14447
15148
|
@if (months() === 1 && captionLayout() === 'dropdown') {
|
|
14448
15149
|
<div class="flex items-center gap-1">
|
|
14449
15150
|
<select
|
|
14450
|
-
aria-label="
|
|
15151
|
+
[attr.aria-label]="monthText()"
|
|
14451
15152
|
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
15153
|
[value]="viewMonth()"
|
|
14453
15154
|
(change)="setMonth($event)"
|
|
@@ -14457,7 +15158,7 @@ class BuiCalendar {
|
|
|
14457
15158
|
}
|
|
14458
15159
|
</select>
|
|
14459
15160
|
<select
|
|
14460
|
-
aria-label="
|
|
15161
|
+
[attr.aria-label]="yearText()"
|
|
14461
15162
|
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
15163
|
[value]="viewYear()"
|
|
14463
15164
|
(change)="setYear($event)"
|
|
@@ -14475,7 +15176,7 @@ class BuiCalendar {
|
|
|
14475
15176
|
<button
|
|
14476
15177
|
type="button"
|
|
14477
15178
|
class="inline-flex size-7 items-center justify-center rounded-md hover:bg-accent"
|
|
14478
|
-
aria-label="
|
|
15179
|
+
[attr.aria-label]="nextMonthText()"
|
|
14479
15180
|
(click)="changeMonth(1)"
|
|
14480
15181
|
>
|
|
14481
15182
|
<svg
|
|
@@ -14562,7 +15263,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
14562
15263
|
<button
|
|
14563
15264
|
type="button"
|
|
14564
15265
|
class="inline-flex size-7 items-center justify-center rounded-md hover:bg-accent"
|
|
14565
|
-
aria-label="
|
|
15266
|
+
[attr.aria-label]="previousMonthText()"
|
|
14566
15267
|
(click)="changeMonth(-1)"
|
|
14567
15268
|
>
|
|
14568
15269
|
<svg
|
|
@@ -14581,7 +15282,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
14581
15282
|
@if (months() === 1 && captionLayout() === 'dropdown') {
|
|
14582
15283
|
<div class="flex items-center gap-1">
|
|
14583
15284
|
<select
|
|
14584
|
-
aria-label="
|
|
15285
|
+
[attr.aria-label]="monthText()"
|
|
14585
15286
|
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
15287
|
[value]="viewMonth()"
|
|
14587
15288
|
(change)="setMonth($event)"
|
|
@@ -14591,7 +15292,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
14591
15292
|
}
|
|
14592
15293
|
</select>
|
|
14593
15294
|
<select
|
|
14594
|
-
aria-label="
|
|
15295
|
+
[attr.aria-label]="yearText()"
|
|
14595
15296
|
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
15297
|
[value]="viewYear()"
|
|
14597
15298
|
(change)="setYear($event)"
|
|
@@ -14609,7 +15310,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
14609
15310
|
<button
|
|
14610
15311
|
type="button"
|
|
14611
15312
|
class="inline-flex size-7 items-center justify-center rounded-md hover:bg-accent"
|
|
14612
|
-
aria-label="
|
|
15313
|
+
[attr.aria-label]="nextMonthText()"
|
|
14613
15314
|
(click)="changeMonth(1)"
|
|
14614
15315
|
>
|
|
14615
15316
|
<svg
|
|
@@ -14683,12 +15384,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
14683
15384
|
</div>
|
|
14684
15385
|
`,
|
|
14685
15386
|
}]
|
|
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 }] }] } });
|
|
15387
|
+
}], 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
15388
|
|
|
14688
15389
|
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
14689
15390
|
const noop$3 = () => { };
|
|
14690
15391
|
/** A date input that opens a calendar popover. */
|
|
14691
15392
|
class BuiDatePicker {
|
|
15393
|
+
/** Selected date (mode="single") as `yyyy-mm-dd`. Two-way bindable with `[(value)]`. */
|
|
14692
15394
|
value = model('', /* @ts-ignore */
|
|
14693
15395
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
14694
15396
|
/** `single` (default) or `range`. */
|
|
@@ -14700,24 +15402,34 @@ class BuiDatePicker {
|
|
|
14700
15402
|
/** Month grids shown in the popover (handy for range). */
|
|
14701
15403
|
months = input(1, /* @ts-ignore */
|
|
14702
15404
|
...(ngDevMode ? [{ debugName: "months" }] : /* istanbul ignore next */ []));
|
|
15405
|
+
/** Text shown on the trigger when no date is selected. */
|
|
14703
15406
|
placeholder = input('Pick a date', /* @ts-ignore */
|
|
14704
15407
|
...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
15408
|
+
/** Earliest selectable date (`yyyy-mm-dd`). */
|
|
14705
15409
|
minDate = input('', /* @ts-ignore */
|
|
14706
15410
|
...(ngDevMode ? [{ debugName: "minDate" }] : /* istanbul ignore next */ []));
|
|
15411
|
+
/** Latest selectable date (`yyyy-mm-dd`). */
|
|
14707
15412
|
maxDate = input('', /* @ts-ignore */
|
|
14708
15413
|
...(ngDevMode ? [{ debugName: "maxDate" }] : /* istanbul ignore next */ []));
|
|
15414
|
+
/** First day of the week (0 = Sunday). */
|
|
14709
15415
|
weekStart = input(0, /* @ts-ignore */
|
|
14710
15416
|
...(ngDevMode ? [{ debugName: "weekStart" }] : /* istanbul ignore next */ []));
|
|
15417
|
+
/** Specific ISO dates (yyyy-mm-dd) to disable. */
|
|
14711
15418
|
disabledDates = input([], /* @ts-ignore */
|
|
14712
15419
|
...(ngDevMode ? [{ debugName: "disabledDates" }] : /* istanbul ignore next */ []));
|
|
15420
|
+
/** Disable Saturdays and Sundays. */
|
|
14713
15421
|
disableWeekends = input(false, /* @ts-ignore */
|
|
14714
15422
|
...(ngDevMode ? [{ debugName: "disableWeekends" }] : /* istanbul ignore next */ []));
|
|
15423
|
+
/** Show an ISO week-number column in the calendar. */
|
|
14715
15424
|
showWeekNumbers = input(false, /* @ts-ignore */
|
|
14716
15425
|
...(ngDevMode ? [{ debugName: "showWeekNumbers" }] : /* istanbul ignore next */ []));
|
|
15426
|
+
/** `dropdown` swaps the month label for month + year selects. */
|
|
14717
15427
|
captionLayout = input('label', /* @ts-ignore */
|
|
14718
15428
|
...(ngDevMode ? [{ debugName: "captionLayout" }] : /* istanbul ignore next */ []));
|
|
15429
|
+
/** Hide days that fall outside the current month. */
|
|
14719
15430
|
hideOutsideDays = input(false, /* @ts-ignore */
|
|
14720
15431
|
...(ngDevMode ? [{ debugName: "hideOutsideDays" }] : /* istanbul ignore next */ []));
|
|
15432
|
+
/** Whether the picker is disabled. Two-way bindable with `[(disabled)]`. */
|
|
14721
15433
|
disabled = model(false, /* @ts-ignore */
|
|
14722
15434
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
14723
15435
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -14826,7 +15538,7 @@ class BuiDatePicker {
|
|
|
14826
15538
|
/>
|
|
14827
15539
|
</div>
|
|
14828
15540
|
}
|
|
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"] }] });
|
|
15541
|
+
`, 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
15542
|
}
|
|
14831
15543
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiDatePicker, decorators: [{
|
|
14832
15544
|
type: Component,
|
|
@@ -14890,14 +15602,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
14890
15602
|
|
|
14891
15603
|
/** A slide carousel. Project slides as direct children; arrows + dots navigate. SSR-safe. */
|
|
14892
15604
|
class BuiCarousel {
|
|
15605
|
+
/** Zero-based index of the first visible slide; two-way bindable. */
|
|
14893
15606
|
index = model(0, /* @ts-ignore */
|
|
14894
15607
|
...(ngDevMode ? [{ debugName: "index" }] : /* istanbul ignore next */ []));
|
|
15608
|
+
/** Scroll axis of the carousel. */
|
|
14895
15609
|
orientation = input('horizontal', /* @ts-ignore */
|
|
14896
15610
|
...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
|
|
14897
15611
|
/** Slides visible at once (e.g. 2 or 3 for a multi-item carousel). */
|
|
14898
15612
|
perView = input(1, /* @ts-ignore */
|
|
14899
15613
|
...(ngDevMode ? [{ debugName: "perView" }] : /* istanbul ignore next */ []));
|
|
14900
15614
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
15615
|
+
/** Accessible label override for the previous-slide button. */
|
|
15616
|
+
previousLabel = input(/* @ts-ignore */
|
|
15617
|
+
...(ngDevMode ? [undefined, { debugName: "previousLabel" }] : /* istanbul ignore next */ []));
|
|
15618
|
+
/** Accessible label override for the next-slide button. */
|
|
15619
|
+
nextLabel = input(/* @ts-ignore */
|
|
15620
|
+
...(ngDevMode ? [undefined, { debugName: "nextLabel" }] : /* istanbul ignore next */ []));
|
|
15621
|
+
/** Accessible label override (prefix) for the dot navigation buttons. */
|
|
15622
|
+
goToSlideLabel = input(/* @ts-ignore */
|
|
15623
|
+
...(ngDevMode ? [undefined, { debugName: "goToSlideLabel" }] : /* istanbul ignore next */ []));
|
|
15624
|
+
previousText = buiLabel('carouselPrevious', this.previousLabel);
|
|
15625
|
+
nextText = buiLabel('carouselNext', this.nextLabel);
|
|
15626
|
+
goToSlideText = buiLabel('carouselGoToSlide', this.goToSlideLabel);
|
|
14901
15627
|
track = viewChild('track', /* @ts-ignore */
|
|
14902
15628
|
...(ngDevMode ? [{ debugName: "track" }] : /* istanbul ignore next */ []));
|
|
14903
15629
|
count = signal(0, /* @ts-ignore */
|
|
@@ -14937,7 +15663,7 @@ class BuiCarousel {
|
|
|
14937
15663
|
this.index.set(Math.min(this.maxIndex(), this.index() + 1));
|
|
14938
15664
|
}
|
|
14939
15665
|
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: `
|
|
15666
|
+
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
15667
|
<div [class]="viewportClass()">
|
|
14942
15668
|
<div
|
|
14943
15669
|
#track
|
|
@@ -14952,7 +15678,7 @@ class BuiCarousel {
|
|
|
14952
15678
|
type="button"
|
|
14953
15679
|
[class]="prevClass()"
|
|
14954
15680
|
[disabled]="index() === 0"
|
|
14955
|
-
aria-label="
|
|
15681
|
+
[attr.aria-label]="previousText()"
|
|
14956
15682
|
(click)="prev()"
|
|
14957
15683
|
>
|
|
14958
15684
|
<svg
|
|
@@ -14972,7 +15698,7 @@ class BuiCarousel {
|
|
|
14972
15698
|
type="button"
|
|
14973
15699
|
[class]="nextClass()"
|
|
14974
15700
|
[disabled]="index() >= maxIndex()"
|
|
14975
|
-
aria-label="
|
|
15701
|
+
[attr.aria-label]="nextText()"
|
|
14976
15702
|
(click)="next()"
|
|
14977
15703
|
>
|
|
14978
15704
|
<svg
|
|
@@ -14995,7 +15721,7 @@ class BuiCarousel {
|
|
|
14995
15721
|
type="button"
|
|
14996
15722
|
class="size-2 rounded-full transition-colors"
|
|
14997
15723
|
[class]="dot === index() ? 'bg-primary' : 'bg-muted'"
|
|
14998
|
-
[attr.aria-label]="
|
|
15724
|
+
[attr.aria-label]="goToSlideText() + ' ' + (dot + 1)"
|
|
14999
15725
|
[attr.aria-current]="dot === index() ? 'true' : null"
|
|
15000
15726
|
(click)="index.set(dot)"
|
|
15001
15727
|
></button>
|
|
@@ -15029,7 +15755,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
15029
15755
|
type="button"
|
|
15030
15756
|
[class]="prevClass()"
|
|
15031
15757
|
[disabled]="index() === 0"
|
|
15032
|
-
aria-label="
|
|
15758
|
+
[attr.aria-label]="previousText()"
|
|
15033
15759
|
(click)="prev()"
|
|
15034
15760
|
>
|
|
15035
15761
|
<svg
|
|
@@ -15049,7 +15775,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
15049
15775
|
type="button"
|
|
15050
15776
|
[class]="nextClass()"
|
|
15051
15777
|
[disabled]="index() >= maxIndex()"
|
|
15052
|
-
aria-label="
|
|
15778
|
+
[attr.aria-label]="nextText()"
|
|
15053
15779
|
(click)="next()"
|
|
15054
15780
|
>
|
|
15055
15781
|
<svg
|
|
@@ -15072,7 +15798,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
15072
15798
|
type="button"
|
|
15073
15799
|
class="size-2 rounded-full transition-colors"
|
|
15074
15800
|
[class]="dot === index() ? 'bg-primary' : 'bg-muted'"
|
|
15075
|
-
[attr.aria-label]="
|
|
15801
|
+
[attr.aria-label]="goToSlideText() + ' ' + (dot + 1)"
|
|
15076
15802
|
[attr.aria-current]="dot === index() ? 'true' : null"
|
|
15077
15803
|
(click)="index.set(dot)"
|
|
15078
15804
|
></button>
|
|
@@ -15081,17 +15807,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
15081
15807
|
}
|
|
15082
15808
|
`,
|
|
15083
15809
|
}]
|
|
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 }] }] } });
|
|
15810
|
+
}], 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
15811
|
|
|
15086
15812
|
/** A command palette: a filterable, keyboard-navigable list of grouped actions. */
|
|
15087
15813
|
class BuiCommand {
|
|
15814
|
+
/** Grouped commands shown in the palette and filtered as the user types. */
|
|
15088
15815
|
groups = input([], /* @ts-ignore */
|
|
15089
15816
|
...(ngDevMode ? [{ debugName: "groups" }] : /* istanbul ignore next */ []));
|
|
15817
|
+
/** Placeholder text for the search input. */
|
|
15090
15818
|
placeholder = input('Type a command or search…', /* @ts-ignore */
|
|
15091
15819
|
...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
15092
15820
|
/** Render a checkmark column; activating an item toggles its checked state. */
|
|
15093
15821
|
checkable = input(false, /* @ts-ignore */
|
|
15094
15822
|
...(ngDevMode ? [{ debugName: "checkable" }] : /* istanbul ignore next */ []));
|
|
15823
|
+
/** Emits the chosen command when an item is activated (click or Enter). */
|
|
15095
15824
|
selected = output();
|
|
15096
15825
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
15097
15826
|
checkedValues = signal(new Set(), /* @ts-ignore */
|
|
@@ -15334,8 +16063,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
15334
16063
|
|
|
15335
16064
|
/** A right-click context menu. Project the target; pass menu `items`. */
|
|
15336
16065
|
class BuiContextMenu {
|
|
16066
|
+
/** Items shown in the menu, in display order. */
|
|
15337
16067
|
items = input([], /* @ts-ignore */
|
|
15338
16068
|
...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
|
|
16069
|
+
/** Emits the chosen item when a (non-separator) entry is activated. */
|
|
15339
16070
|
selected = output();
|
|
15340
16071
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
15341
16072
|
open = signal(false, /* @ts-ignore */
|
|
@@ -15592,19 +16323,37 @@ function cellText(value) {
|
|
|
15592
16323
|
}
|
|
15593
16324
|
/** A data table with search, sortable columns, row selection and pagination. */
|
|
15594
16325
|
class BuiDataTable {
|
|
16326
|
+
/** Column definitions that drive the headers, cell lookup and sort/search keys. */
|
|
15595
16327
|
columns = input([], /* @ts-ignore */
|
|
15596
16328
|
...(ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []));
|
|
16329
|
+
/** Source data rows; each is a key/value map indexed by column keys. */
|
|
15597
16330
|
rows = input([], /* @ts-ignore */
|
|
15598
16331
|
...(ngDevMode ? [{ debugName: "rows" }] : /* istanbul ignore next */ []));
|
|
16332
|
+
/** Whether to show the search box that filters rows across all columns. */
|
|
15599
16333
|
searchable = input(true, /* @ts-ignore */
|
|
15600
16334
|
...(ngDevMode ? [{ debugName: "searchable" }] : /* istanbul ignore next */ []));
|
|
16335
|
+
/** Placeholder text for the search input. */
|
|
15601
16336
|
searchPlaceholder = input('Search...', /* @ts-ignore */
|
|
15602
16337
|
...(ngDevMode ? [{ debugName: "searchPlaceholder" }] : /* istanbul ignore next */ []));
|
|
16338
|
+
/** Whether to render row checkboxes and the select-all header checkbox. */
|
|
15603
16339
|
selectable = input(true, /* @ts-ignore */
|
|
15604
16340
|
...(ngDevMode ? [{ debugName: "selectable" }] : /* istanbul ignore next */ []));
|
|
16341
|
+
/** Number of rows displayed per page. */
|
|
15605
16342
|
pageSize = input(5, /* @ts-ignore */
|
|
15606
16343
|
...(ngDevMode ? [{ debugName: "pageSize" }] : /* istanbul ignore next */ []));
|
|
15607
16344
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
16345
|
+
/** Accessible label override for the search input. */
|
|
16346
|
+
searchLabel = input(/* @ts-ignore */
|
|
16347
|
+
...(ngDevMode ? [undefined, { debugName: "searchLabel" }] : /* istanbul ignore next */ []));
|
|
16348
|
+
/** Accessible label override for the select-all checkbox. */
|
|
16349
|
+
selectAllLabel = input(/* @ts-ignore */
|
|
16350
|
+
...(ngDevMode ? [undefined, { debugName: "selectAllLabel" }] : /* istanbul ignore next */ []));
|
|
16351
|
+
/** Accessible label override for each row's select checkbox. */
|
|
16352
|
+
selectRowLabel = input(/* @ts-ignore */
|
|
16353
|
+
...(ngDevMode ? [undefined, { debugName: "selectRowLabel" }] : /* istanbul ignore next */ []));
|
|
16354
|
+
searchText = buiLabel('dataTableSearch', this.searchLabel);
|
|
16355
|
+
selectAllText = buiLabel('dataTableSelectAll', this.selectAllLabel);
|
|
16356
|
+
selectRowText = buiLabel('dataTableSelectRow', this.selectRowLabel);
|
|
15608
16357
|
query = signal('', /* @ts-ignore */
|
|
15609
16358
|
...(ngDevMode ? [{ debugName: "query" }] : /* istanbul ignore next */ []));
|
|
15610
16359
|
sortKey = signal('', /* @ts-ignore */
|
|
@@ -15690,14 +16439,14 @@ class BuiDataTable {
|
|
|
15690
16439
|
this.selectedRows.set(isChecked ? new Set(this.filtered()) : new Set());
|
|
15691
16440
|
}
|
|
15692
16441
|
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: `
|
|
16442
|
+
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
16443
|
@if (searchable()) {
|
|
15695
16444
|
<input
|
|
15696
16445
|
type="search"
|
|
15697
16446
|
[value]="query()"
|
|
15698
16447
|
[placeholder]="searchPlaceholder()"
|
|
15699
16448
|
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="
|
|
16449
|
+
[attr.aria-label]="searchText()"
|
|
15701
16450
|
(input)="onSearch($event)"
|
|
15702
16451
|
/>
|
|
15703
16452
|
}
|
|
@@ -15711,7 +16460,7 @@ class BuiDataTable {
|
|
|
15711
16460
|
type="checkbox"
|
|
15712
16461
|
[checked]="allSelected()"
|
|
15713
16462
|
[indeterminate]="someSelected()"
|
|
15714
|
-
aria-label="
|
|
16463
|
+
[attr.aria-label]="selectAllText()"
|
|
15715
16464
|
(change)="toggleAll($event)"
|
|
15716
16465
|
/>
|
|
15717
16466
|
</th>
|
|
@@ -15744,7 +16493,7 @@ class BuiDataTable {
|
|
|
15744
16493
|
<input
|
|
15745
16494
|
type="checkbox"
|
|
15746
16495
|
[checked]="isSelected(row)"
|
|
15747
|
-
aria-label="
|
|
16496
|
+
[attr.aria-label]="selectRowText()"
|
|
15748
16497
|
(change)="toggleRow(row)"
|
|
15749
16498
|
/>
|
|
15750
16499
|
</td>
|
|
@@ -15803,7 +16552,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
15803
16552
|
[value]="query()"
|
|
15804
16553
|
[placeholder]="searchPlaceholder()"
|
|
15805
16554
|
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="
|
|
16555
|
+
[attr.aria-label]="searchText()"
|
|
15807
16556
|
(input)="onSearch($event)"
|
|
15808
16557
|
/>
|
|
15809
16558
|
}
|
|
@@ -15817,7 +16566,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
15817
16566
|
type="checkbox"
|
|
15818
16567
|
[checked]="allSelected()"
|
|
15819
16568
|
[indeterminate]="someSelected()"
|
|
15820
|
-
aria-label="
|
|
16569
|
+
[attr.aria-label]="selectAllText()"
|
|
15821
16570
|
(change)="toggleAll($event)"
|
|
15822
16571
|
/>
|
|
15823
16572
|
</th>
|
|
@@ -15850,7 +16599,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
15850
16599
|
<input
|
|
15851
16600
|
type="checkbox"
|
|
15852
16601
|
[checked]="isSelected(row)"
|
|
15853
|
-
aria-label="
|
|
16602
|
+
[attr.aria-label]="selectRowText()"
|
|
15854
16603
|
(change)="toggleRow(row)"
|
|
15855
16604
|
/>
|
|
15856
16605
|
</td>
|
|
@@ -15897,21 +16646,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
15897
16646
|
</div>
|
|
15898
16647
|
`,
|
|
15899
16648
|
}]
|
|
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 }] }] } });
|
|
16649
|
+
}], 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
16650
|
|
|
15902
16651
|
const PALETTE = ['#6366f1', '#22c55e', '#f59e0b', '#ec4899', '#06b6d4'];
|
|
15903
16652
|
const WIDTH = 600;
|
|
15904
16653
|
const PAD = 8;
|
|
15905
16654
|
/** A lightweight SVG chart (line / area / bar). Pure + SSR-safe. */
|
|
15906
16655
|
class BuiChart {
|
|
16656
|
+
/** Chart render style: line, bar, or filled area. */
|
|
15907
16657
|
type = input('line', /* @ts-ignore */
|
|
15908
16658
|
...(ngDevMode ? [{ debugName: "type" }] : /* istanbul ignore next */ []));
|
|
16659
|
+
/** Series to plot; bar charts use only the first series. */
|
|
15909
16660
|
series = input([], /* @ts-ignore */
|
|
15910
16661
|
...(ngDevMode ? [{ debugName: "series" }] : /* istanbul ignore next */ []));
|
|
16662
|
+
/** X-axis tick labels rendered below the chart. */
|
|
15911
16663
|
labels = input([], /* @ts-ignore */
|
|
15912
16664
|
...(ngDevMode ? [{ debugName: "labels" }] : /* istanbul ignore next */ []));
|
|
16665
|
+
/** Chart height in pixels (SVG viewBox height). */
|
|
15913
16666
|
height = input(220, /* @ts-ignore */
|
|
15914
16667
|
...(ngDevMode ? [{ debugName: "height" }] : /* istanbul ignore next */ []));
|
|
16668
|
+
/** Accessible label for the chart's `aria-label`. */
|
|
15915
16669
|
label = input('Chart', /* @ts-ignore */
|
|
15916
16670
|
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
15917
16671
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -16068,6 +16822,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
16068
16822
|
const noop$2 = () => { };
|
|
16069
16823
|
/** A combined date + time picker in a popover. Value is `YYYY-MM-DDTHH:mm`. */
|
|
16070
16824
|
class BuiDatetimePicker {
|
|
16825
|
+
/** Selected date-time (mode="single") as `YYYY-MM-DDTHH:mm`. Two-way bindable with `[(value)]`. */
|
|
16071
16826
|
value = model('', /* @ts-ignore */
|
|
16072
16827
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
16073
16828
|
/** `single` (default) or `range`. */
|
|
@@ -16079,16 +16834,22 @@ class BuiDatetimePicker {
|
|
|
16079
16834
|
/** Month grids shown in the popover (handy for range). */
|
|
16080
16835
|
months = input(1, /* @ts-ignore */
|
|
16081
16836
|
...(ngDevMode ? [{ debugName: "months" }] : /* istanbul ignore next */ []));
|
|
16837
|
+
/** Text shown on the trigger when nothing is selected. */
|
|
16082
16838
|
placeholder = input('Pick date & time', /* @ts-ignore */
|
|
16083
16839
|
...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
16840
|
+
/** Earliest selectable date (`yyyy-mm-dd`). */
|
|
16084
16841
|
minDate = input('', /* @ts-ignore */
|
|
16085
16842
|
...(ngDevMode ? [{ debugName: "minDate" }] : /* istanbul ignore next */ []));
|
|
16843
|
+
/** Latest selectable date (`yyyy-mm-dd`). */
|
|
16086
16844
|
maxDate = input('', /* @ts-ignore */
|
|
16087
16845
|
...(ngDevMode ? [{ debugName: "maxDate" }] : /* istanbul ignore next */ []));
|
|
16846
|
+
/** `dropdown` swaps the month label for month + year selects. */
|
|
16088
16847
|
captionLayout = input('label', /* @ts-ignore */
|
|
16089
16848
|
...(ngDevMode ? [{ debugName: "captionLayout" }] : /* istanbul ignore next */ []));
|
|
16849
|
+
/** Whether to include seconds in the time field. */
|
|
16090
16850
|
seconds = input(false, /* @ts-ignore */
|
|
16091
16851
|
...(ngDevMode ? [{ debugName: "seconds" }] : /* istanbul ignore next */ []));
|
|
16852
|
+
/** Whether the picker is disabled. Two-way bindable with `[(disabled)]`. */
|
|
16092
16853
|
disabled = model(false, /* @ts-ignore */
|
|
16093
16854
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
16094
16855
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -16237,7 +16998,7 @@ class BuiDatetimePicker {
|
|
|
16237
16998
|
</div>
|
|
16238
16999
|
</div>
|
|
16239
17000
|
}
|
|
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"] }] });
|
|
17001
|
+
`, 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
17002
|
}
|
|
16242
17003
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiDatetimePicker, decorators: [{
|
|
16243
17004
|
type: Component,
|
|
@@ -16319,23 +17080,31 @@ const AC_SIZE = {
|
|
|
16319
17080
|
};
|
|
16320
17081
|
/** A free-text input with a filtered suggestion list. */
|
|
16321
17082
|
class BuiAutocomplete {
|
|
17083
|
+
/** Current text in the input. Two-way bindable with `[(value)]`. */
|
|
16322
17084
|
value = model('', /* @ts-ignore */
|
|
16323
17085
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
16324
17086
|
/** Pick several values, shown as removable chips; binds `values`. */
|
|
16325
17087
|
multiple = input(false, /* @ts-ignore */
|
|
16326
17088
|
...(ngDevMode ? [{ debugName: "multiple" }] : /* istanbul ignore next */ []));
|
|
17089
|
+
/** Selected values shown as chips (multiple mode). Two-way bindable with `[(values)]`. */
|
|
16327
17090
|
values = model([], /* @ts-ignore */
|
|
16328
17091
|
...(ngDevMode ? [{ debugName: "values" }] : /* istanbul ignore next */ []));
|
|
17092
|
+
/** Suggestions to filter against the typed text. */
|
|
16329
17093
|
options = input([], /* @ts-ignore */
|
|
16330
17094
|
...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
|
|
17095
|
+
/** Placeholder text for the input. */
|
|
16331
17096
|
placeholder = input('Search...', /* @ts-ignore */
|
|
16332
17097
|
...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
17098
|
+
/** Message shown when no suggestion matches. */
|
|
16333
17099
|
empty = input('No results found.', /* @ts-ignore */
|
|
16334
17100
|
...(ngDevMode ? [{ debugName: "empty" }] : /* istanbul ignore next */ []));
|
|
17101
|
+
/** Whether the input is disabled. Two-way bindable with `[(disabled)]`. */
|
|
16335
17102
|
disabled = model(false, /* @ts-ignore */
|
|
16336
17103
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
17104
|
+
/** Native `name` attribute for the input. */
|
|
16337
17105
|
name = input('', /* @ts-ignore */
|
|
16338
17106
|
...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
|
|
17107
|
+
/** Height and font size of the input. */
|
|
16339
17108
|
size = input('default', /* @ts-ignore */
|
|
16340
17109
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
16341
17110
|
/** Optional leading icon, given as an SVG path `d` string. */
|
|
@@ -16671,21 +17440,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
16671
17440
|
|
|
16672
17441
|
/** A before/after image comparison with a draggable, keyboard-operable divider. */
|
|
16673
17442
|
class BuiComparisonSlider {
|
|
17443
|
+
/** Source URL of the "before" image (revealed on the left of the divider). */
|
|
16674
17444
|
before = input('', /* @ts-ignore */
|
|
16675
17445
|
...(ngDevMode ? [{ debugName: "before" }] : /* istanbul ignore next */ []));
|
|
17446
|
+
/** Source URL of the "after" image (shown on the right of the divider). */
|
|
16676
17447
|
after = input('', /* @ts-ignore */
|
|
16677
17448
|
...(ngDevMode ? [{ debugName: "after" }] : /* istanbul ignore next */ []));
|
|
17449
|
+
/** Caption badge shown over the "before" image; hidden when empty. */
|
|
16678
17450
|
beforeLabel = input('', /* @ts-ignore */
|
|
16679
17451
|
...(ngDevMode ? [{ debugName: "beforeLabel" }] : /* istanbul ignore next */ []));
|
|
17452
|
+
/** Caption badge shown over the "after" image; hidden when empty. */
|
|
16680
17453
|
afterLabel = input('', /* @ts-ignore */
|
|
16681
17454
|
...(ngDevMode ? [{ debugName: "afterLabel" }] : /* istanbul ignore next */ []));
|
|
17455
|
+
/** Alt text for the "before" image. */
|
|
16682
17456
|
beforeAlt = input('Before', /* @ts-ignore */
|
|
16683
17457
|
...(ngDevMode ? [{ debugName: "beforeAlt" }] : /* istanbul ignore next */ []));
|
|
17458
|
+
/** Alt text for the "after" image. */
|
|
16684
17459
|
afterAlt = input('After', /* @ts-ignore */
|
|
16685
17460
|
...(ngDevMode ? [{ debugName: "afterAlt" }] : /* istanbul ignore next */ []));
|
|
17461
|
+
/** Divider position as a percentage (0-100); two-way bindable. */
|
|
16686
17462
|
value = model(50, /* @ts-ignore */
|
|
16687
17463
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
16688
17464
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
17465
|
+
/** Accessible label override for the range slider. */
|
|
17466
|
+
positionLabel = input(/* @ts-ignore */
|
|
17467
|
+
...(ngDevMode ? [undefined, { debugName: "positionLabel" }] : /* istanbul ignore next */ []));
|
|
17468
|
+
positionText = buiLabel('comparisonSliderPosition', this.positionLabel);
|
|
16689
17469
|
clip = computed(() => `inset(0 ${100 - this.value()}% 0 0)`, /* @ts-ignore */
|
|
16690
17470
|
...(ngDevMode ? [{ debugName: "clip" }] : /* istanbul ignore next */ []));
|
|
16691
17471
|
computedClass = computed(() => cn('block', this.userClass()), /* @ts-ignore */
|
|
@@ -16694,7 +17474,7 @@ class BuiComparisonSlider {
|
|
|
16694
17474
|
this.value.set(Number(event.target.value));
|
|
16695
17475
|
}
|
|
16696
17476
|
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: `
|
|
17477
|
+
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
17478
|
<div class="relative overflow-hidden rounded-lg select-none">
|
|
16699
17479
|
<img [src]="after()" [alt]="afterAlt()" class="block w-full" draggable="false" />
|
|
16700
17480
|
<div class="absolute inset-0 overflow-hidden" [style.clip-path]="clip()">
|
|
@@ -16724,7 +17504,7 @@ class BuiComparisonSlider {
|
|
|
16724
17504
|
min="0"
|
|
16725
17505
|
max="100"
|
|
16726
17506
|
[value]="value()"
|
|
16727
|
-
aria-label="
|
|
17507
|
+
[attr.aria-label]="positionText()"
|
|
16728
17508
|
class="absolute inset-0 size-full cursor-ew-resize opacity-0"
|
|
16729
17509
|
(input)="onInput($event)"
|
|
16730
17510
|
/>
|
|
@@ -16766,14 +17546,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
16766
17546
|
min="0"
|
|
16767
17547
|
max="100"
|
|
16768
17548
|
[value]="value()"
|
|
16769
|
-
aria-label="
|
|
17549
|
+
[attr.aria-label]="positionText()"
|
|
16770
17550
|
class="absolute inset-0 size-full cursor-ew-resize opacity-0"
|
|
16771
17551
|
(input)="onInput($event)"
|
|
16772
17552
|
/>
|
|
16773
17553
|
</div>
|
|
16774
17554
|
`,
|
|
16775
17555
|
}]
|
|
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 }] }] } });
|
|
17556
|
+
}], 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
17557
|
|
|
16778
17558
|
function formatSize(bytes) {
|
|
16779
17559
|
if (bytes < 1024) {
|
|
@@ -16786,18 +17566,32 @@ function formatSize(bytes) {
|
|
|
16786
17566
|
}
|
|
16787
17567
|
/** A drag-and-drop file upload zone with a selected-files list. */
|
|
16788
17568
|
class BuiFileUpload {
|
|
17569
|
+
/** Whether multiple files can be selected and accumulated. */
|
|
16789
17570
|
multiple = input(false, /* @ts-ignore */
|
|
16790
17571
|
...(ngDevMode ? [{ debugName: "multiple" }] : /* istanbul ignore next */ []));
|
|
17572
|
+
/** Comma-separated list of accepted file types (the `accept` attribute). */
|
|
16791
17573
|
accept = input('', /* @ts-ignore */
|
|
16792
17574
|
...(ngDevMode ? [{ debugName: "accept" }] : /* istanbul ignore next */ []));
|
|
17575
|
+
/** Native `name` attribute for the file input. */
|
|
16793
17576
|
name = input('', /* @ts-ignore */
|
|
16794
17577
|
...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
|
|
17578
|
+
/** Optional helper text shown under the dropzone label. */
|
|
16795
17579
|
hint = input('', /* @ts-ignore */
|
|
16796
17580
|
...(ngDevMode ? [{ debugName: "hint" }] : /* istanbul ignore next */ []));
|
|
17581
|
+
/** Whether the upload zone is disabled. */
|
|
16797
17582
|
disabled = input(false, /* @ts-ignore */
|
|
16798
17583
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
17584
|
+
/** Emitted with the current file list whenever the selection changes. */
|
|
16799
17585
|
filesChange = output();
|
|
16800
17586
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
17587
|
+
/** Custom dropzone prompt text. */
|
|
17588
|
+
dropzoneLabel = input(/* @ts-ignore */
|
|
17589
|
+
...(ngDevMode ? [undefined, { debugName: "dropzoneLabel" }] : /* istanbul ignore next */ []));
|
|
17590
|
+
/** Custom accessible label for each remove button. */
|
|
17591
|
+
removeLabel = input(/* @ts-ignore */
|
|
17592
|
+
...(ngDevMode ? [undefined, { debugName: "removeLabel" }] : /* istanbul ignore next */ []));
|
|
17593
|
+
dropzoneText = buiLabel('fileUploadDropzone', this.dropzoneLabel);
|
|
17594
|
+
removeText = buiLabel('fileUploadRemove', this.removeLabel);
|
|
16801
17595
|
dragging = signal(false, /* @ts-ignore */
|
|
16802
17596
|
...(ngDevMode ? [{ debugName: "dragging" }] : /* istanbul ignore next */ []));
|
|
16803
17597
|
files = signal([], /* @ts-ignore */
|
|
@@ -16825,7 +17619,7 @@ class BuiFileUpload {
|
|
|
16825
17619
|
this.filesChange.emit(next);
|
|
16826
17620
|
}
|
|
16827
17621
|
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: `
|
|
17622
|
+
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
17623
|
<label [class]="zoneClass()">
|
|
16830
17624
|
<input
|
|
16831
17625
|
type="file"
|
|
@@ -16848,7 +17642,7 @@ class BuiFileUpload {
|
|
|
16848
17642
|
>
|
|
16849
17643
|
<path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4M17 8l-5-5-5 5M12 3v12" />
|
|
16850
17644
|
</svg>
|
|
16851
|
-
<span class="text-sm font-medium">
|
|
17645
|
+
<span class="text-sm font-medium">{{ dropzoneText() }}</span>
|
|
16852
17646
|
@if (hint()) {
|
|
16853
17647
|
<span class="text-xs text-muted-foreground">{{ hint() }}</span>
|
|
16854
17648
|
}
|
|
@@ -16877,7 +17671,7 @@ class BuiFileUpload {
|
|
|
16877
17671
|
<button
|
|
16878
17672
|
type="button"
|
|
16879
17673
|
class="rounded-sm p-1 hover:bg-accent"
|
|
16880
|
-
aria-label="
|
|
17674
|
+
[attr.aria-label]="removeText()"
|
|
16881
17675
|
(click)="remove(file)"
|
|
16882
17676
|
>
|
|
16883
17677
|
<svg
|
|
@@ -16927,7 +17721,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
16927
17721
|
>
|
|
16928
17722
|
<path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4M17 8l-5-5-5 5M12 3v12" />
|
|
16929
17723
|
</svg>
|
|
16930
|
-
<span class="text-sm font-medium">
|
|
17724
|
+
<span class="text-sm font-medium">{{ dropzoneText() }}</span>
|
|
16931
17725
|
@if (hint()) {
|
|
16932
17726
|
<span class="text-xs text-muted-foreground">{{ hint() }}</span>
|
|
16933
17727
|
}
|
|
@@ -16956,7 +17750,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
16956
17750
|
<button
|
|
16957
17751
|
type="button"
|
|
16958
17752
|
class="rounded-sm p-1 hover:bg-accent"
|
|
16959
|
-
aria-label="
|
|
17753
|
+
[attr.aria-label]="removeText()"
|
|
16960
17754
|
(click)="remove(file)"
|
|
16961
17755
|
>
|
|
16962
17756
|
<svg
|
|
@@ -16978,20 +17772,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
16978
17772
|
}
|
|
16979
17773
|
`,
|
|
16980
17774
|
}]
|
|
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 }] }] } });
|
|
17775
|
+
}], 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
17776
|
|
|
16983
17777
|
/**
|
|
16984
17778
|
* An NProgress-style top loading bar. Drive it with `start()` / `set(0..1)` / `done()`,
|
|
16985
17779
|
* or with `top-progress:start` / `top-progress:set` / `top-progress:done` window events.
|
|
16986
17780
|
*/
|
|
16987
17781
|
class BuiTopProgress {
|
|
17782
|
+
/** CSS color (or gradient) used to fill the bar. */
|
|
16988
17783
|
color = input('var(--color-primary, #6366f1)', /* @ts-ignore */
|
|
16989
17784
|
...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
|
|
17785
|
+
/** Bar thickness in pixels. */
|
|
16990
17786
|
height = input(2, /* @ts-ignore */
|
|
16991
17787
|
...(ngDevMode ? [{ debugName: "height" }] : /* istanbul ignore next */ []));
|
|
17788
|
+
/** When true, renders inline within its container instead of fixed at the top of the viewport. */
|
|
16992
17789
|
demo = input(false, /* @ts-ignore */
|
|
16993
17790
|
...(ngDevMode ? [{ debugName: "demo" }] : /* istanbul ignore next */ []));
|
|
16994
17791
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
17792
|
+
/** Overrides the localized accessible progressbar label. */
|
|
17793
|
+
ariaLabel = input(/* @ts-ignore */
|
|
17794
|
+
...(ngDevMode ? [undefined, { debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
17795
|
+
ariaLabelText = buiLabel('topProgressLoading', this.ariaLabel);
|
|
16995
17796
|
progress = signal(0, /* @ts-ignore */
|
|
16996
17797
|
...(ngDevMode ? [{ debugName: "progress" }] : /* istanbul ignore next */ []));
|
|
16997
17798
|
visible = signal(false, /* @ts-ignore */
|
|
@@ -17059,7 +17860,7 @@ class BuiTopProgress {
|
|
|
17059
17860
|
this.timer = undefined;
|
|
17060
17861
|
}
|
|
17061
17862
|
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"
|
|
17863
|
+
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
17864
|
<div
|
|
17064
17865
|
class="h-full transition-all duration-200 ease-out"
|
|
17065
17866
|
[style.width.%]="visible() ? progress() * 100 : 0"
|
|
@@ -17077,7 +17878,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
17077
17878
|
'[class]': 'computedClass()',
|
|
17078
17879
|
'[style.height.px]': 'height()',
|
|
17079
17880
|
role: 'progressbar',
|
|
17080
|
-
'aria-label': '
|
|
17881
|
+
'[attr.aria-label]': 'ariaLabelText()',
|
|
17081
17882
|
'[attr.aria-valuenow]': 'visible() ? round(progress() * 100) : null',
|
|
17082
17883
|
},
|
|
17083
17884
|
template: `
|
|
@@ -17089,7 +17890,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
17089
17890
|
></div>
|
|
17090
17891
|
`,
|
|
17091
17892
|
}]
|
|
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 }] }] } });
|
|
17893
|
+
}], 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
17894
|
|
|
17094
17895
|
const POSITION$1 = {
|
|
17095
17896
|
bottom: 'inset-x-0 bottom-0 max-h-[85vh] rounded-t-xl border-t',
|
|
@@ -17099,10 +17900,13 @@ const POSITION$1 = {
|
|
|
17099
17900
|
};
|
|
17100
17901
|
/** A slide-in panel anchored to a screen edge. Toggle with the `open` model. */
|
|
17101
17902
|
class BuiDrawer {
|
|
17903
|
+
/** Whether the drawer is open. Two-way bindable with `[(open)]`. */
|
|
17102
17904
|
open = model(false, /* @ts-ignore */
|
|
17103
17905
|
...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
|
|
17906
|
+
/** Screen edge the drawer is anchored to and slides in from. */
|
|
17104
17907
|
direction = input('bottom', /* @ts-ignore */
|
|
17105
17908
|
...(ngDevMode ? [{ debugName: "direction" }] : /* istanbul ignore next */ []));
|
|
17909
|
+
/** Accessible label applied to the drawer dialog. */
|
|
17106
17910
|
ariaLabel = input('Drawer', /* @ts-ignore */
|
|
17107
17911
|
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
17108
17912
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -17187,16 +17991,22 @@ function applyMask$1(value, mask) {
|
|
|
17187
17991
|
}
|
|
17188
17992
|
/** A text input that formats its value against a mask (9 = digit, a = letter, * = alnum). */
|
|
17189
17993
|
class BuiInputMask {
|
|
17994
|
+
/** Mask pattern where `9` accepts a digit, `a` a letter, `*` an alphanumeric, and other chars are literals. */
|
|
17190
17995
|
mask = input('', /* @ts-ignore */
|
|
17191
17996
|
...(ngDevMode ? [{ debugName: "mask" }] : /* istanbul ignore next */ []));
|
|
17997
|
+
/** Current masked value. Two-way bindable with `[(value)]`. */
|
|
17192
17998
|
value = model('', /* @ts-ignore */
|
|
17193
17999
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
18000
|
+
/** Placeholder text shown when the input is empty. */
|
|
17194
18001
|
placeholder = input('', /* @ts-ignore */
|
|
17195
18002
|
...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
18003
|
+
/** Value for the native `inputmode` attribute hinting the virtual keyboard. */
|
|
17196
18004
|
inputmode = input('', /* @ts-ignore */
|
|
17197
18005
|
...(ngDevMode ? [{ debugName: "inputmode" }] : /* istanbul ignore next */ []));
|
|
18006
|
+
/** Name attribute applied to the underlying input for form submission. */
|
|
17198
18007
|
name = input('', /* @ts-ignore */
|
|
17199
18008
|
...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
|
|
18009
|
+
/** Whether the input is disabled. Two-way bindable with `[(disabled)]`. */
|
|
17200
18010
|
disabled = model(false, /* @ts-ignore */
|
|
17201
18011
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
17202
18012
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -17270,10 +18080,13 @@ const SIDE = {
|
|
|
17270
18080
|
};
|
|
17271
18081
|
/** A sheet overlay sliding in from a screen edge. Toggle with the `open` model. */
|
|
17272
18082
|
class BuiSheet {
|
|
18083
|
+
/** Whether the sheet is open. Two-way bindable with `[(open)]`. */
|
|
17273
18084
|
open = model(false, /* @ts-ignore */
|
|
17274
18085
|
...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
|
|
18086
|
+
/** Screen edge the sheet slides in from. */
|
|
17275
18087
|
side = input('right', /* @ts-ignore */
|
|
17276
18088
|
...(ngDevMode ? [{ debugName: "side" }] : /* istanbul ignore next */ []));
|
|
18089
|
+
/** Accessible label applied to the sheet dialog. */
|
|
17277
18090
|
ariaLabel = input('Sheet', /* @ts-ignore */
|
|
17278
18091
|
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
17279
18092
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -17360,8 +18173,17 @@ const TONE = {
|
|
|
17360
18173
|
};
|
|
17361
18174
|
/** The toast viewport. Drives off the {@link BuiToaster} store. */
|
|
17362
18175
|
class BuiSonner {
|
|
18176
|
+
/** Viewport corner where toasts stack (e.g. `top-left`, `bottom-right`). */
|
|
17363
18177
|
position = input('bottom-right', /* @ts-ignore */
|
|
17364
18178
|
...(ngDevMode ? [{ debugName: "position" }] : /* istanbul ignore next */ []));
|
|
18179
|
+
/** Overrides the localized accessible label for the toast region. */
|
|
18180
|
+
ariaLabel = input(/* @ts-ignore */
|
|
18181
|
+
...(ngDevMode ? [undefined, { debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
18182
|
+
/** Overrides the localized accessible label for each dismiss button. */
|
|
18183
|
+
dismissLabel = input(/* @ts-ignore */
|
|
18184
|
+
...(ngDevMode ? [undefined, { debugName: "dismissLabel" }] : /* istanbul ignore next */ []));
|
|
18185
|
+
ariaLabelText = buiLabel('sonner', this.ariaLabel);
|
|
18186
|
+
dismissText = buiLabel('sonnerDismiss', this.dismissLabel);
|
|
17365
18187
|
toaster = inject(BuiToaster);
|
|
17366
18188
|
regionClass = computed(() => cn('pointer-events-none fixed z-[100] flex flex-col gap-2', POSITION[this.position()]), /* @ts-ignore */
|
|
17367
18189
|
...(ngDevMode ? [{ debugName: "regionClass" }] : /* istanbul ignore next */ []));
|
|
@@ -17373,8 +18195,8 @@ class BuiSonner {
|
|
|
17373
18195
|
this.toaster.dismiss(toast.id);
|
|
17374
18196
|
}
|
|
17375
18197
|
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="
|
|
18198
|
+
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: `
|
|
18199
|
+
<div role="region" [attr.aria-label]="ariaLabelText()" [class]="regionClass()">
|
|
17378
18200
|
@for (toast of toaster.toasts(); track toast.id) {
|
|
17379
18201
|
<div
|
|
17380
18202
|
role="status"
|
|
@@ -17400,7 +18222,7 @@ class BuiSonner {
|
|
|
17400
18222
|
<button
|
|
17401
18223
|
type="button"
|
|
17402
18224
|
class="shrink-0 opacity-70 hover:opacity-100"
|
|
17403
|
-
aria-label="
|
|
18225
|
+
[attr.aria-label]="dismissText()"
|
|
17404
18226
|
(click)="toaster.dismiss(toast.id)"
|
|
17405
18227
|
>
|
|
17406
18228
|
<svg
|
|
@@ -17426,7 +18248,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
17426
18248
|
selector: 'bui-sonner',
|
|
17427
18249
|
host: { 'data-slot': 'sonner' },
|
|
17428
18250
|
template: `
|
|
17429
|
-
<div role="region" aria-label="
|
|
18251
|
+
<div role="region" [attr.aria-label]="ariaLabelText()" [class]="regionClass()">
|
|
17430
18252
|
@for (toast of toaster.toasts(); track toast.id) {
|
|
17431
18253
|
<div
|
|
17432
18254
|
role="status"
|
|
@@ -17452,7 +18274,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
17452
18274
|
<button
|
|
17453
18275
|
type="button"
|
|
17454
18276
|
class="shrink-0 opacity-70 hover:opacity-100"
|
|
17455
|
-
aria-label="
|
|
18277
|
+
[attr.aria-label]="dismissText()"
|
|
17456
18278
|
(click)="toaster.dismiss(toast.id)"
|
|
17457
18279
|
>
|
|
17458
18280
|
<svg
|
|
@@ -17472,10 +18294,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
17472
18294
|
</div>
|
|
17473
18295
|
`,
|
|
17474
18296
|
}]
|
|
17475
|
-
}], propDecorators: { position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }] } });
|
|
18297
|
+
}], 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
18298
|
|
|
17477
18299
|
/** A horizontal navigation menu with hover/click dropdown panels. */
|
|
17478
18300
|
class BuiNavigationMenu {
|
|
18301
|
+
/** Top-level menu entries, each optionally opening a dropdown panel. */
|
|
17479
18302
|
items = input([], /* @ts-ignore */
|
|
17480
18303
|
...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
|
|
17481
18304
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -17650,16 +18473,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
17650
18473
|
|
|
17651
18474
|
/** A textarea that suggests mentions when you type the trigger character. */
|
|
17652
18475
|
class BuiMentionInput {
|
|
18476
|
+
/** Textarea contents. Two-way bindable with `[(value)]`. */
|
|
17653
18477
|
value = model('', /* @ts-ignore */
|
|
17654
18478
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
18479
|
+
/** Mentions offered when the trigger character is typed. */
|
|
17655
18480
|
mentions = input([], /* @ts-ignore */
|
|
17656
18481
|
...(ngDevMode ? [{ debugName: "mentions" }] : /* istanbul ignore next */ []));
|
|
18482
|
+
/** Character that opens the mention suggestion list. */
|
|
17657
18483
|
trigger = input('@', /* @ts-ignore */
|
|
17658
18484
|
...(ngDevMode ? [{ debugName: "trigger" }] : /* istanbul ignore next */ []));
|
|
18485
|
+
/** Placeholder text for the textarea. */
|
|
17659
18486
|
placeholder = input('Type @ to mention…', /* @ts-ignore */
|
|
17660
18487
|
...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
18488
|
+
/** Number of visible textarea rows. */
|
|
17661
18489
|
rows = input(3, /* @ts-ignore */
|
|
17662
18490
|
...(ngDevMode ? [{ debugName: "rows" }] : /* istanbul ignore next */ []));
|
|
18491
|
+
/** Native `name` attribute for the textarea. */
|
|
17663
18492
|
name = input('', /* @ts-ignore */
|
|
17664
18493
|
...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
|
|
17665
18494
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -17796,18 +18625,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
17796
18625
|
|
|
17797
18626
|
/** A keyless OpenStreetMap embed centred on a coordinate. SSR-safe. */
|
|
17798
18627
|
class BuiMap {
|
|
18628
|
+
/** Latitude of the map centre, in degrees. */
|
|
17799
18629
|
lat = input(50.8503, /* @ts-ignore */
|
|
17800
18630
|
...(ngDevMode ? [{ debugName: "lat" }] : /* istanbul ignore next */ []));
|
|
18631
|
+
/** Longitude of the map centre, in degrees. */
|
|
17801
18632
|
lon = input(4.3517, /* @ts-ignore */
|
|
17802
18633
|
...(ngDevMode ? [{ debugName: "lon" }] : /* istanbul ignore next */ []));
|
|
18634
|
+
/** Zoom level; higher values zoom in closer. */
|
|
17803
18635
|
zoom = input(14, /* @ts-ignore */
|
|
17804
18636
|
...(ngDevMode ? [{ debugName: "zoom" }] : /* istanbul ignore next */ []));
|
|
18637
|
+
/** Accessible title for the map iframe. */
|
|
17805
18638
|
label = input('Location', /* @ts-ignore */
|
|
17806
18639
|
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
18640
|
+
/** Whether to drop a pin at the centre coordinate. */
|
|
17807
18641
|
marker = input(true, /* @ts-ignore */
|
|
17808
18642
|
...(ngDevMode ? [{ debugName: "marker" }] : /* istanbul ignore next */ []));
|
|
18643
|
+
/** Map height in pixels; ignored when `ratio` is set. */
|
|
17809
18644
|
height = input(320, /* @ts-ignore */
|
|
17810
18645
|
...(ngDevMode ? [{ debugName: "height" }] : /* istanbul ignore next */ []));
|
|
18646
|
+
/** CSS aspect ratio (e.g. `16/9`); overrides `height` when set. */
|
|
17811
18647
|
ratio = input('', /* @ts-ignore */
|
|
17812
18648
|
...(ngDevMode ? [{ debugName: "ratio" }] : /* istanbul ignore next */ []));
|
|
17813
18649
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -17917,12 +18753,16 @@ function label(iso) {
|
|
|
17917
18753
|
}
|
|
17918
18754
|
/** A horizontal Gantt chart positioning task bars over a date range. SSR-safe. */
|
|
17919
18755
|
class BuiGantt {
|
|
18756
|
+
/** Tasks to plot as horizontal bars across the date range. */
|
|
17920
18757
|
tasks = input([], /* @ts-ignore */
|
|
17921
18758
|
...(ngDevMode ? [{ debugName: "tasks" }] : /* istanbul ignore next */ []));
|
|
18759
|
+
/** Milestones to plot as diamond markers below the task bars. */
|
|
17922
18760
|
milestones = input([], /* @ts-ignore */
|
|
17923
18761
|
...(ngDevMode ? [{ debugName: "milestones" }] : /* istanbul ignore next */ []));
|
|
18762
|
+
/** ISO start date overriding the computed range minimum; empty derives it from tasks. */
|
|
17924
18763
|
start = input('', /* @ts-ignore */
|
|
17925
18764
|
...(ngDevMode ? [{ debugName: "start" }] : /* istanbul ignore next */ []));
|
|
18765
|
+
/** ISO end date overriding the computed range maximum; empty derives it from tasks. */
|
|
17926
18766
|
end = input('', /* @ts-ignore */
|
|
17927
18767
|
...(ngDevMode ? [{ debugName: "end" }] : /* istanbul ignore next */ []));
|
|
17928
18768
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -18083,16 +18923,22 @@ function toMinutes(value) {
|
|
|
18083
18923
|
}
|
|
18084
18924
|
/** A week/day calendar grid with positioned events. SSR-safe. */
|
|
18085
18925
|
class BuiScheduler {
|
|
18926
|
+
/** Events to position within the calendar grid. */
|
|
18086
18927
|
events = input([], /* @ts-ignore */
|
|
18087
18928
|
...(ngDevMode ? [{ debugName: "events" }] : /* istanbul ignore next */ []));
|
|
18929
|
+
/** Custom day-column headers; empty falls back to weekday names or `Today`. */
|
|
18088
18930
|
days = input([], /* @ts-ignore */
|
|
18089
18931
|
...(ngDevMode ? [{ debugName: "days" }] : /* istanbul ignore next */ []));
|
|
18932
|
+
/** First hour shown on the time axis (24-hour). */
|
|
18090
18933
|
startHour = input(8, /* @ts-ignore */
|
|
18091
18934
|
...(ngDevMode ? [{ debugName: "startHour" }] : /* istanbul ignore next */ []));
|
|
18935
|
+
/** Last hour shown on the time axis (24-hour), exclusive of the final row. */
|
|
18092
18936
|
endHour = input(18, /* @ts-ignore */
|
|
18093
18937
|
...(ngDevMode ? [{ debugName: "endHour" }] : /* istanbul ignore next */ []));
|
|
18938
|
+
/** Layout mode; `day` shows a single column, `week` shows the full week. */
|
|
18094
18939
|
view = input('week', /* @ts-ignore */
|
|
18095
18940
|
...(ngDevMode ? [{ debugName: "view" }] : /* istanbul ignore next */ []));
|
|
18941
|
+
/** Accessible label applied to the grid's `aria-label`. */
|
|
18096
18942
|
label = input('Schedule', /* @ts-ignore */
|
|
18097
18943
|
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
18098
18944
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -18220,8 +19066,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
18220
19066
|
|
|
18221
19067
|
/** A drag-and-drop kanban board (Angular CDK drag-drop). */
|
|
18222
19068
|
class BuiKanban {
|
|
19069
|
+
/** Columns and their cards used to seed the board. */
|
|
18223
19070
|
columns = input([], /* @ts-ignore */
|
|
18224
19071
|
...(ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []));
|
|
19072
|
+
/** Emits the updated board whenever a card is moved. */
|
|
18225
19073
|
changed = output();
|
|
18226
19074
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
18227
19075
|
board = linkedSignal(() => this.columns().map((column) => ({ ...column, cards: [...column.cards] })), /* @ts-ignore */
|
|
@@ -18339,15 +19187,23 @@ const TOOLS = [
|
|
|
18339
19187
|
];
|
|
18340
19188
|
/** A contenteditable rich-text editor with a basic formatting toolbar. */
|
|
18341
19189
|
class BuiRichTextEditor {
|
|
19190
|
+
/** Editor contents as HTML. Two-way bindable with `[(value)]`. */
|
|
18342
19191
|
value = model('', /* @ts-ignore */
|
|
18343
19192
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
19193
|
+
/** Placeholder text shown while the editor is empty. */
|
|
18344
19194
|
placeholder = input('Write something…', /* @ts-ignore */
|
|
18345
19195
|
...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
19196
|
+
/** Accessible label for the editable region. */
|
|
18346
19197
|
ariaLabel = input('Rich text editor', /* @ts-ignore */
|
|
18347
19198
|
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
19199
|
+
/** Accessible label override for the formatting toolbar. */
|
|
19200
|
+
formattingLabel = input(/* @ts-ignore */
|
|
19201
|
+
...(ngDevMode ? [undefined, { debugName: "formattingLabel" }] : /* istanbul ignore next */ []));
|
|
19202
|
+
/** Name attribute associated with the editor for form submission. */
|
|
18348
19203
|
name = input('', /* @ts-ignore */
|
|
18349
19204
|
...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
|
|
18350
19205
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
19206
|
+
formattingText = buiLabel('richTextEditorFormatting', this.formattingLabel);
|
|
18351
19207
|
tools = TOOLS;
|
|
18352
19208
|
editor = viewChild('editor', /* @ts-ignore */
|
|
18353
19209
|
...(ngDevMode ? [{ debugName: "editor" }] : /* istanbul ignore next */ []));
|
|
@@ -18377,10 +19233,10 @@ class BuiRichTextEditor {
|
|
|
18377
19233
|
}
|
|
18378
19234
|
}
|
|
18379
19235
|
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: `
|
|
19236
|
+
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
19237
|
<div
|
|
18382
19238
|
role="toolbar"
|
|
18383
|
-
aria-label="
|
|
19239
|
+
[attr.aria-label]="formattingText()"
|
|
18384
19240
|
class="flex flex-wrap gap-0.5 border-b bg-muted/40 p-1"
|
|
18385
19241
|
>
|
|
18386
19242
|
@for (tool of tools; track tool.cmd) {
|
|
@@ -18416,7 +19272,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
18416
19272
|
template: `
|
|
18417
19273
|
<div
|
|
18418
19274
|
role="toolbar"
|
|
18419
|
-
aria-label="
|
|
19275
|
+
[attr.aria-label]="formattingText()"
|
|
18420
19276
|
class="flex flex-wrap gap-0.5 border-b bg-muted/40 p-1"
|
|
18421
19277
|
>
|
|
18422
19278
|
@for (tool of tools; track tool.cmd) {
|
|
@@ -18444,14 +19300,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
18444
19300
|
></div>
|
|
18445
19301
|
`,
|
|
18446
19302
|
}]
|
|
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 }] }] } });
|
|
19303
|
+
}], 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
19304
|
|
|
18449
19305
|
/** A collapsible vertical navigation sidebar. Toggle width with the `open` model. */
|
|
18450
19306
|
class BuiSidebar {
|
|
19307
|
+
/** Whether the sidebar is expanded. Two-way bindable with `[(open)]`. */
|
|
18451
19308
|
open = model(true, /* @ts-ignore */
|
|
18452
19309
|
...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
|
|
19310
|
+
/** Edge the sidebar is docked to, which sets its border side. */
|
|
18453
19311
|
side = input('left', /* @ts-ignore */
|
|
18454
19312
|
...(ngDevMode ? [{ debugName: "side" }] : /* istanbul ignore next */ []));
|
|
19313
|
+
/** Collapse behavior: hide entirely (`offcanvas`) or shrink to an icon rail (`icon`). */
|
|
18455
19314
|
collapsible = input('offcanvas', /* @ts-ignore */
|
|
18456
19315
|
...(ngDevMode ? [{ debugName: "collapsible" }] : /* istanbul ignore next */ []));
|
|
18457
19316
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -18477,6 +19336,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
18477
19336
|
}], propDecorators: { open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }, { type: i0.Output, args: ["openChange"] }], side: [{ type: i0.Input, args: [{ isSignal: true, alias: "side", required: false }] }], collapsible: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsible", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
|
|
18478
19337
|
/** A styled, accessible item button for a {@link BuiSidebar} menu. */
|
|
18479
19338
|
class BuiSidebarMenuButton {
|
|
19339
|
+
/** Whether this item is the current page; sets active styling and `aria-current`. */
|
|
18480
19340
|
isActive = input(false, /* @ts-ignore */
|
|
18481
19341
|
...(ngDevMode ? [{ debugName: "isActive" }] : /* istanbul ignore next */ []));
|
|
18482
19342
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -18499,8 +19359,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
18499
19359
|
|
|
18500
19360
|
/** A guided product tour with a spotlight on each step's target element. SSR-safe. */
|
|
18501
19361
|
class BuiOnboardingTour {
|
|
19362
|
+
/** Whether the tour is open. Two-way bindable with `[(open)]`. */
|
|
18502
19363
|
open = model(false, /* @ts-ignore */
|
|
18503
19364
|
...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
|
|
19365
|
+
/** Ordered steps; each spotlights its `target` element in turn. */
|
|
18504
19366
|
steps = input([], /* @ts-ignore */
|
|
18505
19367
|
...(ngDevMode ? [{ debugName: "steps" }] : /* istanbul ignore next */ []));
|
|
18506
19368
|
step = signal(0, /* @ts-ignore */
|
|
@@ -19094,16 +19956,22 @@ function encodeQr(text) {
|
|
|
19094
19956
|
|
|
19095
19957
|
/** Renders a value as a scannable QR code (SVG). Level M, byte mode. SSR-safe. */
|
|
19096
19958
|
class BuiQrCode {
|
|
19959
|
+
/** Text or URL to encode into the QR code. */
|
|
19097
19960
|
value = input('', /* @ts-ignore */
|
|
19098
19961
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
19962
|
+
/** Rendered width and height of the SVG in pixels. */
|
|
19099
19963
|
size = input(160, /* @ts-ignore */
|
|
19100
19964
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
19965
|
+
/** Accessible label for the QR code image. */
|
|
19101
19966
|
label = input('QR code', /* @ts-ignore */
|
|
19102
19967
|
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
19968
|
+
/** Fill colour of the QR modules (dark squares). */
|
|
19103
19969
|
foreground = input('currentColor', /* @ts-ignore */
|
|
19104
19970
|
...(ngDevMode ? [{ debugName: "foreground" }] : /* istanbul ignore next */ []));
|
|
19971
|
+
/** Background fill colour behind the modules. */
|
|
19105
19972
|
background = input('transparent', /* @ts-ignore */
|
|
19106
19973
|
...(ngDevMode ? [{ debugName: "background" }] : /* istanbul ignore next */ []));
|
|
19974
|
+
/** Quiet-zone border width, in modules. */
|
|
19107
19975
|
margin = input(2, /* @ts-ignore */
|
|
19108
19976
|
...(ngDevMode ? [{ debugName: "margin" }] : /* istanbul ignore next */ []));
|
|
19109
19977
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -19174,5 +20042,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
19174
20042
|
* Generated bundle index. Do not edit.
|
|
19175
20043
|
*/
|
|
19176
20044
|
|
|
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 };
|
|
20045
|
+
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
20046
|
//# sourceMappingURL=ng-blatui.mjs.map
|