ng-blatui 1.6.0 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  import { clsx } from 'clsx';
2
2
  import { twMerge } from 'tailwind-merge';
3
3
  import * as i0 from '@angular/core';
4
- import { input, computed, Directive, Component, signal, model, inject, PLATFORM_ID, effect, Injectable, ElementRef } from '@angular/core';
4
+ import { input, computed, Directive, Component, signal, model, inject, PLATFORM_ID, effect, Injectable, ElementRef, ViewContainerRef } from '@angular/core';
5
5
  import { cva } from 'class-variance-authority';
6
6
  export { AccordionContent, AccordionGroup, AccordionPanel, AccordionTrigger, ɵɵDeferredContent, ɵɵDeferredContentAware } from '@angular/aria/accordion';
7
7
  export { Tab, TabContent, TabList, TabPanel, Tabs } from '@angular/aria/tabs';
@@ -9,7 +9,7 @@ export { DIALOG_DATA, Dialog, DialogModule, DialogRef } from '@angular/cdk/dialo
9
9
  import { isPlatformBrowser } from '@angular/common';
10
10
  import { _IdGenerator } from '@angular/cdk/a11y';
11
11
  import { Overlay } from '@angular/cdk/overlay';
12
- import { ComponentPortal } from '@angular/cdk/portal';
12
+ import { ComponentPortal, TemplatePortal } from '@angular/cdk/portal';
13
13
 
