ng-blatui 1.18.0 → 1.19.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.
@@ -5204,6 +5204,227 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
5204
5204
  }]
5205
5205
  }], propDecorators: { tiers: [{ type: i0.Input, args: [{ isSignal: true, alias: "tiers", required: false }] }], rows: [{ type: i0.Input, args: [{ isSignal: true, alias: "rows", required: false }] }], highlight: [{ type: i0.Input, args: [{ isSignal: true, alias: "highlight", required: false }] }], featureLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "featureLabel", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
5206
5206
 
5207
+ /**
5208
+ * A card that flips to reveal its back. Default content is the front; project the back
5209
+ * with `[buiFlipBack]`. `trigger="hover"` (default) or `"click"` (keyboard-accessible).
5210
+ */
5211
+ class BuiFlipCard {
5212
+ trigger = input('hover', /* @ts-ignore */
5213
+ ...(ngDevMode ? [{ debugName: "trigger" }] : /* istanbul ignore next */ []));
5214
+ height = input('16rem', /* @ts-ignore */
5215
+ ...(ngDevMode ? [{ debugName: "height" }] : /* istanbul ignore next */ []));
5216
+ userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
5217
+ flipped = signal(false, /* @ts-ignore */
5218
+ ...(ngDevMode ? [{ debugName: "flipped" }] : /* istanbul ignore next */ []));
5219
+ computedClass = computed(() => cn('relative block w-full', this.userClass()), /* @ts-ignore */
5220
+ ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
5221
+ onHover(shouldFlip) {
5222
+ if (this.trigger() === 'hover') {
5223
+ this.flipped.set(shouldFlip);
5224
+ }
5225
+ }
5226
+ onClick() {
5227
+ if (this.trigger() === 'click') {
5228
+ this.flipped.update((value) => !value);
5229
+ }
5230
+ }
5231
+ onKeydown(event) {
5232
+ if (!(this.trigger() === 'click' && (event.key === 'Enter' || event.key === ' '))) {
5233
+ return;
5234
+ }
5235
+ event.preventDefault();
5236
+ this.flipped.update((value) => !value);
5237
+ }
5238
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiFlipCard, deps: [], target: i0.ɵɵFactoryTarget.Component });
5239
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.2", type: BuiFlipCard, isStandalone: true, selector: "bui-flip-card", inputs: { trigger: { classPropertyName: "trigger", publicName: "trigger", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "flip-card" }, listeners: { "mouseenter": "onHover(true)", "mouseleave": "onHover(false)", "focusin": "onHover(true)", "focusout": "onHover(false)", "click": "onClick()", "keydown": "onKeydown($event)" }, properties: { "class": "computedClass()", "style.perspective": "'1000px'", "style.height": "height()", "attr.role": "trigger() === 'click' ? 'button' : null", "attr.tabindex": "trigger() === 'click' ? 0 : null", "attr.aria-pressed": "trigger() === 'click' ? flipped() : null" } }, ngImport: i0, template: `
5240
+ <div
5241
+ data-slot="flip-card-flipper"
5242
+ class="relative block size-full rounded-xl transition-transform duration-500 [transform-style:preserve-3d]"
5243
+ [class]="flipped() ? '[transform:rotateY(180deg)]' : ''"
5244
+ >
5245
+ <div
5246
+ data-slot="flip-card-front"
5247
+ class="absolute inset-0 flex flex-col overflow-hidden rounded-xl border bg-card p-6 text-card-foreground shadow-sm [backface-visibility:hidden]"
5248
+ [attr.aria-hidden]="flipped()"
5249
+ >
5250
+ <ng-content />
5251
+ </div>
5252
+ <div
5253
+ data-slot="flip-card-back"
5254
+ class="absolute inset-0 flex [transform:rotateY(180deg)] flex-col overflow-hidden rounded-xl border bg-card p-6 text-card-foreground shadow-sm [backface-visibility:hidden]"
5255
+ [attr.aria-hidden]="!flipped()"
5256
+ >
5257
+ <ng-content select="[buiFlipBack]" />
5258
+ </div>
5259
+ </div>
5260
+ `, isInline: true });
5261
+ }
5262
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiFlipCard, decorators: [{
5263
+ type: Component,
5264
+ args: [{
5265
+ selector: 'bui-flip-card',
5266
+ host: {
5267
+ 'data-slot': 'flip-card',
5268
+ '[class]': 'computedClass()',
5269
+ '[style.perspective]': "'1000px'",
5270
+ '[style.height]': 'height()',
5271
+ '[attr.role]': "trigger() === 'click' ? 'button' : null",
5272
+ '[attr.tabindex]': "trigger() === 'click' ? 0 : null",
5273
+ '[attr.aria-pressed]': "trigger() === 'click' ? flipped() : null",
5274
+ '(mouseenter)': 'onHover(true)',
5275
+ '(mouseleave)': 'onHover(false)',
5276
+ '(focusin)': 'onHover(true)',
5277
+ '(focusout)': 'onHover(false)',
5278
+ '(click)': 'onClick()',
5279
+ '(keydown)': 'onKeydown($event)',
5280
+ },
5281
+ template: `
5282
+ <div
5283
+ data-slot="flip-card-flipper"
5284
+ class="relative block size-full rounded-xl transition-transform duration-500 [transform-style:preserve-3d]"
5285
+ [class]="flipped() ? '[transform:rotateY(180deg)]' : ''"
5286
+ >
5287
+ <div
5288
+ data-slot="flip-card-front"
5289
+ class="absolute inset-0 flex flex-col overflow-hidden rounded-xl border bg-card p-6 text-card-foreground shadow-sm [backface-visibility:hidden]"
5290
+ [attr.aria-hidden]="flipped()"
5291
+ >
5292
+ <ng-content />
5293
+ </div>
5294
+ <div
5295
+ data-slot="flip-card-back"
5296
+ class="absolute inset-0 flex [transform:rotateY(180deg)] flex-col overflow-hidden rounded-xl border bg-card p-6 text-card-foreground shadow-sm [backface-visibility:hidden]"
5297
+ [attr.aria-hidden]="!flipped()"
5298
+ >
5299
+ <ng-content select="[buiFlipBack]" />
5300
+ </div>
5301
+ </div>
5302
+ `,
5303
+ }]
5304
+ }], propDecorators: { trigger: [{ type: i0.Input, args: [{ isSignal: true, alias: "trigger", required: false }] }], height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
5305
+
5306
+ /** A card with a radial spotlight glow that follows the cursor on hover. */
5307
+ class BuiSpotlightCard {
5308
+ color = input(null, /* @ts-ignore */
5309
+ ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
5310
+ size = input(350, /* @ts-ignore */
5311
+ ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
5312
+ userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
5313
+ host = inject(ElementRef);
5314
+ hover = signal(false, /* @ts-ignore */
5315
+ ...(ngDevMode ? [{ debugName: "hover" }] : /* istanbul ignore next */ []));
5316
+ glowStyle = computed(() => {
5317
+ const glow = this.color() ?? 'color-mix(in oklab, var(--foreground) 14%, transparent)';
5318
+ return `radial-gradient(circle ${this.size()}px at var(--x, 50%) var(--y, 50%), ${glow}, transparent 80%)`;
5319
+ }, /* @ts-ignore */
5320
+ ...(ngDevMode ? [{ debugName: "glowStyle" }] : /* istanbul ignore next */ []));
5321
+ computedClass = computed(() => cn('relative overflow-hidden rounded-xl border bg-card p-6 text-card-foreground shadow-sm', this.userClass()), /* @ts-ignore */
5322
+ ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
5323
+ track(event) {
5324
+ const element = this.host.nativeElement;
5325
+ const rect = element.getBoundingClientRect();
5326
+ element.style.setProperty('--x', `${event.clientX - rect.left}px`);
5327
+ element.style.setProperty('--y', `${event.clientY - rect.top}px`);
5328
+ }
5329
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiSpotlightCard, deps: [], target: i0.ɵɵFactoryTarget.Component });
5330
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.2", type: BuiSpotlightCard, isStandalone: true, selector: "bui-spotlight-card", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "spotlight-card" }, listeners: { "mousemove": "track($event)", "mouseenter": "hover.set(true)", "mouseleave": "hover.set(false)" }, properties: { "class": "computedClass()" } }, ngImport: i0, template: `
5331
+ <div
5332
+ aria-hidden="true"
5333
+ class="pointer-events-none absolute inset-0 rounded-[inherit] transition-opacity duration-300"
5334
+ [style.opacity]="hover() ? 1 : 0"
5335
+ [style.background]="glowStyle()"
5336
+ ></div>
5337
+ <div class="relative z-10"><ng-content /></div>
5338
+ `, isInline: true });
5339
+ }
5340
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiSpotlightCard, decorators: [{
5341
+ type: Component,
5342
+ args: [{
5343
+ selector: 'bui-spotlight-card',
5344
+ host: {
5345
+ 'data-slot': 'spotlight-card',
5346
+ '[class]': 'computedClass()',
5347
+ '(mousemove)': 'track($event)',
5348
+ '(mouseenter)': 'hover.set(true)',
5349
+ '(mouseleave)': 'hover.set(false)',
5350
+ },
5351
+ template: `
5352
+ <div
5353
+ aria-hidden="true"
5354
+ class="pointer-events-none absolute inset-0 rounded-[inherit] transition-opacity duration-300"
5355
+ [style.opacity]="hover() ? 1 : 0"
5356
+ [style.background]="glowStyle()"
5357
+ ></div>
5358
+ <div class="relative z-10"><ng-content /></div>
5359
+ `,
5360
+ }]
5361
+ }], propDecorators: { color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
5362
+
5363
+ /** A card that tilts in 3D toward the cursor. SSR-safe (geometry read on mousemove). */
5364
+ class BuiTiltCard {
5365
+ max = input(10, /* @ts-ignore */
5366
+ ...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
5367
+ scaleTo = input(1.05, /* @ts-ignore */
5368
+ ...(ngDevMode ? [{ debugName: "scaleTo" }] : /* istanbul ignore next */ []));
5369
+ userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
5370
+ active = signal(false, /* @ts-ignore */
5371
+ ...(ngDevMode ? [{ debugName: "active" }] : /* istanbul ignore next */ []));
5372
+ rx = signal(0, /* @ts-ignore */
5373
+ ...(ngDevMode ? [{ debugName: "rx" }] : /* istanbul ignore next */ []));
5374
+ ry = signal(0, /* @ts-ignore */
5375
+ ...(ngDevMode ? [{ debugName: "ry" }] : /* istanbul ignore next */ []));
5376
+ cardTransform = computed(() => {
5377
+ const scale = this.active() ? this.scaleTo() : 1;
5378
+ return `rotateX(${this.rx()}deg) rotateY(${this.ry()}deg) scale(${scale})`;
5379
+ }, /* @ts-ignore */
5380
+ ...(ngDevMode ? [{ debugName: "cardTransform" }] : /* istanbul ignore next */ []));
5381
+ computedClass = computed(() => cn('block [perspective:1000px]', this.userClass()), /* @ts-ignore */
5382
+ ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
5383
+ move(event) {
5384
+ const rect = event.currentTarget.getBoundingClientRect();
5385
+ const px = (event.clientX - rect.left) / rect.width;
5386
+ const py = (event.clientY - rect.top) / rect.height;
5387
+ this.active.set(true);
5388
+ this.ry.set((px - 0.5) * 2 * this.max());
5389
+ this.rx.set(-(py - 0.5) * 2 * this.max());
5390
+ }
5391
+ leave() {
5392
+ this.active.set(false);
5393
+ this.rx.set(0);
5394
+ this.ry.set(0);
5395
+ }
5396
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiTiltCard, deps: [], target: i0.ɵɵFactoryTarget.Component });
5397
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.2", type: BuiTiltCard, isStandalone: true, selector: "bui-tilt-card", inputs: { max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, scaleTo: { classPropertyName: "scaleTo", publicName: "scaleTo", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "tilt-card" }, properties: { "class": "computedClass()" } }, ngImport: i0, template: `
5398
+ <div
5399
+ class="relative block overflow-hidden rounded-xl border bg-card text-card-foreground shadow-sm [transform-style:preserve-3d]"
5400
+ [class]="active() ? 'transition-none' : 'transition-transform duration-500 ease-out'"
5401
+ [style.transform]="cardTransform()"
5402
+ (mousemove)="move($event)"
5403
+ (mouseleave)="leave()"
5404
+ >
5405
+ <ng-content />
5406
+ </div>
5407
+ `, isInline: true });
5408
+ }
5409
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiTiltCard, decorators: [{
5410
+ type: Component,
5411
+ args: [{
5412
+ selector: 'bui-tilt-card',
5413
+ host: { 'data-slot': 'tilt-card', '[class]': 'computedClass()' },
5414
+ template: `
5415
+ <div
5416
+ class="relative block overflow-hidden rounded-xl border bg-card text-card-foreground shadow-sm [transform-style:preserve-3d]"
5417
+ [class]="active() ? 'transition-none' : 'transition-transform duration-500 ease-out'"
5418
+ [style.transform]="cardTransform()"
5419
+ (mousemove)="move($event)"
5420
+ (mouseleave)="leave()"
5421
+ >
5422
+ <ng-content />
5423
+ </div>
5424
+ `,
5425
+ }]
5426
+ }], propDecorators: { max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], scaleTo: [{ type: i0.Input, args: [{ isSignal: true, alias: "scaleTo", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
5427
+
5207
5428
  /*
5208
5429
  * Public API Surface of ng-blatui
5209
5430
  */
@@ -5212,5 +5433,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
5212
5433
  * Generated bundle index. Do not edit.
5213
5434
  */
5214
5435
 
5215
- export { BuiAccordion, BuiAccordionContent, BuiAccordionItem, BuiAccordionTrigger, BuiAlert, BuiAlertDescription, BuiAlertDialogAction, BuiAlertDialogCancel, BuiAlertDialogContent, BuiAlertDialogDescription, BuiAlertDialogFooter, BuiAlertDialogHeader, BuiAlertDialogTitle, BuiAlertTitle, BuiAspectRatio, BuiAutosizeTextarea, BuiAvatar, BuiAvatarGroup, BuiBadge, BuiBanner, BuiBreadcrumb, BuiBreadcrumbEllipsis, BuiBreadcrumbItem, BuiBreadcrumbLink, BuiBreadcrumbList, BuiBreadcrumbPage, BuiBreadcrumbSeparator, BuiButton, BuiButtonGroup, BuiButtonGroupText, BuiCard, BuiCardAction, BuiCardContent, BuiCardDescription, BuiCardFooter, BuiCardHeader, BuiCardTitle, BuiCheckbox, BuiCodeBlock, BuiCollapsible, BuiCollapsibleContent, BuiCollapsibleTrigger, BuiComparisonTable, BuiContainer, BuiCopyButton, BuiDialogContent, BuiDialogDescription, BuiDialogFooter, BuiDialogHeader, BuiDialogTitle, BuiDotPattern, BuiDropdownMenu, BuiDropdownMenuItem, BuiDropdownMenuLabel, BuiDropdownMenuSeparator, BuiEmpty, BuiEmptyContent, BuiEmptyDescription, BuiEmptyHeader, BuiEmptyMedia, BuiEmptyTitle, BuiField, BuiFieldContent, BuiFieldDescription, BuiFieldError, BuiFieldGroup, BuiFieldLabel, BuiFieldLegend, BuiFieldSeparator, BuiFieldSet, BuiFieldTitle, BuiGridPattern, BuiHoverCard, BuiHoverCardContent, BuiInput, BuiInputGroup, BuiInputGroupAddon, BuiInputGroupButton, BuiInputGroupInput, BuiInputGroupText, BuiItem, BuiItemActions, BuiItemContent, BuiItemDescription, BuiItemGroup, BuiItemMedia, BuiItemTitle, BuiKbd, BuiLabel, BuiMenubar, BuiMenubarTrigger, BuiMeter, BuiPagination, BuiPaginationContent, BuiPaginationEllipsis, BuiPaginationItem, BuiPaginationLink, BuiPopover, BuiPopoverContent, BuiProgress, BuiQuantitySelector, BuiRadioGroup, BuiRadioGroupItem, BuiRating, BuiScrollArea, BuiSegmentedControl, BuiSeparator, BuiSkeleton, BuiSlider, BuiSpinner, BuiStat, BuiSwitch, BuiTabList, BuiTabPanel, BuiTabTrigger, BuiTable, BuiTableBody, BuiTableCaption, BuiTableCell, BuiTableContainer, BuiTableFooter, BuiTableHead, BuiTableHeader, BuiTableRow, BuiTabs, BuiTerminal, BuiTextarea, BuiThemeCustomizer, BuiToggle, BuiTooltip, BuiTooltipContent, BuiTypography, BuiVisuallyHidden, THEME_TOKENS, ThemeStore, buttonVariants, cn, toggleVariants };
5436
+ export { BuiAccordion, BuiAccordionContent, BuiAccordionItem, BuiAccordionTrigger, BuiAlert, BuiAlertDescription, BuiAlertDialogAction, BuiAlertDialogCancel, BuiAlertDialogContent, BuiAlertDialogDescription, BuiAlertDialogFooter, BuiAlertDialogHeader, BuiAlertDialogTitle, BuiAlertTitle, BuiAspectRatio, BuiAutosizeTextarea, BuiAvatar, BuiAvatarGroup, BuiBadge, BuiBanner, BuiBreadcrumb, BuiBreadcrumbEllipsis, BuiBreadcrumbItem, BuiBreadcrumbLink, BuiBreadcrumbList, BuiBreadcrumbPage, BuiBreadcrumbSeparator, BuiButton, BuiButtonGroup, BuiButtonGroupText, BuiCard, BuiCardAction, BuiCardContent, BuiCardDescription, BuiCardFooter, BuiCardHeader, BuiCardTitle, BuiCheckbox, BuiCodeBlock, BuiCollapsible, BuiCollapsibleContent, BuiCollapsibleTrigger, BuiComparisonTable, BuiContainer, BuiCopyButton, BuiDialogContent, BuiDialogDescription, BuiDialogFooter, BuiDialogHeader, BuiDialogTitle, BuiDotPattern, BuiDropdownMenu, BuiDropdownMenuItem, BuiDropdownMenuLabel, BuiDropdownMenuSeparator, BuiEmpty, BuiEmptyContent, BuiEmptyDescription, BuiEmptyHeader, BuiEmptyMedia, BuiEmptyTitle, BuiField, BuiFieldContent, BuiFieldDescription, BuiFieldError, BuiFieldGroup, BuiFieldLabel, BuiFieldLegend, BuiFieldSeparator, BuiFieldSet, BuiFieldTitle, BuiFlipCard, BuiGridPattern, BuiHoverCard, BuiHoverCardContent, BuiInput, BuiInputGroup, BuiInputGroupAddon, BuiInputGroupButton, BuiInputGroupInput, BuiInputGroupText, BuiItem, BuiItemActions, BuiItemContent, BuiItemDescription, BuiItemGroup, BuiItemMedia, BuiItemTitle, BuiKbd, BuiLabel, BuiMenubar, BuiMenubarTrigger, BuiMeter, BuiPagination, BuiPaginationContent, BuiPaginationEllipsis, BuiPaginationItem, BuiPaginationLink, BuiPopover, BuiPopoverContent, BuiProgress, BuiQuantitySelector, BuiRadioGroup, BuiRadioGroupItem, BuiRating, BuiScrollArea, BuiSegmentedControl, BuiSeparator, BuiSkeleton, BuiSlider, BuiSpinner, BuiSpotlightCard, BuiStat, BuiSwitch, BuiTabList, BuiTabPanel, BuiTabTrigger, BuiTable, BuiTableBody, BuiTableCaption, BuiTableCell, BuiTableContainer, BuiTableFooter, BuiTableHead, BuiTableHeader, BuiTableRow, BuiTabs, BuiTerminal, BuiTextarea, BuiThemeCustomizer, BuiTiltCard, BuiToggle, BuiTooltip, BuiTooltipContent, BuiTypography, BuiVisuallyHidden, THEME_TOKENS, ThemeStore, buttonVariants, cn, toggleVariants };
5216
5437
  //# sourceMappingURL=ng-blatui.mjs.map