ng-blatui 1.29.0 → 1.31.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 +649 -78
- package/fesm2022/ng-blatui.mjs.map +1 -1
- package/package.json +1 -1
- package/types/ng-blatui.d.ts +742 -16
package/fesm2022/ng-blatui.mjs
CHANGED
|
@@ -151,8 +151,10 @@ const buttonVariants = cva("inline-flex shrink-0 items-center justify-center gap
|
|
|
151
151
|
* semantics, focus and keyboard behavior (accessibility for free).
|
|
152
152
|
*/
|
|
153
153
|
class BuiButton {
|
|
154
|
+
/** Visual style of the button. */
|
|
154
155
|
variant = input('default', /* @ts-ignore */
|
|
155
156
|
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
157
|
+
/** Size preset controlling height, padding and icon scale. */
|
|
156
158
|
size = input('default', /* @ts-ignore */
|
|
157
159
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
158
160
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -172,8 +174,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
172
174
|
}]
|
|
173
175
|
}], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
|
|
174
176
|
|
|
175
|
-
const BASE$
|
|
176
|
-
const SIZES$
|
|
177
|
+
const BASE$1 = 'inline-flex items-center justify-center rounded-md border font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden';
|
|
178
|
+
const SIZES$4 = {
|
|
177
179
|
sm: 'px-1.5 py-px text-[0.625rem]',
|
|
178
180
|
default: 'px-2 py-0.5 text-xs',
|
|
179
181
|
lg: 'px-3 py-1 text-sm [&>svg]:size-3.5',
|
|
@@ -237,17 +239,20 @@ function intensityFor(variant) {
|
|
|
237
239
|
* element so it stays in the document flow and screen-reader friendly.
|
|
238
240
|
*/
|
|
239
241
|
class BuiBadge {
|
|
242
|
+
/** Brand variant, or the intensity (`soft`/`solid`/`outline`) when a `tone` is set. */
|
|
240
243
|
variant = input('default', /* @ts-ignore */
|
|
241
244
|
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
245
|
+
/** Optional semantic tone; when set it overrides the brand variant's color. */
|
|
242
246
|
tone = input(null, /* @ts-ignore */
|
|
243
247
|
...(ngDevMode ? [{ debugName: "tone" }] : /* istanbul ignore next */ []));
|
|
248
|
+
/** Badge size preset. */
|
|
244
249
|
size = input('default', /* @ts-ignore */
|
|
245
250
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
246
251
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
247
252
|
computedClass = computed(() => {
|
|
248
253
|
const tone = this.tone();
|
|
249
254
|
const toneOrVariant = tone === null ? brandClass(this.variant()) : TONES$2[tone][intensityFor(this.variant())];
|
|
250
|
-
return cn(BASE$
|
|
255
|
+
return cn(BASE$1, SIZES$4[this.size()], toneOrVariant, this.userClass());
|
|
251
256
|
}, /* @ts-ignore */
|
|
252
257
|
...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
|
|
253
258
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiBadge, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
@@ -291,8 +296,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
291
296
|
* `[decorative]="false"` for a semantic `role="separator"` with `aria-orientation`.
|
|
292
297
|
*/
|
|
293
298
|
class BuiSeparator {
|
|
299
|
+
/** Axis the separator runs along, also driving its sizing. */
|
|
294
300
|
orientation = input('horizontal', /* @ts-ignore */
|
|
295
301
|
...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
|
|
302
|
+
/** Whether the separator is purely visual; `false` exposes a semantic `role="separator"`. */
|
|
296
303
|
decorative = input(true, /* @ts-ignore */
|
|
297
304
|
...(ngDevMode ? [{ debugName: "decorative" }] : /* istanbul ignore next */ []));
|
|
298
305
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -346,6 +353,7 @@ const CARD_VARIANTS = {
|
|
|
346
353
|
};
|
|
347
354
|
/** BlatUI card container. Use `variant="sectioned"` with the header/content/footer parts. */
|
|
348
355
|
class BuiCard {
|
|
356
|
+
/** Card layout style: simple padded box or sectioned container. */
|
|
349
357
|
variant = input('default', /* @ts-ignore */
|
|
350
358
|
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
351
359
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -463,8 +471,10 @@ const ALERT_TONES = {
|
|
|
463
471
|
* (`default | destructive`) or semantic `tone` (`success | warning | danger | info | neutral`).
|
|
464
472
|
*/
|
|
465
473
|
class BuiAlert {
|
|
474
|
+
/** Brand style; ignored when `tone` is set. */
|
|
466
475
|
variant = input('default', /* @ts-ignore */
|
|
467
476
|
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
477
|
+
/** Semantic tone; when set, overrides `variant`. */
|
|
468
478
|
tone = input(null, /* @ts-ignore */
|
|
469
479
|
...(ngDevMode ? [{ debugName: "tone" }] : /* istanbul ignore next */ []));
|
|
470
480
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -521,6 +531,7 @@ const INPUT_SIZES = {
|
|
|
521
531
|
};
|
|
522
532
|
/** Applies BlatUI input styling to a native `<input>` (keeps native validation & a11y). */
|
|
523
533
|
class BuiInput {
|
|
534
|
+
/** Size preset controlling input height, padding and text size. */
|
|
524
535
|
size = input('default', /* @ts-ignore */
|
|
525
536
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
526
537
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -547,15 +558,36 @@ const TEXTAREA_SIZES = {
|
|
|
547
558
|
default: 'min-h-16 px-3 py-2 text-base md:text-sm',
|
|
548
559
|
lg: 'min-h-20 px-4 py-2.5 text-base',
|
|
549
560
|
};
|
|
550
|
-
|
|
561
|
+
// Vertical padding (top + bottom) baked into each size preset, used to compute the `maxRows`
|
|
562
|
+
// height cap. Mirrors the `py-*` utilities in TEXTAREA_SIZES.
|
|
563
|
+
const TEXTAREA_PADDING_Y = {
|
|
564
|
+
sm: '0.75rem',
|
|
565
|
+
default: '1rem',
|
|
566
|
+
lg: '1.25rem',
|
|
567
|
+
};
|
|
568
|
+
/**
|
|
569
|
+
* Applies BlatUI textarea styling to a native `<textarea>`. Auto-grows with its content via CSS
|
|
570
|
+
* `field-sizing-content` (no JS). Set `[maxRows]` to cap the growth — past it the field scrolls.
|
|
571
|
+
*/
|
|
551
572
|
class BuiTextarea {
|
|
573
|
+
/** Size preset controlling minimum height, padding and text size. */
|
|
552
574
|
size = input('default', /* @ts-ignore */
|
|
553
575
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
576
|
+
/** Maximum number of rows before the textarea scrolls instead of growing (null = unlimited). */
|
|
577
|
+
maxRows = input(null, /* @ts-ignore */
|
|
578
|
+
...(ngDevMode ? [{ debugName: "maxRows" }] : /* istanbul ignore next */ []));
|
|
554
579
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
555
580
|
computedClass = computed(() => cn(TEXTAREA_BASE, TEXTAREA_SIZES[this.size()], this.userClass()), /* @ts-ignore */
|
|
556
581
|
...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
|
|
582
|
+
// Cap the auto-grow at `maxRows` lines using the `lh` unit (one line-height) plus the size's
|
|
583
|
+
// vertical padding and the 1px borders — purely declarative, so it stays SSR-safe.
|
|
584
|
+
maxHeight = computed(() => {
|
|
585
|
+
const rows = this.maxRows();
|
|
586
|
+
return rows === null ? null : `calc(${rows} * 1lh + ${TEXTAREA_PADDING_Y[this.size()]} + 2px)`;
|
|
587
|
+
}, /* @ts-ignore */
|
|
588
|
+
...(ngDevMode ? [{ debugName: "maxHeight" }] : /* istanbul ignore next */ []));
|
|
557
589
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiTextarea, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
558
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: BuiTextarea, isStandalone: true, selector: "textarea[buiTextarea]", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "textarea" }, properties: { "attr.data-size": "size()", "class": "computedClass()" } }, ngImport: i0 });
|
|
590
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: BuiTextarea, isStandalone: true, selector: "textarea[buiTextarea]", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, maxRows: { classPropertyName: "maxRows", publicName: "maxRows", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "textarea" }, properties: { "attr.data-size": "size()", "class": "computedClass()", "style.max-height": "maxHeight()", "style.overflow-y": "maxRows() === null ? null : 'auto'" } }, ngImport: i0 });
|
|
559
591
|
}
|
|
560
592
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiTextarea, decorators: [{
|
|
561
593
|
type: Directive,
|
|
@@ -565,17 +597,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
565
597
|
'data-slot': 'textarea',
|
|
566
598
|
'[attr.data-size]': 'size()',
|
|
567
599
|
'[class]': 'computedClass()',
|
|
600
|
+
'[style.max-height]': 'maxHeight()',
|
|
601
|
+
'[style.overflow-y]': "maxRows() === null ? null : 'auto'",
|
|
568
602
|
},
|
|
569
603
|
}]
|
|
570
|
-
}], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
|
|
604
|
+
}], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], maxRows: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxRows", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
|
|
571
605
|
|
|
572
606
|
/**
|
|
573
607
|
* BlatUI linear progress bar. Exposes the full `progressbar` ARIA contract
|
|
574
608
|
* (valuemin/max/now/text). Set `[indeterminate]="true"` for an unknown-duration bar.
|
|
575
609
|
*/
|
|
576
610
|
class BuiProgress {
|
|
611
|
+
/** Completion percentage from 0 to 100; values are clamped to that range. */
|
|
577
612
|
value = input(0, /* @ts-ignore */
|
|
578
613
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
614
|
+
/** Show an unknown-duration animation instead of a fixed value. */
|
|
579
615
|
indeterminate = input(false, /* @ts-ignore */
|
|
580
616
|
...(ngDevMode ? [{ debugName: "indeterminate" }] : /* istanbul ignore next */ []));
|
|
581
617
|
/** Render a circular ring instead of a linear bar. */
|
|
@@ -587,6 +623,7 @@ class BuiProgress {
|
|
|
587
623
|
/** Stroke width of the circular ring, in pixels. */
|
|
588
624
|
thickness = input(4, /* @ts-ignore */
|
|
589
625
|
...(ngDevMode ? [{ debugName: "thickness" }] : /* istanbul ignore next */ []));
|
|
626
|
+
/** Accessible label announced for the progress bar. */
|
|
590
627
|
ariaLabel = input('Progress', /* @ts-ignore */
|
|
591
628
|
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
592
629
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -718,8 +755,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
718
755
|
* the projected fallback (initials, icon). Falls back automatically on load error.
|
|
719
756
|
*/
|
|
720
757
|
class BuiAvatar {
|
|
758
|
+
/** Image URL to display; when unset or on load error the fallback is shown. */
|
|
721
759
|
src = input(null, /* @ts-ignore */
|
|
722
760
|
...(ngDevMode ? [{ debugName: "src" }] : /* istanbul ignore next */ []));
|
|
761
|
+
/** Alternative text for the avatar image. */
|
|
723
762
|
alt = input('', /* @ts-ignore */
|
|
724
763
|
...(ngDevMode ? [{ debugName: "alt" }] : /* istanbul ignore next */ []));
|
|
725
764
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -784,10 +823,13 @@ const CHECKBOX_BASE = 'peer border-input dark:bg-input/30 data-[state=checked]:b
|
|
|
784
823
|
* with `[(checked)]` two-way binding and tri-state `[(indeterminate)]`.
|
|
785
824
|
*/
|
|
786
825
|
class BuiCheckbox {
|
|
826
|
+
/** Whether the box is checked. Two-way bindable with `[(checked)]`. */
|
|
787
827
|
checked = model(false, /* @ts-ignore */
|
|
788
828
|
...(ngDevMode ? [{ debugName: "checked" }] : /* istanbul ignore next */ []));
|
|
829
|
+
/** Whether the box shows the mixed/indeterminate state. Two-way bindable with `[(indeterminate)]`. */
|
|
789
830
|
indeterminate = model(false, /* @ts-ignore */
|
|
790
831
|
...(ngDevMode ? [{ debugName: "indeterminate" }] : /* istanbul ignore next */ []));
|
|
832
|
+
/** Whether the checkbox is disabled. Two-way bindable with `[(disabled)]`. */
|
|
791
833
|
disabled = model(false, /* @ts-ignore */
|
|
792
834
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
793
835
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -944,10 +986,13 @@ const THUMB_BASE = 'bg-background dark:data-[state=unchecked]:bg-foreground dark
|
|
|
944
986
|
* binding; keyboard activation (Space/Enter) and focus come from the native button.
|
|
945
987
|
*/
|
|
946
988
|
class BuiSwitch {
|
|
989
|
+
/** Whether the switch is on. Two-way bindable with `[(checked)]`. */
|
|
947
990
|
checked = model(false, /* @ts-ignore */
|
|
948
991
|
...(ngDevMode ? [{ debugName: "checked" }] : /* istanbul ignore next */ []));
|
|
992
|
+
/** Whether the switch is disabled. Two-way bindable with `[(disabled)]`. */
|
|
949
993
|
disabled = model(false, /* @ts-ignore */
|
|
950
994
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
995
|
+
/** Track and thumb size. */
|
|
951
996
|
size = input('default', /* @ts-ignore */
|
|
952
997
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
953
998
|
/** Optional SVG path `d` shown inside the thumb when checked. */
|
|
@@ -2096,8 +2141,10 @@ const noop$g = () => { };
|
|
|
2096
2141
|
* `buiRadioItem` buttons; `[(value)]` two-way binds the selected value.
|
|
2097
2142
|
*/
|
|
2098
2143
|
class BuiRadioGroup {
|
|
2144
|
+
/** Selected radio value. Two-way bindable with `[(value)]`. */
|
|
2099
2145
|
value = model(null, /* @ts-ignore */
|
|
2100
2146
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
2147
|
+
/** Whether the whole group is disabled. Two-way bindable with `[(disabled)]`. */
|
|
2101
2148
|
disabled = model(false, /* @ts-ignore */
|
|
2102
2149
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
2103
2150
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -2163,8 +2210,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
2163
2210
|
}], 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 }] }] } });
|
|
2164
2211
|
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';
|
|
2165
2212
|
class BuiRadioGroupItem {
|
|
2213
|
+
/** Value this item contributes to the group when selected. */
|
|
2166
2214
|
value = input.required(/* @ts-ignore */
|
|
2167
2215
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
2216
|
+
/** Whether this individual radio item is disabled. */
|
|
2168
2217
|
disabled = input(false, /* @ts-ignore */
|
|
2169
2218
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
2170
2219
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -2223,6 +2272,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
2223
2272
|
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';
|
|
2224
2273
|
/** Floating tooltip bubble rendered into a CDK overlay. */
|
|
2225
2274
|
class BuiTooltipContent {
|
|
2275
|
+
/** Text rendered inside the tooltip bubble. */
|
|
2226
2276
|
text = input('', /* @ts-ignore */
|
|
2227
2277
|
...(ngDevMode ? [{ debugName: "text" }] : /* istanbul ignore next */ []));
|
|
2228
2278
|
/** Extra classes (e.g. a colour override) merged over the base bubble styles. */
|
|
@@ -2260,7 +2310,9 @@ const FALLBACK = {
|
|
|
2260
2310
|
* a hover delay with `delay`, and the bubble colour with `tooltipClass`.
|
|
2261
2311
|
*/
|
|
2262
2312
|
class BuiTooltip {
|
|
2313
|
+
/** Tooltip text; bound via the `buiTooltip` attribute. */
|
|
2263
2314
|
text = input.required({ ...(ngDevMode ? { debugName: "text" } : /* istanbul ignore next */ {}), alias: 'buiTooltip' });
|
|
2315
|
+
/** Preferred placement side relative to the host, with an automatic flip fallback. */
|
|
2264
2316
|
side = input('top', /* @ts-ignore */
|
|
2265
2317
|
...(ngDevMode ? [{ debugName: "side" }] : /* istanbul ignore next */ []));
|
|
2266
2318
|
/** Delay in milliseconds before the tooltip appears on hover/focus. */
|
|
@@ -2335,6 +2387,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
2335
2387
|
|
|
2336
2388
|
/** Breadcrumb navigation landmark (`<nav aria-label="breadcrumb">`). */
|
|
2337
2389
|
class BuiBreadcrumb {
|
|
2390
|
+
/** Accessible label for the breadcrumb navigation landmark. */
|
|
2338
2391
|
label = input(/* @ts-ignore */
|
|
2339
2392
|
...(ngDevMode ? [undefined, { debugName: "label" }] : /* istanbul ignore next */ []));
|
|
2340
2393
|
labelText = buiLabel('breadcrumb', this.label);
|
|
@@ -2463,6 +2516,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
2463
2516
|
/** Collapsed breadcrumb indicator (ellipsis). */
|
|
2464
2517
|
class BuiBreadcrumbEllipsis {
|
|
2465
2518
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
2519
|
+
/** Screen-reader text for the collapsed ellipsis indicator. */
|
|
2466
2520
|
moreLabel = input(/* @ts-ignore */
|
|
2467
2521
|
...(ngDevMode ? [undefined, { debugName: "moreLabel" }] : /* istanbul ignore next */ []));
|
|
2468
2522
|
moreText = buiLabel('breadcrumbMore', this.moreLabel);
|
|
@@ -2533,6 +2587,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
2533
2587
|
|
|
2534
2588
|
/** Constrains projected content to a given aspect ratio (e.g. `16 / 9`). */
|
|
2535
2589
|
class BuiAspectRatio {
|
|
2590
|
+
/** Aspect ratio for the content, as a CSS `aspect-ratio` value (e.g. `16 / 9`). */
|
|
2536
2591
|
ratio = input('1 / 1', /* @ts-ignore */
|
|
2537
2592
|
...(ngDevMode ? [{ debugName: "ratio" }] : /* istanbul ignore next */ []));
|
|
2538
2593
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -2556,6 +2611,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
2556
2611
|
|
|
2557
2612
|
/** Groups buttons (and inputs) into a single segmented control. */
|
|
2558
2613
|
class BuiButtonGroup {
|
|
2614
|
+
/** Layout direction of the grouped controls. */
|
|
2559
2615
|
orientation = input('horizontal', /* @ts-ignore */
|
|
2560
2616
|
...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
|
|
2561
2617
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -2622,6 +2678,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
2622
2678
|
}]
|
|
2623
2679
|
}], propDecorators: { userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
|
|
2624
2680
|
class BuiEmptyMedia {
|
|
2681
|
+
/** Media style; `icon` renders a muted rounded badge sized for an icon. */
|
|
2625
2682
|
variant = input('default', /* @ts-ignore */
|
|
2626
2683
|
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
2627
2684
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -2685,7 +2742,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
2685
2742
|
}]
|
|
2686
2743
|
}], propDecorators: { userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
|
|
2687
2744
|
|
|
2688
|
-
const SIZES$
|
|
2745
|
+
const SIZES$3 = {
|
|
2689
2746
|
sm: 'max-w-3xl',
|
|
2690
2747
|
md: 'max-w-5xl',
|
|
2691
2748
|
lg: 'max-w-6xl',
|
|
@@ -2695,10 +2752,11 @@ const SIZES$5 = {
|
|
|
2695
2752
|
};
|
|
2696
2753
|
/** Centered, padded page container with a max-width scale. */
|
|
2697
2754
|
class BuiContainer {
|
|
2755
|
+
/** Maximum width preset for the container. */
|
|
2698
2756
|
size = input('lg', /* @ts-ignore */
|
|
2699
2757
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
2700
2758
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
2701
|
-
computedClass = computed(() => cn('mx-auto w-full px-4 sm:px-6 lg:px-8', SIZES$
|
|
2759
|
+
computedClass = computed(() => cn('mx-auto w-full px-4 sm:px-6 lg:px-8', SIZES$3[this.size()], this.userClass()), /* @ts-ignore */
|
|
2702
2760
|
...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
|
|
2703
2761
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiContainer, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
2704
2762
|
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: BuiContainer, isStandalone: true, selector: "[buiContainer]", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "container" }, properties: { "class": "computedClass()" } }, ngImport: i0 });
|
|
@@ -2718,6 +2776,7 @@ const FIELD_ORIENT = {
|
|
|
2718
2776
|
};
|
|
2719
2777
|
/** A form field row grouping a label, control, description and error. */
|
|
2720
2778
|
class BuiField {
|
|
2779
|
+
/** How the label and control are arranged within the field. */
|
|
2721
2780
|
orientation = input('vertical', /* @ts-ignore */
|
|
2722
2781
|
...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
|
|
2723
2782
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -2753,6 +2812,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
2753
2812
|
}]
|
|
2754
2813
|
}], propDecorators: { userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
|
|
2755
2814
|
class BuiFieldLegend {
|
|
2815
|
+
/** Whether the legend is styled as a section legend or a smaller label. */
|
|
2756
2816
|
variant = input('legend', /* @ts-ignore */
|
|
2757
2817
|
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
2758
2818
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -2787,6 +2847,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
2787
2847
|
}]
|
|
2788
2848
|
}], propDecorators: { userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
|
|
2789
2849
|
class BuiFieldLabel {
|
|
2850
|
+
/** Id of the control this label is associated with (maps to the `for` attribute). */
|
|
2790
2851
|
forId = input(undefined, { ...(ngDevMode ? { debugName: "forId" } : /* istanbul ignore next */ {}), alias: 'for' });
|
|
2791
2852
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
2792
2853
|
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 */
|
|
@@ -2887,6 +2948,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
2887
2948
|
|
|
2888
2949
|
/** Accessible disclosure: a trigger toggles the visibility of its content. */
|
|
2889
2950
|
class BuiCollapsible {
|
|
2951
|
+
/** Whether the content is shown. Two-way bindable with `[(open)]`. */
|
|
2890
2952
|
open = model(false, /* @ts-ignore */
|
|
2891
2953
|
...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
|
|
2892
2954
|
contentId = inject(_IdGenerator).getId('bui-collapsible-');
|
|
@@ -2959,12 +3021,16 @@ const toggleVariants = cva("inline-flex items-center justify-center gap-2 rounde
|
|
|
2959
3021
|
});
|
|
2960
3022
|
/** A two-state toggle button (`aria-pressed`). */
|
|
2961
3023
|
class BuiToggle {
|
|
3024
|
+
/** Whether the toggle is pressed (on). Two-way bindable with `[(pressed)]`. */
|
|
2962
3025
|
pressed = model(false, /* @ts-ignore */
|
|
2963
3026
|
...(ngDevMode ? [{ debugName: "pressed" }] : /* istanbul ignore next */ []));
|
|
3027
|
+
/** Whether the toggle is disabled. Two-way bindable with `[(disabled)]`. */
|
|
2964
3028
|
disabled = model(false, /* @ts-ignore */
|
|
2965
3029
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
3030
|
+
/** Visual style: plain or outlined. */
|
|
2966
3031
|
variant = input('default', /* @ts-ignore */
|
|
2967
3032
|
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
3033
|
+
/** Button size. */
|
|
2968
3034
|
size = input('default', /* @ts-ignore */
|
|
2969
3035
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
2970
3036
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -3021,6 +3087,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
3021
3087
|
/** A spinning loading indicator (`role="status"`). */
|
|
3022
3088
|
class BuiSpinner {
|
|
3023
3089
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
3090
|
+
/** Overrides the localized accessible status label. */
|
|
3024
3091
|
label = input(/* @ts-ignore */
|
|
3025
3092
|
...(ngDevMode ? [undefined, { debugName: "label" }] : /* istanbul ignore next */ []));
|
|
3026
3093
|
labelText = buiLabel('spinnerLoading', this.label);
|
|
@@ -3071,8 +3138,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
3071
3138
|
|
|
3072
3139
|
/** Copy-to-clipboard button: copies `value`, flips to a check, announces "Copied". */
|
|
3073
3140
|
class BuiCopyButton {
|
|
3141
|
+
/** Text written to the clipboard when clicked. */
|
|
3074
3142
|
value = input('', /* @ts-ignore */
|
|
3075
3143
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
3144
|
+
/** Accessible label shown before copying. */
|
|
3076
3145
|
label = input('Copy', /* @ts-ignore */
|
|
3077
3146
|
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
3078
3147
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -3189,15 +3258,20 @@ const TONES$1 = {
|
|
|
3189
3258
|
* the dismissal in localStorage. SSR-safe — localStorage is only touched in the browser.
|
|
3190
3259
|
*/
|
|
3191
3260
|
class BuiBanner {
|
|
3261
|
+
/** Color tone (`default | primary | info | success | warning | danger`). */
|
|
3192
3262
|
tone = input('default', /* @ts-ignore */
|
|
3193
3263
|
...(ngDevMode ? [{ debugName: "tone" }] : /* istanbul ignore next */ []));
|
|
3264
|
+
/** Whether to show the dismiss button. */
|
|
3194
3265
|
dismissible = input(true, /* @ts-ignore */
|
|
3195
3266
|
...(ngDevMode ? [{ debugName: "dismissible" }] : /* istanbul ignore next */ []));
|
|
3267
|
+
/** When set, the dismissal is remembered in localStorage under this key. */
|
|
3196
3268
|
persistKey = input(undefined, /* @ts-ignore */
|
|
3197
3269
|
...(ngDevMode ? [{ debugName: "persistKey" }] : /* istanbul ignore next */ []));
|
|
3198
3270
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
3271
|
+
/** Overrides the localized accessible label for the announcement region. */
|
|
3199
3272
|
announcementLabel = input(/* @ts-ignore */
|
|
3200
3273
|
...(ngDevMode ? [undefined, { debugName: "announcementLabel" }] : /* istanbul ignore next */ []));
|
|
3274
|
+
/** Overrides the localized accessible label for the dismiss button. */
|
|
3201
3275
|
dismissLabel = input(/* @ts-ignore */
|
|
3202
3276
|
...(ngDevMode ? [undefined, { debugName: "dismissLabel" }] : /* istanbul ignore next */ []));
|
|
3203
3277
|
announcementText = buiLabel('bannerAnnouncement', this.announcementLabel);
|
|
@@ -3292,6 +3366,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
3292
3366
|
|
|
3293
3367
|
/** Scroll/border wrapper around a table. `variant="card"` adds a bordered card. */
|
|
3294
3368
|
class BuiTableContainer {
|
|
3369
|
+
/** Wrapper style; `card` adds a bordered, shadowed card around the table. */
|
|
3295
3370
|
variant = input('default', /* @ts-ignore */
|
|
3296
3371
|
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
3297
3372
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -3424,7 +3499,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
3424
3499
|
}]
|
|
3425
3500
|
}], propDecorators: { userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
|
|
3426
3501
|
|
|
3427
|
-
const SIZES$
|
|
3502
|
+
const SIZES$2 = {
|
|
3428
3503
|
sm: { box: 'size-6', overlap: '-ms-2', ring: 'ring-1', text: 'text-xs' },
|
|
3429
3504
|
default: { box: 'size-8', overlap: '-ms-2.5', ring: 'ring-2', text: 'text-sm' },
|
|
3430
3505
|
lg: { box: 'size-12', overlap: '-ms-3', ring: 'ring-2', text: 'text-base' },
|
|
@@ -3441,10 +3516,13 @@ function initials(name) {
|
|
|
3441
3516
|
}
|
|
3442
3517
|
/** Overlapping stack of avatars with an optional "+N" overflow counter. */
|
|
3443
3518
|
class BuiAvatarGroup {
|
|
3519
|
+
/** Avatars to display, in order. */
|
|
3444
3520
|
avatars = input([], /* @ts-ignore */
|
|
3445
3521
|
...(ngDevMode ? [{ debugName: "avatars" }] : /* istanbul ignore next */ []));
|
|
3522
|
+
/** Maximum avatars shown before the rest collapse into a "+N" counter. */
|
|
3446
3523
|
max = input(4, /* @ts-ignore */
|
|
3447
3524
|
...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
|
|
3525
|
+
/** Avatar size preset, which also controls overlap and ring width. */
|
|
3448
3526
|
size = input('default', /* @ts-ignore */
|
|
3449
3527
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
3450
3528
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -3456,11 +3534,11 @@ class BuiAvatarGroup {
|
|
|
3456
3534
|
...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
|
|
3457
3535
|
toInitials = initials;
|
|
3458
3536
|
itemClass(index) {
|
|
3459
|
-
const size = SIZES$
|
|
3537
|
+
const size = SIZES$2[this.size()];
|
|
3460
3538
|
return cn(size.box, size.ring, 'ring-background', index > 0 && size.overlap);
|
|
3461
3539
|
}
|
|
3462
3540
|
moreClass() {
|
|
3463
|
-
const size = SIZES$
|
|
3541
|
+
const size = SIZES$2[this.size()];
|
|
3464
3542
|
return cn('relative z-10 flex shrink-0 items-center justify-center rounded-full bg-muted font-medium text-foreground', size.box, size.ring, 'ring-background', size.text, this.shown().length > 0 && size.overlap);
|
|
3465
3543
|
}
|
|
3466
3544
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiAvatarGroup, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
@@ -3516,6 +3594,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
3516
3594
|
|
|
3517
3595
|
/** Pagination navigation landmark. */
|
|
3518
3596
|
class BuiPagination {
|
|
3597
|
+
/** Accessible label for the navigation landmark; falls back to a localized default. */
|
|
3519
3598
|
ariaLabel = input(/* @ts-ignore */
|
|
3520
3599
|
...(ngDevMode ? [undefined, { debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
3521
3600
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -3571,8 +3650,10 @@ const LINK_SIZES = {
|
|
|
3571
3650
|
};
|
|
3572
3651
|
/** A pagination link; set `active` for the current page. */
|
|
3573
3652
|
class BuiPaginationLink {
|
|
3653
|
+
/** Whether this link represents the current page; sets `aria-current="page"`. */
|
|
3574
3654
|
active = input(false, /* @ts-ignore */
|
|
3575
3655
|
...(ngDevMode ? [{ debugName: "active" }] : /* istanbul ignore next */ []));
|
|
3656
|
+
/** Size variant controlling link dimensions and padding. */
|
|
3576
3657
|
size = input('icon', /* @ts-ignore */
|
|
3577
3658
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
3578
3659
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -3598,6 +3679,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
3598
3679
|
/** Ellipsis indicator for skipped pages. */
|
|
3599
3680
|
class BuiPaginationEllipsis {
|
|
3600
3681
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
3682
|
+
/** Visually-hidden label announcing skipped pages; falls back to a localized default. */
|
|
3601
3683
|
moreLabel = input(/* @ts-ignore */
|
|
3602
3684
|
...(ngDevMode ? [undefined, { debugName: "moreLabel" }] : /* istanbul ignore next */ []));
|
|
3603
3685
|
moreText = buiLabel('paginationMore', this.moreLabel);
|
|
@@ -3663,7 +3745,9 @@ const POPOVER_FALLBACK = {
|
|
|
3663
3745
|
* Closes on outside click and Escape. SSR-safe (the overlay is browser-only, on click).
|
|
3664
3746
|
*/
|
|
3665
3747
|
class BuiPopover {
|
|
3748
|
+
/** Template rendered as the popover content; bound via `[buiPopover]`. */
|
|
3666
3749
|
content = input.required({ ...(ngDevMode ? { debugName: "content" } : /* istanbul ignore next */ {}), alias: 'buiPopover' });
|
|
3750
|
+
/** Side of the trigger the popover opens on, with an automatic opposite-side fallback. */
|
|
3667
3751
|
side = input('bottom', /* @ts-ignore */
|
|
3668
3752
|
...(ngDevMode ? [{ debugName: "side" }] : /* istanbul ignore next */ []));
|
|
3669
3753
|
overlay = inject(Overlay);
|
|
@@ -3759,8 +3843,10 @@ const ITEM_SIZES = {
|
|
|
3759
3843
|
};
|
|
3760
3844
|
/** A list/row item; use on a `<div>` or an `<a>`. */
|
|
3761
3845
|
class BuiItem {
|
|
3846
|
+
/** Visual style of the item: transparent, outlined, or muted background. */
|
|
3762
3847
|
variant = input('default', /* @ts-ignore */
|
|
3763
3848
|
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
3849
|
+
/** Item density: standard padding or a more compact `sm` size. */
|
|
3764
3850
|
size = input('default', /* @ts-ignore */
|
|
3765
3851
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
3766
3852
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -3787,6 +3873,7 @@ const MEDIA_VARIANTS = {
|
|
|
3787
3873
|
image: 'size-10 overflow-hidden rounded-sm [&_img]:size-full [&_img]:object-cover',
|
|
3788
3874
|
};
|
|
3789
3875
|
class BuiItemMedia {
|
|
3876
|
+
/** Media presentation: plain, an icon tile, or a cropped image thumbnail. */
|
|
3790
3877
|
variant = input('default', /* @ts-ignore */
|
|
3791
3878
|
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
3792
3879
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -3934,6 +4021,7 @@ const ADDON_ALIGN = {
|
|
|
3934
4021
|
'block-end': 'order-last w-full justify-start px-3 pb-3',
|
|
3935
4022
|
};
|
|
3936
4023
|
class BuiInputGroupAddon {
|
|
4024
|
+
/** Where the addon sits relative to the input (inline or block, start or end). */
|
|
3937
4025
|
align = input('inline-start', /* @ts-ignore */
|
|
3938
4026
|
...(ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []));
|
|
3939
4027
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -3994,8 +4082,10 @@ const IG_BUTTON_SIZES = {
|
|
|
3994
4082
|
'icon-sm': 'size-8 p-0',
|
|
3995
4083
|
};
|
|
3996
4084
|
class BuiInputGroupButton {
|
|
4085
|
+
/** Visual style of the addon button. */
|
|
3997
4086
|
variant = input('ghost', /* @ts-ignore */
|
|
3998
4087
|
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
4088
|
+
/** Size preset for the addon button (text or icon variants). */
|
|
3999
4089
|
size = input('xs', /* @ts-ignore */
|
|
4000
4090
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
4001
4091
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -4014,6 +4104,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
4014
4104
|
|
|
4015
4105
|
/** Visually hides content while keeping it available to assistive tech (sr-only). */
|
|
4016
4106
|
class BuiVisuallyHidden {
|
|
4107
|
+
/** Whether the content becomes visible when focused (e.g. skip links). */
|
|
4017
4108
|
focusable = input(false, /* @ts-ignore */
|
|
4018
4109
|
...(ngDevMode ? [{ debugName: "focusable" }] : /* istanbul ignore next */ []));
|
|
4019
4110
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -4039,21 +4130,28 @@ const TONES = {
|
|
|
4039
4130
|
};
|
|
4040
4131
|
/** A labelled meter (`role="meter"`) for a measurement within a known range. */
|
|
4041
4132
|
class BuiMeter {
|
|
4133
|
+
/** Current measurement; clamped between `min` and `max`. */
|
|
4042
4134
|
value = input(0, /* @ts-ignore */
|
|
4043
4135
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
4136
|
+
/** Minimum value of the meter range. */
|
|
4044
4137
|
min = input(0, /* @ts-ignore */
|
|
4045
4138
|
...(ngDevMode ? [{ debugName: "min" }] : /* istanbul ignore next */ []));
|
|
4139
|
+
/** Maximum value of the meter range. */
|
|
4046
4140
|
max = input(100, /* @ts-ignore */
|
|
4047
4141
|
...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
|
|
4142
|
+
/** Optional text label shown above the meter bar. */
|
|
4048
4143
|
label = input(null, /* @ts-ignore */
|
|
4049
4144
|
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
4145
|
+
/** Fill colour tone; overridden by any matching threshold. */
|
|
4050
4146
|
tone = input('default', /* @ts-ignore */
|
|
4051
4147
|
...(ngDevMode ? [{ debugName: "tone" }] : /* istanbul ignore next */ []));
|
|
4052
4148
|
/** Auto-pick the fill tone by value: the highest threshold whose `at` ≤ value wins. */
|
|
4053
4149
|
thresholds = input([], /* @ts-ignore */
|
|
4054
4150
|
...(ngDevMode ? [{ debugName: "thresholds" }] : /* istanbul ignore next */ []));
|
|
4151
|
+
/** Whether to display the formatted value text next to the label. */
|
|
4055
4152
|
showValue = input(true, /* @ts-ignore */
|
|
4056
4153
|
...(ngDevMode ? [{ debugName: "showValue" }] : /* istanbul ignore next */ []));
|
|
4154
|
+
/** Unit suffix appended to the displayed value (e.g. "%"). */
|
|
4057
4155
|
unit = input('%', /* @ts-ignore */
|
|
4058
4156
|
...(ngDevMode ? [{ debugName: "unit" }] : /* istanbul ignore next */ []));
|
|
4059
4157
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -4157,14 +4255,19 @@ const TREND_CLASS = {
|
|
|
4157
4255
|
};
|
|
4158
4256
|
/** A KPI / statistic card: label, big value, and a trend-coloured change. */
|
|
4159
4257
|
class BuiStat {
|
|
4258
|
+
/** Small caption shown above the value. */
|
|
4160
4259
|
label = input(null, /* @ts-ignore */
|
|
4161
4260
|
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
4261
|
+
/** Primary statistic displayed as the large value. */
|
|
4162
4262
|
value = input('', /* @ts-ignore */
|
|
4163
4263
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
4264
|
+
/** Change indicator (e.g. "+12%"); coloured by trend. */
|
|
4164
4265
|
change = input(null, /* @ts-ignore */
|
|
4165
4266
|
...(ngDevMode ? [{ debugName: "change" }] : /* istanbul ignore next */ []));
|
|
4267
|
+
/** Explicit trend direction; inferred from `change`'s sign when null. */
|
|
4166
4268
|
trend = input(null, /* @ts-ignore */
|
|
4167
4269
|
...(ngDevMode ? [{ debugName: "trend" }] : /* istanbul ignore next */ []));
|
|
4270
|
+
/** Muted text shown next to the change value. */
|
|
4168
4271
|
caption = input(null, /* @ts-ignore */
|
|
4169
4272
|
...(ngDevMode ? [{ debugName: "caption" }] : /* istanbul ignore next */ []));
|
|
4170
4273
|
/** Optional inline sparkline drawn from a series of numbers. */
|
|
@@ -4283,9 +4386,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
4283
4386
|
* and stays open while the pointer is over the card. SSR-safe (browser-only, on hover).
|
|
4284
4387
|
*/
|
|
4285
4388
|
class BuiHoverCard {
|
|
4389
|
+
/** Template rendered inside the card; bound via the `buiHoverCard` attribute. */
|
|
4286
4390
|
content = input.required({ ...(ngDevMode ? { debugName: "content" } : /* istanbul ignore next */ {}), alias: 'buiHoverCard' });
|
|
4391
|
+
/** Delay in milliseconds before the card opens on hover/focus. */
|
|
4287
4392
|
openDelay = input(400, /* @ts-ignore */
|
|
4288
4393
|
...(ngDevMode ? [{ debugName: "openDelay" }] : /* istanbul ignore next */ []));
|
|
4394
|
+
/** Delay in milliseconds before the card closes after the pointer leaves. */
|
|
4289
4395
|
closeDelay = input(100, /* @ts-ignore */
|
|
4290
4396
|
...(ngDevMode ? [{ debugName: "closeDelay" }] : /* istanbul ignore next */ []));
|
|
4291
4397
|
overlay = inject(Overlay);
|
|
@@ -4377,15 +4483,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
4377
4483
|
|
|
4378
4484
|
/** A dark code panel with an optional filename header and a copy button. */
|
|
4379
4485
|
class BuiCodeBlock {
|
|
4486
|
+
/** Source code shown in the panel and copied to the clipboard. */
|
|
4380
4487
|
code = input('', /* @ts-ignore */
|
|
4381
4488
|
...(ngDevMode ? [{ debugName: "code" }] : /* istanbul ignore next */ []));
|
|
4489
|
+
/** Optional filename shown in the header; omit for the floating copy button. */
|
|
4382
4490
|
filename = input(null, /* @ts-ignore */
|
|
4383
4491
|
...(ngDevMode ? [{ debugName: "filename" }] : /* istanbul ignore next */ []));
|
|
4384
4492
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
4493
|
+
/** Accessible label for the copy button. */
|
|
4385
4494
|
copyLabel = input(/* @ts-ignore */
|
|
4386
4495
|
...(ngDevMode ? [undefined, { debugName: "copyLabel" }] : /* istanbul ignore next */ []));
|
|
4496
|
+
/** Short visible text for the copy button. */
|
|
4387
4497
|
copyShortLabel = input(/* @ts-ignore */
|
|
4388
4498
|
...(ngDevMode ? [undefined, { debugName: "copyShortLabel" }] : /* istanbul ignore next */ []));
|
|
4499
|
+
/** Text shown briefly after the code is copied. */
|
|
4389
4500
|
copiedLabel = input(/* @ts-ignore */
|
|
4390
4501
|
...(ngDevMode ? [undefined, { debugName: "copiedLabel" }] : /* istanbul ignore next */ []));
|
|
4391
4502
|
copyText = buiLabel('codeBlockCopy', this.copyLabel);
|
|
@@ -4480,23 +4591,31 @@ const noop$e = () => { };
|
|
|
4480
4591
|
* only read inside browser event handlers.
|
|
4481
4592
|
*/
|
|
4482
4593
|
class BuiSlider {
|
|
4594
|
+
/** Current value (lower thumb in range mode). Two-way bindable with `[(value)]`. */
|
|
4483
4595
|
value = model(0, /* @ts-ignore */
|
|
4484
4596
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
4485
4597
|
/** Enable a second thumb; binds `endValue` as the upper handle. */
|
|
4486
4598
|
range = input(false, /* @ts-ignore */
|
|
4487
4599
|
...(ngDevMode ? [{ debugName: "range" }] : /* istanbul ignore next */ []));
|
|
4600
|
+
/** Upper thumb value in range mode. Two-way bindable with `[(endValue)]`. */
|
|
4488
4601
|
endValue = model(100, /* @ts-ignore */
|
|
4489
4602
|
...(ngDevMode ? [{ debugName: "endValue" }] : /* istanbul ignore next */ []));
|
|
4603
|
+
/** Minimum selectable value. */
|
|
4490
4604
|
min = input(0, /* @ts-ignore */
|
|
4491
4605
|
...(ngDevMode ? [{ debugName: "min" }] : /* istanbul ignore next */ []));
|
|
4606
|
+
/** Maximum selectable value. */
|
|
4492
4607
|
max = input(100, /* @ts-ignore */
|
|
4493
4608
|
...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
|
|
4609
|
+
/** Increment between selectable values. */
|
|
4494
4610
|
step = input(1, /* @ts-ignore */
|
|
4495
4611
|
...(ngDevMode ? [{ debugName: "step" }] : /* istanbul ignore next */ []));
|
|
4612
|
+
/** Whether the slider is disabled. Two-way bindable with `[(disabled)]`. */
|
|
4496
4613
|
disabled = model(false, /* @ts-ignore */
|
|
4497
4614
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
4615
|
+
/** Layout direction of the slider. */
|
|
4498
4616
|
orientation = input('horizontal', /* @ts-ignore */
|
|
4499
4617
|
...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
|
|
4618
|
+
/** Accessible label for the thumb(s). */
|
|
4500
4619
|
ariaLabel = input('Value', /* @ts-ignore */
|
|
4501
4620
|
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
4502
4621
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -4754,18 +4873,25 @@ const noop$d = () => { };
|
|
|
4754
4873
|
const STAR_SIZE = { sm: 'size-4', default: 'size-5', lg: 'size-6' };
|
|
4755
4874
|
/** A star rating (`role="radiogroup"`) with hover preview and keyboard support. */
|
|
4756
4875
|
class BuiRating {
|
|
4876
|
+
/** Current rating. Two-way bindable with `[(value)]`. */
|
|
4757
4877
|
value = model(0, /* @ts-ignore */
|
|
4758
4878
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
4879
|
+
/** Number of stars shown. */
|
|
4759
4880
|
max = input(5, /* @ts-ignore */
|
|
4760
4881
|
...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
|
|
4882
|
+
/** Whether the rating is display-only and cannot be changed. */
|
|
4761
4883
|
readonly = input(false, /* @ts-ignore */
|
|
4762
4884
|
...(ngDevMode ? [{ debugName: "readonly" }] : /* istanbul ignore next */ []));
|
|
4885
|
+
/** Whether the rating is disabled. Two-way bindable with `[(disabled)]`. */
|
|
4763
4886
|
disabled = model(false, /* @ts-ignore */
|
|
4764
4887
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
4888
|
+
/** Size of each star. */
|
|
4765
4889
|
size = input('default', /* @ts-ignore */
|
|
4766
4890
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
4891
|
+
/** Tailwind text-color class applied to filled stars. */
|
|
4767
4892
|
color = input('text-amber-500', /* @ts-ignore */
|
|
4768
4893
|
...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
|
|
4894
|
+
/** Accessible label for the rating group. */
|
|
4769
4895
|
ariaLabel = input(null, /* @ts-ignore */
|
|
4770
4896
|
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
4771
4897
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -4920,24 +5046,39 @@ const BTN_SIZE$1 = {
|
|
|
4920
5046
|
lg: 'w-9 [&_svg]:size-4',
|
|
4921
5047
|
};
|
|
4922
5048
|
const FIELD_WIDTH = { sm: 'w-9', default: 'w-10', lg: 'w-12' };
|
|
4923
|
-
/**
|
|
5049
|
+
/**
|
|
5050
|
+
* @deprecated Use `<bui-number-input [min]="1" size="sm">` instead — it is the same numeric
|
|
5051
|
+
* stepper, so this duplicate was dropped from the registry and docs. Still exported as a thin
|
|
5052
|
+
* compatibility shim; existing usages keep working.
|
|
5053
|
+
*
|
|
5054
|
+
* A compact − [n] + quantity stepper (`role="group"` with a `spinbutton` field).
|
|
5055
|
+
*/
|
|
4924
5056
|
class BuiQuantitySelector {
|
|
5057
|
+
/** Current quantity. Two-way bindable with `[(value)]`. */
|
|
4925
5058
|
value = model(1, /* @ts-ignore */
|
|
4926
5059
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
5060
|
+
/** Minimum allowed quantity. */
|
|
4927
5061
|
min = input(1, /* @ts-ignore */
|
|
4928
5062
|
...(ngDevMode ? [{ debugName: "min" }] : /* istanbul ignore next */ []));
|
|
5063
|
+
/** Maximum allowed quantity; unbounded when null. */
|
|
4929
5064
|
max = input(null, /* @ts-ignore */
|
|
4930
5065
|
...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
|
|
5066
|
+
/** Increment/decrement applied per button press. */
|
|
4931
5067
|
step = input(1, /* @ts-ignore */
|
|
4932
5068
|
...(ngDevMode ? [{ debugName: "step" }] : /* istanbul ignore next */ []));
|
|
5069
|
+
/** Size preset controlling height and button width. */
|
|
4933
5070
|
size = input('default', /* @ts-ignore */
|
|
4934
5071
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
5072
|
+
/** Whether the whole control is disabled. */
|
|
4935
5073
|
disabled = input(false, /* @ts-ignore */
|
|
4936
5074
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
5075
|
+
/** Accessible label for the numeric input field. */
|
|
4937
5076
|
ariaLabel = input('Quantity', /* @ts-ignore */
|
|
4938
5077
|
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
5078
|
+
/** Accessible label override for the decrease button. */
|
|
4939
5079
|
decreaseLabel = input(/* @ts-ignore */
|
|
4940
5080
|
...(ngDevMode ? [undefined, { debugName: "decreaseLabel" }] : /* istanbul ignore next */ []));
|
|
5081
|
+
/** Accessible label override for the increase button. */
|
|
4941
5082
|
increaseLabel = input(/* @ts-ignore */
|
|
4942
5083
|
...(ngDevMode ? [undefined, { debugName: "increaseLabel" }] : /* istanbul ignore next */ []));
|
|
4943
5084
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -5201,69 +5342,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
5201
5342
|
}]
|
|
5202
5343
|
}], propDecorators: { userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
|
|
5203
5344
|
|
|
5204
|
-
const BASE$1 = 'border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:bg-input/30 flex w-full resize-none overflow-hidden rounded-md border bg-transparent shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50';
|
|
5205
|
-
const SIZES$3 = {
|
|
5206
|
-
sm: 'min-h-14 px-2.5 py-1.5 text-sm',
|
|
5207
|
-
default: 'min-h-16 px-3 py-2 text-base md:text-sm',
|
|
5208
|
-
lg: 'min-h-20 px-4 py-2.5 text-base',
|
|
5209
|
-
};
|
|
5210
5345
|
/**
|
|
5211
|
-
*
|
|
5212
|
-
*
|
|
5346
|
+
* @deprecated Use `<textarea buiTextarea [maxRows]="…">` instead — `buiTextarea` already auto-grows
|
|
5347
|
+
* (CSS `field-sizing-content`) and now supports `maxRows`. Kept as a thin alias so existing
|
|
5348
|
+
* `buiAutosizeTextarea` markup keeps working; it inherits every input from {@link BuiTextarea}.
|
|
5349
|
+
*
|
|
5350
|
+
* A textarea that grows with its content, capped at `maxRows`.
|
|
5213
5351
|
*/
|
|
5214
|
-
class BuiAutosizeTextarea {
|
|
5215
|
-
|
|
5216
|
-
|
|
5217
|
-
maxRows = input(null, /* @ts-ignore */
|
|
5218
|
-
...(ngDevMode ? [{ debugName: "maxRows" }] : /* istanbul ignore next */ []));
|
|
5219
|
-
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
5220
|
-
host = inject(ElementRef);
|
|
5221
|
-
computedClass = computed(() => cn(BASE$1, SIZES$3[this.size()], this.userClass()), /* @ts-ignore */
|
|
5222
|
-
...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
|
|
5223
|
-
constructor() {
|
|
5224
|
-
afterNextRender(() => {
|
|
5225
|
-
this.resize();
|
|
5226
|
-
});
|
|
5227
|
-
}
|
|
5228
|
-
resize() {
|
|
5229
|
-
const element = this.host.nativeElement;
|
|
5230
|
-
element.style.height = 'auto';
|
|
5231
|
-
let target = element.scrollHeight;
|
|
5232
|
-
const maxRows = this.maxRows();
|
|
5233
|
-
if (maxRows !== null) {
|
|
5234
|
-
const styles = getComputedStyle(element);
|
|
5235
|
-
let lineHeight = Number.parseFloat(styles.lineHeight);
|
|
5236
|
-
if (Number.isNaN(lineHeight)) {
|
|
5237
|
-
lineHeight = Number.parseFloat(styles.fontSize) * 1.2;
|
|
5238
|
-
}
|
|
5239
|
-
const padding = Number.parseFloat(styles.paddingTop) + Number.parseFloat(styles.paddingBottom);
|
|
5240
|
-
const border = Number.parseFloat(styles.borderTopWidth) + Number.parseFloat(styles.borderBottomWidth);
|
|
5241
|
-
const cap = lineHeight * maxRows + padding + border;
|
|
5242
|
-
if (target > cap) {
|
|
5243
|
-
target = cap;
|
|
5244
|
-
element.style.overflowY = 'auto';
|
|
5245
|
-
}
|
|
5246
|
-
else {
|
|
5247
|
-
element.style.overflowY = 'hidden';
|
|
5248
|
-
}
|
|
5249
|
-
}
|
|
5250
|
-
element.style.height = `${target}px`;
|
|
5251
|
-
}
|
|
5252
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiAutosizeTextarea, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
5253
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: BuiAutosizeTextarea, isStandalone: true, selector: "textarea[buiAutosizeTextarea]", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, maxRows: { classPropertyName: "maxRows", publicName: "maxRows", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "autosize-textarea" }, listeners: { "input": "resize()" }, properties: { "attr.data-size": "size()", "class": "computedClass()" } }, ngImport: i0 });
|
|
5352
|
+
class BuiAutosizeTextarea extends BuiTextarea {
|
|
5353
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiAutosizeTextarea, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
5354
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.2", type: BuiAutosizeTextarea, isStandalone: true, selector: "textarea[buiAutosizeTextarea]", host: { attributes: { "data-slot": "autosize-textarea" } }, usesInheritance: true, ngImport: i0 });
|
|
5254
5355
|
}
|
|
5255
5356
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiAutosizeTextarea, decorators: [{
|
|
5256
5357
|
type: Directive,
|
|
5257
5358
|
args: [{
|
|
5258
5359
|
selector: 'textarea[buiAutosizeTextarea]',
|
|
5259
|
-
host: {
|
|
5260
|
-
'data-slot': 'autosize-textarea',
|
|
5261
|
-
'[attr.data-size]': 'size()',
|
|
5262
|
-
'[class]': 'computedClass()',
|
|
5263
|
-
'(input)': 'resize()',
|
|
5264
|
-
},
|
|
5360
|
+
host: { 'data-slot': 'autosize-textarea' },
|
|
5265
5361
|
}]
|
|
5266
|
-
}]
|
|
5362
|
+
}] });
|
|
5267
5363
|
|
|
5268
5364
|
class BuiDropdownMenu {
|
|
5269
5365
|
menu = inject(Menu);
|
|
@@ -5387,6 +5483,7 @@ const TYPOGRAPHY = {
|
|
|
5387
5483
|
};
|
|
5388
5484
|
/** Applies a typographic style. Put it on the matching element (e.g. `<h1 buiTypography variant="h1">`). */
|
|
5389
5485
|
class BuiTypography {
|
|
5486
|
+
/** Typographic style to apply (e.g. `h1`, `lead`, `blockquote`, `gradient`). */
|
|
5390
5487
|
variant = input('p', /* @ts-ignore */
|
|
5391
5488
|
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
5392
5489
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -5409,10 +5506,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
5409
5506
|
|
|
5410
5507
|
/** Decorative dotted background layer. Drop inside a `relative` container. */
|
|
5411
5508
|
class BuiDotPattern {
|
|
5509
|
+
/** Dot radius in pixels. */
|
|
5412
5510
|
size = input(1, /* @ts-ignore */
|
|
5413
5511
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
5512
|
+
/** Spacing between dots in pixels. */
|
|
5414
5513
|
gap = input(16, /* @ts-ignore */
|
|
5415
5514
|
...(ngDevMode ? [{ debugName: "gap" }] : /* istanbul ignore next */ []));
|
|
5515
|
+
/** Whether to fade the pattern with a radial mask toward the edges. */
|
|
5416
5516
|
mask = input(false, /* @ts-ignore */
|
|
5417
5517
|
...(ngDevMode ? [{ debugName: "mask" }] : /* istanbul ignore next */ []));
|
|
5418
5518
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -5445,10 +5545,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
5445
5545
|
|
|
5446
5546
|
/** Decorative grid background layer. Drop inside a `relative` container. */
|
|
5447
5547
|
class BuiGridPattern {
|
|
5548
|
+
/** Cell size (spacing between grid lines) in pixels. */
|
|
5448
5549
|
gap = input(24, /* @ts-ignore */
|
|
5449
5550
|
...(ngDevMode ? [{ debugName: "gap" }] : /* istanbul ignore next */ []));
|
|
5551
|
+
/** Thickness of the grid lines in pixels. */
|
|
5450
5552
|
lineWidth = input(1, /* @ts-ignore */
|
|
5451
5553
|
...(ngDevMode ? [{ debugName: "lineWidth" }] : /* istanbul ignore next */ []));
|
|
5554
|
+
/** Whether to fade the pattern with a radial mask toward the edges. */
|
|
5452
5555
|
mask = input(false, /* @ts-ignore */
|
|
5453
5556
|
...(ngDevMode ? [{ debugName: "mask" }] : /* istanbul ignore next */ []));
|
|
5454
5557
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -5486,10 +5589,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
5486
5589
|
const noop$c = () => { };
|
|
5487
5590
|
/** A single-select segmented control (`role="radiogroup"`) with arrow-key navigation. */
|
|
5488
5591
|
class BuiSegmentedControl {
|
|
5592
|
+
/** Currently selected segment value. Two-way bindable with `[(value)]`. */
|
|
5489
5593
|
value = model('', /* @ts-ignore */
|
|
5490
5594
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
5595
|
+
/** Available segments; plain strings are used as both value and label. */
|
|
5491
5596
|
options = input([], /* @ts-ignore */
|
|
5492
5597
|
...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
|
|
5598
|
+
/** Whether all segments are disabled. Two-way bindable with `[(disabled)]`. */
|
|
5493
5599
|
disabled = model(false, /* @ts-ignore */
|
|
5494
5600
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
5495
5601
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -5609,8 +5715,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
5609
5715
|
* helper classes `.prompt .ok .dim .path .warn` colour them.
|
|
5610
5716
|
*/
|
|
5611
5717
|
class BuiTerminal {
|
|
5718
|
+
/** Optional title shown in the terminal title bar. */
|
|
5612
5719
|
title = input(null, /* @ts-ignore */
|
|
5613
5720
|
...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
|
|
5721
|
+
/** Whether to show the macOS-style traffic-light buttons in the title bar. */
|
|
5614
5722
|
buttons = input(true, /* @ts-ignore */
|
|
5615
5723
|
...(ngDevMode ? [{ debugName: "buttons" }] : /* istanbul ignore next */ []));
|
|
5616
5724
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -5680,17 +5788,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
5680
5788
|
|
|
5681
5789
|
/** A data-driven feature-comparison / pricing table. */
|
|
5682
5790
|
class BuiComparisonTable {
|
|
5791
|
+
/** Column headers, one per pricing/feature tier. */
|
|
5683
5792
|
tiers = input([], /* @ts-ignore */
|
|
5684
5793
|
...(ngDevMode ? [{ debugName: "tiers" }] : /* istanbul ignore next */ []));
|
|
5794
|
+
/** Feature rows; each holds one value per tier. */
|
|
5685
5795
|
rows = input([], /* @ts-ignore */
|
|
5686
5796
|
...(ngDevMode ? [{ debugName: "rows" }] : /* istanbul ignore next */ []));
|
|
5797
|
+
/** Tier to emphasize, by index or tier name; `null` highlights none. */
|
|
5687
5798
|
highlight = input(null, /* @ts-ignore */
|
|
5688
5799
|
...(ngDevMode ? [{ debugName: "highlight" }] : /* istanbul ignore next */ []));
|
|
5800
|
+
/** Header text for the leading feature column. */
|
|
5689
5801
|
featureLabel = input('Feature', /* @ts-ignore */
|
|
5690
5802
|
...(ngDevMode ? [{ debugName: "featureLabel" }] : /* istanbul ignore next */ []));
|
|
5691
5803
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
5804
|
+
/** Accessible label for the included (check) icon. */
|
|
5692
5805
|
includedLabel = input(/* @ts-ignore */
|
|
5693
5806
|
...(ngDevMode ? [undefined, { debugName: "includedLabel" }] : /* istanbul ignore next */ []));
|
|
5807
|
+
/** Accessible label for the not-included (dash) marker. */
|
|
5694
5808
|
notIncludedLabel = input(/* @ts-ignore */
|
|
5695
5809
|
...(ngDevMode ? [undefined, { debugName: "notIncludedLabel" }] : /* istanbul ignore next */ []));
|
|
5696
5810
|
includedText = buiLabel('comparisonTableIncluded', this.includedLabel);
|
|
@@ -5836,8 +5950,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
5836
5950
|
* with `[buiFlipBack]`. `trigger="hover"` (default) or `"click"` (keyboard-accessible).
|
|
5837
5951
|
*/
|
|
5838
5952
|
class BuiFlipCard {
|
|
5953
|
+
/** What flips the card: hover/focus or click/keypress. */
|
|
5839
5954
|
trigger = input('hover', /* @ts-ignore */
|
|
5840
5955
|
...(ngDevMode ? [{ debugName: "trigger" }] : /* istanbul ignore next */ []));
|
|
5956
|
+
/** Fixed card height as a CSS length. */
|
|
5841
5957
|
height = input('16rem', /* @ts-ignore */
|
|
5842
5958
|
...(ngDevMode ? [{ debugName: "height" }] : /* istanbul ignore next */ []));
|
|
5843
5959
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -5932,8 +6048,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
5932
6048
|
|
|
5933
6049
|
/** A card with a radial spotlight glow that follows the cursor on hover. */
|
|
5934
6050
|
class BuiSpotlightCard {
|
|
6051
|
+
/** Spotlight glow colour; defaults to a subtle foreground tint. */
|
|
5935
6052
|
color = input(null, /* @ts-ignore */
|
|
5936
6053
|
...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
|
|
6054
|
+
/** Spotlight radius in pixels. */
|
|
5937
6055
|
size = input(350, /* @ts-ignore */
|
|
5938
6056
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
5939
6057
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -5989,8 +6107,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
5989
6107
|
|
|
5990
6108
|
/** A card that tilts in 3D toward the cursor. SSR-safe (geometry read on mousemove). */
|
|
5991
6109
|
class BuiTiltCard {
|
|
6110
|
+
/** Maximum tilt angle in degrees on each axis. */
|
|
5992
6111
|
max = input(10, /* @ts-ignore */
|
|
5993
6112
|
...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
|
|
6113
|
+
/** Scale factor applied while the card is tilting. */
|
|
5994
6114
|
scaleTo = input(1.05, /* @ts-ignore */
|
|
5995
6115
|
...(ngDevMode ? [{ debugName: "scaleTo" }] : /* istanbul ignore next */ []));
|
|
5996
6116
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -6060,17 +6180,22 @@ const noop$b = () => { };
|
|
|
6060
6180
|
* (arrows, Home/End, Enter, Escape) and outside-click close. SSR-safe.
|
|
6061
6181
|
*/
|
|
6062
6182
|
class BuiSelect {
|
|
6183
|
+
/** Selected option value (single mode). Two-way bindable with `[(value)]`. */
|
|
6063
6184
|
value = model('', /* @ts-ignore */
|
|
6064
6185
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
6065
6186
|
/** Select several options; binds `values` instead of `value`. */
|
|
6066
6187
|
multiple = input(false, /* @ts-ignore */
|
|
6067
6188
|
...(ngDevMode ? [{ debugName: "multiple" }] : /* istanbul ignore next */ []));
|
|
6189
|
+
/** Selected option values (multiple mode). Two-way bindable with `[(values)]`. */
|
|
6068
6190
|
values = model([], /* @ts-ignore */
|
|
6069
6191
|
...(ngDevMode ? [{ debugName: "values" }] : /* istanbul ignore next */ []));
|
|
6192
|
+
/** Available options to choose from. */
|
|
6070
6193
|
options = input([], /* @ts-ignore */
|
|
6071
6194
|
...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
|
|
6195
|
+
/** Text shown on the trigger when nothing is selected. */
|
|
6072
6196
|
placeholder = input('Select…', /* @ts-ignore */
|
|
6073
6197
|
...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
6198
|
+
/** Whether the select is disabled. Two-way bindable with `[(disabled)]`. */
|
|
6074
6199
|
disabled = model(false, /* @ts-ignore */
|
|
6075
6200
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
6076
6201
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -6446,11 +6571,14 @@ const VARIANTS$1 = {
|
|
|
6446
6571
|
* `threshold` px. SSR-safe — the scroll position is only read in the browser.
|
|
6447
6572
|
*/
|
|
6448
6573
|
class BuiBackToTop {
|
|
6574
|
+
/** Pixel scroll distance before the button appears. */
|
|
6449
6575
|
threshold = input(300, /* @ts-ignore */
|
|
6450
6576
|
...(ngDevMode ? [{ debugName: "threshold" }] : /* istanbul ignore next */ []));
|
|
6577
|
+
/** Visual style of the button. */
|
|
6451
6578
|
variant = input('primary', /* @ts-ignore */
|
|
6452
6579
|
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
6453
6580
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
6581
|
+
/** Accessible label for the button; falls back to the i18n default. */
|
|
6454
6582
|
label = input(/* @ts-ignore */
|
|
6455
6583
|
...(ngDevMode ? [undefined, { debugName: "label" }] : /* istanbul ignore next */ []));
|
|
6456
6584
|
labelText = buiLabel('backToTop', this.label);
|
|
@@ -6539,17 +6667,22 @@ const noop$a = () => { };
|
|
|
6539
6667
|
* filtered listbox, using the `aria-activedescendant` pattern. Full keyboard + outside-click.
|
|
6540
6668
|
*/
|
|
6541
6669
|
class BuiCombobox {
|
|
6670
|
+
/** Selected option value (single mode). Two-way bindable with `[(value)]`. */
|
|
6542
6671
|
value = model('', /* @ts-ignore */
|
|
6543
6672
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
6544
6673
|
/** Select several options; binds `values` instead of `value`. */
|
|
6545
6674
|
multiple = input(false, /* @ts-ignore */
|
|
6546
6675
|
...(ngDevMode ? [{ debugName: "multiple" }] : /* istanbul ignore next */ []));
|
|
6676
|
+
/** Selected option values (multiple mode). Two-way bindable with `[(values)]`. */
|
|
6547
6677
|
values = model([], /* @ts-ignore */
|
|
6548
6678
|
...(ngDevMode ? [{ debugName: "values" }] : /* istanbul ignore next */ []));
|
|
6679
|
+
/** Available options to filter and choose from. */
|
|
6549
6680
|
options = input([], /* @ts-ignore */
|
|
6550
6681
|
...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
|
|
6682
|
+
/** Placeholder text shown in the search input. */
|
|
6551
6683
|
placeholder = input('Search…', /* @ts-ignore */
|
|
6552
6684
|
...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
6685
|
+
/** Whether the combobox is disabled. Two-way bindable with `[(disabled)]`. */
|
|
6553
6686
|
disabled = model(false, /* @ts-ignore */
|
|
6554
6687
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
6555
6688
|
/** When false, the field can't be typed in — it just opens the full list (select-like). */
|
|
@@ -6852,8 +6985,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
6852
6985
|
|
|
6853
6986
|
/** A live countdown to a target time (`role="timer"`). SSR-safe — ticks only in the browser. */
|
|
6854
6987
|
class BuiCountdown {
|
|
6988
|
+
/** Target moment to count down to, as a Date, timestamp, or date string. */
|
|
6855
6989
|
to = input.required(/* @ts-ignore */
|
|
6856
6990
|
...(ngDevMode ? [{ debugName: "to" }] : /* istanbul ignore next */ []));
|
|
6991
|
+
/** Text shown once the target time has passed. */
|
|
6857
6992
|
expired = input('Expired', /* @ts-ignore */
|
|
6858
6993
|
...(ngDevMode ? [{ debugName: "expired" }] : /* istanbul ignore next */ []));
|
|
6859
6994
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -6953,18 +7088,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
6953
7088
|
* `aria-hidden`; an sr-only span carries the final value (SSR/no-JS read the real number).
|
|
6954
7089
|
*/
|
|
6955
7090
|
class BuiNumberTicker {
|
|
7091
|
+
/** Target value to count up to. */
|
|
6956
7092
|
value = input(0, /* @ts-ignore */
|
|
6957
7093
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
7094
|
+
/** Starting value the animation counts from. */
|
|
6958
7095
|
from = input(0, /* @ts-ignore */
|
|
6959
7096
|
...(ngDevMode ? [{ debugName: "from" }] : /* istanbul ignore next */ []));
|
|
7097
|
+
/** Animation length in milliseconds; 0 snaps instantly. */
|
|
6960
7098
|
duration = input(1500, /* @ts-ignore */
|
|
6961
7099
|
...(ngDevMode ? [{ debugName: "duration" }] : /* istanbul ignore next */ []));
|
|
7100
|
+
/** Number of decimal places to display. */
|
|
6962
7101
|
decimals = input(0, /* @ts-ignore */
|
|
6963
7102
|
...(ngDevMode ? [{ debugName: "decimals" }] : /* istanbul ignore next */ []));
|
|
7103
|
+
/** Text prepended before the number. */
|
|
6964
7104
|
prefix = input('', /* @ts-ignore */
|
|
6965
7105
|
...(ngDevMode ? [{ debugName: "prefix" }] : /* istanbul ignore next */ []));
|
|
7106
|
+
/** Text appended after the number. */
|
|
6966
7107
|
suffix = input('', /* @ts-ignore */
|
|
6967
7108
|
...(ngDevMode ? [{ debugName: "suffix" }] : /* istanbul ignore next */ []));
|
|
7109
|
+
/** Thousands-group separator character. */
|
|
6968
7110
|
separator = input(',', /* @ts-ignore */
|
|
6969
7111
|
...(ngDevMode ? [{ debugName: "separator" }] : /* istanbul ignore next */ []));
|
|
6970
7112
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -7033,8 +7175,10 @@ const VARIANTS = {
|
|
|
7033
7175
|
};
|
|
7034
7176
|
/** A styled anchor. Set `external` for `target=_blank` + safe `rel`. */
|
|
7035
7177
|
class BuiLink {
|
|
7178
|
+
/** Visual style of the link: default, muted, or subtle. */
|
|
7036
7179
|
variant = input('default', /* @ts-ignore */
|
|
7037
7180
|
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
7181
|
+
/** Whether the link is external, adding `target=_blank` and safe `rel`. */
|
|
7038
7182
|
external = input(false, /* @ts-ignore */
|
|
7039
7183
|
...(ngDevMode ? [{ debugName: "external" }] : /* istanbul ignore next */ []));
|
|
7040
7184
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -7068,14 +7212,19 @@ const PRESETS = {
|
|
|
7068
7212
|
};
|
|
7069
7213
|
/** Renders accessible text painted with a CSS gradient, with an optional shimmer. */
|
|
7070
7214
|
class BuiGradientText {
|
|
7215
|
+
/** Named colour preset used when from/via/to are not set. */
|
|
7071
7216
|
preset = input('brand', /* @ts-ignore */
|
|
7072
7217
|
...(ngDevMode ? [{ debugName: "preset" }] : /* istanbul ignore next */ []));
|
|
7218
|
+
/** Gradient start colour; overrides the preset's first stop. */
|
|
7073
7219
|
from = input(null, /* @ts-ignore */
|
|
7074
7220
|
...(ngDevMode ? [{ debugName: "from" }] : /* istanbul ignore next */ []));
|
|
7221
|
+
/** Gradient middle colour; overrides the preset's second stop. */
|
|
7075
7222
|
via = input(null, /* @ts-ignore */
|
|
7076
7223
|
...(ngDevMode ? [{ debugName: "via" }] : /* istanbul ignore next */ []));
|
|
7224
|
+
/** Gradient end colour; overrides the preset's third stop. */
|
|
7077
7225
|
to = input(null, /* @ts-ignore */
|
|
7078
7226
|
...(ngDevMode ? [{ debugName: "to" }] : /* istanbul ignore next */ []));
|
|
7227
|
+
/** Whether to animate a horizontal shimmer across the gradient. */
|
|
7079
7228
|
animate = input(false, /* @ts-ignore */
|
|
7080
7229
|
...(ngDevMode ? [{ debugName: "animate" }] : /* istanbul ignore next */ []));
|
|
7081
7230
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -7108,10 +7257,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
7108
7257
|
* Provide the title via the `heading` input or by projecting content.
|
|
7109
7258
|
*/
|
|
7110
7259
|
class BuiPageHeader {
|
|
7260
|
+
/** Title text rendered in the heading (alternative to projecting content). */
|
|
7111
7261
|
heading = input('', /* @ts-ignore */
|
|
7112
7262
|
...(ngDevMode ? [{ debugName: "heading" }] : /* istanbul ignore next */ []));
|
|
7263
|
+
/** Optional supporting text shown beneath the heading. */
|
|
7113
7264
|
description = input('', /* @ts-ignore */
|
|
7114
7265
|
...(ngDevMode ? [{ debugName: "description" }] : /* istanbul ignore next */ []));
|
|
7266
|
+
/** Whether to render a bottom border separating the header from the page. */
|
|
7115
7267
|
separator = input(false, /* @ts-ignore */
|
|
7116
7268
|
...(ngDevMode ? [{ debugName: "separator" }] : /* istanbul ignore next */ []));
|
|
7117
7269
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -7159,12 +7311,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
7159
7311
|
|
|
7160
7312
|
/** A styled blockquote / testimonial with optional attribution (author, role, avatar). */
|
|
7161
7313
|
class BuiQuote {
|
|
7314
|
+
/** Name of the person credited in the attribution. */
|
|
7162
7315
|
author = input('', /* @ts-ignore */
|
|
7163
7316
|
...(ngDevMode ? [{ debugName: "author" }] : /* istanbul ignore next */ []));
|
|
7317
|
+
/** Role or title shown beneath the author. */
|
|
7164
7318
|
role = input('', /* @ts-ignore */
|
|
7165
7319
|
...(ngDevMode ? [{ debugName: "role" }] : /* istanbul ignore next */ []));
|
|
7320
|
+
/** URL of the author's avatar image. */
|
|
7166
7321
|
avatar = input('', /* @ts-ignore */
|
|
7167
7322
|
...(ngDevMode ? [{ debugName: "avatar" }] : /* istanbul ignore next */ []));
|
|
7323
|
+
/** Source URL for the quote, set as the blockquote's `cite` attribute. */
|
|
7168
7324
|
cite = input('', /* @ts-ignore */
|
|
7169
7325
|
...(ngDevMode ? [{ debugName: "cite" }] : /* istanbul ignore next */ []));
|
|
7170
7326
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -7256,18 +7412,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
7256
7412
|
}]
|
|
7257
7413
|
}], propDecorators: { author: [{ type: i0.Input, args: [{ isSignal: true, alias: "author", required: false }] }], role: [{ type: i0.Input, args: [{ isSignal: true, alias: "role", required: false }] }], avatar: [{ type: i0.Input, args: [{ isSignal: true, alias: "avatar", required: false }] }], cite: [{ type: i0.Input, args: [{ isSignal: true, alias: "cite", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
|
|
7258
7414
|
|
|
7259
|
-
const SIZES$
|
|
7415
|
+
const SIZES$1 = { sm: 'text-sm', default: 'text-base', lg: 'text-2xl' };
|
|
7260
7416
|
const COMPARE_SIZES = { sm: 'text-xs', default: 'text-sm', lg: 'text-base' };
|
|
7261
7417
|
/** A price display with optional compare-at (strikethrough) and a discount badge. */
|
|
7262
7418
|
class BuiPrice {
|
|
7419
|
+
/** Current price amount to display. */
|
|
7263
7420
|
amount = input(0, /* @ts-ignore */
|
|
7264
7421
|
...(ngDevMode ? [{ debugName: "amount" }] : /* istanbul ignore next */ []));
|
|
7422
|
+
/** Original price; when higher than amount, shows as struck-through. */
|
|
7265
7423
|
compareAt = input(null, /* @ts-ignore */
|
|
7266
7424
|
...(ngDevMode ? [{ debugName: "compareAt" }] : /* istanbul ignore next */ []));
|
|
7425
|
+
/** Currency symbol prefixed to each value. */
|
|
7267
7426
|
currency = input('$', /* @ts-ignore */
|
|
7268
7427
|
...(ngDevMode ? [{ debugName: "currency" }] : /* istanbul ignore next */ []));
|
|
7428
|
+
/** Text size preset for the price. */
|
|
7269
7429
|
size = input('default', /* @ts-ignore */
|
|
7270
7430
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
7431
|
+
/** Whether to show the percentage-off discount badge when on sale. */
|
|
7271
7432
|
showDiscount = input(true, /* @ts-ignore */
|
|
7272
7433
|
...(ngDevMode ? [{ debugName: "showDiscount" }] : /* istanbul ignore next */ []));
|
|
7273
7434
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -7283,7 +7444,7 @@ class BuiPrice {
|
|
|
7283
7444
|
: 0;
|
|
7284
7445
|
}, /* @ts-ignore */
|
|
7285
7446
|
...(ngDevMode ? [{ debugName: "discount" }] : /* istanbul ignore next */ []));
|
|
7286
|
-
currentClass = computed(() => cn(SIZES$
|
|
7447
|
+
currentClass = computed(() => cn(SIZES$1[this.size()], this.onSale() ? 'text-emerald-700 dark:text-emerald-400' : 'text-foreground'), /* @ts-ignore */
|
|
7287
7448
|
...(ngDevMode ? [{ debugName: "currentClass" }] : /* istanbul ignore next */ []));
|
|
7288
7449
|
compareClass = computed(() => cn(COMPARE_SIZES[this.size()], 'text-muted-foreground'), /* @ts-ignore */
|
|
7289
7450
|
...(ngDevMode ? [{ debugName: "compareClass" }] : /* istanbul ignore next */ []));
|
|
@@ -7363,14 +7524,19 @@ const JUSTIFY = {
|
|
|
7363
7524
|
};
|
|
7364
7525
|
/** A flexbox stack layout helper (direction, gap, alignment). */
|
|
7365
7526
|
class BuiStack {
|
|
7527
|
+
/** Flex direction: vertical (`col`) or horizontal (`row`). */
|
|
7366
7528
|
direction = input('col', /* @ts-ignore */
|
|
7367
7529
|
...(ngDevMode ? [{ debugName: "direction" }] : /* istanbul ignore next */ []));
|
|
7530
|
+
/** Spacing between items, as a Tailwind gap step. */
|
|
7368
7531
|
gap = input('4', /* @ts-ignore */
|
|
7369
7532
|
...(ngDevMode ? [{ debugName: "gap" }] : /* istanbul ignore next */ []));
|
|
7533
|
+
/** Cross-axis alignment (`start`/`center`/`end`/`stretch`/`baseline`). */
|
|
7370
7534
|
align = input('', /* @ts-ignore */
|
|
7371
7535
|
...(ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []));
|
|
7536
|
+
/** Main-axis distribution (`start`/`center`/`end`/`between`/`around`/`evenly`). */
|
|
7372
7537
|
justify = input('', /* @ts-ignore */
|
|
7373
7538
|
...(ngDevMode ? [{ debugName: "justify" }] : /* istanbul ignore next */ []));
|
|
7539
|
+
/** Whether items wrap onto multiple lines when they overflow. */
|
|
7374
7540
|
wrap = input(false, /* @ts-ignore */
|
|
7375
7541
|
...(ngDevMode ? [{ debugName: "wrap" }] : /* istanbul ignore next */ []));
|
|
7376
7542
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -7392,8 +7558,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
7392
7558
|
* design tokens locally. Renders as `display: contents` so it adds no box.
|
|
7393
7559
|
*/
|
|
7394
7560
|
class BuiAccent {
|
|
7561
|
+
/** Accent color applied to the primary tokens; `null` leaves the theme unchanged. */
|
|
7395
7562
|
color = input(null, /* @ts-ignore */
|
|
7396
7563
|
...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
|
|
7564
|
+
/** Foreground color paired with the accent for text/icons on accented surfaces. */
|
|
7397
7565
|
foreground = input('#ffffff', /* @ts-ignore */
|
|
7398
7566
|
...(ngDevMode ? [{ debugName: "foreground" }] : /* istanbul ignore next */ []));
|
|
7399
7567
|
styleVars = computed(() => {
|
|
@@ -7439,23 +7607,28 @@ const COLORS = {
|
|
|
7439
7607
|
offline: 'bg-gray-400',
|
|
7440
7608
|
};
|
|
7441
7609
|
const LABELS = { online: 'Online', away: 'Away', busy: 'Busy', offline: 'Offline' };
|
|
7442
|
-
const SIZES
|
|
7610
|
+
const SIZES = { sm: 'size-2', default: 'size-2.5', lg: 'size-3' };
|
|
7443
7611
|
/** A small status dot (online/away/busy/offline). Status is never colour-only — the label is always present. */
|
|
7444
7612
|
class BuiPresence {
|
|
7613
|
+
/** Presence state, which sets the dot color and default label. */
|
|
7445
7614
|
status = input('online', /* @ts-ignore */
|
|
7446
7615
|
...(ngDevMode ? [{ debugName: "status" }] : /* istanbul ignore next */ []));
|
|
7616
|
+
/** Size preset for the status dot. */
|
|
7447
7617
|
size = input('default', /* @ts-ignore */
|
|
7448
7618
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
7619
|
+
/** Whether to show a pulsing ping animation (only when `online`). */
|
|
7449
7620
|
pulse = input(false, /* @ts-ignore */
|
|
7450
7621
|
...(ngDevMode ? [{ debugName: "pulse" }] : /* istanbul ignore next */ []));
|
|
7622
|
+
/** Custom label text; defaults to the status name. */
|
|
7451
7623
|
label = input('', /* @ts-ignore */
|
|
7452
7624
|
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
7625
|
+
/** Whether to render the label visibly; otherwise it stays screen-reader only. */
|
|
7453
7626
|
showLabel = input(false, /* @ts-ignore */
|
|
7454
7627
|
...(ngDevMode ? [{ debugName: "showLabel" }] : /* istanbul ignore next */ []));
|
|
7455
7628
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
7456
7629
|
colorClass = computed(() => COLORS[this.status()], /* @ts-ignore */
|
|
7457
7630
|
...(ngDevMode ? [{ debugName: "colorClass" }] : /* istanbul ignore next */ []));
|
|
7458
|
-
sizeClass = computed(() => SIZES
|
|
7631
|
+
sizeClass = computed(() => SIZES[this.size()], /* @ts-ignore */
|
|
7459
7632
|
...(ngDevMode ? [{ debugName: "sizeClass" }] : /* istanbul ignore next */ []));
|
|
7460
7633
|
labelText = computed(() => this.label() || LABELS[this.status()], /* @ts-ignore */
|
|
7461
7634
|
...(ngDevMode ? [{ debugName: "labelText" }] : /* istanbul ignore next */ []));
|
|
@@ -7519,10 +7692,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
7519
7692
|
|
|
7520
7693
|
/** A single timeline entry: a dot + connector line and a content area. */
|
|
7521
7694
|
class BuiTimelineItem {
|
|
7695
|
+
/** Timestamp label shown above the entry's title. */
|
|
7522
7696
|
time = input('', /* @ts-ignore */
|
|
7523
7697
|
...(ngDevMode ? [{ debugName: "time" }] : /* istanbul ignore next */ []));
|
|
7698
|
+
/** Heading text for the entry. */
|
|
7524
7699
|
title = input('', /* @ts-ignore */
|
|
7525
7700
|
...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
|
|
7701
|
+
/** Whether to highlight this entry as the current/active step. */
|
|
7526
7702
|
active = input(false, /* @ts-ignore */
|
|
7527
7703
|
...(ngDevMode ? [{ debugName: "active" }] : /* istanbul ignore next */ []));
|
|
7528
7704
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -7602,8 +7778,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
7602
7778
|
|
|
7603
7779
|
/** A description list (`<dl>`). Children should be `bui-description-item`. */
|
|
7604
7780
|
class BuiDescriptionList {
|
|
7781
|
+
/** Arrangement of each item's term and description, side by side or stacked. */
|
|
7605
7782
|
layout = input('horizontal', /* @ts-ignore */
|
|
7606
7783
|
...(ngDevMode ? [{ debugName: "layout" }] : /* istanbul ignore next */ []));
|
|
7784
|
+
/** Whether to render a bordered card with dividers between items. */
|
|
7607
7785
|
bordered = input(false, /* @ts-ignore */
|
|
7608
7786
|
...(ngDevMode ? [{ debugName: "bordered" }] : /* istanbul ignore next */ []));
|
|
7609
7787
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -7624,6 +7802,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
7624
7802
|
|
|
7625
7803
|
/** A term/description row. Inherits horizontal/bordered layout from its parent list. */
|
|
7626
7804
|
class BuiDescriptionItem {
|
|
7805
|
+
/** The term label shown in the row's `<dt>`. */
|
|
7627
7806
|
term = input('', /* @ts-ignore */
|
|
7628
7807
|
...(ngDevMode ? [{ debugName: "term" }] : /* istanbul ignore next */ []));
|
|
7629
7808
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -7672,8 +7851,10 @@ const GAPS = {
|
|
|
7672
7851
|
};
|
|
7673
7852
|
/** A Pinterest-style masonry grid using native CSS multi-column layout. */
|
|
7674
7853
|
class BuiMasonry {
|
|
7854
|
+
/** Maximum number of columns at the widest breakpoint (1-6, responsive). */
|
|
7675
7855
|
columns = input(3, /* @ts-ignore */
|
|
7676
7856
|
...(ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []));
|
|
7857
|
+
/** Spacing between items, as a Tailwind spacing key ('0', '2', '3', '4', '6', '8'). */
|
|
7677
7858
|
gap = input('4', /* @ts-ignore */
|
|
7678
7859
|
...(ngDevMode ? [{ debugName: "gap" }] : /* istanbul ignore next */ []));
|
|
7679
7860
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -7697,6 +7878,7 @@ const COLUMNS$1 = {
|
|
|
7697
7878
|
};
|
|
7698
7879
|
/** A bento grid container. Use `bui-bento-item` for cells. */
|
|
7699
7880
|
class BuiBentoGrid {
|
|
7881
|
+
/** Number of columns at the largest breakpoint (2, 3 or 4). */
|
|
7700
7882
|
columns = input(3, /* @ts-ignore */
|
|
7701
7883
|
...(ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []));
|
|
7702
7884
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -7717,12 +7899,16 @@ const COL_SPAN = { 1: '', 2: 'lg:col-span-2', 3: 'lg:col-span-3' };
|
|
|
7717
7899
|
const ROW_SPAN = { 1: '', 2: 'row-span-2' };
|
|
7718
7900
|
/** A bento grid cell with optional title/description and configurable span. */
|
|
7719
7901
|
class BuiBentoItem {
|
|
7902
|
+
/** Optional heading rendered above the projected content. */
|
|
7720
7903
|
title = input('', /* @ts-ignore */
|
|
7721
7904
|
...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
|
|
7905
|
+
/** Optional muted description rendered below the title. */
|
|
7722
7906
|
description = input('', /* @ts-ignore */
|
|
7723
7907
|
...(ngDevMode ? [{ debugName: "description" }] : /* istanbul ignore next */ []));
|
|
7908
|
+
/** How many grid columns the cell spans (1-3). */
|
|
7724
7909
|
colSpan = input(1, /* @ts-ignore */
|
|
7725
7910
|
...(ngDevMode ? [{ debugName: "colSpan" }] : /* istanbul ignore next */ []));
|
|
7911
|
+
/** How many grid rows the cell spans (1-2). */
|
|
7726
7912
|
rowSpan = input(1, /* @ts-ignore */
|
|
7727
7913
|
...(ngDevMode ? [{ debugName: "rowSpan" }] : /* istanbul ignore next */ []));
|
|
7728
7914
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -7766,10 +7952,13 @@ const COLUMNS = {
|
|
|
7766
7952
|
};
|
|
7767
7953
|
/** A responsive thumbnail grid. */
|
|
7768
7954
|
class BuiGallery {
|
|
7955
|
+
/** Images to display, given as URLs or `GalleryImage` objects. */
|
|
7769
7956
|
images = input([], /* @ts-ignore */
|
|
7770
7957
|
...(ngDevMode ? [{ debugName: "images" }] : /* istanbul ignore next */ []));
|
|
7958
|
+
/** Number of grid columns (1-6). */
|
|
7771
7959
|
columns = input(3, /* @ts-ignore */
|
|
7772
7960
|
...(ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []));
|
|
7961
|
+
/** Tailwind class controlling thumbnail corner rounding. */
|
|
7773
7962
|
rounded = input('rounded-lg', /* @ts-ignore */
|
|
7774
7963
|
...(ngDevMode ? [{ debugName: "rounded" }] : /* istanbul ignore next */ []));
|
|
7775
7964
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -7803,10 +7992,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
7803
7992
|
|
|
7804
7993
|
/** A veil with a spinner shown over its projected content while `show` is true. */
|
|
7805
7994
|
class BuiLoadingOverlay {
|
|
7995
|
+
/** Whether the loading veil is shown over the projected content. */
|
|
7806
7996
|
show = input(false, /* @ts-ignore */
|
|
7807
7997
|
...(ngDevMode ? [{ debugName: "show" }] : /* istanbul ignore next */ []));
|
|
7998
|
+
/** Text shown beneath the spinner; defaults to "Loading…" when empty. */
|
|
7808
7999
|
message = input('', /* @ts-ignore */
|
|
7809
8000
|
...(ngDevMode ? [{ debugName: "message" }] : /* istanbul ignore next */ []));
|
|
8001
|
+
/** Whether the veil blurs the content behind it. */
|
|
7810
8002
|
blur = input(true, /* @ts-ignore */
|
|
7811
8003
|
...(ngDevMode ? [{ debugName: "blur" }] : /* istanbul ignore next */ []));
|
|
7812
8004
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -7896,22 +8088,31 @@ const INPUT_SIZE = {
|
|
|
7896
8088
|
};
|
|
7897
8089
|
/** A numeric stepper: − / + buttons around a number field, with min/max/step clamping. */
|
|
7898
8090
|
class BuiNumberInput {
|
|
8091
|
+
/** Current number. Two-way bindable with `[(value)]`. */
|
|
7899
8092
|
value = model(0, /* @ts-ignore */
|
|
7900
8093
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
8094
|
+
/** Minimum allowed value, or null for no lower bound. */
|
|
7901
8095
|
min = input(null, /* @ts-ignore */
|
|
7902
8096
|
...(ngDevMode ? [{ debugName: "min" }] : /* istanbul ignore next */ []));
|
|
8097
|
+
/** Maximum allowed value, or null for no upper bound. */
|
|
7903
8098
|
max = input(null, /* @ts-ignore */
|
|
7904
8099
|
...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
|
|
8100
|
+
/** Amount added or subtracted per step. */
|
|
7905
8101
|
stepBy = input(1, { ...(ngDevMode ? { debugName: "stepBy" } : /* istanbul ignore next */ {}), alias: 'step' });
|
|
8102
|
+
/** Whether the control is disabled. Two-way bindable with `[(disabled)]`. */
|
|
7906
8103
|
disabled = model(false, /* @ts-ignore */
|
|
7907
8104
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
8105
|
+
/** Size preset controlling stepper button and field dimensions. */
|
|
7908
8106
|
size = input('default', /* @ts-ignore */
|
|
7909
8107
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
8108
|
+
/** Accessible label for the number field. */
|
|
7910
8109
|
ariaLabel = input('', /* @ts-ignore */
|
|
7911
8110
|
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
7912
8111
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
8112
|
+
/** Accessible label override for the decrease button. */
|
|
7913
8113
|
decreaseLabel = input(/* @ts-ignore */
|
|
7914
8114
|
...(ngDevMode ? [undefined, { debugName: "decreaseLabel" }] : /* istanbul ignore next */ []));
|
|
8115
|
+
/** Accessible label override for the increase button. */
|
|
7915
8116
|
increaseLabel = input(/* @ts-ignore */
|
|
7916
8117
|
...(ngDevMode ? [undefined, { debugName: "increaseLabel" }] : /* istanbul ignore next */ []));
|
|
7917
8118
|
decreaseText = buiLabel('numberInputDecrease', this.decreaseLabel);
|
|
@@ -8093,14 +8294,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
8093
8294
|
|
|
8094
8295
|
/** A radio-group of product variants, rendered as pills or colour swatches. */
|
|
8095
8296
|
class BuiVariantSelector {
|
|
8297
|
+
/** Selected variant value. Two-way bindable with `[(value)]`. */
|
|
8096
8298
|
value = model('', /* @ts-ignore */
|
|
8097
8299
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
8300
|
+
/** Available options, as plain strings or `VariantOption` objects. */
|
|
8098
8301
|
options = input([], /* @ts-ignore */
|
|
8099
8302
|
...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
|
|
8303
|
+
/** Render style: text pills or colour swatches. */
|
|
8100
8304
|
type = input('pill', /* @ts-ignore */
|
|
8101
8305
|
...(ngDevMode ? [{ debugName: "type" }] : /* istanbul ignore next */ []));
|
|
8306
|
+
/** Accessible label for the radio group. */
|
|
8102
8307
|
label = input('Variant', /* @ts-ignore */
|
|
8103
8308
|
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
8309
|
+
/** Whether the whole group is disabled. */
|
|
8104
8310
|
disabled = input(false, /* @ts-ignore */
|
|
8105
8311
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
8106
8312
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -8219,16 +8425,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
8219
8425
|
|
|
8220
8426
|
/** A tiny inline SVG trend chart (line + optional area). Pure, SSR-safe. */
|
|
8221
8427
|
class BuiSparkline {
|
|
8428
|
+
/** Numeric series to plot; needs at least two points to render. */
|
|
8222
8429
|
data = input([], /* @ts-ignore */
|
|
8223
8430
|
...(ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []));
|
|
8431
|
+
/** SVG width in pixels. */
|
|
8224
8432
|
width = input(100, /* @ts-ignore */
|
|
8225
8433
|
...(ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []));
|
|
8434
|
+
/** SVG height in pixels. */
|
|
8226
8435
|
height = input(28, /* @ts-ignore */
|
|
8227
8436
|
...(ngDevMode ? [{ debugName: "height" }] : /* istanbul ignore next */ []));
|
|
8437
|
+
/** Whether to draw the translucent area fill under the line. */
|
|
8228
8438
|
area = input(true, /* @ts-ignore */
|
|
8229
8439
|
...(ngDevMode ? [{ debugName: "area" }] : /* istanbul ignore next */ []));
|
|
8440
|
+
/** Line stroke width in pixels (also used as edge padding). */
|
|
8230
8441
|
strokeWidth = input(1.5, /* @ts-ignore */
|
|
8231
8442
|
...(ngDevMode ? [{ debugName: "strokeWidth" }] : /* istanbul ignore next */ []));
|
|
8443
|
+
/** Accessible label for the sparkline's `aria-label`. */
|
|
8232
8444
|
ariaLabel = input('Trend', /* @ts-ignore */
|
|
8233
8445
|
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
8234
8446
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -8332,23 +8544,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
8332
8544
|
}]
|
|
8333
8545
|
}], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }], area: [{ type: i0.Input, args: [{ isSignal: true, alias: "area", required: false }] }], strokeWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "strokeWidth", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
|
|
8334
8546
|
|
|
8335
|
-
const SIZES = { default: 'h-9 px-4 py-2', sm: 'h-8 gap-1.5 px-3', lg: 'h-10 px-6' };
|
|
8336
8547
|
/** A stateful add-to-cart button: idle → adding → added → idle. Emits `triggered` on click. */
|
|
8337
8548
|
class BuiAddToCart {
|
|
8549
|
+
/** Button text shown in the idle and adding states. */
|
|
8338
8550
|
label = input('Add to cart', /* @ts-ignore */
|
|
8339
8551
|
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
8552
|
+
/** Button text shown briefly in the added (success) state. */
|
|
8340
8553
|
addedLabel = input('Added', /* @ts-ignore */
|
|
8341
8554
|
...(ngDevMode ? [{ debugName: "addedLabel" }] : /* istanbul ignore next */ []));
|
|
8555
|
+
/** Size preset controlling height and padding. */
|
|
8342
8556
|
size = input('default', /* @ts-ignore */
|
|
8343
8557
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
8344
8558
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
8559
|
+
/** Emitted when the button is clicked to add the item. */
|
|
8345
8560
|
triggered = output();
|
|
8346
8561
|
state = signal('idle', /* @ts-ignore */
|
|
8347
8562
|
...(ngDevMode ? [{ debugName: "state" }] : /* istanbul ignore next */ []));
|
|
8348
8563
|
timers = [];
|
|
8349
|
-
|
|
8350
|
-
|
|
8351
|
-
|
|
8564
|
+
// Composes the button's styling (single source of truth via `buttonVariants`); the busy/added
|
|
8565
|
+
// states only recolor on top — tailwind-merge drops the conflicting base background.
|
|
8566
|
+
btnClass = computed(() => cn(buttonVariants({ size: this.size() }), 'disabled:opacity-90', this.state() === 'added' ? 'bg-emerald-600 text-white hover:bg-emerald-600' : '', this.userClass()), /* @ts-ignore */
|
|
8352
8567
|
...(ngDevMode ? [{ debugName: "btnClass" }] : /* istanbul ignore next */ []));
|
|
8353
8568
|
add() {
|
|
8354
8569
|
if (this.state() !== 'idle') {
|
|
@@ -8516,18 +8731,25 @@ const TEXT_COLORS = [
|
|
|
8516
8731
|
];
|
|
8517
8732
|
/** A password field with a live strength meter and (optional) requirement checklist. */
|
|
8518
8733
|
class BuiPasswordStrength {
|
|
8734
|
+
/** Current password value. Two-way bindable with `[(password)]`. */
|
|
8519
8735
|
password = model('', /* @ts-ignore */
|
|
8520
8736
|
...(ngDevMode ? [{ debugName: "password" }] : /* istanbul ignore next */ []));
|
|
8737
|
+
/** Native `name` attribute for the input. */
|
|
8521
8738
|
name = input('password', /* @ts-ignore */
|
|
8522
8739
|
...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
|
|
8740
|
+
/** Input `id`; defaults to `name` when empty. */
|
|
8523
8741
|
id = input('', /* @ts-ignore */
|
|
8524
8742
|
...(ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []));
|
|
8743
|
+
/** Placeholder text for the input. */
|
|
8525
8744
|
placeholder = input('••••••••', /* @ts-ignore */
|
|
8526
8745
|
...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
8746
|
+
/** Whether the requirement checklist is shown. */
|
|
8527
8747
|
showChecklist = input(true, /* @ts-ignore */
|
|
8528
8748
|
...(ngDevMode ? [{ debugName: "showChecklist" }] : /* istanbul ignore next */ []));
|
|
8749
|
+
/** Minimum length required to satisfy the length rule. */
|
|
8529
8750
|
minLength = input(8, /* @ts-ignore */
|
|
8530
8751
|
...(ngDevMode ? [{ debugName: "minLength" }] : /* istanbul ignore next */ []));
|
|
8752
|
+
/** Accessible label for the input. */
|
|
8531
8753
|
label = input('Password', /* @ts-ignore */
|
|
8532
8754
|
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
8533
8755
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -8705,31 +8927,44 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
8705
8927
|
|
|
8706
8928
|
/** A product card: image, badge, wishlist, title, rating, price, and an action slot. */
|
|
8707
8929
|
class BuiProductCard {
|
|
8930
|
+
/** Product title shown as the card heading. */
|
|
8708
8931
|
title = input('', /* @ts-ignore */
|
|
8709
8932
|
...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
|
|
8933
|
+
/** Optional link; when set the title becomes an anchor to this URL. */
|
|
8710
8934
|
href = input('', /* @ts-ignore */
|
|
8711
8935
|
...(ngDevMode ? [{ debugName: "href" }] : /* istanbul ignore next */ []));
|
|
8936
|
+
/** Source URL of the product image. */
|
|
8712
8937
|
image = input('', /* @ts-ignore */
|
|
8713
8938
|
...(ngDevMode ? [{ debugName: "image" }] : /* istanbul ignore next */ []));
|
|
8939
|
+
/** Alt text for the image; falls back to the title when empty. */
|
|
8714
8940
|
imageAlt = input('', /* @ts-ignore */
|
|
8715
8941
|
...(ngDevMode ? [{ debugName: "imageAlt" }] : /* istanbul ignore next */ []));
|
|
8942
|
+
/** Current price; hides the price block when null. */
|
|
8716
8943
|
price = input(null, /* @ts-ignore */
|
|
8717
8944
|
...(ngDevMode ? [{ debugName: "price" }] : /* istanbul ignore next */ []));
|
|
8945
|
+
/** Original price for showing a strikethrough and discount. */
|
|
8718
8946
|
compareAt = input(null, /* @ts-ignore */
|
|
8719
8947
|
...(ngDevMode ? [{ debugName: "compareAt" }] : /* istanbul ignore next */ []));
|
|
8948
|
+
/** Currency symbol prefixed to the price. */
|
|
8720
8949
|
currency = input('$', /* @ts-ignore */
|
|
8721
8950
|
...(ngDevMode ? [{ debugName: "currency" }] : /* istanbul ignore next */ []));
|
|
8951
|
+
/** Badge text; auto-coloured for sale/new keywords. */
|
|
8722
8952
|
badge = input('', /* @ts-ignore */
|
|
8723
8953
|
...(ngDevMode ? [{ debugName: "badge" }] : /* istanbul ignore next */ []));
|
|
8954
|
+
/** Small category label shown above the title. */
|
|
8724
8955
|
category = input('', /* @ts-ignore */
|
|
8725
8956
|
...(ngDevMode ? [{ debugName: "category" }] : /* istanbul ignore next */ []));
|
|
8957
|
+
/** Star rating value; hides the rating row when null. */
|
|
8726
8958
|
rating = input(null, /* @ts-ignore */
|
|
8727
8959
|
...(ngDevMode ? [{ debugName: "rating" }] : /* istanbul ignore next */ []));
|
|
8960
|
+
/** Review count shown next to the rating, when set. */
|
|
8728
8961
|
reviews = input(null, /* @ts-ignore */
|
|
8729
8962
|
...(ngDevMode ? [{ debugName: "reviews" }] : /* istanbul ignore next */ []));
|
|
8963
|
+
/** Whether to show the wishlist (heart) toggle button. */
|
|
8730
8964
|
wishlist = input(false, /* @ts-ignore */
|
|
8731
8965
|
...(ngDevMode ? [{ debugName: "wishlist" }] : /* istanbul ignore next */ []));
|
|
8732
8966
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
8967
|
+
/** Accessible label override for the wishlist toggle button. */
|
|
8733
8968
|
wishlistLabel = input(/* @ts-ignore */
|
|
8734
8969
|
...(ngDevMode ? [undefined, { debugName: "wishlistLabel" }] : /* istanbul ignore next */ []));
|
|
8735
8970
|
wishlistText = buiLabel('productCardWishlist', this.wishlistLabel);
|
|
@@ -8916,16 +9151,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
8916
9151
|
* span carries the full word list so assistive tech reads it once. SSR-safe.
|
|
8917
9152
|
*/
|
|
8918
9153
|
class BuiTypewriter {
|
|
9154
|
+
/** Words cycled through by the typewriter. */
|
|
8919
9155
|
words = input([], /* @ts-ignore */
|
|
8920
9156
|
...(ngDevMode ? [{ debugName: "words" }] : /* istanbul ignore next */ []));
|
|
9157
|
+
/** Delay between typed characters, in milliseconds. */
|
|
8921
9158
|
typeSpeed = input(90, /* @ts-ignore */
|
|
8922
9159
|
...(ngDevMode ? [{ debugName: "typeSpeed" }] : /* istanbul ignore next */ []));
|
|
9160
|
+
/** Delay between deleted characters, in milliseconds. */
|
|
8923
9161
|
deleteSpeed = input(40, /* @ts-ignore */
|
|
8924
9162
|
...(ngDevMode ? [{ debugName: "deleteSpeed" }] : /* istanbul ignore next */ []));
|
|
9163
|
+
/** Pause once a word is fully typed before deleting, in milliseconds. */
|
|
8925
9164
|
pause = input(1600, /* @ts-ignore */
|
|
8926
9165
|
...(ngDevMode ? [{ debugName: "pause" }] : /* istanbul ignore next */ []));
|
|
9166
|
+
/** Whether to restart from the first word after the last. */
|
|
8927
9167
|
loop = input(true, /* @ts-ignore */
|
|
8928
9168
|
...(ngDevMode ? [{ debugName: "loop" }] : /* istanbul ignore next */ []));
|
|
9169
|
+
/** Whether to show the blinking cursor after the text. */
|
|
8929
9170
|
cursor = input(true, /* @ts-ignore */
|
|
8930
9171
|
...(ngDevMode ? [{ debugName: "cursor" }] : /* istanbul ignore next */ []));
|
|
8931
9172
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -9022,14 +9263,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
9022
9263
|
* an `aria-live` region carries the full passage up front. SSR-safe.
|
|
9023
9264
|
*/
|
|
9024
9265
|
class BuiStreamingText {
|
|
9266
|
+
/** Full passage to reveal; also announced up front via an `aria-live` region. */
|
|
9025
9267
|
text = input('', /* @ts-ignore */
|
|
9026
9268
|
...(ngDevMode ? [{ debugName: "text" }] : /* istanbul ignore next */ []));
|
|
9269
|
+
/** Delay in milliseconds between each revealed token. */
|
|
9027
9270
|
speed = input(18, /* @ts-ignore */
|
|
9028
9271
|
...(ngDevMode ? [{ debugName: "speed" }] : /* istanbul ignore next */ []));
|
|
9272
|
+
/** Delay in milliseconds before streaming begins. */
|
|
9029
9273
|
startDelay = input(0, /* @ts-ignore */
|
|
9030
9274
|
...(ngDevMode ? [{ debugName: "startDelay" }] : /* istanbul ignore next */ []));
|
|
9275
|
+
/** Granularity of the reveal — one character or one word at a time. */
|
|
9031
9276
|
by = input('char', /* @ts-ignore */
|
|
9032
9277
|
...(ngDevMode ? [{ debugName: "by" }] : /* istanbul ignore next */ []));
|
|
9278
|
+
/** Whether to show a blinking caret while streaming. */
|
|
9033
9279
|
caret = input(true, /* @ts-ignore */
|
|
9034
9280
|
...(ngDevMode ? [{ debugName: "caret" }] : /* istanbul ignore next */ []));
|
|
9035
9281
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -9104,10 +9350,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
9104
9350
|
|
|
9105
9351
|
/** A card whose border has a light beam continuously travelling around it. */
|
|
9106
9352
|
class BuiBorderBeam {
|
|
9353
|
+
/** Seconds for the beam to complete one full lap. */
|
|
9107
9354
|
duration = input(6, /* @ts-ignore */
|
|
9108
9355
|
...(ngDevMode ? [{ debugName: "duration" }] : /* istanbul ignore next */ []));
|
|
9356
|
+
/** Beam colour; defaults to the primary theme colour. */
|
|
9109
9357
|
color = input(null, /* @ts-ignore */
|
|
9110
9358
|
...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
|
|
9359
|
+
/** Border/beam thickness in pixels. */
|
|
9111
9360
|
size = input(2, /* @ts-ignore */
|
|
9112
9361
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
9113
9362
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -9140,8 +9389,10 @@ function pseudo(seed) {
|
|
|
9140
9389
|
}
|
|
9141
9390
|
/** Animated falling meteor streaks behind content. Decorative + SSR-safe. */
|
|
9142
9391
|
class BuiMeteors {
|
|
9392
|
+
/** Number of meteor streaks to render. */
|
|
9143
9393
|
count = input(20, /* @ts-ignore */
|
|
9144
9394
|
...(ngDevMode ? [{ debugName: "count" }] : /* istanbul ignore next */ []));
|
|
9395
|
+
/** Meteor colour; defaults to a translucent foreground tint. */
|
|
9145
9396
|
color = input(null, /* @ts-ignore */
|
|
9146
9397
|
...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
|
|
9147
9398
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -9199,8 +9450,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
9199
9450
|
|
|
9200
9451
|
/** An animated aurora / northern-lights gradient background with content overlaid. */
|
|
9201
9452
|
class BuiAurora {
|
|
9453
|
+
/** Blur radius of the aurora layer in pixels. */
|
|
9202
9454
|
blur = input(60, /* @ts-ignore */
|
|
9203
9455
|
...(ngDevMode ? [{ debugName: "blur" }] : /* istanbul ignore next */ []));
|
|
9456
|
+
/** Seconds for one full drift animation cycle. */
|
|
9204
9457
|
speed = input(12, /* @ts-ignore */
|
|
9205
9458
|
...(ngDevMode ? [{ debugName: "speed" }] : /* istanbul ignore next */ []));
|
|
9206
9459
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -9226,14 +9479,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
9226
9479
|
|
|
9227
9480
|
/** A seamless infinite scroll of `items` (logos, badges, testimonials…). */
|
|
9228
9481
|
class BuiMarquee {
|
|
9482
|
+
/** Items rendered in sequence and scrolled seamlessly. */
|
|
9229
9483
|
items = input([], /* @ts-ignore */
|
|
9230
9484
|
...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
|
|
9485
|
+
/** Scroll direction; `up`/`down` switch the marquee to a vertical track. */
|
|
9231
9486
|
direction = input('left', /* @ts-ignore */
|
|
9232
9487
|
...(ngDevMode ? [{ debugName: "direction" }] : /* istanbul ignore next */ []));
|
|
9488
|
+
/** Time for one full loop, as a CSS duration (e.g. `40s`). */
|
|
9233
9489
|
duration = input('40s', /* @ts-ignore */
|
|
9234
9490
|
...(ngDevMode ? [{ debugName: "duration" }] : /* istanbul ignore next */ []));
|
|
9491
|
+
/** Spacing between items, as a CSS length. */
|
|
9235
9492
|
gap = input('1rem', /* @ts-ignore */
|
|
9236
9493
|
...(ngDevMode ? [{ debugName: "gap" }] : /* istanbul ignore next */ []));
|
|
9494
|
+
/** Whether hovering pauses the scroll animation. */
|
|
9237
9495
|
pauseOnHover = input(true, /* @ts-ignore */
|
|
9238
9496
|
...(ngDevMode ? [{ debugName: "pauseOnHover" }] : /* istanbul ignore next */ []));
|
|
9239
9497
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -9313,6 +9571,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
9313
9571
|
|
|
9314
9572
|
/** A mobile bottom tab bar. Use `[buiBottomNavItem]` on each `<a>`/`<button>`. */
|
|
9315
9573
|
class BuiBottomNavigation {
|
|
9574
|
+
/** Accessible label applied to the navigation element. */
|
|
9316
9575
|
ariaLabel = input('Bottom navigation', /* @ts-ignore */
|
|
9317
9576
|
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
9318
9577
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -9335,10 +9594,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
9335
9594
|
|
|
9336
9595
|
/** A single bottom-navigation tab. Project the icon; pass `label`, `active`, `badge`. */
|
|
9337
9596
|
class BuiBottomNavigationItem {
|
|
9597
|
+
/** Caption shown beneath the projected icon; hidden when empty. */
|
|
9338
9598
|
label = input('', /* @ts-ignore */
|
|
9339
9599
|
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
9600
|
+
/** Whether this tab is the current page; sets `aria-current="page"`. */
|
|
9340
9601
|
active = input(false, /* @ts-ignore */
|
|
9341
9602
|
...(ngDevMode ? [{ debugName: "active" }] : /* istanbul ignore next */ []));
|
|
9603
|
+
/** Badge content; `true` renders a dot, a string/number renders a count, `null` shows nothing. */
|
|
9342
9604
|
badge = input(null, /* @ts-ignore */
|
|
9343
9605
|
...(ngDevMode ? [{ debugName: "badge" }] : /* istanbul ignore next */ []));
|
|
9344
9606
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -9397,6 +9659,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
9397
9659
|
* viewport. Server-renders fully revealed (no-JS safe). SSR-safe.
|
|
9398
9660
|
*/
|
|
9399
9661
|
class BuiTextReveal {
|
|
9662
|
+
/** Text split into words that brighten one by one as it scrolls into view. */
|
|
9400
9663
|
text = input('', /* @ts-ignore */
|
|
9401
9664
|
...(ngDevMode ? [{ debugName: "text" }] : /* istanbul ignore next */ []));
|
|
9402
9665
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -9456,8 +9719,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
9456
9719
|
|
|
9457
9720
|
/** Shifts its content relative to scroll for a depth/parallax effect. SSR-safe. */
|
|
9458
9721
|
class BuiParallax {
|
|
9722
|
+
/** Parallax intensity; higher moves content more per scroll. */
|
|
9459
9723
|
speed = input(0.3, /* @ts-ignore */
|
|
9460
9724
|
...(ngDevMode ? [{ debugName: "speed" }] : /* istanbul ignore next */ []));
|
|
9725
|
+
/** Axis along which the content shifts. */
|
|
9461
9726
|
axis = input('y', /* @ts-ignore */
|
|
9462
9727
|
...(ngDevMode ? [{ debugName: "axis" }] : /* istanbul ignore next */ []));
|
|
9463
9728
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -9502,9 +9767,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
9502
9767
|
|
|
9503
9768
|
/** A "on this page" nav that highlights the section currently in view (IntersectionObserver). */
|
|
9504
9769
|
class BuiScrollspy {
|
|
9770
|
+
/** Sections to track; each item links to and observes its `href` anchor. */
|
|
9505
9771
|
items = input([], /* @ts-ignore */
|
|
9506
9772
|
...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
|
|
9507
9773
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
9774
|
+
/** Accessible label for the nav element; falls back to a localized default. */
|
|
9508
9775
|
label = input(/* @ts-ignore */
|
|
9509
9776
|
...(ngDevMode ? [undefined, { debugName: "label" }] : /* istanbul ignore next */ []));
|
|
9510
9777
|
labelText = buiLabel('scrollspy', this.label);
|
|
@@ -9597,18 +9864,25 @@ const noop$8 = () => { };
|
|
|
9597
9864
|
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';
|
|
9598
9865
|
/** A styled time field: a native `<input type="time">`, or hour/minute selects in `select` mode. */
|
|
9599
9866
|
class BuiTimeField {
|
|
9867
|
+
/** Selected time as `HH:mm`. Two-way bindable with `[(value)]`. */
|
|
9600
9868
|
value = model('', /* @ts-ignore */
|
|
9601
9869
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
9870
|
+
/** Native `name` attribute for the input. */
|
|
9602
9871
|
name = input('', /* @ts-ignore */
|
|
9603
9872
|
...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
|
|
9873
|
+
/** Native `id` attribute for the input. */
|
|
9604
9874
|
id = input('', /* @ts-ignore */
|
|
9605
9875
|
...(ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []));
|
|
9876
|
+
/** Earliest allowed time (`HH:mm`) in `input` mode. */
|
|
9606
9877
|
min = input('', /* @ts-ignore */
|
|
9607
9878
|
...(ngDevMode ? [{ debugName: "min" }] : /* istanbul ignore next */ []));
|
|
9879
|
+
/** Latest allowed time (`HH:mm`) in `input` mode. */
|
|
9608
9880
|
max = input('', /* @ts-ignore */
|
|
9609
9881
|
...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
|
|
9882
|
+
/** Whether to include seconds in `input` mode. */
|
|
9610
9883
|
seconds = input(false, /* @ts-ignore */
|
|
9611
9884
|
...(ngDevMode ? [{ debugName: "seconds" }] : /* istanbul ignore next */ []));
|
|
9885
|
+
/** Whether the field is disabled. Two-way bindable with `[(disabled)]`. */
|
|
9612
9886
|
disabled = model(false, /* @ts-ignore */
|
|
9613
9887
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
9614
9888
|
/** `select` renders hour + minute dropdowns instead of a native time input. */
|
|
@@ -9617,6 +9891,7 @@ class BuiTimeField {
|
|
|
9617
9891
|
/** Minute step used in `select` mode. */
|
|
9618
9892
|
minuteStep = input(5, /* @ts-ignore */
|
|
9619
9893
|
...(ngDevMode ? [{ debugName: "minuteStep" }] : /* istanbul ignore next */ []));
|
|
9894
|
+
/** Accessible label for the field. */
|
|
9620
9895
|
ariaLabel = input('', /* @ts-ignore */
|
|
9621
9896
|
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
9622
9897
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -9767,10 +10042,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
9767
10042
|
|
|
9768
10043
|
/** A group of toggle buttons (single or multiple selection). Use `button[buiToggleGroupItem]`. */
|
|
9769
10044
|
class BuiToggleGroup {
|
|
10045
|
+
/** Selection mode: single value or an array of values. */
|
|
9770
10046
|
type = input('single', /* @ts-ignore */
|
|
9771
10047
|
...(ngDevMode ? [{ debugName: "type" }] : /* istanbul ignore next */ []));
|
|
10048
|
+
/** Selected value(s). Two-way bindable with `[(value)]`. */
|
|
9772
10049
|
value = model(null, /* @ts-ignore */
|
|
9773
10050
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
10051
|
+
/** Layout direction of the group. */
|
|
9774
10052
|
orientation = input('horizontal', /* @ts-ignore */
|
|
9775
10053
|
...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
|
|
9776
10054
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -9816,8 +10094,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
9816
10094
|
|
|
9817
10095
|
/** A single item within a `bui-toggle-group`. */
|
|
9818
10096
|
class BuiToggleGroupItem {
|
|
10097
|
+
/** Value this item contributes to the parent group's selection. */
|
|
9819
10098
|
value = input('', /* @ts-ignore */
|
|
9820
10099
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
10100
|
+
/** Whether this item is disabled. */
|
|
9821
10101
|
disabled = input(false, /* @ts-ignore */
|
|
9822
10102
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
9823
10103
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -9850,12 +10130,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
9850
10130
|
const noop$7 = () => { };
|
|
9851
10131
|
/** A free-text tags input: type and press Enter (or comma) to add chips; Backspace removes. */
|
|
9852
10132
|
class BuiTagsInput {
|
|
10133
|
+
/** Current tags. Two-way bindable with `[(tags)]`. */
|
|
9853
10134
|
tags = model([], /* @ts-ignore */
|
|
9854
10135
|
...(ngDevMode ? [{ debugName: "tags" }] : /* istanbul ignore next */ []));
|
|
10136
|
+
/** Placeholder text shown in the entry field. */
|
|
9855
10137
|
placeholder = input('Add tag…', /* @ts-ignore */
|
|
9856
10138
|
...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
10139
|
+
/** Maximum number of tags allowed, or `null` for no limit. */
|
|
9857
10140
|
max = input(null, /* @ts-ignore */
|
|
9858
10141
|
...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
|
|
10142
|
+
/** Whether the input is disabled. Two-way bindable with `[(disabled)]`. */
|
|
9859
10143
|
disabled = model(false, /* @ts-ignore */
|
|
9860
10144
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
9861
10145
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -9980,10 +10264,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
9980
10264
|
|
|
9981
10265
|
/** Click-to-edit inline text: shows a value, swaps to an input on click. Enter commits, Escape cancels. */
|
|
9982
10266
|
class BuiEditable {
|
|
10267
|
+
/** Current text. Two-way bindable with `[(value)]`. */
|
|
9983
10268
|
value = model('', /* @ts-ignore */
|
|
9984
10269
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
10270
|
+
/** Text shown when the value is empty. */
|
|
9985
10271
|
placeholder = input('Empty', /* @ts-ignore */
|
|
9986
10272
|
...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
10273
|
+
/** Noun used in the field's accessible label. */
|
|
9987
10274
|
label = input('value', /* @ts-ignore */
|
|
9988
10275
|
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
9989
10276
|
/** Edit in a multi-line textarea instead of a single-line input. */
|
|
@@ -10110,10 +10397,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
10110
10397
|
|
|
10111
10398
|
/** A floating action button that expands to a stack of actions. Closes on Escape / outside click. */
|
|
10112
10399
|
class BuiSpeedDial {
|
|
10400
|
+
/** Actions revealed when the dial expands. */
|
|
10113
10401
|
actions = input([], /* @ts-ignore */
|
|
10114
10402
|
...(ngDevMode ? [{ debugName: "actions" }] : /* istanbul ignore next */ []));
|
|
10403
|
+
/** Direction the action stack expands relative to the trigger button. */
|
|
10115
10404
|
direction = input('up', /* @ts-ignore */
|
|
10116
10405
|
...(ngDevMode ? [{ debugName: "direction" }] : /* istanbul ignore next */ []));
|
|
10406
|
+
/** Accessible label for the trigger button. */
|
|
10117
10407
|
label = input('Open actions', /* @ts-ignore */
|
|
10118
10408
|
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
10119
10409
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -10244,18 +10534,25 @@ const CIRC = 2 * Math.PI * RADIUS;
|
|
|
10244
10534
|
const ARC = CIRC * 0.75;
|
|
10245
10535
|
/** A rotary dial input (role="slider"). Drag, scroll, or use the keyboard. 270° sweep. */
|
|
10246
10536
|
class BuiKnob {
|
|
10537
|
+
/** Current value. Two-way bindable with `[(value)]`. */
|
|
10247
10538
|
value = model(50, /* @ts-ignore */
|
|
10248
10539
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
10540
|
+
/** Minimum value at the start of the dial's sweep. */
|
|
10249
10541
|
min = input(0, /* @ts-ignore */
|
|
10250
10542
|
...(ngDevMode ? [{ debugName: "min" }] : /* istanbul ignore next */ []));
|
|
10543
|
+
/** Maximum value at the end of the dial's sweep. */
|
|
10251
10544
|
max = input(100, /* @ts-ignore */
|
|
10252
10545
|
...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
|
|
10546
|
+
/** Increment applied per arrow key, scroll or drag snap. */
|
|
10253
10547
|
step = input(1, /* @ts-ignore */
|
|
10254
10548
|
...(ngDevMode ? [{ debugName: "step" }] : /* istanbul ignore next */ []));
|
|
10549
|
+
/** Size preset controlling the knob's diameter and text size. */
|
|
10255
10550
|
size = input('default', /* @ts-ignore */
|
|
10256
10551
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
10552
|
+
/** Accessible label announced for the slider. */
|
|
10257
10553
|
label = input('Value', /* @ts-ignore */
|
|
10258
10554
|
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
10555
|
+
/** Whether the knob is disabled. Two-way bindable with `[(disabled)]`. */
|
|
10259
10556
|
disabled = model(false, /* @ts-ignore */
|
|
10260
10557
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
10261
10558
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -10500,16 +10797,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
10500
10797
|
|
|
10501
10798
|
/** A lazy image with a blurred placeholder / skeleton and a graceful error state. */
|
|
10502
10799
|
class BuiImage {
|
|
10800
|
+
/** Source URL of the full image to load. */
|
|
10503
10801
|
src = input('', /* @ts-ignore */
|
|
10504
10802
|
...(ngDevMode ? [{ debugName: "src" }] : /* istanbul ignore next */ []));
|
|
10803
|
+
/** Alternative text for the image. */
|
|
10505
10804
|
alt = input('', /* @ts-ignore */
|
|
10506
10805
|
...(ngDevMode ? [{ debugName: "alt" }] : /* istanbul ignore next */ []));
|
|
10806
|
+
/** CSS `aspect-ratio` reserved for the image (e.g. `16 / 9`). */
|
|
10507
10807
|
ratio = input('', /* @ts-ignore */
|
|
10508
10808
|
...(ngDevMode ? [{ debugName: "ratio" }] : /* istanbul ignore next */ []));
|
|
10809
|
+
/** URL of a low-res image shown blurred while the full image loads. */
|
|
10509
10810
|
placeholder = input('', /* @ts-ignore */
|
|
10510
10811
|
...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
10812
|
+
/** Tailwind class controlling corner rounding. */
|
|
10511
10813
|
rounded = input('rounded-lg', /* @ts-ignore */
|
|
10512
10814
|
...(ngDevMode ? [{ debugName: "rounded" }] : /* istanbul ignore next */ []));
|
|
10815
|
+
/** How the image fills its box: `cover` crops, `contain` letterboxes. */
|
|
10513
10816
|
fit = input('cover', /* @ts-ignore */
|
|
10514
10817
|
...(ngDevMode ? [{ debugName: "fit" }] : /* istanbul ignore next */ []));
|
|
10515
10818
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -10615,10 +10918,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
10615
10918
|
|
|
10616
10919
|
/** A collapsible "reasoning" / chain-of-thought disclosure. */
|
|
10617
10920
|
class BuiReasoning {
|
|
10921
|
+
/** Whether the disclosure is expanded. Two-way bindable with `[(open)]`. */
|
|
10618
10922
|
open = model(false, /* @ts-ignore */
|
|
10619
10923
|
...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
|
|
10924
|
+
/** Trigger label shown when no `duration` is set. */
|
|
10620
10925
|
label = input('Reasoning', /* @ts-ignore */
|
|
10621
10926
|
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
10927
|
+
/** When set, the trigger reads "Thought for {duration}" instead of `label`. */
|
|
10622
10928
|
duration = input('', /* @ts-ignore */
|
|
10623
10929
|
...(ngDevMode ? [{ debugName: "duration" }] : /* istanbul ignore next */ []));
|
|
10624
10930
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -10705,14 +11011,19 @@ const STATUS = {
|
|
|
10705
11011
|
};
|
|
10706
11012
|
/** An AI tool-call card with a status indicator and collapsible arguments / result. */
|
|
10707
11013
|
class BuiToolCall {
|
|
11014
|
+
/** Name of the invoked tool, shown as inline code in the header. */
|
|
10708
11015
|
name = input('tool', /* @ts-ignore */
|
|
10709
11016
|
...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
|
|
11017
|
+
/** Execution status; drives the colored status dot and label. */
|
|
10710
11018
|
status = input('success', /* @ts-ignore */
|
|
10711
11019
|
...(ngDevMode ? [{ debugName: "status" }] : /* istanbul ignore next */ []));
|
|
11020
|
+
/** Tool arguments shown in the collapsible body when present. */
|
|
10712
11021
|
args = input('', /* @ts-ignore */
|
|
10713
11022
|
...(ngDevMode ? [{ debugName: "args" }] : /* istanbul ignore next */ []));
|
|
11023
|
+
/** Tool result shown in the collapsible body when present. */
|
|
10714
11024
|
result = input('', /* @ts-ignore */
|
|
10715
11025
|
...(ngDevMode ? [{ debugName: "result" }] : /* istanbul ignore next */ []));
|
|
11026
|
+
/** Whether the arguments/result panel is expanded. Two-way bindable with `[(open)]`. */
|
|
10716
11027
|
open = model(false, /* @ts-ignore */
|
|
10717
11028
|
...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
|
|
10718
11029
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -10814,6 +11125,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
10814
11125
|
|
|
10815
11126
|
/** A scrollable conversation log (`role="log"`). Use `bui-chat-message` for bubbles. */
|
|
10816
11127
|
class BuiChat {
|
|
11128
|
+
/** Accessible label announced for the conversation log region. */
|
|
10817
11129
|
ariaLabel = input('Conversation', /* @ts-ignore */
|
|
10818
11130
|
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
10819
11131
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -10839,14 +11151,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
10839
11151
|
|
|
10840
11152
|
/** A chat bubble. `role="user"` aligns end with a primary bubble; otherwise assistant-styled. */
|
|
10841
11153
|
class BuiChatMessage {
|
|
11154
|
+
/** Author role; `'user'` aligns the bubble to the end with primary styling, else assistant-styled. */
|
|
10842
11155
|
role = input('assistant', /* @ts-ignore */
|
|
10843
11156
|
...(ngDevMode ? [{ debugName: "role" }] : /* istanbul ignore next */ []));
|
|
11157
|
+
/** Display name shown above the bubble; also seeds the fallback initials avatar. */
|
|
10844
11158
|
name = input('', /* @ts-ignore */
|
|
10845
11159
|
...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
|
|
11160
|
+
/** Optional timestamp text shown beside the name. */
|
|
10846
11161
|
time = input('', /* @ts-ignore */
|
|
10847
11162
|
...(ngDevMode ? [{ debugName: "time" }] : /* istanbul ignore next */ []));
|
|
11163
|
+
/** Avatar image URL; when empty, initials (or an emoji) are shown instead. */
|
|
10848
11164
|
avatar = input('', /* @ts-ignore */
|
|
10849
11165
|
...(ngDevMode ? [{ debugName: "avatar" }] : /* istanbul ignore next */ []));
|
|
11166
|
+
/** When true, shows an animated typing indicator instead of the message content. */
|
|
10850
11167
|
typing = input(false, /* @ts-ignore */
|
|
10851
11168
|
...(ngDevMode ? [{ debugName: "typing" }] : /* istanbul ignore next */ []));
|
|
10852
11169
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -10960,10 +11277,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
10960
11277
|
const PALETTE$1 = ['#6366f1', '#ec4899', '#f59e0b', '#10b981', '#3b82f6', '#ef4444'];
|
|
10961
11278
|
/** A celebratory particle burst. Project a trigger (or use the default button) to fire it. */
|
|
10962
11279
|
class BuiConfetti {
|
|
11280
|
+
/** Number of particles emitted per burst. */
|
|
10963
11281
|
count = input(80, /* @ts-ignore */
|
|
10964
11282
|
...(ngDevMode ? [{ debugName: "count" }] : /* istanbul ignore next */ []));
|
|
11283
|
+
/** Horizontal spread factor of the burst. */
|
|
10965
11284
|
spread = input(70, /* @ts-ignore */
|
|
10966
11285
|
...(ngDevMode ? [{ debugName: "spread" }] : /* istanbul ignore next */ []));
|
|
11286
|
+
/** Particle colours; defaults to the built-in palette. */
|
|
10967
11287
|
colors = input(null, /* @ts-ignore */
|
|
10968
11288
|
...(ngDevMode ? [{ debugName: "colors" }] : /* istanbul ignore next */ []));
|
|
10969
11289
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -11048,8 +11368,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
11048
11368
|
|
|
11049
11369
|
/** A step indicator. The `value` (1-based) marks the active step. Use `li[buiStepperItem]`. */
|
|
11050
11370
|
class BuiStepper {
|
|
11371
|
+
/** The active step as a 1-based index; items at lower values are marked completed. */
|
|
11051
11372
|
value = input(1, /* @ts-ignore */
|
|
11052
11373
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
11374
|
+
/** Layout direction of the steps, horizontal or vertical. */
|
|
11053
11375
|
orientation = input('horizontal', /* @ts-ignore */
|
|
11054
11376
|
...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
|
|
11055
11377
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -11094,6 +11416,7 @@ const INDICATOR = {
|
|
|
11094
11416
|
};
|
|
11095
11417
|
/** A single step within a `bui-stepper`. Resolves completed/active/inactive from the parent. */
|
|
11096
11418
|
class BuiStepperItem {
|
|
11419
|
+
/** This item's 1-based position; compared against the parent's value to derive its state. */
|
|
11097
11420
|
step = input(1, /* @ts-ignore */
|
|
11098
11421
|
...(ngDevMode ? [{ debugName: "step" }] : /* istanbul ignore next */ []));
|
|
11099
11422
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -11189,17 +11512,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
11189
11512
|
const noop$5 = () => { };
|
|
11190
11513
|
/** A one-time-password input: a row of single-character boxes with focus management + paste. */
|
|
11191
11514
|
class BuiInputOtp {
|
|
11515
|
+
/** Current code. Two-way bindable with `[(value)]`. */
|
|
11192
11516
|
value = model('', /* @ts-ignore */
|
|
11193
11517
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
11518
|
+
/** Number of character boxes (length of the code). */
|
|
11194
11519
|
maxlength = input(6, /* @ts-ignore */
|
|
11195
11520
|
...(ngDevMode ? [{ debugName: "maxlength" }] : /* istanbul ignore next */ []));
|
|
11521
|
+
/** Whether the input is disabled. Two-way bindable with `[(disabled)]`. */
|
|
11196
11522
|
disabled = model(false, /* @ts-ignore */
|
|
11197
11523
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
11524
|
+
/** Whether to allow letters as well as digits. */
|
|
11198
11525
|
alphanumeric = input(false, /* @ts-ignore */
|
|
11199
11526
|
...(ngDevMode ? [{ debugName: "alphanumeric" }] : /* istanbul ignore next */ []));
|
|
11200
11527
|
/** Insert a visual separator after every N boxes (0 = none). */
|
|
11201
11528
|
groupSize = input(0, /* @ts-ignore */
|
|
11202
11529
|
...(ngDevMode ? [{ debugName: "groupSize" }] : /* istanbul ignore next */ []));
|
|
11530
|
+
/** Base accessible label; each box appends its position. */
|
|
11203
11531
|
ariaLabel = input('One-time password', /* @ts-ignore */
|
|
11204
11532
|
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
11205
11533
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -11341,19 +11669,26 @@ const COUNTRIES = [
|
|
|
11341
11669
|
];
|
|
11342
11670
|
/** A phone number field with a country-code selector. */
|
|
11343
11671
|
class BuiPhoneInput {
|
|
11672
|
+
/** Entered phone number. Two-way bindable with `[(value)]`. */
|
|
11344
11673
|
value = model('', /* @ts-ignore */
|
|
11345
11674
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
11675
|
+
/** Selected country code. Two-way bindable with `[(country)]`. */
|
|
11346
11676
|
country = model('US', /* @ts-ignore */
|
|
11347
11677
|
...(ngDevMode ? [{ debugName: "country" }] : /* istanbul ignore next */ []));
|
|
11678
|
+
/** Name attribute applied to the number input for form submission. */
|
|
11348
11679
|
name = input('', /* @ts-ignore */
|
|
11349
11680
|
...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
|
|
11681
|
+
/** Id attribute applied to the number input. */
|
|
11350
11682
|
id = input('', /* @ts-ignore */
|
|
11351
11683
|
...(ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []));
|
|
11684
|
+
/** Placeholder text for the number input. */
|
|
11352
11685
|
placeholder = input('Phone number', /* @ts-ignore */
|
|
11353
11686
|
...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
11354
11687
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
11688
|
+
/** Accessible label override for the country selector. */
|
|
11355
11689
|
countryLabel = input(/* @ts-ignore */
|
|
11356
11690
|
...(ngDevMode ? [undefined, { debugName: "countryLabel" }] : /* istanbul ignore next */ []));
|
|
11691
|
+
/** Accessible label override for the number input. */
|
|
11357
11692
|
numberLabel = input(/* @ts-ignore */
|
|
11358
11693
|
...(ngDevMode ? [undefined, { debugName: "numberLabel" }] : /* istanbul ignore next */ []));
|
|
11359
11694
|
countryText = buiLabel('phoneInputCountry', this.countryLabel);
|
|
@@ -11423,20 +11758,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
11423
11758
|
|
|
11424
11759
|
/** A chat composer: an autosizing textarea with a send button. Emits `submitted` on send. */
|
|
11425
11760
|
class BuiPromptInput {
|
|
11761
|
+
/** Current textarea content. Two-way bindable with `[(value)]`. */
|
|
11426
11762
|
value = model('', /* @ts-ignore */
|
|
11427
11763
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
11764
|
+
/** Placeholder text shown when the textarea is empty. */
|
|
11428
11765
|
placeholder = input('Send a message…', /* @ts-ignore */
|
|
11429
11766
|
...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
11767
|
+
/** Whether to show the attachment button. */
|
|
11430
11768
|
attachable = input(false, /* @ts-ignore */
|
|
11431
11769
|
...(ngDevMode ? [{ debugName: "attachable" }] : /* istanbul ignore next */ []));
|
|
11770
|
+
/** Disables the textarea and send button. */
|
|
11432
11771
|
disabled = input(false, /* @ts-ignore */
|
|
11433
11772
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
11773
|
+
/** Accessible label for the message textarea. */
|
|
11434
11774
|
ariaLabel = input('Message', /* @ts-ignore */
|
|
11435
11775
|
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
11776
|
+
/** Overrides the localized accessible label for the attachment button. */
|
|
11436
11777
|
attachLabel = input(/* @ts-ignore */
|
|
11437
11778
|
...(ngDevMode ? [undefined, { debugName: "attachLabel" }] : /* istanbul ignore next */ []));
|
|
11779
|
+
/** Overrides the localized accessible label for the send button. */
|
|
11438
11780
|
sendLabel = input(/* @ts-ignore */
|
|
11439
11781
|
...(ngDevMode ? [undefined, { debugName: "sendLabel" }] : /* istanbul ignore next */ []));
|
|
11782
|
+
/** Emitted with the trimmed message text when the user sends. */
|
|
11440
11783
|
submitted = output();
|
|
11441
11784
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
11442
11785
|
attachText = buiLabel('promptInputAttach', this.attachLabel);
|
|
@@ -11606,6 +11949,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
11606
11949
|
|
|
11607
11950
|
/** A contribution-style heatmap grid (7 rows). Pass `data` or get a deterministic demo. */
|
|
11608
11951
|
class BuiHeatmap {
|
|
11952
|
+
/** Per-cell counts filled column-first; empty yields a demo dataset. */
|
|
11609
11953
|
data = input([], /* @ts-ignore */
|
|
11610
11954
|
...(ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []));
|
|
11611
11955
|
/** Smaller cells + tighter gaps. */
|
|
@@ -11682,12 +12026,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
11682
12026
|
|
|
11683
12027
|
/** An inline citation marker that reveals a source popover on hover / focus / click. */
|
|
11684
12028
|
class BuiCitation {
|
|
12029
|
+
/** Citation number shown in the inline `[n]` marker. */
|
|
11685
12030
|
index = input(1, /* @ts-ignore */
|
|
11686
12031
|
...(ngDevMode ? [{ debugName: "index" }] : /* istanbul ignore next */ []));
|
|
12032
|
+
/** Source title shown at the top of the popover. */
|
|
11687
12033
|
title = input('', /* @ts-ignore */
|
|
11688
12034
|
...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
|
|
12035
|
+
/** Source URL; its hostname is derived and shown in the popover. */
|
|
11689
12036
|
url = input('', /* @ts-ignore */
|
|
11690
12037
|
...(ngDevMode ? [{ debugName: "url" }] : /* istanbul ignore next */ []));
|
|
12038
|
+
/** Short excerpt from the source shown in the popover. */
|
|
11691
12039
|
snippet = input('', /* @ts-ignore */
|
|
11692
12040
|
...(ngDevMode ? [{ debugName: "snippet" }] : /* istanbul ignore next */ []));
|
|
11693
12041
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -11809,8 +12157,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
11809
12157
|
|
|
11810
12158
|
/** A two-panel resizable group. Hosts the shared size; the handle drags it. */
|
|
11811
12159
|
class BuiResizablePanelGroup {
|
|
12160
|
+
/** Layout axis the panels are arranged and resized along. */
|
|
11812
12161
|
direction = input('horizontal', /* @ts-ignore */
|
|
11813
12162
|
...(ngDevMode ? [{ debugName: "direction" }] : /* istanbul ignore next */ []));
|
|
12163
|
+
/** Size of the primary panel as a percentage (10-90). Two-way bindable with `[(size)]`. */
|
|
11814
12164
|
size = model(50, /* @ts-ignore */
|
|
11815
12165
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
11816
12166
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -11860,6 +12210,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
11860
12210
|
|
|
11861
12211
|
/** A panel inside a `bui-resizable-panel-group`. Mark one `primary` to make it the sized panel. */
|
|
11862
12212
|
class BuiResizablePanel {
|
|
12213
|
+
/** Whether this is the sized panel driven by the group's `size`; the other panel flexes. */
|
|
11863
12214
|
primary = input(false, /* @ts-ignore */
|
|
11864
12215
|
...(ngDevMode ? [{ debugName: "primary" }] : /* istanbul ignore next */ []));
|
|
11865
12216
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -11883,8 +12234,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
11883
12234
|
|
|
11884
12235
|
/** The draggable divider between two resizable panels. */
|
|
11885
12236
|
class BuiResizableHandle {
|
|
12237
|
+
/** Whether to render a visible grip indicator on the divider. */
|
|
11886
12238
|
withHandle = input(false, /* @ts-ignore */
|
|
11887
12239
|
...(ngDevMode ? [{ debugName: "withHandle" }] : /* istanbul ignore next */ []));
|
|
12240
|
+
/** Accessible label for the handle; falls back to a localized default. */
|
|
11888
12241
|
ariaLabel = input(/* @ts-ignore */
|
|
11889
12242
|
...(ngDevMode ? [undefined, { debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
11890
12243
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -11945,23 +12298,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
11945
12298
|
|
|
11946
12299
|
/** A styled HTML5 video with a poster + play-button facade. */
|
|
11947
12300
|
class BuiVideo {
|
|
12301
|
+
/** Video source URL for the underlying `<video>` element. */
|
|
11948
12302
|
src = input('', /* @ts-ignore */
|
|
11949
12303
|
...(ngDevMode ? [{ debugName: "src" }] : /* istanbul ignore next */ []));
|
|
12304
|
+
/** Poster image URL shown before playback starts. */
|
|
11950
12305
|
poster = input('', /* @ts-ignore */
|
|
11951
12306
|
...(ngDevMode ? [{ debugName: "poster" }] : /* istanbul ignore next */ []));
|
|
12307
|
+
/** Aspect ratio: `video` (16/9), `square` (1/1), or any CSS ratio. */
|
|
11952
12308
|
aspect = input('video', /* @ts-ignore */
|
|
11953
12309
|
...(ngDevMode ? [{ debugName: "aspect" }] : /* istanbul ignore next */ []));
|
|
12310
|
+
/** Whether to show native controls once playback has started. */
|
|
11954
12311
|
controls = input(true, /* @ts-ignore */
|
|
11955
12312
|
...(ngDevMode ? [{ debugName: "controls" }] : /* istanbul ignore next */ []));
|
|
12313
|
+
/** Whether to start playing automatically (hides the play facade). */
|
|
11956
12314
|
autoplay = input(false, /* @ts-ignore */
|
|
11957
12315
|
...(ngDevMode ? [{ debugName: "autoplay" }] : /* istanbul ignore next */ []));
|
|
12316
|
+
/** Whether the video loops when it reaches the end. */
|
|
11958
12317
|
loop = input(false, /* @ts-ignore */
|
|
11959
12318
|
...(ngDevMode ? [{ debugName: "loop" }] : /* istanbul ignore next */ []));
|
|
12319
|
+
/** Whether the video starts muted. */
|
|
11960
12320
|
muted = input(false, /* @ts-ignore */
|
|
11961
12321
|
...(ngDevMode ? [{ debugName: "muted" }] : /* istanbul ignore next */ []));
|
|
12322
|
+
/** Tailwind border-radius utility applied to the container. */
|
|
11962
12323
|
rounded = input('rounded-xl', /* @ts-ignore */
|
|
11963
12324
|
...(ngDevMode ? [{ debugName: "rounded" }] : /* istanbul ignore next */ []));
|
|
11964
12325
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
12326
|
+
/** Accessible label override for the play-button facade. */
|
|
11965
12327
|
playLabel = input(/* @ts-ignore */
|
|
11966
12328
|
...(ngDevMode ? [undefined, { debugName: "playLabel" }] : /* istanbul ignore next */ []));
|
|
11967
12329
|
playText = buiLabel('videoPlay', this.playLabel);
|
|
@@ -12088,15 +12450,20 @@ const DEFAULT_SWATCHES = [
|
|
|
12088
12450
|
];
|
|
12089
12451
|
/** A colour picker: a native colour well, a hex field, and a swatch palette. */
|
|
12090
12452
|
class BuiColorPicker {
|
|
12453
|
+
/** Selected color as a hex string. Two-way bindable with `[(value)]`. */
|
|
12091
12454
|
value = model('#6366f1', /* @ts-ignore */
|
|
12092
12455
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
12456
|
+
/** Custom swatch palette; falls back to a built-in set when null. */
|
|
12093
12457
|
swatches = input(null, /* @ts-ignore */
|
|
12094
12458
|
...(ngDevMode ? [{ debugName: "swatches" }] : /* istanbul ignore next */ []));
|
|
12459
|
+
/** Whether the picker is disabled. */
|
|
12095
12460
|
disabled = input(false, /* @ts-ignore */
|
|
12096
12461
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
12097
12462
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
12463
|
+
/** Accessible label for the native color well. */
|
|
12098
12464
|
pickLabel = input(/* @ts-ignore */
|
|
12099
12465
|
...(ngDevMode ? [undefined, { debugName: "pickLabel" }] : /* istanbul ignore next */ []));
|
|
12466
|
+
/** Accessible label for the hex text field. */
|
|
12100
12467
|
hexLabel = input(/* @ts-ignore */
|
|
12101
12468
|
...(ngDevMode ? [undefined, { debugName: "hexLabel" }] : /* istanbul ignore next */ []));
|
|
12102
12469
|
pickText = buiLabel('colorPickerPick', this.pickLabel);
|
|
@@ -12197,14 +12564,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
12197
12564
|
|
|
12198
12565
|
/** A GDPR cookie banner. Persists the choice in localStorage (skipped in `demo` mode). */
|
|
12199
12566
|
class BuiCookieConsent {
|
|
12567
|
+
/** Consent message shown to the user. */
|
|
12200
12568
|
message = input('We use cookies to enhance your experience.', /* @ts-ignore */
|
|
12201
12569
|
...(ngDevMode ? [{ debugName: "message" }] : /* istanbul ignore next */ []));
|
|
12570
|
+
/** When true, always shows the banner and skips reading/writing localStorage. */
|
|
12202
12571
|
demo = input(false, /* @ts-ignore */
|
|
12203
12572
|
...(ngDevMode ? [{ debugName: "demo" }] : /* istanbul ignore next */ []));
|
|
12573
|
+
/** localStorage key under which the accept/decline choice is persisted. */
|
|
12204
12574
|
storageKey = input('bui-cookie-consent', /* @ts-ignore */
|
|
12205
12575
|
...(ngDevMode ? [{ debugName: "storageKey" }] : /* istanbul ignore next */ []));
|
|
12576
|
+
/** Emitted with `true` when the user accepts and `false` when they decline. */
|
|
12206
12577
|
decided = output();
|
|
12207
12578
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
12579
|
+
/** Overrides the localized accessible label for the consent region. */
|
|
12208
12580
|
ariaLabel = input(/* @ts-ignore */
|
|
12209
12581
|
...(ngDevMode ? [undefined, { debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
12210
12582
|
ariaLabelText = buiLabel('cookieConsent', this.ariaLabel);
|
|
@@ -12287,12 +12659,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
12287
12659
|
* "Load more" button is pressed. Drive `loading` / `finished` from the consumer. SSR-safe.
|
|
12288
12660
|
*/
|
|
12289
12661
|
class BuiInfiniteScroll {
|
|
12662
|
+
/** Whether a load is in progress; shows the spinner and suppresses new emits. */
|
|
12290
12663
|
loading = input(false, /* @ts-ignore */
|
|
12291
12664
|
...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
|
|
12665
|
+
/** Whether all items are loaded; shows the end message and suppresses emits. */
|
|
12292
12666
|
finished = input(false, /* @ts-ignore */
|
|
12293
12667
|
...(ngDevMode ? [{ debugName: "finished" }] : /* istanbul ignore next */ []));
|
|
12668
|
+
/** Pixel margin below the viewport at which the sentinel triggers loading. */
|
|
12294
12669
|
threshold = input(200, /* @ts-ignore */
|
|
12295
12670
|
...(ngDevMode ? [{ debugName: "threshold" }] : /* istanbul ignore next */ []));
|
|
12671
|
+
/** Emits when the sentinel scrolls into view or the fallback button is pressed. */
|
|
12296
12672
|
more = output();
|
|
12297
12673
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
12298
12674
|
sentinel = viewChild('sentinel', /* @ts-ignore */
|
|
@@ -12417,26 +12793,35 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
12417
12793
|
|
|
12418
12794
|
/** A compact audio player around a native `<audio>`: play/pause, seek, time, mute. */
|
|
12419
12795
|
class BuiAudioPlayer {
|
|
12796
|
+
/** Audio source URL for the underlying `<audio>` element. */
|
|
12420
12797
|
src = input('', /* @ts-ignore */
|
|
12421
12798
|
...(ngDevMode ? [{ debugName: "src" }] : /* istanbul ignore next */ []));
|
|
12799
|
+
/** Track title shown next to the controls. */
|
|
12422
12800
|
title = input('', /* @ts-ignore */
|
|
12423
12801
|
...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
|
|
12802
|
+
/** Artist name shown under the title. */
|
|
12424
12803
|
artist = input('', /* @ts-ignore */
|
|
12425
12804
|
...(ngDevMode ? [{ debugName: "artist" }] : /* istanbul ignore next */ []));
|
|
12805
|
+
/** Whether to start playback automatically once loaded. */
|
|
12426
12806
|
autoplay = input(false, /* @ts-ignore */
|
|
12427
12807
|
...(ngDevMode ? [{ debugName: "autoplay" }] : /* istanbul ignore next */ []));
|
|
12428
12808
|
/** Condensed layout: hides the title block and mute button. */
|
|
12429
12809
|
compact = input(false, /* @ts-ignore */
|
|
12430
12810
|
...(ngDevMode ? [{ debugName: "compact" }] : /* istanbul ignore next */ []));
|
|
12431
12811
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
12812
|
+
/** Accessible label override for the seek slider. */
|
|
12432
12813
|
seekLabel = input(/* @ts-ignore */
|
|
12433
12814
|
...(ngDevMode ? [undefined, { debugName: "seekLabel" }] : /* istanbul ignore next */ []));
|
|
12815
|
+
/** Accessible label override for the play button. */
|
|
12434
12816
|
playLabel = input(/* @ts-ignore */
|
|
12435
12817
|
...(ngDevMode ? [undefined, { debugName: "playLabel" }] : /* istanbul ignore next */ []));
|
|
12818
|
+
/** Accessible label override for the pause button. */
|
|
12436
12819
|
pauseLabel = input(/* @ts-ignore */
|
|
12437
12820
|
...(ngDevMode ? [undefined, { debugName: "pauseLabel" }] : /* istanbul ignore next */ []));
|
|
12821
|
+
/** Accessible label override for the mute button. */
|
|
12438
12822
|
muteLabel = input(/* @ts-ignore */
|
|
12439
12823
|
...(ngDevMode ? [undefined, { debugName: "muteLabel" }] : /* istanbul ignore next */ []));
|
|
12824
|
+
/** Accessible label override for the unmute button. */
|
|
12440
12825
|
unmuteLabel = input(/* @ts-ignore */
|
|
12441
12826
|
...(ngDevMode ? [undefined, { debugName: "unmuteLabel" }] : /* istanbul ignore next */ []));
|
|
12442
12827
|
seekText = buiLabel('audioPlayerSeek', this.seekLabel);
|
|
@@ -12646,8 +13031,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
12646
13031
|
|
|
12647
13032
|
/** A canvas signature pad with draw, undo and clear. SSR-safe (canvas set up in the browser). */
|
|
12648
13033
|
class BuiSignaturePad {
|
|
13034
|
+
/** Canvas height in pixels. */
|
|
12649
13035
|
height = input(200, /* @ts-ignore */
|
|
12650
13036
|
...(ngDevMode ? [{ debugName: "height" }] : /* istanbul ignore next */ []));
|
|
13037
|
+
/** Stroke color; falls back to the current text color when empty. */
|
|
12651
13038
|
penColor = input('', /* @ts-ignore */
|
|
12652
13039
|
...(ngDevMode ? [{ debugName: "penColor" }] : /* istanbul ignore next */ []));
|
|
12653
13040
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -12804,11 +13191,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
12804
13191
|
|
|
12805
13192
|
/** A macOS-style dock with a cursor-following fisheye magnify. Use `bui-dock-item` tiles. */
|
|
12806
13193
|
class BuiDock {
|
|
13194
|
+
/** Maximum scale factor applied to the tile directly under the cursor. */
|
|
12807
13195
|
magnify = input(1.6, /* @ts-ignore */
|
|
12808
13196
|
...(ngDevMode ? [{ debugName: "magnify" }] : /* istanbul ignore next */ []));
|
|
13197
|
+
/** Pixel radius around the cursor within which tiles are magnified. */
|
|
12809
13198
|
distance = input(120, /* @ts-ignore */
|
|
12810
13199
|
...(ngDevMode ? [{ debugName: "distance" }] : /* istanbul ignore next */ []));
|
|
12811
13200
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
13201
|
+
/** Accessible label for the dock navigation; falls back to the i18n default. */
|
|
12812
13202
|
label = input(/* @ts-ignore */
|
|
12813
13203
|
...(ngDevMode ? [undefined, { debugName: "label" }] : /* istanbul ignore next */ []));
|
|
12814
13204
|
labelText = buiLabel('dock', this.label);
|
|
@@ -12860,6 +13250,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
12860
13250
|
|
|
12861
13251
|
/** A magnifying tile inside a `bui-dock`. */
|
|
12862
13252
|
class BuiDockItem {
|
|
13253
|
+
/** Whether to show the active indicator dot beneath the tile. */
|
|
12863
13254
|
active = input(false, /* @ts-ignore */
|
|
12864
13255
|
...(ngDevMode ? [{ debugName: "active" }] : /* istanbul ignore next */ []));
|
|
12865
13256
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -12916,8 +13307,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
12916
13307
|
|
|
12917
13308
|
/** A single tree row; renders its own children recursively. */
|
|
12918
13309
|
class BuiTreeNode {
|
|
13310
|
+
/** Node data for this row, including its label and children. */
|
|
12919
13311
|
item = input.required(/* @ts-ignore */
|
|
12920
13312
|
...(ngDevMode ? [{ debugName: "item" }] : /* istanbul ignore next */ []));
|
|
13313
|
+
/** Depth of this node, used for indentation and `aria-level` (root is 1). */
|
|
12921
13314
|
level = input(1, /* @ts-ignore */
|
|
12922
13315
|
...(ngDevMode ? [{ debugName: "level" }] : /* istanbul ignore next */ []));
|
|
12923
13316
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -13027,8 +13420,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
13027
13420
|
|
|
13028
13421
|
/** A collapsible, data-driven hierarchical tree (`role="tree"`). */
|
|
13029
13422
|
class BuiTree {
|
|
13423
|
+
/** Root nodes of the tree to render. */
|
|
13030
13424
|
items = input([], /* @ts-ignore */
|
|
13031
13425
|
...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
|
|
13426
|
+
/** Accessible label for the tree's root element. */
|
|
13032
13427
|
ariaLabel = input('Tree', /* @ts-ignore */
|
|
13033
13428
|
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
13034
13429
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -13061,16 +13456,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
13061
13456
|
|
|
13062
13457
|
/** A dynamic list of repeatable form rows with add/remove and min/max bounds. */
|
|
13063
13458
|
class BuiRepeater {
|
|
13459
|
+
/** Column definitions rendered for every row. */
|
|
13064
13460
|
fields = input([], /* @ts-ignore */
|
|
13065
13461
|
...(ngDevMode ? [{ debugName: "fields" }] : /* istanbul ignore next */ []));
|
|
13462
|
+
/** Row data keyed by field key. Two-way bindable with `[(rows)]`. */
|
|
13066
13463
|
rows = model([], /* @ts-ignore */
|
|
13067
13464
|
...(ngDevMode ? [{ debugName: "rows" }] : /* istanbul ignore next */ []));
|
|
13465
|
+
/** Minimum number of rows that must remain (remove is disabled at this count). */
|
|
13068
13466
|
min = input(1, /* @ts-ignore */
|
|
13069
13467
|
...(ngDevMode ? [{ debugName: "min" }] : /* istanbul ignore next */ []));
|
|
13468
|
+
/** Maximum number of rows allowed, or null for unlimited. */
|
|
13070
13469
|
max = input(null, /* @ts-ignore */
|
|
13071
13470
|
...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
|
|
13471
|
+
/** Text shown on the add-row button. */
|
|
13072
13472
|
addLabel = input('Add row', /* @ts-ignore */
|
|
13073
13473
|
...(ngDevMode ? [{ debugName: "addLabel" }] : /* istanbul ignore next */ []));
|
|
13474
|
+
/** Accessible label override for the remove-row buttons. */
|
|
13074
13475
|
removeLabel = input(/* @ts-ignore */
|
|
13075
13476
|
...(ngDevMode ? [undefined, { debugName: "removeLabel" }] : /* istanbul ignore next */ []));
|
|
13076
13477
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -13242,17 +13643,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
13242
13643
|
|
|
13243
13644
|
/** A bell trigger with a dropdown feed of notifications and an unread badge. */
|
|
13244
13645
|
class BuiNotificationCenter {
|
|
13646
|
+
/** Notification items rendered in the dropdown feed. */
|
|
13245
13647
|
notifications = input([], /* @ts-ignore */
|
|
13246
13648
|
...(ngDevMode ? [{ debugName: "notifications" }] : /* istanbul ignore next */ []));
|
|
13649
|
+
/** Whether the dropdown is open. Two-way bindable with `[(open)]`. */
|
|
13247
13650
|
open = model(false, /* @ts-ignore */
|
|
13248
13651
|
...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
|
|
13249
13652
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
13653
|
+
/** Accessible label for the trigger and dropdown region. */
|
|
13250
13654
|
ariaLabel = input(/* @ts-ignore */
|
|
13251
13655
|
...(ngDevMode ? [undefined, { debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
13656
|
+
/** Accessible label announced for the per-item unread dot. */
|
|
13252
13657
|
unreadLabel = input(/* @ts-ignore */
|
|
13253
13658
|
...(ngDevMode ? [undefined, { debugName: "unreadLabel" }] : /* istanbul ignore next */ []));
|
|
13659
|
+
/** Label for the "mark all as read" action button. */
|
|
13254
13660
|
markAllReadLabel = input(/* @ts-ignore */
|
|
13255
13661
|
...(ngDevMode ? [undefined, { debugName: "markAllReadLabel" }] : /* istanbul ignore next */ []));
|
|
13662
|
+
/** Text shown when there are no notifications. */
|
|
13256
13663
|
emptyLabel = input(/* @ts-ignore */
|
|
13257
13664
|
...(ngDevMode ? [undefined, { debugName: "emptyLabel" }] : /* istanbul ignore next */ []));
|
|
13258
13665
|
ariaText = buiLabel('notificationCenter', this.ariaLabel);
|
|
@@ -13423,10 +13830,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
13423
13830
|
|
|
13424
13831
|
/** A single JSON node; renders nested objects/arrays recursively. */
|
|
13425
13832
|
class BuiJsonViewerNode {
|
|
13833
|
+
/** Arbitrary JSON value rendered by this node. */
|
|
13426
13834
|
value = input(null, /* @ts-ignore */
|
|
13427
13835
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
13836
|
+
/** Object key or array index labeling this node, or null at the root. */
|
|
13428
13837
|
keyName = input(null, /* @ts-ignore */
|
|
13429
13838
|
...(ngDevMode ? [{ debugName: "keyName" }] : /* istanbul ignore next */ []));
|
|
13839
|
+
/** Whether this node starts expanded. */
|
|
13430
13840
|
expanded = input(true, /* @ts-ignore */
|
|
13431
13841
|
...(ngDevMode ? [{ debugName: "expanded" }] : /* istanbul ignore next */ []));
|
|
13432
13842
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -13608,8 +14018,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
13608
14018
|
|
|
13609
14019
|
/** A collapsible JSON tree viewer. Accepts an object/array or a JSON string. */
|
|
13610
14020
|
class BuiJsonViewer {
|
|
14021
|
+
/** Arbitrary JSON value to render; a string is parsed as JSON when possible. */
|
|
13611
14022
|
data = input(null, /* @ts-ignore */
|
|
13612
14023
|
...(ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []));
|
|
14024
|
+
/** Whether nodes start expanded. */
|
|
13613
14025
|
expanded = input(true, /* @ts-ignore */
|
|
13614
14026
|
...(ngDevMode ? [{ debugName: "expanded" }] : /* istanbul ignore next */ []));
|
|
13615
14027
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -13643,6 +14055,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
13643
14055
|
|
|
13644
14056
|
/** A single org-chart node (a card + recursive children). Rendered on an `<li>`. */
|
|
13645
14057
|
class BuiOrgChartNode {
|
|
14058
|
+
/** Node rendered as a card, with its `children` recursed into nested `<li>`s. */
|
|
13646
14059
|
node = input.required(/* @ts-ignore */
|
|
13647
14060
|
...(ngDevMode ? [{ debugName: "node" }] : /* istanbul ignore next */ []));
|
|
13648
14061
|
children = computed(() => this.node().children ?? [], /* @ts-ignore */
|
|
@@ -13719,6 +14132,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
13719
14132
|
|
|
13720
14133
|
/** A top-down organizational chart with pure-CSS connectors. Recursively renders nodes. */
|
|
13721
14134
|
class BuiOrgChart {
|
|
14135
|
+
/** Root node of the tree to render; `null` renders nothing. */
|
|
13722
14136
|
node = input(null, /* @ts-ignore */
|
|
13723
14137
|
...(ngDevMode ? [{ debugName: "node" }] : /* istanbul ignore next */ []));
|
|
13724
14138
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -13746,15 +14160,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
13746
14160
|
|
|
13747
14161
|
/** A cart trigger with an item-count badge and a dropdown with line items + subtotal. */
|
|
13748
14162
|
class BuiMiniCart {
|
|
14163
|
+
/** Line items in the cart, used for count and subtotal. */
|
|
13749
14164
|
items = input([], /* @ts-ignore */
|
|
13750
14165
|
...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
|
|
14166
|
+
/** Currency symbol prefixed to prices and subtotal. */
|
|
13751
14167
|
currency = input('$', /* @ts-ignore */
|
|
13752
14168
|
...(ngDevMode ? [{ debugName: "currency" }] : /* istanbul ignore next */ []));
|
|
14169
|
+
/** Whether the dropdown is open. Two-way bindable with `[(open)]`. */
|
|
13753
14170
|
open = model(false, /* @ts-ignore */
|
|
13754
14171
|
...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
|
|
13755
14172
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
14173
|
+
/** Accessible label override for the cart trigger button. */
|
|
13756
14174
|
triggerLabel = input(/* @ts-ignore */
|
|
13757
14175
|
...(ngDevMode ? [undefined, { debugName: "triggerLabel" }] : /* istanbul ignore next */ []));
|
|
14176
|
+
/** Accessible label override for the cart dropdown dialog. */
|
|
13758
14177
|
label = input(/* @ts-ignore */
|
|
13759
14178
|
...(ngDevMode ? [undefined, { debugName: "label" }] : /* istanbul ignore next */ []));
|
|
13760
14179
|
triggerText = buiLabel('miniCartTrigger', this.triggerLabel);
|
|
@@ -13935,12 +14354,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
13935
14354
|
|
|
13936
14355
|
/** An SVG beam connecting two elements (by selector) with a travelling light. SSR-safe. */
|
|
13937
14356
|
class BuiAnimatedBeam {
|
|
14357
|
+
/** CSS selector of the element the beam starts from. */
|
|
13938
14358
|
from = input('', /* @ts-ignore */
|
|
13939
14359
|
...(ngDevMode ? [{ debugName: "from" }] : /* istanbul ignore next */ []));
|
|
14360
|
+
/** CSS selector of the element the beam ends at. */
|
|
13940
14361
|
to = input('', /* @ts-ignore */
|
|
13941
14362
|
...(ngDevMode ? [{ debugName: "to" }] : /* istanbul ignore next */ []));
|
|
14363
|
+
/** Upward bow of the connecting curve in pixels. */
|
|
13942
14364
|
curvature = input(0, /* @ts-ignore */
|
|
13943
14365
|
...(ngDevMode ? [{ debugName: "curvature" }] : /* istanbul ignore next */ []));
|
|
14366
|
+
/** Seconds for the travelling light to traverse the beam. */
|
|
13944
14367
|
duration = input(3, /* @ts-ignore */
|
|
13945
14368
|
...(ngDevMode ? [{ debugName: "duration" }] : /* istanbul ignore next */ []));
|
|
13946
14369
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -14078,10 +14501,13 @@ const ROW_CLASS = {
|
|
|
14078
14501
|
const SIGN = { same: ' ', add: '+', del: '-' };
|
|
14079
14502
|
/** A line-by-line text diff (LCS) rendered with +/- gutters. */
|
|
14080
14503
|
class BuiDiffViewer {
|
|
14504
|
+
/** Original text; lines removed relative to `after` are marked deleted. */
|
|
14081
14505
|
before = input('', /* @ts-ignore */
|
|
14082
14506
|
...(ngDevMode ? [{ debugName: "before" }] : /* istanbul ignore next */ []));
|
|
14507
|
+
/** Updated text; lines added relative to `before` are marked added. */
|
|
14083
14508
|
after = input('', /* @ts-ignore */
|
|
14084
14509
|
...(ngDevMode ? [{ debugName: "after" }] : /* istanbul ignore next */ []));
|
|
14510
|
+
/** Optional filename shown in the header above the diff. */
|
|
14085
14511
|
filename = input('', /* @ts-ignore */
|
|
14086
14512
|
...(ngDevMode ? [{ debugName: "filename" }] : /* istanbul ignore next */ []));
|
|
14087
14513
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -14150,11 +14576,14 @@ const ALIGN$2 = {
|
|
|
14150
14576
|
};
|
|
14151
14577
|
/** A table whose rows can nest and expand/collapse (flattened to visible rows). */
|
|
14152
14578
|
class BuiTreeTable {
|
|
14579
|
+
/** Column definitions in display order. */
|
|
14153
14580
|
columns = input([], /* @ts-ignore */
|
|
14154
14581
|
...(ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []));
|
|
14582
|
+
/** Top-level rows, each able to nest children via `children`. */
|
|
14155
14583
|
rows = input([], /* @ts-ignore */
|
|
14156
14584
|
...(ngDevMode ? [{ debugName: "rows" }] : /* istanbul ignore next */ []));
|
|
14157
14585
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
14586
|
+
/** Accessible label for the expand/collapse toggle button. */
|
|
14158
14587
|
toggleLabel = input(/* @ts-ignore */
|
|
14159
14588
|
...(ngDevMode ? [undefined, { debugName: "toggleLabel" }] : /* istanbul ignore next */ []));
|
|
14160
14589
|
toggleText = buiLabel('treeTableToggle', this.toggleLabel);
|
|
@@ -14351,12 +14780,16 @@ function renderMarkdown(markdown) {
|
|
|
14351
14780
|
}
|
|
14352
14781
|
/** A markdown textarea with a live, sanitized HTML preview. */
|
|
14353
14782
|
class BuiMarkdownEditor {
|
|
14783
|
+
/** Markdown source text. Two-way bindable with `[(value)]`. */
|
|
14354
14784
|
value = model('', /* @ts-ignore */
|
|
14355
14785
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
14786
|
+
/** Name attribute applied to the textarea for form submission. */
|
|
14356
14787
|
name = input('', /* @ts-ignore */
|
|
14357
14788
|
...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
|
|
14789
|
+
/** Placeholder text shown while the textarea is empty. */
|
|
14358
14790
|
placeholder = input('Write markdown…', /* @ts-ignore */
|
|
14359
14791
|
...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
14792
|
+
/** Number of visible rows in the write textarea. */
|
|
14360
14793
|
rows = input(8, /* @ts-ignore */
|
|
14361
14794
|
...(ngDevMode ? [{ debugName: "rows" }] : /* istanbul ignore next */ []));
|
|
14362
14795
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -14444,6 +14877,7 @@ function isoOf(date) {
|
|
|
14444
14877
|
* Render several months side by side with `months`. SSR-safe.
|
|
14445
14878
|
*/
|
|
14446
14879
|
class BuiCalendar {
|
|
14880
|
+
/** Selected day (mode="single") as `yyyy-mm-dd`. Two-way bindable with `[(value)]`. */
|
|
14447
14881
|
value = model('', /* @ts-ignore */
|
|
14448
14882
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
14449
14883
|
/** Selection mode: `single` | `range` | `multiple`. */
|
|
@@ -14458,10 +14892,13 @@ class BuiCalendar {
|
|
|
14458
14892
|
/** Number of month grids to render side by side. */
|
|
14459
14893
|
months = input(1, /* @ts-ignore */
|
|
14460
14894
|
...(ngDevMode ? [{ debugName: "months" }] : /* istanbul ignore next */ []));
|
|
14895
|
+
/** First day of the week (0 = Sunday). */
|
|
14461
14896
|
weekStart = input(0, /* @ts-ignore */
|
|
14462
14897
|
...(ngDevMode ? [{ debugName: "weekStart" }] : /* istanbul ignore next */ []));
|
|
14898
|
+
/** Earliest selectable date (`yyyy-mm-dd`). */
|
|
14463
14899
|
minDate = input('', /* @ts-ignore */
|
|
14464
14900
|
...(ngDevMode ? [{ debugName: "minDate" }] : /* istanbul ignore next */ []));
|
|
14901
|
+
/** Latest selectable date (`yyyy-mm-dd`). */
|
|
14465
14902
|
maxDate = input('', /* @ts-ignore */
|
|
14466
14903
|
...(ngDevMode ? [{ debugName: "maxDate" }] : /* istanbul ignore next */ []));
|
|
14467
14904
|
/** Specific ISO dates (yyyy-mm-dd) to disable. */
|
|
@@ -14479,15 +14916,20 @@ class BuiCalendar {
|
|
|
14479
14916
|
/** Hide days that fall outside the current month. */
|
|
14480
14917
|
hideOutsideDays = input(false, /* @ts-ignore */
|
|
14481
14918
|
...(ngDevMode ? [{ debugName: "hideOutsideDays" }] : /* istanbul ignore next */ []));
|
|
14919
|
+
/** Whether the whole calendar is disabled. Two-way bindable with `[(disabled)]`. */
|
|
14482
14920
|
disabled = model(false, /* @ts-ignore */
|
|
14483
14921
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
14484
14922
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
14923
|
+
/** Accessible label for the previous-month button. */
|
|
14485
14924
|
previousMonthLabel = input(/* @ts-ignore */
|
|
14486
14925
|
...(ngDevMode ? [undefined, { debugName: "previousMonthLabel" }] : /* istanbul ignore next */ []));
|
|
14926
|
+
/** Accessible label for the month dropdown. */
|
|
14487
14927
|
monthSelectLabel = input(/* @ts-ignore */
|
|
14488
14928
|
...(ngDevMode ? [undefined, { debugName: "monthSelectLabel" }] : /* istanbul ignore next */ []));
|
|
14929
|
+
/** Accessible label for the year dropdown. */
|
|
14489
14930
|
yearLabel = input(/* @ts-ignore */
|
|
14490
14931
|
...(ngDevMode ? [undefined, { debugName: "yearLabel" }] : /* istanbul ignore next */ []));
|
|
14932
|
+
/** Accessible label for the next-month button. */
|
|
14491
14933
|
nextMonthLabel = input(/* @ts-ignore */
|
|
14492
14934
|
...(ngDevMode ? [undefined, { debugName: "nextMonthLabel" }] : /* istanbul ignore next */ []));
|
|
14493
14935
|
previousMonthText = buiLabel('calendarPreviousMonth', this.previousMonthLabel);
|
|
@@ -14928,6 +15370,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
14928
15370
|
const noop$3 = () => { };
|
|
14929
15371
|
/** A date input that opens a calendar popover. */
|
|
14930
15372
|
class BuiDatePicker {
|
|
15373
|
+
/** Selected date (mode="single") as `yyyy-mm-dd`. Two-way bindable with `[(value)]`. */
|
|
14931
15374
|
value = model('', /* @ts-ignore */
|
|
14932
15375
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
14933
15376
|
/** `single` (default) or `range`. */
|
|
@@ -14939,24 +15382,34 @@ class BuiDatePicker {
|
|
|
14939
15382
|
/** Month grids shown in the popover (handy for range). */
|
|
14940
15383
|
months = input(1, /* @ts-ignore */
|
|
14941
15384
|
...(ngDevMode ? [{ debugName: "months" }] : /* istanbul ignore next */ []));
|
|
15385
|
+
/** Text shown on the trigger when no date is selected. */
|
|
14942
15386
|
placeholder = input('Pick a date', /* @ts-ignore */
|
|
14943
15387
|
...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
15388
|
+
/** Earliest selectable date (`yyyy-mm-dd`). */
|
|
14944
15389
|
minDate = input('', /* @ts-ignore */
|
|
14945
15390
|
...(ngDevMode ? [{ debugName: "minDate" }] : /* istanbul ignore next */ []));
|
|
15391
|
+
/** Latest selectable date (`yyyy-mm-dd`). */
|
|
14946
15392
|
maxDate = input('', /* @ts-ignore */
|
|
14947
15393
|
...(ngDevMode ? [{ debugName: "maxDate" }] : /* istanbul ignore next */ []));
|
|
15394
|
+
/** First day of the week (0 = Sunday). */
|
|
14948
15395
|
weekStart = input(0, /* @ts-ignore */
|
|
14949
15396
|
...(ngDevMode ? [{ debugName: "weekStart" }] : /* istanbul ignore next */ []));
|
|
15397
|
+
/** Specific ISO dates (yyyy-mm-dd) to disable. */
|
|
14950
15398
|
disabledDates = input([], /* @ts-ignore */
|
|
14951
15399
|
...(ngDevMode ? [{ debugName: "disabledDates" }] : /* istanbul ignore next */ []));
|
|
15400
|
+
/** Disable Saturdays and Sundays. */
|
|
14952
15401
|
disableWeekends = input(false, /* @ts-ignore */
|
|
14953
15402
|
...(ngDevMode ? [{ debugName: "disableWeekends" }] : /* istanbul ignore next */ []));
|
|
15403
|
+
/** Show an ISO week-number column in the calendar. */
|
|
14954
15404
|
showWeekNumbers = input(false, /* @ts-ignore */
|
|
14955
15405
|
...(ngDevMode ? [{ debugName: "showWeekNumbers" }] : /* istanbul ignore next */ []));
|
|
15406
|
+
/** `dropdown` swaps the month label for month + year selects. */
|
|
14956
15407
|
captionLayout = input('label', /* @ts-ignore */
|
|
14957
15408
|
...(ngDevMode ? [{ debugName: "captionLayout" }] : /* istanbul ignore next */ []));
|
|
15409
|
+
/** Hide days that fall outside the current month. */
|
|
14958
15410
|
hideOutsideDays = input(false, /* @ts-ignore */
|
|
14959
15411
|
...(ngDevMode ? [{ debugName: "hideOutsideDays" }] : /* istanbul ignore next */ []));
|
|
15412
|
+
/** Whether the picker is disabled. Two-way bindable with `[(disabled)]`. */
|
|
14960
15413
|
disabled = model(false, /* @ts-ignore */
|
|
14961
15414
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
14962
15415
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -15129,18 +15582,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
15129
15582
|
|
|
15130
15583
|
/** A slide carousel. Project slides as direct children; arrows + dots navigate. SSR-safe. */
|
|
15131
15584
|
class BuiCarousel {
|
|
15585
|
+
/** Zero-based index of the first visible slide; two-way bindable. */
|
|
15132
15586
|
index = model(0, /* @ts-ignore */
|
|
15133
15587
|
...(ngDevMode ? [{ debugName: "index" }] : /* istanbul ignore next */ []));
|
|
15588
|
+
/** Scroll axis of the carousel. */
|
|
15134
15589
|
orientation = input('horizontal', /* @ts-ignore */
|
|
15135
15590
|
...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
|
|
15136
15591
|
/** Slides visible at once (e.g. 2 or 3 for a multi-item carousel). */
|
|
15137
15592
|
perView = input(1, /* @ts-ignore */
|
|
15138
15593
|
...(ngDevMode ? [{ debugName: "perView" }] : /* istanbul ignore next */ []));
|
|
15139
15594
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
15595
|
+
/** Accessible label override for the previous-slide button. */
|
|
15140
15596
|
previousLabel = input(/* @ts-ignore */
|
|
15141
15597
|
...(ngDevMode ? [undefined, { debugName: "previousLabel" }] : /* istanbul ignore next */ []));
|
|
15598
|
+
/** Accessible label override for the next-slide button. */
|
|
15142
15599
|
nextLabel = input(/* @ts-ignore */
|
|
15143
15600
|
...(ngDevMode ? [undefined, { debugName: "nextLabel" }] : /* istanbul ignore next */ []));
|
|
15601
|
+
/** Accessible label override (prefix) for the dot navigation buttons. */
|
|
15144
15602
|
goToSlideLabel = input(/* @ts-ignore */
|
|
15145
15603
|
...(ngDevMode ? [undefined, { debugName: "goToSlideLabel" }] : /* istanbul ignore next */ []));
|
|
15146
15604
|
previousText = buiLabel('carouselPrevious', this.previousLabel);
|
|
@@ -15333,13 +15791,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
15333
15791
|
|
|
15334
15792
|
/** A command palette: a filterable, keyboard-navigable list of grouped actions. */
|
|
15335
15793
|
class BuiCommand {
|
|
15794
|
+
/** Grouped commands shown in the palette and filtered as the user types. */
|
|
15336
15795
|
groups = input([], /* @ts-ignore */
|
|
15337
15796
|
...(ngDevMode ? [{ debugName: "groups" }] : /* istanbul ignore next */ []));
|
|
15797
|
+
/** Placeholder text for the search input. */
|
|
15338
15798
|
placeholder = input('Type a command or search…', /* @ts-ignore */
|
|
15339
15799
|
...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
15340
15800
|
/** Render a checkmark column; activating an item toggles its checked state. */
|
|
15341
15801
|
checkable = input(false, /* @ts-ignore */
|
|
15342
15802
|
...(ngDevMode ? [{ debugName: "checkable" }] : /* istanbul ignore next */ []));
|
|
15803
|
+
/** Emits the chosen command when an item is activated (click or Enter). */
|
|
15343
15804
|
selected = output();
|
|
15344
15805
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
15345
15806
|
checkedValues = signal(new Set(), /* @ts-ignore */
|
|
@@ -15582,8 +16043,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
15582
16043
|
|
|
15583
16044
|
/** A right-click context menu. Project the target; pass menu `items`. */
|
|
15584
16045
|
class BuiContextMenu {
|
|
16046
|
+
/** Items shown in the menu, in display order. */
|
|
15585
16047
|
items = input([], /* @ts-ignore */
|
|
15586
16048
|
...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
|
|
16049
|
+
/** Emits the chosen item when a (non-separator) entry is activated. */
|
|
15587
16050
|
selected = output();
|
|
15588
16051
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
15589
16052
|
open = signal(false, /* @ts-ignore */
|
|
@@ -15840,23 +16303,32 @@ function cellText(value) {
|
|
|
15840
16303
|
}
|
|
15841
16304
|
/** A data table with search, sortable columns, row selection and pagination. */
|
|
15842
16305
|
class BuiDataTable {
|
|
16306
|
+
/** Column definitions that drive the headers, cell lookup and sort/search keys. */
|
|
15843
16307
|
columns = input([], /* @ts-ignore */
|
|
15844
16308
|
...(ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []));
|
|
16309
|
+
/** Source data rows; each is a key/value map indexed by column keys. */
|
|
15845
16310
|
rows = input([], /* @ts-ignore */
|
|
15846
16311
|
...(ngDevMode ? [{ debugName: "rows" }] : /* istanbul ignore next */ []));
|
|
16312
|
+
/** Whether to show the search box that filters rows across all columns. */
|
|
15847
16313
|
searchable = input(true, /* @ts-ignore */
|
|
15848
16314
|
...(ngDevMode ? [{ debugName: "searchable" }] : /* istanbul ignore next */ []));
|
|
16315
|
+
/** Placeholder text for the search input. */
|
|
15849
16316
|
searchPlaceholder = input('Search...', /* @ts-ignore */
|
|
15850
16317
|
...(ngDevMode ? [{ debugName: "searchPlaceholder" }] : /* istanbul ignore next */ []));
|
|
16318
|
+
/** Whether to render row checkboxes and the select-all header checkbox. */
|
|
15851
16319
|
selectable = input(true, /* @ts-ignore */
|
|
15852
16320
|
...(ngDevMode ? [{ debugName: "selectable" }] : /* istanbul ignore next */ []));
|
|
16321
|
+
/** Number of rows displayed per page. */
|
|
15853
16322
|
pageSize = input(5, /* @ts-ignore */
|
|
15854
16323
|
...(ngDevMode ? [{ debugName: "pageSize" }] : /* istanbul ignore next */ []));
|
|
15855
16324
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
16325
|
+
/** Accessible label override for the search input. */
|
|
15856
16326
|
searchLabel = input(/* @ts-ignore */
|
|
15857
16327
|
...(ngDevMode ? [undefined, { debugName: "searchLabel" }] : /* istanbul ignore next */ []));
|
|
16328
|
+
/** Accessible label override for the select-all checkbox. */
|
|
15858
16329
|
selectAllLabel = input(/* @ts-ignore */
|
|
15859
16330
|
...(ngDevMode ? [undefined, { debugName: "selectAllLabel" }] : /* istanbul ignore next */ []));
|
|
16331
|
+
/** Accessible label override for each row's select checkbox. */
|
|
15860
16332
|
selectRowLabel = input(/* @ts-ignore */
|
|
15861
16333
|
...(ngDevMode ? [undefined, { debugName: "selectRowLabel" }] : /* istanbul ignore next */ []));
|
|
15862
16334
|
searchText = buiLabel('dataTableSearch', this.searchLabel);
|
|
@@ -16161,14 +16633,19 @@ const WIDTH = 600;
|
|
|
16161
16633
|
const PAD = 8;
|
|
16162
16634
|
/** A lightweight SVG chart (line / area / bar). Pure + SSR-safe. */
|
|
16163
16635
|
class BuiChart {
|
|
16636
|
+
/** Chart render style: line, bar, or filled area. */
|
|
16164
16637
|
type = input('line', /* @ts-ignore */
|
|
16165
16638
|
...(ngDevMode ? [{ debugName: "type" }] : /* istanbul ignore next */ []));
|
|
16639
|
+
/** Series to plot; bar charts use only the first series. */
|
|
16166
16640
|
series = input([], /* @ts-ignore */
|
|
16167
16641
|
...(ngDevMode ? [{ debugName: "series" }] : /* istanbul ignore next */ []));
|
|
16642
|
+
/** X-axis tick labels rendered below the chart. */
|
|
16168
16643
|
labels = input([], /* @ts-ignore */
|
|
16169
16644
|
...(ngDevMode ? [{ debugName: "labels" }] : /* istanbul ignore next */ []));
|
|
16645
|
+
/** Chart height in pixels (SVG viewBox height). */
|
|
16170
16646
|
height = input(220, /* @ts-ignore */
|
|
16171
16647
|
...(ngDevMode ? [{ debugName: "height" }] : /* istanbul ignore next */ []));
|
|
16648
|
+
/** Accessible label for the chart's `aria-label`. */
|
|
16172
16649
|
label = input('Chart', /* @ts-ignore */
|
|
16173
16650
|
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
16174
16651
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -16325,6 +16802,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
16325
16802
|
const noop$2 = () => { };
|
|
16326
16803
|
/** A combined date + time picker in a popover. Value is `YYYY-MM-DDTHH:mm`. */
|
|
16327
16804
|
class BuiDatetimePicker {
|
|
16805
|
+
/** Selected date-time (mode="single") as `YYYY-MM-DDTHH:mm`. Two-way bindable with `[(value)]`. */
|
|
16328
16806
|
value = model('', /* @ts-ignore */
|
|
16329
16807
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
16330
16808
|
/** `single` (default) or `range`. */
|
|
@@ -16336,16 +16814,22 @@ class BuiDatetimePicker {
|
|
|
16336
16814
|
/** Month grids shown in the popover (handy for range). */
|
|
16337
16815
|
months = input(1, /* @ts-ignore */
|
|
16338
16816
|
...(ngDevMode ? [{ debugName: "months" }] : /* istanbul ignore next */ []));
|
|
16817
|
+
/** Text shown on the trigger when nothing is selected. */
|
|
16339
16818
|
placeholder = input('Pick date & time', /* @ts-ignore */
|
|
16340
16819
|
...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
16820
|
+
/** Earliest selectable date (`yyyy-mm-dd`). */
|
|
16341
16821
|
minDate = input('', /* @ts-ignore */
|
|
16342
16822
|
...(ngDevMode ? [{ debugName: "minDate" }] : /* istanbul ignore next */ []));
|
|
16823
|
+
/** Latest selectable date (`yyyy-mm-dd`). */
|
|
16343
16824
|
maxDate = input('', /* @ts-ignore */
|
|
16344
16825
|
...(ngDevMode ? [{ debugName: "maxDate" }] : /* istanbul ignore next */ []));
|
|
16826
|
+
/** `dropdown` swaps the month label for month + year selects. */
|
|
16345
16827
|
captionLayout = input('label', /* @ts-ignore */
|
|
16346
16828
|
...(ngDevMode ? [{ debugName: "captionLayout" }] : /* istanbul ignore next */ []));
|
|
16829
|
+
/** Whether to include seconds in the time field. */
|
|
16347
16830
|
seconds = input(false, /* @ts-ignore */
|
|
16348
16831
|
...(ngDevMode ? [{ debugName: "seconds" }] : /* istanbul ignore next */ []));
|
|
16832
|
+
/** Whether the picker is disabled. Two-way bindable with `[(disabled)]`. */
|
|
16349
16833
|
disabled = model(false, /* @ts-ignore */
|
|
16350
16834
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
16351
16835
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -16576,23 +17060,31 @@ const AC_SIZE = {
|
|
|
16576
17060
|
};
|
|
16577
17061
|
/** A free-text input with a filtered suggestion list. */
|
|
16578
17062
|
class BuiAutocomplete {
|
|
17063
|
+
/** Current text in the input. Two-way bindable with `[(value)]`. */
|
|
16579
17064
|
value = model('', /* @ts-ignore */
|
|
16580
17065
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
16581
17066
|
/** Pick several values, shown as removable chips; binds `values`. */
|
|
16582
17067
|
multiple = input(false, /* @ts-ignore */
|
|
16583
17068
|
...(ngDevMode ? [{ debugName: "multiple" }] : /* istanbul ignore next */ []));
|
|
17069
|
+
/** Selected values shown as chips (multiple mode). Two-way bindable with `[(values)]`. */
|
|
16584
17070
|
values = model([], /* @ts-ignore */
|
|
16585
17071
|
...(ngDevMode ? [{ debugName: "values" }] : /* istanbul ignore next */ []));
|
|
17072
|
+
/** Suggestions to filter against the typed text. */
|
|
16586
17073
|
options = input([], /* @ts-ignore */
|
|
16587
17074
|
...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
|
|
17075
|
+
/** Placeholder text for the input. */
|
|
16588
17076
|
placeholder = input('Search...', /* @ts-ignore */
|
|
16589
17077
|
...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
17078
|
+
/** Message shown when no suggestion matches. */
|
|
16590
17079
|
empty = input('No results found.', /* @ts-ignore */
|
|
16591
17080
|
...(ngDevMode ? [{ debugName: "empty" }] : /* istanbul ignore next */ []));
|
|
17081
|
+
/** Whether the input is disabled. Two-way bindable with `[(disabled)]`. */
|
|
16592
17082
|
disabled = model(false, /* @ts-ignore */
|
|
16593
17083
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
17084
|
+
/** Native `name` attribute for the input. */
|
|
16594
17085
|
name = input('', /* @ts-ignore */
|
|
16595
17086
|
...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
|
|
17087
|
+
/** Height and font size of the input. */
|
|
16596
17088
|
size = input('default', /* @ts-ignore */
|
|
16597
17089
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
16598
17090
|
/** Optional leading icon, given as an SVG path `d` string. */
|
|
@@ -16928,21 +17420,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
16928
17420
|
|
|
16929
17421
|
/** A before/after image comparison with a draggable, keyboard-operable divider. */
|
|
16930
17422
|
class BuiComparisonSlider {
|
|
17423
|
+
/** Source URL of the "before" image (revealed on the left of the divider). */
|
|
16931
17424
|
before = input('', /* @ts-ignore */
|
|
16932
17425
|
...(ngDevMode ? [{ debugName: "before" }] : /* istanbul ignore next */ []));
|
|
17426
|
+
/** Source URL of the "after" image (shown on the right of the divider). */
|
|
16933
17427
|
after = input('', /* @ts-ignore */
|
|
16934
17428
|
...(ngDevMode ? [{ debugName: "after" }] : /* istanbul ignore next */ []));
|
|
17429
|
+
/** Caption badge shown over the "before" image; hidden when empty. */
|
|
16935
17430
|
beforeLabel = input('', /* @ts-ignore */
|
|
16936
17431
|
...(ngDevMode ? [{ debugName: "beforeLabel" }] : /* istanbul ignore next */ []));
|
|
17432
|
+
/** Caption badge shown over the "after" image; hidden when empty. */
|
|
16937
17433
|
afterLabel = input('', /* @ts-ignore */
|
|
16938
17434
|
...(ngDevMode ? [{ debugName: "afterLabel" }] : /* istanbul ignore next */ []));
|
|
17435
|
+
/** Alt text for the "before" image. */
|
|
16939
17436
|
beforeAlt = input('Before', /* @ts-ignore */
|
|
16940
17437
|
...(ngDevMode ? [{ debugName: "beforeAlt" }] : /* istanbul ignore next */ []));
|
|
17438
|
+
/** Alt text for the "after" image. */
|
|
16941
17439
|
afterAlt = input('After', /* @ts-ignore */
|
|
16942
17440
|
...(ngDevMode ? [{ debugName: "afterAlt" }] : /* istanbul ignore next */ []));
|
|
17441
|
+
/** Divider position as a percentage (0-100); two-way bindable. */
|
|
16943
17442
|
value = model(50, /* @ts-ignore */
|
|
16944
17443
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
16945
17444
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
17445
|
+
/** Accessible label override for the range slider. */
|
|
16946
17446
|
positionLabel = input(/* @ts-ignore */
|
|
16947
17447
|
...(ngDevMode ? [undefined, { debugName: "positionLabel" }] : /* istanbul ignore next */ []));
|
|
16948
17448
|
positionText = buiLabel('comparisonSliderPosition', this.positionLabel);
|
|
@@ -17046,20 +17546,28 @@ function formatSize(bytes) {
|
|
|
17046
17546
|
}
|
|
17047
17547
|
/** A drag-and-drop file upload zone with a selected-files list. */
|
|
17048
17548
|
class BuiFileUpload {
|
|
17549
|
+
/** Whether multiple files can be selected and accumulated. */
|
|
17049
17550
|
multiple = input(false, /* @ts-ignore */
|
|
17050
17551
|
...(ngDevMode ? [{ debugName: "multiple" }] : /* istanbul ignore next */ []));
|
|
17552
|
+
/** Comma-separated list of accepted file types (the `accept` attribute). */
|
|
17051
17553
|
accept = input('', /* @ts-ignore */
|
|
17052
17554
|
...(ngDevMode ? [{ debugName: "accept" }] : /* istanbul ignore next */ []));
|
|
17555
|
+
/** Native `name` attribute for the file input. */
|
|
17053
17556
|
name = input('', /* @ts-ignore */
|
|
17054
17557
|
...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
|
|
17558
|
+
/** Optional helper text shown under the dropzone label. */
|
|
17055
17559
|
hint = input('', /* @ts-ignore */
|
|
17056
17560
|
...(ngDevMode ? [{ debugName: "hint" }] : /* istanbul ignore next */ []));
|
|
17561
|
+
/** Whether the upload zone is disabled. */
|
|
17057
17562
|
disabled = input(false, /* @ts-ignore */
|
|
17058
17563
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
17564
|
+
/** Emitted with the current file list whenever the selection changes. */
|
|
17059
17565
|
filesChange = output();
|
|
17060
17566
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
17567
|
+
/** Custom dropzone prompt text. */
|
|
17061
17568
|
dropzoneLabel = input(/* @ts-ignore */
|
|
17062
17569
|
...(ngDevMode ? [undefined, { debugName: "dropzoneLabel" }] : /* istanbul ignore next */ []));
|
|
17570
|
+
/** Custom accessible label for each remove button. */
|
|
17063
17571
|
removeLabel = input(/* @ts-ignore */
|
|
17064
17572
|
...(ngDevMode ? [undefined, { debugName: "removeLabel" }] : /* istanbul ignore next */ []));
|
|
17065
17573
|
dropzoneText = buiLabel('fileUploadDropzone', this.dropzoneLabel);
|
|
@@ -17251,13 +17759,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
17251
17759
|
* or with `top-progress:start` / `top-progress:set` / `top-progress:done` window events.
|
|
17252
17760
|
*/
|
|
17253
17761
|
class BuiTopProgress {
|
|
17762
|
+
/** CSS color (or gradient) used to fill the bar. */
|
|
17254
17763
|
color = input('var(--color-primary, #6366f1)', /* @ts-ignore */
|
|
17255
17764
|
...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
|
|
17765
|
+
/** Bar thickness in pixels. */
|
|
17256
17766
|
height = input(2, /* @ts-ignore */
|
|
17257
17767
|
...(ngDevMode ? [{ debugName: "height" }] : /* istanbul ignore next */ []));
|
|
17768
|
+
/** When true, renders inline within its container instead of fixed at the top of the viewport. */
|
|
17258
17769
|
demo = input(false, /* @ts-ignore */
|
|
17259
17770
|
...(ngDevMode ? [{ debugName: "demo" }] : /* istanbul ignore next */ []));
|
|
17260
17771
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
17772
|
+
/** Overrides the localized accessible progressbar label. */
|
|
17261
17773
|
ariaLabel = input(/* @ts-ignore */
|
|
17262
17774
|
...(ngDevMode ? [undefined, { debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
17263
17775
|
ariaLabelText = buiLabel('topProgressLoading', this.ariaLabel);
|
|
@@ -17368,10 +17880,13 @@ const POSITION$1 = {
|
|
|
17368
17880
|
};
|
|
17369
17881
|
/** A slide-in panel anchored to a screen edge. Toggle with the `open` model. */
|
|
17370
17882
|
class BuiDrawer {
|
|
17883
|
+
/** Whether the drawer is open. Two-way bindable with `[(open)]`. */
|
|
17371
17884
|
open = model(false, /* @ts-ignore */
|
|
17372
17885
|
...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
|
|
17886
|
+
/** Screen edge the drawer is anchored to and slides in from. */
|
|
17373
17887
|
direction = input('bottom', /* @ts-ignore */
|
|
17374
17888
|
...(ngDevMode ? [{ debugName: "direction" }] : /* istanbul ignore next */ []));
|
|
17889
|
+
/** Accessible label applied to the drawer dialog. */
|
|
17375
17890
|
ariaLabel = input('Drawer', /* @ts-ignore */
|
|
17376
17891
|
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
17377
17892
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -17456,16 +17971,22 @@ function applyMask$1(value, mask) {
|
|
|
17456
17971
|
}
|
|
17457
17972
|
/** A text input that formats its value against a mask (9 = digit, a = letter, * = alnum). */
|
|
17458
17973
|
class BuiInputMask {
|
|
17974
|
+
/** Mask pattern where `9` accepts a digit, `a` a letter, `*` an alphanumeric, and other chars are literals. */
|
|
17459
17975
|
mask = input('', /* @ts-ignore */
|
|
17460
17976
|
...(ngDevMode ? [{ debugName: "mask" }] : /* istanbul ignore next */ []));
|
|
17977
|
+
/** Current masked value. Two-way bindable with `[(value)]`. */
|
|
17461
17978
|
value = model('', /* @ts-ignore */
|
|
17462
17979
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
17980
|
+
/** Placeholder text shown when the input is empty. */
|
|
17463
17981
|
placeholder = input('', /* @ts-ignore */
|
|
17464
17982
|
...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
17983
|
+
/** Value for the native `inputmode` attribute hinting the virtual keyboard. */
|
|
17465
17984
|
inputmode = input('', /* @ts-ignore */
|
|
17466
17985
|
...(ngDevMode ? [{ debugName: "inputmode" }] : /* istanbul ignore next */ []));
|
|
17986
|
+
/** Name attribute applied to the underlying input for form submission. */
|
|
17467
17987
|
name = input('', /* @ts-ignore */
|
|
17468
17988
|
...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
|
|
17989
|
+
/** Whether the input is disabled. Two-way bindable with `[(disabled)]`. */
|
|
17469
17990
|
disabled = model(false, /* @ts-ignore */
|
|
17470
17991
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
17471
17992
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -17539,10 +18060,13 @@ const SIDE = {
|
|
|
17539
18060
|
};
|
|
17540
18061
|
/** A sheet overlay sliding in from a screen edge. Toggle with the `open` model. */
|
|
17541
18062
|
class BuiSheet {
|
|
18063
|
+
/** Whether the sheet is open. Two-way bindable with `[(open)]`. */
|
|
17542
18064
|
open = model(false, /* @ts-ignore */
|
|
17543
18065
|
...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
|
|
18066
|
+
/** Screen edge the sheet slides in from. */
|
|
17544
18067
|
side = input('right', /* @ts-ignore */
|
|
17545
18068
|
...(ngDevMode ? [{ debugName: "side" }] : /* istanbul ignore next */ []));
|
|
18069
|
+
/** Accessible label applied to the sheet dialog. */
|
|
17546
18070
|
ariaLabel = input('Sheet', /* @ts-ignore */
|
|
17547
18071
|
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
17548
18072
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -17629,10 +18153,13 @@ const TONE = {
|
|
|
17629
18153
|
};
|
|
17630
18154
|
/** The toast viewport. Drives off the {@link BuiToaster} store. */
|
|
17631
18155
|
class BuiSonner {
|
|
18156
|
+
/** Viewport corner where toasts stack (e.g. `top-left`, `bottom-right`). */
|
|
17632
18157
|
position = input('bottom-right', /* @ts-ignore */
|
|
17633
18158
|
...(ngDevMode ? [{ debugName: "position" }] : /* istanbul ignore next */ []));
|
|
18159
|
+
/** Overrides the localized accessible label for the toast region. */
|
|
17634
18160
|
ariaLabel = input(/* @ts-ignore */
|
|
17635
18161
|
...(ngDevMode ? [undefined, { debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
18162
|
+
/** Overrides the localized accessible label for each dismiss button. */
|
|
17636
18163
|
dismissLabel = input(/* @ts-ignore */
|
|
17637
18164
|
...(ngDevMode ? [undefined, { debugName: "dismissLabel" }] : /* istanbul ignore next */ []));
|
|
17638
18165
|
ariaLabelText = buiLabel('sonner', this.ariaLabel);
|
|
@@ -17751,6 +18278,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
17751
18278
|
|
|
17752
18279
|
/** A horizontal navigation menu with hover/click dropdown panels. */
|
|
17753
18280
|
class BuiNavigationMenu {
|
|
18281
|
+
/** Top-level menu entries, each optionally opening a dropdown panel. */
|
|
17754
18282
|
items = input([], /* @ts-ignore */
|
|
17755
18283
|
...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
|
|
17756
18284
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -17925,16 +18453,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
17925
18453
|
|
|
17926
18454
|
/** A textarea that suggests mentions when you type the trigger character. */
|
|
17927
18455
|
class BuiMentionInput {
|
|
18456
|
+
/** Textarea contents. Two-way bindable with `[(value)]`. */
|
|
17928
18457
|
value = model('', /* @ts-ignore */
|
|
17929
18458
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
18459
|
+
/** Mentions offered when the trigger character is typed. */
|
|
17930
18460
|
mentions = input([], /* @ts-ignore */
|
|
17931
18461
|
...(ngDevMode ? [{ debugName: "mentions" }] : /* istanbul ignore next */ []));
|
|
18462
|
+
/** Character that opens the mention suggestion list. */
|
|
17932
18463
|
trigger = input('@', /* @ts-ignore */
|
|
17933
18464
|
...(ngDevMode ? [{ debugName: "trigger" }] : /* istanbul ignore next */ []));
|
|
18465
|
+
/** Placeholder text for the textarea. */
|
|
17934
18466
|
placeholder = input('Type @ to mention…', /* @ts-ignore */
|
|
17935
18467
|
...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
18468
|
+
/** Number of visible textarea rows. */
|
|
17936
18469
|
rows = input(3, /* @ts-ignore */
|
|
17937
18470
|
...(ngDevMode ? [{ debugName: "rows" }] : /* istanbul ignore next */ []));
|
|
18471
|
+
/** Native `name` attribute for the textarea. */
|
|
17938
18472
|
name = input('', /* @ts-ignore */
|
|
17939
18473
|
...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
|
|
17940
18474
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -18002,11 +18536,11 @@ class BuiMentionInput {
|
|
|
18002
18536
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiMentionInput, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
18003
18537
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: BuiMentionInput, isStandalone: true, selector: "bui-mention-input", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, mentions: { classPropertyName: "mentions", publicName: "mentions", isSignal: true, isRequired: false, transformFunction: null }, trigger: { classPropertyName: "trigger", publicName: "trigger", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", 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": "mention-input" }, properties: { "class": "computedClass()" } }, ngImport: i0, template: `
|
|
18004
18538
|
<textarea
|
|
18539
|
+
buiTextarea
|
|
18005
18540
|
[value]="value()"
|
|
18006
18541
|
[placeholder]="placeholder()"
|
|
18007
18542
|
[rows]="rows()"
|
|
18008
18543
|
[attr.name]="name() || null"
|
|
18009
|
-
class="w-full resize-y rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-xs outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50"
|
|
18010
18544
|
(input)="onInput($event)"
|
|
18011
18545
|
(keydown)="onKeydown($event)"
|
|
18012
18546
|
></textarea>
|
|
@@ -18029,20 +18563,21 @@ class BuiMentionInput {
|
|
|
18029
18563
|
}
|
|
18030
18564
|
</ul>
|
|
18031
18565
|
}
|
|
18032
|
-
`, isInline: true });
|
|
18566
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: BuiTextarea, selector: "textarea[buiTextarea]", inputs: ["size", "maxRows", "class"] }] });
|
|
18033
18567
|
}
|
|
18034
18568
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiMentionInput, decorators: [{
|
|
18035
18569
|
type: Component,
|
|
18036
18570
|
args: [{
|
|
18037
18571
|
selector: 'bui-mention-input',
|
|
18038
18572
|
host: { 'data-slot': 'mention-input', '[class]': 'computedClass()' },
|
|
18573
|
+
imports: [BuiTextarea],
|
|
18039
18574
|
template: `
|
|
18040
18575
|
<textarea
|
|
18576
|
+
buiTextarea
|
|
18041
18577
|
[value]="value()"
|
|
18042
18578
|
[placeholder]="placeholder()"
|
|
18043
18579
|
[rows]="rows()"
|
|
18044
18580
|
[attr.name]="name() || null"
|
|
18045
|
-
class="w-full resize-y rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-xs outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50"
|
|
18046
18581
|
(input)="onInput($event)"
|
|
18047
18582
|
(keydown)="onKeydown($event)"
|
|
18048
18583
|
></textarea>
|
|
@@ -18071,18 +18606,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
18071
18606
|
|
|
18072
18607
|
/** A keyless OpenStreetMap embed centred on a coordinate. SSR-safe. */
|
|
18073
18608
|
class BuiMap {
|
|
18609
|
+
/** Latitude of the map centre, in degrees. */
|
|
18074
18610
|
lat = input(50.8503, /* @ts-ignore */
|
|
18075
18611
|
...(ngDevMode ? [{ debugName: "lat" }] : /* istanbul ignore next */ []));
|
|
18612
|
+
/** Longitude of the map centre, in degrees. */
|
|
18076
18613
|
lon = input(4.3517, /* @ts-ignore */
|
|
18077
18614
|
...(ngDevMode ? [{ debugName: "lon" }] : /* istanbul ignore next */ []));
|
|
18615
|
+
/** Zoom level; higher values zoom in closer. */
|
|
18078
18616
|
zoom = input(14, /* @ts-ignore */
|
|
18079
18617
|
...(ngDevMode ? [{ debugName: "zoom" }] : /* istanbul ignore next */ []));
|
|
18618
|
+
/** Accessible title for the map iframe. */
|
|
18080
18619
|
label = input('Location', /* @ts-ignore */
|
|
18081
18620
|
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
18621
|
+
/** Whether to drop a pin at the centre coordinate. */
|
|
18082
18622
|
marker = input(true, /* @ts-ignore */
|
|
18083
18623
|
...(ngDevMode ? [{ debugName: "marker" }] : /* istanbul ignore next */ []));
|
|
18624
|
+
/** Map height in pixels; ignored when `ratio` is set. */
|
|
18084
18625
|
height = input(320, /* @ts-ignore */
|
|
18085
18626
|
...(ngDevMode ? [{ debugName: "height" }] : /* istanbul ignore next */ []));
|
|
18627
|
+
/** CSS aspect ratio (e.g. `16/9`); overrides `height` when set. */
|
|
18086
18628
|
ratio = input('', /* @ts-ignore */
|
|
18087
18629
|
...(ngDevMode ? [{ debugName: "ratio" }] : /* istanbul ignore next */ []));
|
|
18088
18630
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -18192,12 +18734,16 @@ function label(iso) {
|
|
|
18192
18734
|
}
|
|
18193
18735
|
/** A horizontal Gantt chart positioning task bars over a date range. SSR-safe. */
|
|
18194
18736
|
class BuiGantt {
|
|
18737
|
+
/** Tasks to plot as horizontal bars across the date range. */
|
|
18195
18738
|
tasks = input([], /* @ts-ignore */
|
|
18196
18739
|
...(ngDevMode ? [{ debugName: "tasks" }] : /* istanbul ignore next */ []));
|
|
18740
|
+
/** Milestones to plot as diamond markers below the task bars. */
|
|
18197
18741
|
milestones = input([], /* @ts-ignore */
|
|
18198
18742
|
...(ngDevMode ? [{ debugName: "milestones" }] : /* istanbul ignore next */ []));
|
|
18743
|
+
/** ISO start date overriding the computed range minimum; empty derives it from tasks. */
|
|
18199
18744
|
start = input('', /* @ts-ignore */
|
|
18200
18745
|
...(ngDevMode ? [{ debugName: "start" }] : /* istanbul ignore next */ []));
|
|
18746
|
+
/** ISO end date overriding the computed range maximum; empty derives it from tasks. */
|
|
18201
18747
|
end = input('', /* @ts-ignore */
|
|
18202
18748
|
...(ngDevMode ? [{ debugName: "end" }] : /* istanbul ignore next */ []));
|
|
18203
18749
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -18358,16 +18904,22 @@ function toMinutes(value) {
|
|
|
18358
18904
|
}
|
|
18359
18905
|
/** A week/day calendar grid with positioned events. SSR-safe. */
|
|
18360
18906
|
class BuiScheduler {
|
|
18907
|
+
/** Events to position within the calendar grid. */
|
|
18361
18908
|
events = input([], /* @ts-ignore */
|
|
18362
18909
|
...(ngDevMode ? [{ debugName: "events" }] : /* istanbul ignore next */ []));
|
|
18910
|
+
/** Custom day-column headers; empty falls back to weekday names or `Today`. */
|
|
18363
18911
|
days = input([], /* @ts-ignore */
|
|
18364
18912
|
...(ngDevMode ? [{ debugName: "days" }] : /* istanbul ignore next */ []));
|
|
18913
|
+
/** First hour shown on the time axis (24-hour). */
|
|
18365
18914
|
startHour = input(8, /* @ts-ignore */
|
|
18366
18915
|
...(ngDevMode ? [{ debugName: "startHour" }] : /* istanbul ignore next */ []));
|
|
18916
|
+
/** Last hour shown on the time axis (24-hour), exclusive of the final row. */
|
|
18367
18917
|
endHour = input(18, /* @ts-ignore */
|
|
18368
18918
|
...(ngDevMode ? [{ debugName: "endHour" }] : /* istanbul ignore next */ []));
|
|
18919
|
+
/** Layout mode; `day` shows a single column, `week` shows the full week. */
|
|
18369
18920
|
view = input('week', /* @ts-ignore */
|
|
18370
18921
|
...(ngDevMode ? [{ debugName: "view" }] : /* istanbul ignore next */ []));
|
|
18922
|
+
/** Accessible label applied to the grid's `aria-label`. */
|
|
18371
18923
|
label = input('Schedule', /* @ts-ignore */
|
|
18372
18924
|
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
18373
18925
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -18495,8 +19047,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
18495
19047
|
|
|
18496
19048
|
/** A drag-and-drop kanban board (Angular CDK drag-drop). */
|
|
18497
19049
|
class BuiKanban {
|
|
19050
|
+
/** Columns and their cards used to seed the board. */
|
|
18498
19051
|
columns = input([], /* @ts-ignore */
|
|
18499
19052
|
...(ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []));
|
|
19053
|
+
/** Emits the updated board whenever a card is moved. */
|
|
18500
19054
|
changed = output();
|
|
18501
19055
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
18502
19056
|
board = linkedSignal(() => this.columns().map((column) => ({ ...column, cards: [...column.cards] })), /* @ts-ignore */
|
|
@@ -18614,14 +19168,19 @@ const TOOLS = [
|
|
|
18614
19168
|
];
|
|
18615
19169
|
/** A contenteditable rich-text editor with a basic formatting toolbar. */
|
|
18616
19170
|
class BuiRichTextEditor {
|
|
19171
|
+
/** Editor contents as HTML. Two-way bindable with `[(value)]`. */
|
|
18617
19172
|
value = model('', /* @ts-ignore */
|
|
18618
19173
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
19174
|
+
/** Placeholder text shown while the editor is empty. */
|
|
18619
19175
|
placeholder = input('Write something…', /* @ts-ignore */
|
|
18620
19176
|
...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
19177
|
+
/** Accessible label for the editable region. */
|
|
18621
19178
|
ariaLabel = input('Rich text editor', /* @ts-ignore */
|
|
18622
19179
|
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
19180
|
+
/** Accessible label override for the formatting toolbar. */
|
|
18623
19181
|
formattingLabel = input(/* @ts-ignore */
|
|
18624
19182
|
...(ngDevMode ? [undefined, { debugName: "formattingLabel" }] : /* istanbul ignore next */ []));
|
|
19183
|
+
/** Name attribute associated with the editor for form submission. */
|
|
18625
19184
|
name = input('', /* @ts-ignore */
|
|
18626
19185
|
...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
|
|
18627
19186
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -18726,10 +19285,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
18726
19285
|
|
|
18727
19286
|
/** A collapsible vertical navigation sidebar. Toggle width with the `open` model. */
|
|
18728
19287
|
class BuiSidebar {
|
|
19288
|
+
/** Whether the sidebar is expanded. Two-way bindable with `[(open)]`. */
|
|
18729
19289
|
open = model(true, /* @ts-ignore */
|
|
18730
19290
|
...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
|
|
19291
|
+
/** Edge the sidebar is docked to, which sets its border side. */
|
|
18731
19292
|
side = input('left', /* @ts-ignore */
|
|
18732
19293
|
...(ngDevMode ? [{ debugName: "side" }] : /* istanbul ignore next */ []));
|
|
19294
|
+
/** Collapse behavior: hide entirely (`offcanvas`) or shrink to an icon rail (`icon`). */
|
|
18733
19295
|
collapsible = input('offcanvas', /* @ts-ignore */
|
|
18734
19296
|
...(ngDevMode ? [{ debugName: "collapsible" }] : /* istanbul ignore next */ []));
|
|
18735
19297
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -18755,6 +19317,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
18755
19317
|
}], 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 }] }] } });
|
|
18756
19318
|
/** A styled, accessible item button for a {@link BuiSidebar} menu. */
|
|
18757
19319
|
class BuiSidebarMenuButton {
|
|
19320
|
+
/** Whether this item is the current page; sets active styling and `aria-current`. */
|
|
18758
19321
|
isActive = input(false, /* @ts-ignore */
|
|
18759
19322
|
...(ngDevMode ? [{ debugName: "isActive" }] : /* istanbul ignore next */ []));
|
|
18760
19323
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
@@ -18777,8 +19340,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
18777
19340
|
|
|
18778
19341
|
/** A guided product tour with a spotlight on each step's target element. SSR-safe. */
|
|
18779
19342
|
class BuiOnboardingTour {
|
|
19343
|
+
/** Whether the tour is open. Two-way bindable with `[(open)]`. */
|
|
18780
19344
|
open = model(false, /* @ts-ignore */
|
|
18781
19345
|
...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
|
|
19346
|
+
/** Ordered steps; each spotlights its `target` element in turn. */
|
|
18782
19347
|
steps = input([], /* @ts-ignore */
|
|
18783
19348
|
...(ngDevMode ? [{ debugName: "steps" }] : /* istanbul ignore next */ []));
|
|
18784
19349
|
step = signal(0, /* @ts-ignore */
|
|
@@ -19372,16 +19937,22 @@ function encodeQr(text) {
|
|
|
19372
19937
|
|
|
19373
19938
|
/** Renders a value as a scannable QR code (SVG). Level M, byte mode. SSR-safe. */
|
|
19374
19939
|
class BuiQrCode {
|
|
19940
|
+
/** Text or URL to encode into the QR code. */
|
|
19375
19941
|
value = input('', /* @ts-ignore */
|
|
19376
19942
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
19943
|
+
/** Rendered width and height of the SVG in pixels. */
|
|
19377
19944
|
size = input(160, /* @ts-ignore */
|
|
19378
19945
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
19946
|
+
/** Accessible label for the QR code image. */
|
|
19379
19947
|
label = input('QR code', /* @ts-ignore */
|
|
19380
19948
|
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
19949
|
+
/** Fill colour of the QR modules (dark squares). */
|
|
19381
19950
|
foreground = input('currentColor', /* @ts-ignore */
|
|
19382
19951
|
...(ngDevMode ? [{ debugName: "foreground" }] : /* istanbul ignore next */ []));
|
|
19952
|
+
/** Background fill colour behind the modules. */
|
|
19383
19953
|
background = input('transparent', /* @ts-ignore */
|
|
19384
19954
|
...(ngDevMode ? [{ debugName: "background" }] : /* istanbul ignore next */ []));
|
|
19955
|
+
/** Quiet-zone border width, in modules. */
|
|
19385
19956
|
margin = input(2, /* @ts-ignore */
|
|
19386
19957
|
...(ngDevMode ? [{ debugName: "margin" }] : /* istanbul ignore next */ []));
|
|
19387
19958
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|