14
14
  /**
15
15
  * Merge class names with `clsx` semantics and resolve Tailwind conflicts with
@@ -3133,6 +3133,221 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
3133
3133
  }]
3134
3134
  }], propDecorators: { avatars: [{ type: i0.Input, args: [{ isSignal: true, alias: "avatars", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
3135
3135
 
3136
+ /** Pagination navigation landmark. */
3137
+ class BuiPagination {
3138
+ userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
3139
+ computedClass = computed(() => cn('mx-auto flex w-full justify-center', this.userClass()), /* @ts-ignore */
3140
+ ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
3141
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiPagination, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3142
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: BuiPagination, isStandalone: true, selector: "nav[buiPagination]", inputs: { userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "navigation", "aria-label": "pagination", "data-slot": "pagination" }, properties: { "class": "computedClass()" } }, ngImport: i0 });
3143
+ }
3144
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiPagination, decorators: [{
3145
+ type: Directive,
3146
+ args: [{
3147
+ selector: 'nav[buiPagination]',
3148
+ host: {
3149
+ role: 'navigation',
3150
+ 'aria-label': 'pagination',
3151
+ 'data-slot': 'pagination',
3152
+ '[class]': 'computedClass()',
3153
+ },
3154
+ }]
3155
+ }], propDecorators: { userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
3156
+ class BuiPaginationContent {
3157
+ userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
3158
+ computedClass = computed(() => cn('flex flex-row items-center gap-1', this.userClass()), /* @ts-ignore */
3159
+ ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
3160
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiPaginationContent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3161
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: BuiPaginationContent, isStandalone: true, selector: "ul[buiPaginationContent]", inputs: { userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "pagination-content" }, properties: { "class": "computedClass()" } }, ngImport: i0 });
3162
+ }
3163
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiPaginationContent, decorators: [{
3164
+ type: Directive,
3165
+ args: [{
3166
+ selector: 'ul[buiPaginationContent]',
3167
+ host: { 'data-slot': 'pagination-content', '[class]': 'computedClass()' },
3168
+ }]
3169
+ }], propDecorators: { userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
3170
+ class BuiPaginationItem {
3171
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiPaginationItem, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3172
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.2", type: BuiPaginationItem, isStandalone: true, selector: "li[buiPaginationItem]", host: { attributes: { "data-slot": "pagination-item" } }, ngImport: i0 });
3173
+ }
3174
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiPaginationItem, decorators: [{
3175
+ type: Directive,
3176
+ args: [{
3177
+ selector: 'li[buiPaginationItem]',
3178
+ host: { 'data-slot': 'pagination-item' },
3179
+ }]
3180
+ }] });
3181
+ const LINK_BASE = "inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4";
3182
+ const LINK_SIZES = {
3183
+ default: 'h-9 px-4 py-2 has-[>svg]:px-3',
3184
+ sm: 'h-8 gap-1.5 px-3',
3185
+ lg: 'h-10 px-6',
3186
+ icon: 'size-9',
3187
+ };
3188
+ /** A pagination link; set `active` for the current page. */
3189
+ class BuiPaginationLink {
3190
+ active = input(false, /* @ts-ignore */
3191
+ ...(ngDevMode ? [{ debugName: "active" }] : /* istanbul ignore next */ []));
3192
+ size = input('icon', /* @ts-ignore */
3193
+ ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
3194
+ userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
3195
+ computedClass = computed(() => cn(LINK_BASE, this.active()
3196
+ ? 'border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground'
3197
+ : 'hover:bg-accent hover:text-accent-foreground', LINK_SIZES[this.size()], this.userClass()), /* @ts-ignore */
3198
+ ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
3199
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiPaginationLink, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3200
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: BuiPaginationLink, isStandalone: true, selector: "a[buiPaginationLink]", inputs: { active: { classPropertyName: "active", publicName: "active", 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": "pagination-link" }, properties: { "attr.aria-current": "active() ? 'page' : null", "attr.data-active": "active() ? 'true' : null", "class": "computedClass()" } }, ngImport: i0 });
3201
+ }
3202
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiPaginationLink, decorators: [{
3203
+ type: Directive,
3204
+ args: [{
3205
+ selector: 'a[buiPaginationLink]',
3206
+ host: {
3207
+ 'data-slot': 'pagination-link',
3208
+ '[attr.aria-current]': "active() ? 'page' : null",
3209
+ '[attr.data-active]': "active() ? 'true' : null",
3210
+ '[class]': 'computedClass()',
3211
+ },
3212
+ }]
3213
+ }], propDecorators: { active: [{ type: i0.Input, args: [{ isSignal: true, alias: "active", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
3214
+ /** Ellipsis indicator for skipped pages. */
3215
+ class BuiPaginationEllipsis {
3216
+ userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
3217
+ computedClass = computed(() => cn('flex size-9 items-center justify-center', this.userClass()), /* @ts-ignore */
3218
+ ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
3219
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiPaginationEllipsis, deps: [], target: i0.ɵɵFactoryTarget.Component });
3220
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.2", type: BuiPaginationEllipsis, isStandalone: true, selector: "bui-pagination-ellipsis", inputs: { userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "pagination-ellipsis", "aria-hidden": "true" }, properties: { "class": "computedClass()" } }, ngImport: i0, template: `
3221
+ <svg
3222
+ viewBox="0 0 24 24"
3223
+ fill="none"
3224
+ stroke="currentColor"
3225
+ stroke-width="2"
3226
+ stroke-linecap="round"
3227
+ stroke-linejoin="round"
3228
+ class="size-4"
3229
+ >
3230
+ <circle cx="12" cy="12" r="1" />
3231
+ <circle cx="19" cy="12" r="1" />
3232
+ <circle cx="5" cy="12" r="1" />
3233
+ </svg>
3234
+ <span class="sr-only">More pages</span>
3235
+ `, isInline: true });
3236
+ }
3237
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiPaginationEllipsis, decorators: [{
3238
+ type: Component,
3239
+ args: [{
3240
+ selector: 'bui-pagination-ellipsis',
3241
+ host: { 'data-slot': 'pagination-ellipsis', 'aria-hidden': 'true', '[class]': 'computedClass()' },
3242
+ template: `
3243
+ <svg
3244
+ viewBox="0 0 24 24"
3245
+ fill="none"
3246
+ stroke="currentColor"
3247
+ stroke-width="2"
3248
+ stroke-linecap="round"
3249
+ stroke-linejoin="round"
3250
+ class="size-4"
3251
+ >
3252
+ <circle cx="12" cy="12" r="1" />
3253
+ <circle cx="19" cy="12" r="1" />
3254
+ <circle cx="5" cy="12" r="1" />
3255
+ </svg>
3256
+ <span class="sr-only">More pages</span>
3257
+ `,
3258
+ }]
3259
+ }], propDecorators: { userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
3260
+
3261
+ /**
3262
+ * Click-triggered popover on the Angular CDK overlay. Bind the content template:
3263
+ * `<button [buiPopover]="tpl">…</button>` with `<ng-template #tpl><div buiPopoverContent>…`.
3264
+ * Closes on outside click and Escape. SSR-safe (the overlay is browser-only, on click).
3265
+ */
3266
+ class BuiPopover {
3267
+ content = input.required({ ...(ngDevMode ? { debugName: "content" } : /* istanbul ignore next */ {}), alias: 'buiPopover' });
3268
+ overlay = inject(Overlay);
3269
+ host = inject(ElementRef);
3270
+ viewContainerRef = inject(ViewContainerRef);
3271
+ overlayRef = null;
3272
+ isOpen = signal(false, /* @ts-ignore */
3273
+ ...(ngDevMode ? [{ debugName: "isOpen" }] : /* istanbul ignore next */ []));
3274
+ toggle() {
3275
+ if (this.isOpen()) {
3276
+ this.close();
3277
+ }
3278
+ else {
3279
+ this.open();
3280
+ }
3281
+ }
3282
+ open() {
3283
+ const positionStrategy = this.overlay
3284
+ .position()
3285
+ .flexibleConnectedTo(this.host)
3286
+ .withPositions([
3287
+ { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: 4 },
3288
+ { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -4 },
3289
+ ]);
3290
+ const overlayReference = this.overlay.create({
3291
+ positionStrategy,
3292
+ scrollStrategy: this.overlay.scrollStrategies.reposition(),
3293
+ });
3294
+ overlayReference.attach(new TemplatePortal(this.content(), this.viewContainerRef));
3295
+ overlayReference.outsidePointerEvents().subscribe((event) => {
3296
+ if (!this.host.nativeElement.contains(event.target)) {
3297
+ this.close();
3298
+ }
3299
+ });
3300
+ overlayReference.keydownEvents().subscribe((event) => {
3301
+ if (event.key === 'Escape') {
3302
+ this.close();
3303
+ }
3304
+ });
3305
+ this.overlayRef = overlayReference;
3306
+ this.isOpen.set(true);
3307
+ }
3308
+ close() {
3309
+ this.overlayRef?.dispose();
3310
+ this.overlayRef = null;
3311
+ this.isOpen.set(false);
3312
+ }
3313
+ ngOnDestroy() {
3314
+ this.close();
3315
+ }
3316
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiPopover, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3317
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: BuiPopover, isStandalone: true, selector: "[buiPopover]", inputs: { content: { classPropertyName: "content", publicName: "buiPopover", isSignal: true, isRequired: true, transformFunction: null } }, host: { attributes: { "aria-haspopup": "dialog" }, listeners: { "click": "toggle()" }, properties: { "attr.aria-expanded": "isOpen()" } }, ngImport: i0 });
3318
+ }
3319
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiPopover, decorators: [{
3320
+ type: Directive,
3321
+ args: [{
3322
+ selector: '[buiPopover]',
3323
+ host: {
3324
+ 'aria-haspopup': 'dialog',
3325
+ '[attr.aria-expanded]': 'isOpen()',
3326
+ '(click)': 'toggle()',
3327
+ },
3328
+ }]
3329
+ }], propDecorators: { content: [{ type: i0.Input, args: [{ isSignal: true, alias: "buiPopover", required: true }] }] } });
3330
+ /** Styling + role for the popover content root (inside the bound template). */
3331
+ class BuiPopoverContent {
3332
+ userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
3333
+ computedClass = computed(() => cn('z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none', this.userClass()), /* @ts-ignore */
3334
+ ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
3335
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiPopoverContent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3336
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: BuiPopoverContent, isStandalone: true, selector: "[buiPopoverContent]", inputs: { userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "popover-content", "role": "dialog", "tabindex": "-1" }, properties: { "class": "computedClass()" } }, ngImport: i0 });
3337
+ }
3338
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: BuiPopoverContent, decorators: [{
3339
+ type: Directive,
3340
+ args: [{
3341
+ selector: '[buiPopoverContent]',
3342
+ host: {
3343
+ 'data-slot': 'popover-content',
3344
+ role: 'dialog',
3345
+ tabindex: '-1',
3346
+ '[class]': 'computedClass()',
3347
+ },
3348
+ }]
3349
+ }], propDecorators: { userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
3350
+
3136
3351
  /*
3137
3352
  * Public API Surface of ng-blatui
3138
3353
  */
@@ -3141,5 +3356,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
3141
3356
  * Generated bundle index. Do not edit.
3142
3357
  */
3143
3358
 
3144
- export { BuiAccordion, BuiAccordionContent, BuiAccordionItem, BuiAccordionTrigger, BuiAlert, BuiAlertDescription, BuiAlertTitle, BuiAspectRatio, BuiAvatar, BuiAvatarGroup, BuiBadge, BuiBanner, BuiBreadcrumb, BuiBreadcrumbEllipsis, BuiBreadcrumbItem, BuiBreadcrumbLink, BuiBreadcrumbList, BuiBreadcrumbPage, BuiBreadcrumbSeparator, BuiButton, BuiButtonGroup, BuiButtonGroupText, BuiCard, BuiCardAction, BuiCardContent, BuiCardDescription, BuiCardFooter, BuiCardHeader, BuiCardTitle, BuiCheckbox, BuiCollapsible, BuiCollapsibleContent, BuiCollapsibleTrigger, BuiContainer, BuiCopyButton, BuiDialogContent, BuiDialogDescription, BuiDialogFooter, BuiDialogHeader, BuiDialogTitle, BuiEmpty, BuiEmptyContent, BuiEmptyDescription, BuiEmptyHeader, BuiEmptyMedia, BuiEmptyTitle, BuiField, BuiFieldContent, BuiFieldDescription, BuiFieldError, BuiFieldGroup, BuiFieldLabel, BuiFieldLegend, BuiFieldSeparator, BuiFieldSet, BuiFieldTitle, BuiInput, BuiKbd, BuiLabel, BuiProgress, BuiRadioGroup, BuiRadioGroupItem, BuiSeparator, BuiSkeleton, BuiSpinner, BuiSwitch, BuiTabList, BuiTabPanel, BuiTabTrigger, BuiTable, BuiTableBody, BuiTableCaption, BuiTableCell, BuiTableContainer, BuiTableFooter, BuiTableHead, BuiTableHeader, BuiTableRow, BuiTabs, BuiTextarea, BuiThemeCustomizer, BuiToggle, BuiTooltip, BuiTooltipContent, THEME_TOKENS, ThemeStore, buttonVariants, cn, toggleVariants };
3359
+ export { BuiAccordion, BuiAccordionContent, BuiAccordionItem, BuiAccordionTrigger, BuiAlert, BuiAlertDescription, BuiAlertTitle, BuiAspectRatio, BuiAvatar, BuiAvatarGroup, BuiBadge, BuiBanner, BuiBreadcrumb, BuiBreadcrumbEllipsis, BuiBreadcrumbItem, BuiBreadcrumbLink, BuiBreadcrumbList, BuiBreadcrumbPage, BuiBreadcrumbSeparator, BuiButton, BuiButtonGroup, BuiButtonGroupText, BuiCard, BuiCardAction, BuiCardContent, BuiCardDescription, BuiCardFooter, BuiCardHeader, BuiCardTitle, BuiCheckbox, BuiCollapsible, BuiCollapsibleContent, BuiCollapsibleTrigger, BuiContainer, BuiCopyButton, BuiDialogContent, BuiDialogDescription, BuiDialogFooter, BuiDialogHeader, BuiDialogTitle, BuiEmpty, BuiEmptyContent, BuiEmptyDescription, BuiEmptyHeader, BuiEmptyMedia, BuiEmptyTitle, BuiField, BuiFieldContent, BuiFieldDescription, BuiFieldError, BuiFieldGroup, BuiFieldLabel, BuiFieldLegend, BuiFieldSeparator, BuiFieldSet, BuiFieldTitle, BuiInput, BuiKbd, BuiLabel, BuiPagination, BuiPaginationContent, BuiPaginationEllipsis, BuiPaginationItem, BuiPaginationLink, BuiPopover, BuiPopoverContent, BuiProgress, BuiRadioGroup, BuiRadioGroupItem, BuiSeparator, BuiSkeleton, BuiSpinner, BuiSwitch, BuiTabList, BuiTabPanel, BuiTabTrigger, BuiTable, BuiTableBody, BuiTableCaption, BuiTableCell, BuiTableContainer, BuiTableFooter, BuiTableHead, BuiTableHeader, BuiTableRow, BuiTabs, BuiTextarea, BuiThemeCustomizer, BuiToggle, BuiTooltip, BuiTooltipContent, THEME_TOKENS, ThemeStore, buttonVariants, cn, toggleVariants };
3145
3360
  //# sourceMappingURL=ng-blatui.mjs.map