@kouji-ui/components 0.7.1 → 0.8.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 * as i0 from '@angular/core';
|
|
2
|
-
import { ChangeDetectionStrategy, ViewEncapsulation, Component, input, inject, Injectable, booleanAttribute, computed, TemplateRef,
|
|
2
|
+
import { ChangeDetectionStrategy, ViewEncapsulation, Component, input, inject, Injectable, booleanAttribute, computed, TemplateRef, viewChild, ElementRef, contentChildren, contentChild, model, ViewChild, PLATFORM_ID, DestroyRef, afterNextRender, effect, signal, Injector, untracked, output, EventEmitter, Output, makeEnvironmentProviders, provideEnvironmentInitializer, forwardRef, EnvironmentInjector, Directive, InjectionToken, ViewContainerRef, numberAttribute } from '@angular/core';
|
|
3
3
|
import * as i1 from '@kouji-ui/core';
|
|
4
|
-
import { KjAccordion, KjAccordionTrigger, KjAccordionItem, KjAccordionContent, SHEET_DATA, KjSheetRef, KjSheet, KjIconDirective, KjSheetService, KjAlert, KjAlertIcon, KjAlertTitle, KjAlertDescription, KjAlertActions, KjAlertDismiss, KJ_AVATAR_GROUP, KjAvatarImage, KjAvatarFallback, KjAvatar, KjAvatarGroup, KjBadge, KjBreadcrumb, KjSize, KjBreadcrumbList, KjBreadcrumbItem, KJ_BREADCRUMB_CONFIG, KjLink, KjBreadcrumbCurrent, KjBreadcrumbSeparator, KjBreadcrumbEllipsis, KjButton, KjButtonGroup, KjCalendar, KjCalendarHeader, KjCalendarGrid, KjCalendarDay, KjCarousel, KjLiveRegion, KjVisuallyHidden, KjCarouselViewport, KjCarouselSlide, KjCarouselPrevious, KjCarouselNext, KJ_CAROUSEL, KjCarouselIndicator, KjCarouselIndicators, KjCarouselAutoplay, KjCarouselPauseToggle, KjChatLog, KjChat, KjChatAvatar, KjChatHeader, KjChatBubble, KjChatFooter, KjChatAnnouncer, parseSlash, matchSlashCommands, KjCheckbox, KjColorPicker, KjColorPickerTrigger, KjColorPickerPanel, KjColorPickerArea, KjColorPickerHueSlider, KjColorPickerAlphaSlider, KjColorPickerInput, KjComboboxInput, KjComboboxListbox, KjCombobox, KjComboboxOption, KjConfirmPopup, KjConfirmPopupTrigger,
|
|
4
|
+
import { KjAccordion, KjAccordionTrigger, KjAccordionItem, KjAccordionContent, SHEET_DATA, KjSheetRef, KjSheet, KjIconDirective, KjSheetService, KjAlert, KjAlertIcon, KjAlertTitle, KjAlertDescription, KjAlertActions, KjAlertDismiss, KJ_AVATAR_GROUP, KjAvatarImage, KjAvatarFallback, KjAvatar, KjPopoverTrigger, KjPopoverContent, KjPopoverArrow, KjPopoverClose, KjPopoverTitle, KjTranslateService, KjOverflowContent, KjAvatarGroup, KjBadge, KjBreadcrumb, KjSize, KjBreadcrumbList, KjBreadcrumbItem, KJ_BREADCRUMB_CONFIG, KjLink, KjBreadcrumbCurrent, KjBreadcrumbSeparator, KjBreadcrumbEllipsis, KjButton, KjButtonGroup, KjCalendar, KjCalendarHeader, KjCalendarGrid, KjCalendarDay, KjCarousel, KjLiveRegion, KjVisuallyHidden, KjCarouselViewport, KjCarouselSlide, KjCarouselPrevious, KjCarouselNext, KJ_CAROUSEL, KjCarouselIndicator, KjCarouselIndicators, KjCarouselAutoplay, KjCarouselPauseToggle, KjChatLog, KjChat, KjChatAvatar, KjChatHeader, KjChatBubble, KjChatFooter, KjChatAnnouncer, parseSlash, matchSlashCommands, KjCheckbox, KjColorPicker, KjColorPickerTrigger, KjColorPickerPanel, KjColorPickerArea, KjColorPickerHueSlider, KjColorPickerAlphaSlider, KjColorPickerInput, KjComboboxInput, KjComboboxListbox, KjCombobox, KjComboboxOption, KjConfirmPopup, KjConfirmPopupTrigger, KjConfirmPopupContent, KjConfirmPopupMessage, KjConfirmPopupAction, KjConfirmPopupCancel, KjDatePicker, KjDatePickerTrigger, KjDatePickerCalendar, defaultDateRangePresets, KjDateRangePresets, KjDateRangePresetOption, KjLocale, KjDropdownMenuTrigger, KjDropdownMenuContent, KjDropdownMenuItem, KjDropdownMenuSeparator, KjDropdownMenuLabel, KjDropdownMenuGroup, KjSpinner, KjVariant, KjEditorLoader, KjEditor, KJ_SIZE_PRESET, KjField, KjFieldLabel, KjFieldHelp, KjFieldError, KjFieldGroup, KjFileUpload, KjFileUploadTrigger, KjFileUploadDropzone, KjFileUploadList, KjFileUploadItem, KjProgressBar, KjProgressBarFill, KjForm, KjFormErrorSummary, KJ_ICON_REGISTRY, KjInput, KjInputGroup, KjInputGroupAddon, KjInputMask, KJ_INPUT_MASK_PRESETS, KjInputOtp, KjInputOtpCell, KjKbd, KJ_KBD_SIZE_PRESET, KjDivider, KJ_VARIANT_PRESET, KjList, KjListRow, KjMenubar, KjMenubarItem, KjNumberInput, KjNumberInputGroup, KjNumberStepper, KJ_OVERLAY_BADGE, KjOverlayBadgeContent, KjOverlayBadge, KjPagination, KjPaginationItem, KjPaginationPrevious, KjPaginationNext, KjPaginationFirst, KjPaginationLast, KjPaginationEllipsis, KjPaginationInfo, KJ_PASSWORD_INPUT, KjPasswordInput, KjPasswordInputScope, KjPasswordToggle, KjPasswordStrength, KjPasswordCapsLockWarning, KjRadioGroup, KjRadio, injectRteOverlayData, createKjImageNode, KJ_RTE_OVERLAY_DATA, KjRichTextEditor, KjRovingTabindex, KjRovingTabindexItemDirective, KjSelect, KjSelectTrigger, KjSelectContent, KjOption, KjSkeleton, KjSkipLink, KjSlider, KjSliderTrack, KjSliderRange, KjSliderThumb, KjSpeedDial, KjSpeedDialTrigger, KjSpeedDialActions, KjSpeedDialAction, KjStepper, KjStep, KjStepLabel, KjStepContent, KjStepperNext, KjStepperPrevious, KjStepperReset, KjToggle, KJ_TABLE, provideKjFilterParams, KjTable, KJ_TABLE_STORAGE, KjTableHeader, KjTableRow, KjTableCell, KjTableKeyboardNav, DRAWER_DATA, KjDrawer, KjDrawerService, bindPresets, KJ_TABS_CONFIG, KjTabs, KjTabList, KjTab, KjTabPanel, KjTag, KjTagRemove, KjTagList, KjTextarea, KjTimePicker, KjTimePickerHours, KjTimePickerMinutes, KjTimePickerSeconds, KjTimePickerMeridiem, KjToastViewport, KjToast, KjToastClose, KjTooltipTrigger, KjTooltipContent, KjTooltipArrow, KjTooltipGroup, KjCascadeSelect, KjCascadeSelectTrigger, KjCascadeSelectPanel, KjCascadeSelectOption, KjCascadeSelectSubPanel, KjCommandPalette, KjCommandInput, KjCommandList, KjCommandEmpty, injectListItem, KjListItem, KjCommandGroup, KjCommandSeparator, KjTreeSelectNode, KjTreeSelectToggle, KjTreeSelect, KjTreeSelectTrigger, KjTreeSelectContent } from '@kouji-ui/core';
|
|
5
5
|
export { KJ_DROPDOWN_MENU, KjBlockquote, KjCarousel, KjCarouselSlide, KjCascadeSelectOption, KjChatAnnouncer, KjChatStore, KjCode, KjColorPicker, KjCombobox, KjDatePicker, KjDialog, KjDialogRef, KjDialogService, KjDrawer, KjDrawerRef, KjDrawerService, KjDropdownMenuContent, KjDropdownMenuGroup, KjDropdownMenuItem, KjDropdownMenuLabel, KjDropdownMenuSeparator, KjDropdownMenuTrigger, KjFileUpload, KjInput, KjLead, KjLiveRegion, KjMuted, KjOverlayPanel, KjPopoverArrow, KjPopoverClose, KjPopoverContent, KjPopoverTitle, KjPopoverTrigger, KjRichTextEditor, KjSheet, KjSheetRef, KjSheetService, KjTabPanel, KjTable, KjTooltipArrow, KjTooltipContent, KjTooltipGroup, KjTooltipTrigger, KjTreeSelect, KjTruncate, SHEET_ARIA_LABEL, SHEET_DATA, SHEET_DETENT, SHEET_DISMISSIBLE } from '@kouji-ui/core';
|
|
6
6
|
import { NgTemplateOutlet, isPlatformBrowser, NgComponentOutlet } from '@angular/common';
|
|
7
7
|
import { DomSanitizer } from '@angular/platform-browser';
|
|
@@ -773,7 +773,7 @@ class KjAvatarComponent {
|
|
|
773
773
|
{{ content() }}
|
|
774
774
|
}
|
|
775
775
|
</span>
|
|
776
|
-
`, isInline: true, styles: ["@layer kj.component{.kj-avatar{--kj-avatar-size: 2.5rem;--kj-avatar-bg: var(--kj-bg-field);--kj-avatar-fg: var(--kj-fg-default);--kj-avatar-radius: 9999px;position:relative;display:inline-flex;align-items:center;justify-content:center;width:var(--kj-avatar-size);height:var(--kj-avatar-size);background:var(--kj-avatar-bg);color:var(--kj-avatar-fg);border-radius:var(--kj-avatar-radius);overflow:hidden;font:.875rem / 1 var(--kj-font-sans);font-weight:600}.kj-avatar[data-shape=rounded]{--kj-avatar-radius: var(--kj-radius-box-lg)}.kj-avatar[hidden]{display:none}.kj-avatar[data-size=xs]{--kj-avatar-size: 1.5rem;font-size:.6875rem}.kj-avatar[data-size=sm]{--kj-avatar-size: 2rem;font-size:.75rem}.kj-avatar[data-size=lg]{--kj-avatar-size: 3rem;font-size:1rem}.kj-avatar[data-size=xl]{--kj-avatar-size: 4rem;font-size:1.25rem}.kj-avatar-image{width:100%;height:100%;object-fit:cover;display:block}.kj-avatar-image:not([data-loaded]){opacity:0}.kj-avatar-fallback{position:absolute;inset:0;display:flex;align-items:center;justify-content:center}.kj-avatar-fallback:not([data-visible]){opacity:0;pointer-events:none}}\n"], dependencies: [{ kind: "directive", type: KjAvatarImage, selector: "[kjAvatarImage]" }, { kind: "directive", type: KjAvatarFallback, selector: "[kjAvatarFallback]" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
776
|
+
`, isInline: true, styles: ["@layer kj.component{.kj-avatar{--kj-avatar-size: 2.5rem;--kj-avatar-bg: var(--kj-bg-field);--kj-avatar-fg: var(--kj-fg-default);--kj-avatar-radius: 9999px;position:relative;display:inline-flex;align-items:center;justify-content:center;width:var(--kj-avatar-size);height:var(--kj-avatar-size);background:var(--kj-avatar-bg);color:var(--kj-avatar-fg);border-radius:var(--kj-avatar-radius);overflow:hidden;font:.875rem / 1 var(--kj-font-sans);font-weight:600}.kj-avatar[data-shape=rounded]{--kj-avatar-radius: var(--kj-radius-box-lg)}.kj-avatar[hidden]{display:none}.kj-avatar-group-overflow-trigger{display:inline-flex;padding:0;border:0;background:none;border-radius:9999px}.kj-avatar-group-overflow-trigger[aria-expanded=true] .kj-avatar{--kj-avatar-bg: var(--kj-bg-primary);--kj-avatar-fg: var(--kj-fg-on-primary)}.kj-avatar[data-size=xs]{--kj-avatar-size: 1.5rem;font-size:.6875rem}.kj-avatar[data-size=sm]{--kj-avatar-size: 2rem;font-size:.75rem}.kj-avatar[data-size=lg]{--kj-avatar-size: 3rem;font-size:1rem}.kj-avatar[data-size=xl]{--kj-avatar-size: 4rem;font-size:1.25rem}.kj-avatar-image{width:100%;height:100%;object-fit:cover;display:block}.kj-avatar-image:not([data-loaded]){opacity:0}.kj-avatar-fallback{position:absolute;inset:0;display:flex;align-items:center;justify-content:center}.kj-avatar-fallback:not([data-visible]){opacity:0;pointer-events:none}}\n"], dependencies: [{ kind: "directive", type: KjAvatarImage, selector: "[kjAvatarImage]" }, { kind: "directive", type: KjAvatarFallback, selector: "[kjAvatarFallback]" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
777
777
|
}
|
|
778
778
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjAvatarComponent, decorators: [{
|
|
779
779
|
type: Component,
|
|
@@ -795,9 +795,206 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
795
795
|
// Mirror `alt` to `title` so hovering the avatar shows a native tooltip.
|
|
796
796
|
// `alt` alone only surfaces to screen readers / fallback rendering.
|
|
797
797
|
'[attr.title]': 'alt()',
|
|
798
|
-
}, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["@layer kj.component{.kj-avatar{--kj-avatar-size: 2.5rem;--kj-avatar-bg: var(--kj-bg-field);--kj-avatar-fg: var(--kj-fg-default);--kj-avatar-radius: 9999px;position:relative;display:inline-flex;align-items:center;justify-content:center;width:var(--kj-avatar-size);height:var(--kj-avatar-size);background:var(--kj-avatar-bg);color:var(--kj-avatar-fg);border-radius:var(--kj-avatar-radius);overflow:hidden;font:.875rem / 1 var(--kj-font-sans);font-weight:600}.kj-avatar[data-shape=rounded]{--kj-avatar-radius: var(--kj-radius-box-lg)}.kj-avatar[hidden]{display:none}.kj-avatar[data-size=xs]{--kj-avatar-size: 1.5rem;font-size:.6875rem}.kj-avatar[data-size=sm]{--kj-avatar-size: 2rem;font-size:.75rem}.kj-avatar[data-size=lg]{--kj-avatar-size: 3rem;font-size:1rem}.kj-avatar[data-size=xl]{--kj-avatar-size: 4rem;font-size:1.25rem}.kj-avatar-image{width:100%;height:100%;object-fit:cover;display:block}.kj-avatar-image:not([data-loaded]){opacity:0}.kj-avatar-fallback{position:absolute;inset:0;display:flex;align-items:center;justify-content:center}.kj-avatar-fallback:not([data-visible]){opacity:0;pointer-events:none}}\n"] }]
|
|
798
|
+
}, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["@layer kj.component{.kj-avatar{--kj-avatar-size: 2.5rem;--kj-avatar-bg: var(--kj-bg-field);--kj-avatar-fg: var(--kj-fg-default);--kj-avatar-radius: 9999px;position:relative;display:inline-flex;align-items:center;justify-content:center;width:var(--kj-avatar-size);height:var(--kj-avatar-size);background:var(--kj-avatar-bg);color:var(--kj-avatar-fg);border-radius:var(--kj-avatar-radius);overflow:hidden;font:.875rem / 1 var(--kj-font-sans);font-weight:600}.kj-avatar[data-shape=rounded]{--kj-avatar-radius: var(--kj-radius-box-lg)}.kj-avatar[hidden]{display:none}.kj-avatar-group-overflow-trigger{display:inline-flex;padding:0;border:0;background:none;border-radius:9999px}.kj-avatar-group-overflow-trigger[aria-expanded=true] .kj-avatar{--kj-avatar-bg: var(--kj-bg-primary);--kj-avatar-fg: var(--kj-fg-on-primary)}.kj-avatar[data-size=xs]{--kj-avatar-size: 1.5rem;font-size:.6875rem}.kj-avatar[data-size=sm]{--kj-avatar-size: 2rem;font-size:.75rem}.kj-avatar[data-size=lg]{--kj-avatar-size: 3rem;font-size:1rem}.kj-avatar[data-size=xl]{--kj-avatar-size: 4rem;font-size:1.25rem}.kj-avatar-image{width:100%;height:100%;object-fit:cover;display:block}.kj-avatar-image:not([data-loaded]){opacity:0}.kj-avatar-fallback{position:absolute;inset:0;display:flex;align-items:center;justify-content:center}.kj-avatar-fallback:not([data-visible]){opacity:0;pointer-events:none}}\n"] }]
|
|
799
799
|
}], propDecorators: { src: [{ type: i0.Input, args: [{ isSignal: true, alias: "src", required: false }] }], alt: [{ type: i0.Input, args: [{ isSignal: true, alias: "alt", required: false }] }], content: [{ type: i0.Input, args: [{ isSignal: true, alias: "content", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], shape: [{ type: i0.Input, args: [{ isSignal: true, alias: "shape", required: false }] }] } });
|
|
800
800
|
|
|
801
|
+
/**
|
|
802
|
+
* Click-triggered popover. Compose `[kjPopoverTrigger]` + `<kj-popover-content [kjFor]="t">`
|
|
803
|
+
* with optional `[kjPopoverTitle]` heading and `[kjPopoverClose]` button. The
|
|
804
|
+
* wrapper itself only projects content — its purpose is to host the docs tags.
|
|
805
|
+
*
|
|
806
|
+
* @doc
|
|
807
|
+
* @doc-name popover
|
|
808
|
+
* @doc-is-main
|
|
809
|
+
* @doc-example Default
|
|
810
|
+
* A trigger button + content panel — the bare-minimum recipe.
|
|
811
|
+
* @doc-file popover.example.ts
|
|
812
|
+
* @doc-example Usage
|
|
813
|
+
* A walkthrough of the most common usages — info panel, side-pinned, and
|
|
814
|
+
* modal confirmation. Use this as the copy-paste starting point.
|
|
815
|
+
* @doc-file popover.usage.example.ts
|
|
816
|
+
* @doc-example Sides
|
|
817
|
+
* `kjSide="top|right|bottom|left"` pins the panel relative to the trigger.
|
|
818
|
+
* @doc-file popover.sides.example.ts
|
|
819
|
+
* @doc-example Modal
|
|
820
|
+
* `[kjTrap]="true"` traps focus inside the panel until it closes.
|
|
821
|
+
* @doc-file popover.modal.example.ts
|
|
822
|
+
* @doc-example Cancellable
|
|
823
|
+
* `[kjPopoverClose]` on a button dismisses the panel and restores focus.
|
|
824
|
+
* @doc-file popover.cancellable.example.ts
|
|
825
|
+
* @doc-example With form
|
|
826
|
+
* Embed inputs inside the panel — focus returns to the trigger on close.
|
|
827
|
+
* @doc-file popover.with-form.example.ts
|
|
828
|
+
*
|
|
829
|
+
* @doc-keyboard
|
|
830
|
+
* Enter|Space — Opens the popover from the trigger
|
|
831
|
+
* Escape — Closes the popover and returns focus to the trigger
|
|
832
|
+
* Tab — Moves focus through the panel; cycles inside when [kjTrap]="true"
|
|
833
|
+
* Shift+Tab — Reverse-cycles focus
|
|
834
|
+
*
|
|
835
|
+
* @doc-aria
|
|
836
|
+
* aria-haspopup — Set to "dialog" on the trigger
|
|
837
|
+
* aria-expanded — Reflects the open/closed state on the trigger
|
|
838
|
+
* aria-controls — Links the trigger to the panel id
|
|
839
|
+
* role="dialog" — On the panel (provided via the overlay primitive)
|
|
840
|
+
* aria-labelledby — Wire to `[kjPopoverTitle]` heading id for an accessible name
|
|
841
|
+
*
|
|
842
|
+
* @doc-touch
|
|
843
|
+
* Trigger buttons inherit `kj-button` sizing — use `kjSize="md"` or larger
|
|
844
|
+
* to satisfy WCAG 2.5.5 (44×44). The panel itself is not a touch target.
|
|
845
|
+
*
|
|
846
|
+
* @doc-a11y
|
|
847
|
+
* The panel is portalled to `document.body` so it escapes clipping
|
|
848
|
+
* ancestors while staying linked via `aria-controls`. Focus is returned
|
|
849
|
+
* to the trigger on close, and outside clicks dismiss by default. For
|
|
850
|
+
* destructive confirmations, set `[kjTrap]="true"` so the user must
|
|
851
|
+
* commit or cancel via a visible affordance.
|
|
852
|
+
*
|
|
853
|
+
* @doc-related dialog,tooltip,dropdown-menu
|
|
854
|
+
*
|
|
855
|
+
* @doc-css-var
|
|
856
|
+
* --kj-popover-bg — Panel background fill. Inherits --kj-bg-elevated.
|
|
857
|
+
* --kj-popover-fg — Panel foreground (text) color.
|
|
858
|
+
* --kj-popover-border-color — Panel border color. Inherits --kj-border-default.
|
|
859
|
+
* --kj-popover-radius — Panel corner radius. Inherits --kj-radius-box.
|
|
860
|
+
* --kj-popover-padding-x — Horizontal padding inside the panel.
|
|
861
|
+
* --kj-popover-padding-y — Vertical padding inside the panel.
|
|
862
|
+
* --kj-popover-shadow — Drop shadow under the panel. Inherits --kj-shadow-md.
|
|
863
|
+
* --kj-popover-arrow-size — Edge length of the optional arrow indicator.
|
|
864
|
+
*
|
|
865
|
+
* @doc-category Library/Overlay
|
|
866
|
+
*/
|
|
867
|
+
class KjPopoverComponent {
|
|
868
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjPopoverComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
869
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.5", type: KjPopoverComponent, isStandalone: true, selector: "kj-popover", host: { styleAttribute: "display: contents;" }, ngImport: i0, template: `<ng-content />`, isInline: true, styles: ["@layer kj.component{.kj-popover-content{--kj-popover-bg: var(--kj-bg-elevated);--kj-popover-fg: var(--kj-fg-default);--kj-popover-border-color: var(--kj-border-default);--kj-popover-radius: var(--kj-radius-box);--kj-popover-padding-x: var(--kj-space-md);--kj-popover-padding-y: var(--kj-space-md);--kj-popover-shadow: var(--kj-shadow-md, 0 12px 32px rgb(0 0 0 / .18));--kj-popover-arrow-size: 8px;display:block;box-sizing:border-box;max-width:min(28rem,calc(100vw - 2rem));background:var(--kj-popover-bg);color:var(--kj-popover-fg);border:var(--kj-border) solid var(--kj-popover-border-color);border-radius:var(--kj-popover-radius);padding:var(--kj-popover-padding-y) var(--kj-popover-padding-x);font:.875rem / 1.5 var(--kj-font-sans);box-shadow:var(--kj-popover-shadow);pointer-events:auto;z-index:1000;word-wrap:break-word}.kj-popover-content[hidden]{display:none}.kj-popover-title{display:block;font-size:.9375rem;font-weight:600;margin:0 0 var(--kj-space-xs);color:var(--kj-fg-default)}.kj-popover-arrow{position:absolute;width:var(--kj-popover-arrow-size, 8px);height:var(--kj-popover-arrow-size, 8px);background:var(--kj-popover-bg, var(--kj-bg-elevated));border:var(--kj-border) solid var(--kj-popover-border-color, var(--kj-border-default));transform:rotate(45deg)}.kj-popover-content[data-side=top] .kj-popover-arrow{bottom:calc(var(--kj-popover-arrow-size) / -2);left:50%;margin-left:calc(var(--kj-popover-arrow-size) / -2);border-top-color:transparent;border-left-color:transparent}.kj-popover-content[data-side=bottom] .kj-popover-arrow{top:calc(var(--kj-popover-arrow-size) / -2);left:50%;margin-left:calc(var(--kj-popover-arrow-size) / -2);border-bottom-color:transparent;border-right-color:transparent}.kj-popover-content[data-side=left] .kj-popover-arrow{right:calc(var(--kj-popover-arrow-size) / -2);top:50%;margin-top:calc(var(--kj-popover-arrow-size) / -2);border-left-color:transparent;border-bottom-color:transparent}.kj-popover-content[data-side=right] .kj-popover-arrow{left:calc(var(--kj-popover-arrow-size) / -2);top:50%;margin-top:calc(var(--kj-popover-arrow-size) / -2);border-right-color:transparent;border-top-color:transparent}body[data-kj-scroll-lock=true]{overflow:hidden}@media(prefers-reduced-motion:no-preference){.kj-popover-content{transition:opacity .14s ease-out,transform .14s ease-out}.kj-popover-content[data-state=closed]{opacity:0;transform:scale(.98)}.kj-popover-content[data-state=open]{opacity:1;transform:scale(1)}}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
870
|
+
}
|
|
871
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjPopoverComponent, decorators: [{
|
|
872
|
+
type: Component,
|
|
873
|
+
args: [{ selector: 'kj-popover', standalone: true, imports: [KjPopoverTrigger, KjPopoverContent, KjPopoverArrow, KjPopoverClose, KjPopoverTitle], template: `<ng-content />`, encapsulation: ViewEncapsulation.None, host: { style: 'display: contents;' }, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["@layer kj.component{.kj-popover-content{--kj-popover-bg: var(--kj-bg-elevated);--kj-popover-fg: var(--kj-fg-default);--kj-popover-border-color: var(--kj-border-default);--kj-popover-radius: var(--kj-radius-box);--kj-popover-padding-x: var(--kj-space-md);--kj-popover-padding-y: var(--kj-space-md);--kj-popover-shadow: var(--kj-shadow-md, 0 12px 32px rgb(0 0 0 / .18));--kj-popover-arrow-size: 8px;display:block;box-sizing:border-box;max-width:min(28rem,calc(100vw - 2rem));background:var(--kj-popover-bg);color:var(--kj-popover-fg);border:var(--kj-border) solid var(--kj-popover-border-color);border-radius:var(--kj-popover-radius);padding:var(--kj-popover-padding-y) var(--kj-popover-padding-x);font:.875rem / 1.5 var(--kj-font-sans);box-shadow:var(--kj-popover-shadow);pointer-events:auto;z-index:1000;word-wrap:break-word}.kj-popover-content[hidden]{display:none}.kj-popover-title{display:block;font-size:.9375rem;font-weight:600;margin:0 0 var(--kj-space-xs);color:var(--kj-fg-default)}.kj-popover-arrow{position:absolute;width:var(--kj-popover-arrow-size, 8px);height:var(--kj-popover-arrow-size, 8px);background:var(--kj-popover-bg, var(--kj-bg-elevated));border:var(--kj-border) solid var(--kj-popover-border-color, var(--kj-border-default));transform:rotate(45deg)}.kj-popover-content[data-side=top] .kj-popover-arrow{bottom:calc(var(--kj-popover-arrow-size) / -2);left:50%;margin-left:calc(var(--kj-popover-arrow-size) / -2);border-top-color:transparent;border-left-color:transparent}.kj-popover-content[data-side=bottom] .kj-popover-arrow{top:calc(var(--kj-popover-arrow-size) / -2);left:50%;margin-left:calc(var(--kj-popover-arrow-size) / -2);border-bottom-color:transparent;border-right-color:transparent}.kj-popover-content[data-side=left] .kj-popover-arrow{right:calc(var(--kj-popover-arrow-size) / -2);top:50%;margin-top:calc(var(--kj-popover-arrow-size) / -2);border-left-color:transparent;border-bottom-color:transparent}.kj-popover-content[data-side=right] .kj-popover-arrow{left:calc(var(--kj-popover-arrow-size) / -2);top:50%;margin-top:calc(var(--kj-popover-arrow-size) / -2);border-right-color:transparent;border-top-color:transparent}body[data-kj-scroll-lock=true]{overflow:hidden}@media(prefers-reduced-motion:no-preference){.kj-popover-content{transition:opacity .14s ease-out,transform .14s ease-out}.kj-popover-content[data-state=closed]{opacity:0;transform:scale(.98)}.kj-popover-content[data-state=open]{opacity:1;transform:scale(1)}}}\n"] }]
|
|
874
|
+
}] });
|
|
875
|
+
|
|
876
|
+
const FOCUSABLE = 'a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])';
|
|
877
|
+
/**
|
|
878
|
+
* The panel a collapsing group (`kj-tag-list`, `kj-avatar-group`) opens from
|
|
879
|
+
* its "+N" chip: the consumer's `kjOverflowContent` template when one is
|
|
880
|
+
* projected, otherwise a plain list of the collapsed items' labels.
|
|
881
|
+
*
|
|
882
|
+
* Owns the keyboard story the hover trigger cannot: `focusFirst()` moves
|
|
883
|
+
* focus into the panel (the chip calls it on ArrowDown / Enter), Escape
|
|
884
|
+
* inside the panel returns focus to the chip, and focus leaving the panel
|
|
885
|
+
* closes it.
|
|
886
|
+
*
|
|
887
|
+
* @doc-category Library/Data display
|
|
888
|
+
* @doc
|
|
889
|
+
* @doc-name overflow
|
|
890
|
+
*/
|
|
891
|
+
class KjOverflowPanelComponent {
|
|
892
|
+
/** The "+N" chip's popover trigger. */
|
|
893
|
+
kjFor = input.required(/* @ts-ignore */
|
|
894
|
+
...(ngDevMode ? [{ debugName: "kjFor" }] : /* istanbul ignore next */ []));
|
|
895
|
+
/** Number of collapsed items. */
|
|
896
|
+
kjCount = input.required(/* @ts-ignore */
|
|
897
|
+
...(ngDevMode ? [{ debugName: "kjCount" }] : /* istanbul ignore next */ []));
|
|
898
|
+
/** Index of the first collapsed item in the consumer's collection. */
|
|
899
|
+
kjStart = input.required(/* @ts-ignore */
|
|
900
|
+
...(ngDevMode ? [{ debugName: "kjStart" }] : /* istanbul ignore next */ []));
|
|
901
|
+
/** Exclusive end index of the collapsed range. */
|
|
902
|
+
kjEnd = input.required(/* @ts-ignore */
|
|
903
|
+
...(ngDevMode ? [{ debugName: "kjEnd" }] : /* istanbul ignore next */ []));
|
|
904
|
+
/** Labels of the collapsed items — the default panel content. */
|
|
905
|
+
kjLabels = input([], /* @ts-ignore */
|
|
906
|
+
...(ngDevMode ? [{ debugName: "kjLabels" }] : /* istanbul ignore next */ []));
|
|
907
|
+
/** Consumer template rendered instead of the label list. */
|
|
908
|
+
kjTemplate = input(undefined, /* @ts-ignore */
|
|
909
|
+
...(ngDevMode ? [{ debugName: "kjTemplate" }] : /* istanbul ignore next */ []));
|
|
910
|
+
kjSide = input('bottom', /* @ts-ignore */
|
|
911
|
+
...(ngDevMode ? [{ debugName: "kjSide" }] : /* istanbul ignore next */ []));
|
|
912
|
+
kjAlign = input('start', /* @ts-ignore */
|
|
913
|
+
...(ngDevMode ? [{ debugName: "kjAlign" }] : /* istanbul ignore next */ []));
|
|
914
|
+
panel = viewChild(KjPopoverContent, { ...(ngDevMode ? { debugName: "panel" } : /* istanbul ignore next */ {}), read: ElementRef });
|
|
915
|
+
context = computed(() => ({
|
|
916
|
+
$implicit: this.kjCount(),
|
|
917
|
+
start: this.kjStart(),
|
|
918
|
+
end: this.kjEnd(),
|
|
919
|
+
labels: this.kjLabels(),
|
|
920
|
+
}), /* @ts-ignore */
|
|
921
|
+
...(ngDevMode ? [{ debugName: "context" }] : /* istanbul ignore next */ []));
|
|
922
|
+
/** Moves focus to the first focusable element of the panel (or the panel itself). */
|
|
923
|
+
focusFirst() {
|
|
924
|
+
const panel = this.panel()?.nativeElement;
|
|
925
|
+
if (!panel)
|
|
926
|
+
return;
|
|
927
|
+
const first = panel.querySelector(FOCUSABLE);
|
|
928
|
+
if (first) {
|
|
929
|
+
first.focus();
|
|
930
|
+
return;
|
|
931
|
+
}
|
|
932
|
+
if (!panel.hasAttribute('tabindex'))
|
|
933
|
+
panel.setAttribute('tabindex', '-1');
|
|
934
|
+
panel.focus();
|
|
935
|
+
}
|
|
936
|
+
focusTrigger() {
|
|
937
|
+
this.kjFor().controller.context.triggerEl()?.focus();
|
|
938
|
+
}
|
|
939
|
+
onFocusOut(event) {
|
|
940
|
+
const panel = this.panel()?.nativeElement;
|
|
941
|
+
const next = event.relatedTarget;
|
|
942
|
+
if (!panel || !next || panel.contains(next))
|
|
943
|
+
return;
|
|
944
|
+
if (this.kjFor().controller.context.triggerEl()?.contains(next))
|
|
945
|
+
return;
|
|
946
|
+
this.kjFor().controller.close('programmatic');
|
|
947
|
+
}
|
|
948
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjOverflowPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
949
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: KjOverflowPanelComponent, isStandalone: true, selector: "kj-overflow-panel", inputs: { kjFor: { classPropertyName: "kjFor", publicName: "kjFor", isSignal: true, isRequired: true, transformFunction: null }, kjCount: { classPropertyName: "kjCount", publicName: "kjCount", isSignal: true, isRequired: true, transformFunction: null }, kjStart: { classPropertyName: "kjStart", publicName: "kjStart", isSignal: true, isRequired: true, transformFunction: null }, kjEnd: { classPropertyName: "kjEnd", publicName: "kjEnd", isSignal: true, isRequired: true, transformFunction: null }, kjLabels: { classPropertyName: "kjLabels", publicName: "kjLabels", isSignal: true, isRequired: false, transformFunction: null }, kjTemplate: { classPropertyName: "kjTemplate", publicName: "kjTemplate", isSignal: true, isRequired: false, transformFunction: null }, kjSide: { classPropertyName: "kjSide", publicName: "kjSide", isSignal: true, isRequired: false, transformFunction: null }, kjAlign: { classPropertyName: "kjAlign", publicName: "kjAlign", isSignal: true, isRequired: false, transformFunction: null } }, host: { styleAttribute: "display: contents;" }, viewQueries: [{ propertyName: "panel", first: true, predicate: KjPopoverContent, descendants: true, read: ElementRef, isSignal: true }], ngImport: i0, template: `
|
|
950
|
+
<kj-popover>
|
|
951
|
+
<kj-popover-content
|
|
952
|
+
class="kj-overflow-panel"
|
|
953
|
+
[kjFor]="kjFor()"
|
|
954
|
+
[kjSide]="kjSide()"
|
|
955
|
+
[kjAlign]="kjAlign()"
|
|
956
|
+
(keydown.escape)="focusTrigger()"
|
|
957
|
+
(focusout)="onFocusOut($event)"
|
|
958
|
+
>
|
|
959
|
+
@if (kjTemplate(); as tpl) {
|
|
960
|
+
<ng-container *ngTemplateOutlet="tpl.template; context: context()" />
|
|
961
|
+
} @else {
|
|
962
|
+
<ul class="kj-overflow-list" role="list">
|
|
963
|
+
@for (label of kjLabels(); track $index) {
|
|
964
|
+
<li class="kj-overflow-item">{{ label }}</li>
|
|
965
|
+
}
|
|
966
|
+
</ul>
|
|
967
|
+
}
|
|
968
|
+
</kj-popover-content>
|
|
969
|
+
</kj-popover>
|
|
970
|
+
`, isInline: true, styles: ["@layer kj.component{.kj-overflow-panel{--kj-popover-padding-x: var(--kj-space-sm);--kj-popover-padding-y: var(--kj-space-sm);min-width:10rem}.kj-overflow-list{display:flex;flex-direction:column;gap:var(--kj-space-xs);margin:0;padding:0;list-style:none}.kj-overflow-item{padding:var(--kj-space-xs) var(--kj-space-sm);font-size:var(--kj-text-sm);line-height:1.4;color:var(--kj-fg-default);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.kj-overflow-trigger{appearance:none;font:inherit;cursor:pointer}.kj-overflow-trigger:focus-visible{outline:2px solid var(--kj-bg-primary);outline-offset:2px}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: KjPopoverComponent, selector: "kj-popover" }, { kind: "component", type: KjPopoverContent, selector: "kj-popover-content", inputs: ["kjSide", "kjAlign", "kjOffset", "kjTrap"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
971
|
+
}
|
|
972
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjOverflowPanelComponent, decorators: [{
|
|
973
|
+
type: Component,
|
|
974
|
+
args: [{ selector: 'kj-overflow-panel', standalone: true, imports: [NgTemplateOutlet, KjPopoverComponent, KjPopoverContent], template: `
|
|
975
|
+
<kj-popover>
|
|
976
|
+
<kj-popover-content
|
|
977
|
+
class="kj-overflow-panel"
|
|
978
|
+
[kjFor]="kjFor()"
|
|
979
|
+
[kjSide]="kjSide()"
|
|
980
|
+
[kjAlign]="kjAlign()"
|
|
981
|
+
(keydown.escape)="focusTrigger()"
|
|
982
|
+
(focusout)="onFocusOut($event)"
|
|
983
|
+
>
|
|
984
|
+
@if (kjTemplate(); as tpl) {
|
|
985
|
+
<ng-container *ngTemplateOutlet="tpl.template; context: context()" />
|
|
986
|
+
} @else {
|
|
987
|
+
<ul class="kj-overflow-list" role="list">
|
|
988
|
+
@for (label of kjLabels(); track $index) {
|
|
989
|
+
<li class="kj-overflow-item">{{ label }}</li>
|
|
990
|
+
}
|
|
991
|
+
</ul>
|
|
992
|
+
}
|
|
993
|
+
</kj-popover-content>
|
|
994
|
+
</kj-popover>
|
|
995
|
+
`, encapsulation: ViewEncapsulation.None, host: { style: 'display: contents;' }, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["@layer kj.component{.kj-overflow-panel{--kj-popover-padding-x: var(--kj-space-sm);--kj-popover-padding-y: var(--kj-space-sm);min-width:10rem}.kj-overflow-list{display:flex;flex-direction:column;gap:var(--kj-space-xs);margin:0;padding:0;list-style:none}.kj-overflow-item{padding:var(--kj-space-xs) var(--kj-space-sm);font-size:var(--kj-text-sm);line-height:1.4;color:var(--kj-fg-default);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.kj-overflow-trigger{appearance:none;font:inherit;cursor:pointer}.kj-overflow-trigger:focus-visible{outline:2px solid var(--kj-bg-primary);outline-offset:2px}}\n"] }]
|
|
996
|
+
}], propDecorators: { kjFor: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjFor", required: true }] }], kjCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjCount", required: true }] }], kjStart: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjStart", required: true }] }], kjEnd: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjEnd", required: true }] }], kjLabels: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjLabels", required: false }] }], kjTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjTemplate", required: false }] }], kjSide: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjSide", required: false }] }], kjAlign: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjAlign", required: false }] }], panel: [{ type: i0.ViewChild, args: [i0.forwardRef(() => KjPopoverContent), { ...{ read: ElementRef }, isSignal: true }] }] } });
|
|
997
|
+
|
|
801
998
|
/**
|
|
802
999
|
* Avatar group wrapper. Stacks projected `<kj-avatar>` children with a
|
|
803
1000
|
* count-aware `aria-label`, an overflow chip when `kjMax` is exceeded, and
|
|
@@ -805,10 +1002,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
805
1002
|
* core directive. The wrapper supplies the chip element and the host
|
|
806
1003
|
* `<ng-content/>` slot.
|
|
807
1004
|
*
|
|
808
|
-
* The overflow chip is a
|
|
809
|
-
*
|
|
810
|
-
*
|
|
811
|
-
*
|
|
1005
|
+
* The overflow chip is a button: hovering, focusing or tapping it opens a
|
|
1006
|
+
* panel listing the collapsed avatars (their `alt`, else their text content).
|
|
1007
|
+
* Project an `<ng-template kjOverflowContent>` to render that panel yourself —
|
|
1008
|
+
* the context carries the collapsed range (`start`/`end`) so the consumer
|
|
1009
|
+
* slices its own data and adds actions (remove, open a profile…).
|
|
1010
|
+
*
|
|
1011
|
+
* The `<kj-avatar>` inside the chip renders `'+N'` and is `aria-hidden`
|
|
1012
|
+
* because the group's count-aware label already conveys totality (e.g.
|
|
1013
|
+
* `"3 of 8 collaborators"`); the button itself is named "Show N more".
|
|
812
1014
|
*
|
|
813
1015
|
* @doc-example Default
|
|
814
1016
|
* The default playground — five stacked avatars with the group's defaults.
|
|
@@ -818,8 +1020,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
818
1020
|
* and a list-mode variant for documents-shared screens.
|
|
819
1021
|
* @doc-file avatar-group.usage.example.ts
|
|
820
1022
|
* @doc-example Overflow
|
|
821
|
-
* `kjMax` caps visible avatars; the remainder collapses into a "+N" chip
|
|
1023
|
+
* `kjMax` caps visible avatars; the remainder collapses into a "+N" chip whose
|
|
1024
|
+
* hover panel lists the hidden names.
|
|
822
1025
|
* @doc-file avatar-group.overflow.example.ts
|
|
1026
|
+
* @doc-example Overflow template
|
|
1027
|
+
* `<ng-template kjOverflowContent>` renders the hidden avatars your way — here
|
|
1028
|
+
* with a remove action per collaborator.
|
|
1029
|
+
* @doc-file avatar-group.overflow-template.example.ts
|
|
823
1030
|
* @doc-example Sizes
|
|
824
1031
|
* Group `kjSize` cascades onto every projected `<kj-avatar>` for a uniform pile.
|
|
825
1032
|
* @doc-file avatar-group.sizes.example.ts
|
|
@@ -830,24 +1037,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
830
1037
|
* `kjRole="list"` switches to a list landmark — use for "shared by" rows in docs UIs.
|
|
831
1038
|
* @doc-file avatar-group.list.example.ts
|
|
832
1039
|
*
|
|
1040
|
+
* @doc-keyboard
|
|
1041
|
+
* Tab — Focuses the "+N" chip; the panel opens
|
|
1042
|
+
* ArrowDown|Enter — Moves focus into the panel
|
|
1043
|
+
* Escape — Closes the panel and returns focus to the chip
|
|
1044
|
+
*
|
|
833
1045
|
* @doc-aria
|
|
834
1046
|
* aria-label — Count-aware label like "3 of 8 collaborators"; override via `kjAriaLabelOverride`
|
|
835
1047
|
* role — Defaults to `img` (face-pile); set `kjRole="list"` for a true list landmark
|
|
836
|
-
* aria-hidden — Forced on the +N
|
|
1048
|
+
* aria-hidden — Forced on the +N avatar so the count isn't re-announced; the chip button is named "Show N more"
|
|
1049
|
+
* aria-expanded — Reflects the panel state on the chip button
|
|
837
1050
|
*
|
|
838
1051
|
* @doc-touch
|
|
839
|
-
* Stacked avatars are decorative — they aren't tab stops.
|
|
840
|
-
*
|
|
841
|
-
*
|
|
1052
|
+
* Stacked avatars are decorative — they aren't tab stops. The "+N" chip is
|
|
1053
|
+
* a real button (tap opens the panel); pair the group with an interactive
|
|
1054
|
+
* trigger sized ≥ 44×44 when clicking an avatar is meaningful.
|
|
842
1055
|
*
|
|
843
1056
|
* @doc-a11y
|
|
844
1057
|
* The face-pile is an `img` landmark with a count-aware accessible name so
|
|
845
1058
|
* AT users hear "3 of 8 collaborators" rather than every initial. Switch to
|
|
846
1059
|
* `role="list"` whenever the order/identity of each face matters
|
|
847
|
-
* semantically. The
|
|
848
|
-
*
|
|
1060
|
+
* semantically. The "+N" chip is a named button, so the collapsed names are
|
|
1061
|
+
* one keystroke away for keyboard and screen-reader users.
|
|
849
1062
|
*
|
|
850
|
-
* @doc-related avatar,badge,tag
|
|
1063
|
+
* @doc-related avatar,badge,tag,overflow
|
|
851
1064
|
*
|
|
852
1065
|
* @doc-css-var
|
|
853
1066
|
* --kj-avatar-size — Avatar diameter. Sizes (xs/sm/md/lg/xl) override.
|
|
@@ -868,9 +1081,34 @@ class KjAvatarGroupComponent {
|
|
|
868
1081
|
* the same instance and gives us access to `overflowCount`, `shape`, etc.
|
|
869
1082
|
*/
|
|
870
1083
|
group = inject(KJ_AVATAR_GROUP);
|
|
1084
|
+
i18n = inject(KjTranslateService);
|
|
1085
|
+
/** Text of the "+N" chip. Defaults to the `overflow.more` translation (`+{count}`). */
|
|
1086
|
+
kjOverflowLabel = input(undefined, /* @ts-ignore */
|
|
1087
|
+
...(ngDevMode ? [{ debugName: "kjOverflowLabel" }] : /* istanbul ignore next */ []));
|
|
1088
|
+
/** Accessible name of the chip button. Defaults to the `overflow.show` translation (`Show {count} more`). */
|
|
1089
|
+
kjOverflowAriaLabel = input(undefined, /* @ts-ignore */
|
|
1090
|
+
...(ngDevMode ? [{ debugName: "kjOverflowAriaLabel" }] : /* istanbul ignore next */ []));
|
|
1091
|
+
avatars = contentChildren(KjAvatarComponent, { ...(ngDevMode ? { debugName: "avatars" } : /* istanbul ignore next */ {}), descendants: true });
|
|
1092
|
+
overflowTemplate = contentChild(KjOverflowContent, /* @ts-ignore */
|
|
1093
|
+
...(ngDevMode ? [{ debugName: "overflowTemplate" }] : /* istanbul ignore next */ []));
|
|
1094
|
+
panel = viewChild(KjOverflowPanelComponent, /* @ts-ignore */
|
|
1095
|
+
...(ngDevMode ? [{ debugName: "panel" }] : /* istanbul ignore next */ []));
|
|
871
1096
|
overflowCount = this.group.overflowCount;
|
|
872
|
-
overflowLabel = computed(() =>
|
|
1097
|
+
overflowLabel = computed(() => {
|
|
1098
|
+
const n = this.overflowCount();
|
|
1099
|
+
return this.kjOverflowLabel()?.(n) ?? this.i18n.translate('overflow.more', { count: n });
|
|
1100
|
+
}, /* @ts-ignore */
|
|
873
1101
|
...(ngDevMode ? [{ debugName: "overflowLabel" }] : /* istanbul ignore next */ []));
|
|
1102
|
+
overflowAriaLabel = computed(() => {
|
|
1103
|
+
const n = this.overflowCount();
|
|
1104
|
+
return this.kjOverflowAriaLabel()?.(n) ?? this.i18n.translate('overflow.show', { count: n });
|
|
1105
|
+
}, /* @ts-ignore */
|
|
1106
|
+
...(ngDevMode ? [{ debugName: "overflowAriaLabel" }] : /* istanbul ignore next */ []));
|
|
1107
|
+
/** Labels of the collapsed avatars: `alt`, else a string `content`. */
|
|
1108
|
+
hiddenLabels = computed(() => this.avatars()
|
|
1109
|
+
.slice(this.group.visibleCount())
|
|
1110
|
+
.map((a) => a.alt() ?? (typeof a.content() === 'string' ? a.content() : '')), /* @ts-ignore */
|
|
1111
|
+
...(ngDevMode ? [{ debugName: "hiddenLabels" }] : /* istanbul ignore next */ []));
|
|
874
1112
|
/**
|
|
875
1113
|
* Chip shape mirrors the group's default shape so the chip visually
|
|
876
1114
|
* matches the avatars. `<kj-avatar>`'s own `shape` default is `'circle'`,
|
|
@@ -879,18 +1117,41 @@ class KjAvatarGroupComponent {
|
|
|
879
1117
|
*/
|
|
880
1118
|
chipShape = computed(() => this.group.shape() ?? 'circle', /* @ts-ignore */
|
|
881
1119
|
...(ngDevMode ? [{ debugName: "chipShape" }] : /* istanbul ignore next */ []));
|
|
1120
|
+
focusPanel(event) {
|
|
1121
|
+
event.preventDefault();
|
|
1122
|
+
this.panel()?.focusFirst();
|
|
1123
|
+
}
|
|
882
1124
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjAvatarGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
883
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: KjAvatarGroupComponent, isStandalone: true, selector: "kj-avatar-group", host: { classAttribute: "kj-avatar-group" }, hostDirectives: [{ directive: i1.KjAvatarGroup, inputs: ["kjMax", "kjMax", "kjTotal", "kjTotal", "kjSize", "kjSize", "kjShape", "kjShape", "kjAriaLabel", "kjAriaLabel", "kjAriaLabelFormat", "kjAriaLabelFormat", "kjRole", "kjRole", "kjAriaLabelOverride", "kjAriaLabelOverride"] }], ngImport: i0, template: `
|
|
1125
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: KjAvatarGroupComponent, isStandalone: true, selector: "kj-avatar-group", inputs: { kjOverflowLabel: { classPropertyName: "kjOverflowLabel", publicName: "kjOverflowLabel", isSignal: true, isRequired: false, transformFunction: null }, kjOverflowAriaLabel: { classPropertyName: "kjOverflowAriaLabel", publicName: "kjOverflowAriaLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "kj-avatar-group" }, queries: [{ propertyName: "avatars", predicate: KjAvatarComponent, descendants: true, isSignal: true }, { propertyName: "overflowTemplate", first: true, predicate: KjOverflowContent, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "panel", first: true, predicate: KjOverflowPanelComponent, descendants: true, isSignal: true }], hostDirectives: [{ directive: i1.KjAvatarGroup, inputs: ["kjMax", "kjMax", "kjTotal", "kjTotal", "kjSize", "kjSize", "kjShape", "kjShape", "kjAriaLabel", "kjAriaLabel", "kjAriaLabelFormat", "kjAriaLabelFormat", "kjRole", "kjRole", "kjAriaLabelOverride", "kjAriaLabelOverride"] }], ngImport: i0, template: `
|
|
884
1126
|
<ng-content />
|
|
885
1127
|
@if (overflowCount() > 0) {
|
|
886
|
-
<
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
1128
|
+
<button
|
|
1129
|
+
type="button"
|
|
1130
|
+
class="kj-overflow-trigger kj-avatar-group-overflow-trigger"
|
|
1131
|
+
kjPopoverTrigger
|
|
1132
|
+
kjTrigger="hover"
|
|
1133
|
+
#trg="kjPopoverTrigger"
|
|
1134
|
+
[attr.aria-label]="overflowAriaLabel()"
|
|
1135
|
+
(keydown.arrowdown)="focusPanel($event)"
|
|
1136
|
+
(keydown.enter)="focusPanel($event)"
|
|
1137
|
+
>
|
|
1138
|
+
<kj-avatar
|
|
1139
|
+
class="kj-avatar-group-overflow"
|
|
1140
|
+
aria-hidden="true"
|
|
1141
|
+
[content]="overflowLabel()"
|
|
1142
|
+
[shape]="chipShape()"
|
|
1143
|
+
/>
|
|
1144
|
+
</button>
|
|
1145
|
+
<kj-overflow-panel
|
|
1146
|
+
[kjFor]="trg"
|
|
1147
|
+
[kjCount]="overflowCount()"
|
|
1148
|
+
[kjStart]="group.visibleCount()"
|
|
1149
|
+
[kjEnd]="group.total()"
|
|
1150
|
+
[kjLabels]="hiddenLabels()"
|
|
1151
|
+
[kjTemplate]="overflowTemplate()"
|
|
891
1152
|
/>
|
|
892
1153
|
}
|
|
893
|
-
`, isInline: true, dependencies: [{ kind: "component", type: KjAvatarComponent, selector: "kj-avatar", inputs: ["src", "alt", "content", "size", "shape"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
1154
|
+
`, isInline: true, dependencies: [{ kind: "component", type: KjAvatarComponent, selector: "kj-avatar", inputs: ["src", "alt", "content", "size", "shape"] }, { kind: "directive", type: KjPopoverTrigger, selector: "[kjPopoverTrigger]", inputs: ["kjTrigger", "kjDisabled", "kjOpenDelay", "kjCloseDelay"], exportAs: ["kjPopoverTrigger"] }, { kind: "component", type: KjOverflowPanelComponent, selector: "kj-overflow-panel", inputs: ["kjFor", "kjCount", "kjStart", "kjEnd", "kjLabels", "kjTemplate", "kjSide", "kjAlign"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
894
1155
|
}
|
|
895
1156
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjAvatarGroupComponent, decorators: [{
|
|
896
1157
|
type: Component,
|
|
@@ -912,25 +1173,44 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
912
1173
|
],
|
|
913
1174
|
},
|
|
914
1175
|
],
|
|
915
|
-
imports: [KjAvatarComponent],
|
|
1176
|
+
imports: [KjAvatarComponent, KjPopoverTrigger, KjOverflowPanelComponent],
|
|
916
1177
|
template: `
|
|
917
1178
|
<ng-content />
|
|
918
1179
|
@if (overflowCount() > 0) {
|
|
919
|
-
<
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
1180
|
+
<button
|
|
1181
|
+
type="button"
|
|
1182
|
+
class="kj-overflow-trigger kj-avatar-group-overflow-trigger"
|
|
1183
|
+
kjPopoverTrigger
|
|
1184
|
+
kjTrigger="hover"
|
|
1185
|
+
#trg="kjPopoverTrigger"
|
|
1186
|
+
[attr.aria-label]="overflowAriaLabel()"
|
|
1187
|
+
(keydown.arrowdown)="focusPanel($event)"
|
|
1188
|
+
(keydown.enter)="focusPanel($event)"
|
|
1189
|
+
>
|
|
1190
|
+
<kj-avatar
|
|
1191
|
+
class="kj-avatar-group-overflow"
|
|
1192
|
+
aria-hidden="true"
|
|
1193
|
+
[content]="overflowLabel()"
|
|
1194
|
+
[shape]="chipShape()"
|
|
1195
|
+
/>
|
|
1196
|
+
</button>
|
|
1197
|
+
<kj-overflow-panel
|
|
1198
|
+
[kjFor]="trg"
|
|
1199
|
+
[kjCount]="overflowCount()"
|
|
1200
|
+
[kjStart]="group.visibleCount()"
|
|
1201
|
+
[kjEnd]="group.total()"
|
|
1202
|
+
[kjLabels]="hiddenLabels()"
|
|
1203
|
+
[kjTemplate]="overflowTemplate()"
|
|
924
1204
|
/>
|
|
925
1205
|
}
|
|
926
1206
|
`,
|
|
927
1207
|
encapsulation: ViewEncapsulation.None,
|
|
928
1208
|
host: {
|
|
929
|
-
|
|
1209
|
+
class: 'kj-avatar-group',
|
|
930
1210
|
},
|
|
931
1211
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
932
1212
|
}]
|
|
933
|
-
}] });
|
|
1213
|
+
}], propDecorators: { kjOverflowLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjOverflowLabel", required: false }] }], kjOverflowAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjOverflowAriaLabel", required: false }] }], avatars: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => KjAvatarComponent), { ...{ descendants: true }, isSignal: true }] }], overflowTemplate: [{ type: i0.ContentChild, args: [i0.forwardRef(() => KjOverflowContent), { isSignal: true }] }], panel: [{ type: i0.ViewChild, args: [i0.forwardRef(() => KjOverflowPanelComponent), { isSignal: true }] }] } });
|
|
934
1214
|
|
|
935
1215
|
/**
|
|
936
1216
|
* Styled wrapper around the headless `KjBadge` directive.
|
|
@@ -12074,81 +12354,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
12074
12354
|
`, encapsulation: ViewEncapsulation.None, host: { 'style': 'display: contents;' }, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["@layer kj.component{.kj-password-input{--kj-password-input-bg: var(--kj-bg-field);--kj-password-input-fg: var(--kj-fg-default);--kj-password-input-border-color: var(--kj-border-default);--kj-password-input-border-style: solid;--kj-password-input-border-width: var(--kj-border);--kj-password-input-radius: var(--kj-radius-field);--kj-password-input-padding-x: var(--kj-space-md);--kj-password-input-padding-y: var(--kj-space-sm);--kj-password-input-font: var(--kj-font-sans);--kj-password-input-font-size: var(--kj-text-sm);--kj-password-input-placeholder-fg: var(--kj-fg-muted);--kj-password-input-toggle-fg: var(--kj-fg-muted);--kj-password-input-toggle-fg-hover: var(--kj-fg-default);--kj-password-input-height: 2.25rem;display:inline-flex;align-items:center;gap:var(--kj-space-xs);inline-size:100%;height:var(--kj-password-input-height);background:var(--kj-password-input-bg);color:var(--kj-password-input-fg);border:var(--kj-password-input-border-width) var(--kj-password-input-border-style) var(--kj-password-input-border-color);border-radius:var(--kj-password-input-radius);padding:0 var(--kj-password-input-padding-x);font:var(--kj-password-input-font-size) / 1.4 var(--kj-password-input-font);transition:var(--kj-transition)}.kj-password-input[data-size=sm]{--kj-password-input-height: 2rem;--kj-password-input-font-size: .8125rem}.kj-password-input[data-size=lg]{--kj-password-input-height: 2.75rem;--kj-password-input-font-size: 1rem}.kj-password-input__field{flex:1 1 auto;inline-size:100%;height:100%;background:transparent;color:inherit;border:0;outline:0;padding:0;font:inherit}.kj-password-input__field::placeholder{color:var(--kj-password-input-placeholder-fg)}.kj-password-input:focus-within{outline:2px solid var(--kj-fg-primary);outline-offset:2px;--kj-password-input-border-color: var(--kj-fg-primary)}.kj-password-input:has([aria-invalid=true]){--kj-password-input-border-color: var(--kj-fg-danger)}.kj-password-input:has([aria-disabled=true]),.kj-password-input:has(:disabled){opacity:.55;cursor:not-allowed}.kj-password-input__toggle{display:inline-flex;align-items:center;justify-content:center;inline-size:1.75rem;block-size:1.75rem;margin-inline-start:var(--kj-space-xs);color:var(--kj-password-input-toggle-fg);background:transparent;border:0;border-radius:var(--kj-radius-field);cursor:pointer}.kj-password-input__toggle:hover,.kj-password-input__toggle:focus-visible{color:var(--kj-password-input-toggle-fg-hover)}.kj-password-input__toggle:focus-visible{outline:2px solid var(--kj-fg-primary);outline-offset:2px}.kj-password-input__icon{inline-size:1rem;block-size:1rem;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}.kj-password-strength{display:flex;gap:var(--kj-space-xs);inline-size:100%;margin-block-start:var(--kj-space-xs)}.kj-password-strength__seg{flex:1 1 0;block-size:.25rem;background:var(--kj-bg-surface);border-radius:2px;transition:background-color var(--kj-transition)}.kj-password-strength[data-score=\"1\"] .kj-password-strength__seg:nth-child(-n+1),.kj-password-strength[data-score=\"2\"] .kj-password-strength__seg:nth-child(-n+2),.kj-password-strength[data-score=\"3\"] .kj-password-strength__seg:nth-child(-n+3),.kj-password-strength[data-score=\"4\"] .kj-password-strength__seg:nth-child(-n+4){background:var(--kj-password-strength-color, var(--kj-bg-primary))}.kj-password-strength[data-score=\"1\"]{--kj-password-strength-color: var(--kj-bg-danger)}.kj-password-strength[data-score=\"2\"]{--kj-password-strength-color: var(--kj-bg-warning, #d97706)}.kj-password-strength[data-score=\"3\"],.kj-password-strength[data-score=\"4\"]{--kj-password-strength-color: var(--kj-bg-success, #059669)}.kj-password-strength__label{display:block;margin-block-start:var(--kj-space-xs);font-size:var(--kj-text-xs);color:var(--kj-fg-muted)}.kj-password-caps-lock-warning{display:block;margin-block-start:var(--kj-space-xs);font-size:var(--kj-text-xs);color:var(--kj-fg-warning, #d97706)}.kj-password-caps-lock-warning[hidden]{display:none}}\n"] }]
|
|
12075
12355
|
}], ctorParameters: () => [], propDecorators: { kjAutocomplete: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjAutocomplete", required: false }] }], kjMaxLength: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjMaxLength", required: false }] }], kjDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjDisabled", required: false }] }], kjInvalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjInvalid", required: false }] }], kjRevealed: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjRevealed", required: false }] }, { type: i0.Output, args: ["kjRevealedChange"] }], kjPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjPlaceholder", required: false }] }], kjValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjValue", required: false }] }, { type: i0.Output, args: ["kjValueChange"] }], kjShowToggle: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjShowToggle", required: false }] }], kjShowStrength: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjShowStrength", required: false }] }], kjShowCapsLockWarning: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjShowCapsLockWarning", required: false }] }], kjShowLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjShowLabel", required: false }] }], kjHideLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjHideLabel", required: false }] }], kjCapsLockMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjCapsLockMessage", required: false }] }] } });
|
|
12076
12356
|
|
|
12077
|
-
/**
|
|
12078
|
-
* Click-triggered popover. Compose `[kjPopoverTrigger]` + `<kj-popover-content [kjFor]="t">`
|
|
12079
|
-
* with optional `[kjPopoverTitle]` heading and `[kjPopoverClose]` button. The
|
|
12080
|
-
* wrapper itself only projects content — its purpose is to host the docs tags.
|
|
12081
|
-
*
|
|
12082
|
-
* @doc
|
|
12083
|
-
* @doc-name popover
|
|
12084
|
-
* @doc-is-main
|
|
12085
|
-
* @doc-example Default
|
|
12086
|
-
* A trigger button + content panel — the bare-minimum recipe.
|
|
12087
|
-
* @doc-file popover.example.ts
|
|
12088
|
-
* @doc-example Usage
|
|
12089
|
-
* A walkthrough of the most common usages — info panel, side-pinned, and
|
|
12090
|
-
* modal confirmation. Use this as the copy-paste starting point.
|
|
12091
|
-
* @doc-file popover.usage.example.ts
|
|
12092
|
-
* @doc-example Sides
|
|
12093
|
-
* `kjSide="top|right|bottom|left"` pins the panel relative to the trigger.
|
|
12094
|
-
* @doc-file popover.sides.example.ts
|
|
12095
|
-
* @doc-example Modal
|
|
12096
|
-
* `[kjTrap]="true"` traps focus inside the panel until it closes.
|
|
12097
|
-
* @doc-file popover.modal.example.ts
|
|
12098
|
-
* @doc-example Cancellable
|
|
12099
|
-
* `[kjPopoverClose]` on a button dismisses the panel and restores focus.
|
|
12100
|
-
* @doc-file popover.cancellable.example.ts
|
|
12101
|
-
* @doc-example With form
|
|
12102
|
-
* Embed inputs inside the panel — focus returns to the trigger on close.
|
|
12103
|
-
* @doc-file popover.with-form.example.ts
|
|
12104
|
-
*
|
|
12105
|
-
* @doc-keyboard
|
|
12106
|
-
* Enter|Space — Opens the popover from the trigger
|
|
12107
|
-
* Escape — Closes the popover and returns focus to the trigger
|
|
12108
|
-
* Tab — Moves focus through the panel; cycles inside when [kjTrap]="true"
|
|
12109
|
-
* Shift+Tab — Reverse-cycles focus
|
|
12110
|
-
*
|
|
12111
|
-
* @doc-aria
|
|
12112
|
-
* aria-haspopup — Set to "dialog" on the trigger
|
|
12113
|
-
* aria-expanded — Reflects the open/closed state on the trigger
|
|
12114
|
-
* aria-controls — Links the trigger to the panel id
|
|
12115
|
-
* role="dialog" — On the panel (provided via the overlay primitive)
|
|
12116
|
-
* aria-labelledby — Wire to `[kjPopoverTitle]` heading id for an accessible name
|
|
12117
|
-
*
|
|
12118
|
-
* @doc-touch
|
|
12119
|
-
* Trigger buttons inherit `kj-button` sizing — use `kjSize="md"` or larger
|
|
12120
|
-
* to satisfy WCAG 2.5.5 (44×44). The panel itself is not a touch target.
|
|
12121
|
-
*
|
|
12122
|
-
* @doc-a11y
|
|
12123
|
-
* The panel is portalled to `document.body` so it escapes clipping
|
|
12124
|
-
* ancestors while staying linked via `aria-controls`. Focus is returned
|
|
12125
|
-
* to the trigger on close, and outside clicks dismiss by default. For
|
|
12126
|
-
* destructive confirmations, set `[kjTrap]="true"` so the user must
|
|
12127
|
-
* commit or cancel via a visible affordance.
|
|
12128
|
-
*
|
|
12129
|
-
* @doc-related dialog,tooltip,dropdown-menu
|
|
12130
|
-
*
|
|
12131
|
-
* @doc-css-var
|
|
12132
|
-
* --kj-popover-bg — Panel background fill. Inherits --kj-bg-elevated.
|
|
12133
|
-
* --kj-popover-fg — Panel foreground (text) color.
|
|
12134
|
-
* --kj-popover-border-color — Panel border color. Inherits --kj-border-default.
|
|
12135
|
-
* --kj-popover-radius — Panel corner radius. Inherits --kj-radius-box.
|
|
12136
|
-
* --kj-popover-padding-x — Horizontal padding inside the panel.
|
|
12137
|
-
* --kj-popover-padding-y — Vertical padding inside the panel.
|
|
12138
|
-
* --kj-popover-shadow — Drop shadow under the panel. Inherits --kj-shadow-md.
|
|
12139
|
-
* --kj-popover-arrow-size — Edge length of the optional arrow indicator.
|
|
12140
|
-
*
|
|
12141
|
-
* @doc-category Library/Overlay
|
|
12142
|
-
*/
|
|
12143
|
-
class KjPopoverComponent {
|
|
12144
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjPopoverComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
12145
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.5", type: KjPopoverComponent, isStandalone: true, selector: "kj-popover", host: { styleAttribute: "display: contents;" }, ngImport: i0, template: `<ng-content />`, isInline: true, styles: ["@layer kj.component{.kj-popover-content{--kj-popover-bg: var(--kj-bg-elevated);--kj-popover-fg: var(--kj-fg-default);--kj-popover-border-color: var(--kj-border-default);--kj-popover-radius: var(--kj-radius-box);--kj-popover-padding-x: var(--kj-space-md);--kj-popover-padding-y: var(--kj-space-md);--kj-popover-shadow: var(--kj-shadow-md, 0 12px 32px rgb(0 0 0 / .18));--kj-popover-arrow-size: 8px;display:block;box-sizing:border-box;max-width:min(28rem,calc(100vw - 2rem));background:var(--kj-popover-bg);color:var(--kj-popover-fg);border:var(--kj-border) solid var(--kj-popover-border-color);border-radius:var(--kj-popover-radius);padding:var(--kj-popover-padding-y) var(--kj-popover-padding-x);font:.875rem / 1.5 var(--kj-font-sans);box-shadow:var(--kj-popover-shadow);pointer-events:auto;z-index:1000;word-wrap:break-word}.kj-popover-content[hidden]{display:none}.kj-popover-title{display:block;font-size:.9375rem;font-weight:600;margin:0 0 var(--kj-space-xs);color:var(--kj-fg-default)}.kj-popover-arrow{position:absolute;width:var(--kj-popover-arrow-size, 8px);height:var(--kj-popover-arrow-size, 8px);background:var(--kj-popover-bg, var(--kj-bg-elevated));border:var(--kj-border) solid var(--kj-popover-border-color, var(--kj-border-default));transform:rotate(45deg)}.kj-popover-content[data-side=top] .kj-popover-arrow{bottom:calc(var(--kj-popover-arrow-size) / -2);left:50%;margin-left:calc(var(--kj-popover-arrow-size) / -2);border-top-color:transparent;border-left-color:transparent}.kj-popover-content[data-side=bottom] .kj-popover-arrow{top:calc(var(--kj-popover-arrow-size) / -2);left:50%;margin-left:calc(var(--kj-popover-arrow-size) / -2);border-bottom-color:transparent;border-right-color:transparent}.kj-popover-content[data-side=left] .kj-popover-arrow{right:calc(var(--kj-popover-arrow-size) / -2);top:50%;margin-top:calc(var(--kj-popover-arrow-size) / -2);border-left-color:transparent;border-bottom-color:transparent}.kj-popover-content[data-side=right] .kj-popover-arrow{left:calc(var(--kj-popover-arrow-size) / -2);top:50%;margin-top:calc(var(--kj-popover-arrow-size) / -2);border-right-color:transparent;border-top-color:transparent}body[data-kj-scroll-lock=true]{overflow:hidden}@media(prefers-reduced-motion:no-preference){.kj-popover-content{transition:opacity .14s ease-out,transform .14s ease-out}.kj-popover-content[data-state=closed]{opacity:0;transform:scale(.98)}.kj-popover-content[data-state=open]{opacity:1;transform:scale(1)}}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
12146
|
-
}
|
|
12147
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjPopoverComponent, decorators: [{
|
|
12148
|
-
type: Component,
|
|
12149
|
-
args: [{ selector: 'kj-popover', standalone: true, imports: [KjPopoverTrigger, KjPopoverContent, KjPopoverArrow, KjPopoverClose, KjPopoverTitle], template: `<ng-content />`, encapsulation: ViewEncapsulation.None, host: { style: 'display: contents;' }, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["@layer kj.component{.kj-popover-content{--kj-popover-bg: var(--kj-bg-elevated);--kj-popover-fg: var(--kj-fg-default);--kj-popover-border-color: var(--kj-border-default);--kj-popover-radius: var(--kj-radius-box);--kj-popover-padding-x: var(--kj-space-md);--kj-popover-padding-y: var(--kj-space-md);--kj-popover-shadow: var(--kj-shadow-md, 0 12px 32px rgb(0 0 0 / .18));--kj-popover-arrow-size: 8px;display:block;box-sizing:border-box;max-width:min(28rem,calc(100vw - 2rem));background:var(--kj-popover-bg);color:var(--kj-popover-fg);border:var(--kj-border) solid var(--kj-popover-border-color);border-radius:var(--kj-popover-radius);padding:var(--kj-popover-padding-y) var(--kj-popover-padding-x);font:.875rem / 1.5 var(--kj-font-sans);box-shadow:var(--kj-popover-shadow);pointer-events:auto;z-index:1000;word-wrap:break-word}.kj-popover-content[hidden]{display:none}.kj-popover-title{display:block;font-size:.9375rem;font-weight:600;margin:0 0 var(--kj-space-xs);color:var(--kj-fg-default)}.kj-popover-arrow{position:absolute;width:var(--kj-popover-arrow-size, 8px);height:var(--kj-popover-arrow-size, 8px);background:var(--kj-popover-bg, var(--kj-bg-elevated));border:var(--kj-border) solid var(--kj-popover-border-color, var(--kj-border-default));transform:rotate(45deg)}.kj-popover-content[data-side=top] .kj-popover-arrow{bottom:calc(var(--kj-popover-arrow-size) / -2);left:50%;margin-left:calc(var(--kj-popover-arrow-size) / -2);border-top-color:transparent;border-left-color:transparent}.kj-popover-content[data-side=bottom] .kj-popover-arrow{top:calc(var(--kj-popover-arrow-size) / -2);left:50%;margin-left:calc(var(--kj-popover-arrow-size) / -2);border-bottom-color:transparent;border-right-color:transparent}.kj-popover-content[data-side=left] .kj-popover-arrow{right:calc(var(--kj-popover-arrow-size) / -2);top:50%;margin-top:calc(var(--kj-popover-arrow-size) / -2);border-left-color:transparent;border-bottom-color:transparent}.kj-popover-content[data-side=right] .kj-popover-arrow{left:calc(var(--kj-popover-arrow-size) / -2);top:50%;margin-top:calc(var(--kj-popover-arrow-size) / -2);border-right-color:transparent;border-top-color:transparent}body[data-kj-scroll-lock=true]{overflow:hidden}@media(prefers-reduced-motion:no-preference){.kj-popover-content{transition:opacity .14s ease-out,transform .14s ease-out}.kj-popover-content[data-state=closed]{opacity:0;transform:scale(.98)}.kj-popover-content[data-state=open]{opacity:1;transform:scale(1)}}}\n"] }]
|
|
12150
|
-
}] });
|
|
12151
|
-
|
|
12152
12357
|
/**
|
|
12153
12358
|
* Styled wrapper around the headless `KjProgressBar` directive. Composes the
|
|
12154
12359
|
* core directive on an inner element and renders the inner
|
|
@@ -18642,6 +18847,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
18642
18847
|
* @doc-example Tag list
|
|
18643
18848
|
* Wrap chips in `<kj-tag-list>` for single-tab-stop + arrow-key navigation.
|
|
18644
18849
|
* @doc-file tag.list.example.ts
|
|
18850
|
+
* @doc-example Overflow
|
|
18851
|
+
* `[kjMax]` on the list collapses the extra chips into a "+N" chip whose hover
|
|
18852
|
+
* panel lists them.
|
|
18853
|
+
* @doc-file tag.overflow.example.ts
|
|
18854
|
+
* @doc-example Overflow template
|
|
18855
|
+
* `<ng-template kjOverflowContent>` renders the collapsed chips your way — here
|
|
18856
|
+
* as rows with a remove action.
|
|
18857
|
+
* @doc-file tag.overflow-template.example.ts
|
|
18645
18858
|
*
|
|
18646
18859
|
* @doc-keyboard
|
|
18647
18860
|
* Enter|Space — Activates a selectable tag; flips `aria-pressed`
|
|
@@ -18688,26 +18901,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
18688
18901
|
*/
|
|
18689
18902
|
class KjTagComponent {
|
|
18690
18903
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjTagComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
18691
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.5", type: KjTagComponent, isStandalone: true, selector: "kj-tag", host: { classAttribute: "kj-tag" }, hostDirectives: [{ directive: i1.KjTag, inputs: ["kjTagSelectable", "kjTagSelectable", "kjTagSelected", "kjTagSelected", "kjTagLabel", "kjTagLabel", "kjTagDisabled", "kjTagDisabled"], outputs: ["kjTagSelectedChange", "kjTagSelectedChange", "kjTagRemoved", "kjTagRemoved"] }], ngImport: i0, template: `<ng-content />`, isInline: true, styles: ["@layer kj.component{.kj-tag{--kj-tag-bg: var(--kj-bg-primary);--kj-tag-fg: var(--kj-fg-on-primary);--kj-tag-border-color: transparent;--kj-tag-radius: var(--kj-radius-selector);--kj-tag-padding-x: var(--kj-space-sm);--kj-tag-padding-y: .125rem;--kj-tag-font-size: .75rem;--kj-tag-gap: .25rem;display:inline-flex;align-items:center;gap:var(--kj-tag-gap);background:var(--kj-tag-bg);color:var(--kj-tag-fg);border:var(--kj-border) solid var(--kj-tag-border-color);border-radius:var(--kj-tag-radius);padding:var(--kj-tag-padding-y) var(--kj-tag-padding-x);font:var(--kj-tag-font-size) / 1 var(--kj-font-sans);font-weight:500;transition:background-color var(--kj-transition),color var(--kj-transition),border-color var(--kj-transition)}.kj-tag[data-variant=secondary]{--kj-tag-bg: var(--kj-bg-field);--kj-tag-fg: var(--kj-fg-default)}.kj-tag[data-variant=destructive],.kj-tag[data-variant=danger]{--kj-tag-bg: var(--kj-bg-danger);--kj-tag-fg: var(--kj-fg-on-danger)}.kj-tag[data-variant=success]{--kj-tag-bg: var(--kj-bg-success, var(--kj-bg-primary));--kj-tag-fg: var(--kj-fg-on-success, var(--kj-fg-on-primary))}.kj-tag[data-variant=warning]{--kj-tag-bg: var(--kj-bg-warning, var(--kj-bg-primary));--kj-tag-fg: var(--kj-fg-on-warning, var(--kj-fg-on-primary))}.kj-tag[data-variant=info]{--kj-tag-bg: var(--kj-bg-info, var(--kj-bg-primary));--kj-tag-fg: var(--kj-fg-on-info, var(--kj-fg-on-primary))}.kj-tag[data-variant=outline]{--kj-tag-bg: transparent;--kj-tag-fg: var(--kj-fg-default);--kj-tag-border-color: var(--kj-border-default)}.kj-tag[data-variant=ghost]{--kj-tag-bg: transparent;--kj-tag-fg: var(--kj-fg-default);--kj-tag-border-color: transparent}.kj-tag[data-size=xs]{--kj-tag-padding-x: .1875rem;--kj-tag-padding-y: .03125rem;--kj-tag-font-size: .5625rem;--kj-tag-gap: .125rem}.kj-tag[data-size=sm]{--kj-tag-padding-x: .375rem;--kj-tag-padding-y: .125rem;--kj-tag-font-size: .6875rem}.kj-tag[data-size=lg]{--kj-tag-padding-x: var(--kj-space-md);--kj-tag-font-size: .875rem}.kj-tag[role=button],.kj-tag[role=option]{cursor:pointer;-webkit-user-select:none;user-select:none}.kj-tag[role=button]:hover,.kj-tag[role=option]:hover{--kj-tag-bg: color-mix(in oklab, var(--kj-tag-bg) 88%, var(--kj-fg-default))}.kj-tag[aria-pressed=true],.kj-tag[aria-selected=true],.kj-tag[data-selected]{--kj-tag-bg: var(--kj-bg-primary);--kj-tag-fg: var(--kj-fg-on-primary);--kj-tag-border-color: var(--kj-bg-primary)}.kj-tag[data-focus-visible]:focus,.kj-tag:focus-visible{outline:2px solid var(--kj-bg-primary);outline-offset:2px}.kj-tag[aria-disabled=true],.kj-tag[data-disabled]{opacity:.45;cursor:not-allowed;pointer-events:none}.kj-tag-remove{display:inline-flex;align-items:center;justify-content:center;width:1rem;height:1rem;margin-inline-start:.125rem;padding:0;border:none;background:transparent;color:inherit;border-radius:999px;cursor:pointer;line-height:1;font:inherit;position:relative}.kj-tag-remove:after{content:\"\";position:absolute;inset:-.875rem;border-radius:inherit}.kj-tag-remove:hover{background:color-mix(in oklab,currentColor 18%,transparent)}.kj-tag-remove:focus-visible{outline:2px solid currentColor;outline-offset:2px}.kj-tag-remove[aria-disabled=true]{opacity:.45;cursor:not-allowed;pointer-events:none}.kj-tag-list{display:inline-flex;flex-wrap:wrap;gap:var(--kj-space-sm);align-items:center}.kj-tag-list[role=listbox]:focus-visible,.kj-tag-list[role=grid]:focus-visible{outline:2px solid var(--kj-bg-primary);outline-offset:2px}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
18904
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.5", type: KjTagComponent, isStandalone: true, selector: "kj-tag", host: { classAttribute: "kj-tag" }, hostDirectives: [{ directive: i1.KjTag, inputs: ["kjTagSelectable", "kjTagSelectable", "kjTagSelected", "kjTagSelected", "kjTagLabel", "kjTagLabel", "kjTagDisabled", "kjTagDisabled"], outputs: ["kjTagSelectedChange", "kjTagSelectedChange", "kjTagRemoved", "kjTagRemoved"] }], ngImport: i0, template: `<ng-content />`, isInline: true, styles: ["@layer kj.component{.kj-tag{--kj-tag-bg: var(--kj-bg-primary);--kj-tag-fg: var(--kj-fg-on-primary);--kj-tag-border-color: transparent;--kj-tag-radius: var(--kj-radius-selector);--kj-tag-padding-x: var(--kj-space-sm);--kj-tag-padding-y: .125rem;--kj-tag-font-size: .75rem;--kj-tag-gap: .25rem;display:inline-flex;align-items:center;gap:var(--kj-tag-gap);background:var(--kj-tag-bg);color:var(--kj-tag-fg);border:var(--kj-border) solid var(--kj-tag-border-color);border-radius:var(--kj-tag-radius);padding:var(--kj-tag-padding-y) var(--kj-tag-padding-x);font:var(--kj-tag-font-size) / 1 var(--kj-font-sans);font-weight:500;transition:background-color var(--kj-transition),color var(--kj-transition),border-color var(--kj-transition)}.kj-tag[data-variant=secondary]{--kj-tag-bg: var(--kj-bg-field);--kj-tag-fg: var(--kj-fg-default)}.kj-tag[data-variant=destructive],.kj-tag[data-variant=danger]{--kj-tag-bg: var(--kj-bg-danger);--kj-tag-fg: var(--kj-fg-on-danger)}.kj-tag[data-variant=success]{--kj-tag-bg: var(--kj-bg-success, var(--kj-bg-primary));--kj-tag-fg: var(--kj-fg-on-success, var(--kj-fg-on-primary))}.kj-tag[data-variant=warning]{--kj-tag-bg: var(--kj-bg-warning, var(--kj-bg-primary));--kj-tag-fg: var(--kj-fg-on-warning, var(--kj-fg-on-primary))}.kj-tag[data-variant=info]{--kj-tag-bg: var(--kj-bg-info, var(--kj-bg-primary));--kj-tag-fg: var(--kj-fg-on-info, var(--kj-fg-on-primary))}.kj-tag[data-variant=outline]{--kj-tag-bg: transparent;--kj-tag-fg: var(--kj-fg-default);--kj-tag-border-color: var(--kj-border-default)}.kj-tag[data-variant=ghost]{--kj-tag-bg: transparent;--kj-tag-fg: var(--kj-fg-default);--kj-tag-border-color: transparent}.kj-tag[data-size=xs]{--kj-tag-padding-x: .1875rem;--kj-tag-padding-y: .03125rem;--kj-tag-font-size: .5625rem;--kj-tag-gap: .125rem}.kj-tag[data-size=sm]{--kj-tag-padding-x: .375rem;--kj-tag-padding-y: .125rem;--kj-tag-font-size: .6875rem}.kj-tag[data-size=lg]{--kj-tag-padding-x: var(--kj-space-md);--kj-tag-font-size: .875rem}.kj-tag[role=button],.kj-tag[role=option]{cursor:pointer;-webkit-user-select:none;user-select:none}.kj-tag[role=button]:hover,.kj-tag[role=option]:hover{--kj-tag-bg: color-mix(in oklab, var(--kj-tag-bg) 88%, var(--kj-fg-default))}.kj-tag[aria-pressed=true],.kj-tag[aria-selected=true],.kj-tag[data-selected]{--kj-tag-bg: var(--kj-bg-primary);--kj-tag-fg: var(--kj-fg-on-primary);--kj-tag-border-color: var(--kj-bg-primary)}.kj-tag[data-focus-visible]:focus,.kj-tag:focus-visible{outline:2px solid var(--kj-bg-primary);outline-offset:2px}.kj-tag[aria-disabled=true],.kj-tag[data-disabled]{opacity:.45;cursor:not-allowed;pointer-events:none}.kj-tag-remove{display:inline-flex;align-items:center;justify-content:center;width:1rem;height:1rem;margin-inline-start:.125rem;padding:0;border:none;background:transparent;color:inherit;border-radius:999px;cursor:pointer;line-height:1;font:inherit;position:relative}.kj-tag-remove:after{content:\"\";position:absolute;inset:-.875rem;border-radius:inherit}.kj-tag-remove:hover{background:color-mix(in oklab,currentColor 18%,transparent)}.kj-tag-remove:focus-visible{outline:2px solid currentColor;outline-offset:2px}.kj-tag-remove[aria-disabled=true]{opacity:.45;cursor:not-allowed;pointer-events:none}.kj-tag[hidden]{display:none}.kj-tag-list{display:inline-flex;flex-wrap:wrap;gap:var(--kj-space-sm);align-items:center}.kj-tag-list-overflow{border-style:dashed;--kj-tag-border-color: var(--kj-border-default)}.kj-tag-list-overflow[aria-expanded=true]{--kj-tag-bg: var(--kj-bg-field)}.kj-tag-list[role=listbox]:focus-visible,.kj-tag-list[role=grid]:focus-visible{outline:2px solid var(--kj-bg-primary);outline-offset:2px}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
18692
18905
|
}
|
|
18693
18906
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjTagComponent, decorators: [{
|
|
18694
18907
|
type: Component,
|
|
18695
18908
|
args: [{ selector: 'kj-tag', standalone: true, hostDirectives: [
|
|
18696
18909
|
{
|
|
18697
18910
|
directive: KjTag,
|
|
18698
|
-
inputs: [
|
|
18699
|
-
'kjTagSelectable',
|
|
18700
|
-
'kjTagSelected',
|
|
18701
|
-
'kjTagLabel',
|
|
18702
|
-
'kjTagDisabled',
|
|
18703
|
-
],
|
|
18911
|
+
inputs: ['kjTagSelectable', 'kjTagSelected', 'kjTagLabel', 'kjTagDisabled'],
|
|
18704
18912
|
outputs: ['kjTagSelectedChange', 'kjTagRemoved'],
|
|
18705
18913
|
},
|
|
18706
18914
|
], template: `<ng-content />`, encapsulation: ViewEncapsulation.None, host: {
|
|
18707
18915
|
class: 'kj-tag',
|
|
18708
18916
|
// The KjVariant / KjSize host directives nested inside KjTag set
|
|
18709
18917
|
// [data-variant] / [data-size] on the same host element automatically.
|
|
18710
|
-
}, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["@layer kj.component{.kj-tag{--kj-tag-bg: var(--kj-bg-primary);--kj-tag-fg: var(--kj-fg-on-primary);--kj-tag-border-color: transparent;--kj-tag-radius: var(--kj-radius-selector);--kj-tag-padding-x: var(--kj-space-sm);--kj-tag-padding-y: .125rem;--kj-tag-font-size: .75rem;--kj-tag-gap: .25rem;display:inline-flex;align-items:center;gap:var(--kj-tag-gap);background:var(--kj-tag-bg);color:var(--kj-tag-fg);border:var(--kj-border) solid var(--kj-tag-border-color);border-radius:var(--kj-tag-radius);padding:var(--kj-tag-padding-y) var(--kj-tag-padding-x);font:var(--kj-tag-font-size) / 1 var(--kj-font-sans);font-weight:500;transition:background-color var(--kj-transition),color var(--kj-transition),border-color var(--kj-transition)}.kj-tag[data-variant=secondary]{--kj-tag-bg: var(--kj-bg-field);--kj-tag-fg: var(--kj-fg-default)}.kj-tag[data-variant=destructive],.kj-tag[data-variant=danger]{--kj-tag-bg: var(--kj-bg-danger);--kj-tag-fg: var(--kj-fg-on-danger)}.kj-tag[data-variant=success]{--kj-tag-bg: var(--kj-bg-success, var(--kj-bg-primary));--kj-tag-fg: var(--kj-fg-on-success, var(--kj-fg-on-primary))}.kj-tag[data-variant=warning]{--kj-tag-bg: var(--kj-bg-warning, var(--kj-bg-primary));--kj-tag-fg: var(--kj-fg-on-warning, var(--kj-fg-on-primary))}.kj-tag[data-variant=info]{--kj-tag-bg: var(--kj-bg-info, var(--kj-bg-primary));--kj-tag-fg: var(--kj-fg-on-info, var(--kj-fg-on-primary))}.kj-tag[data-variant=outline]{--kj-tag-bg: transparent;--kj-tag-fg: var(--kj-fg-default);--kj-tag-border-color: var(--kj-border-default)}.kj-tag[data-variant=ghost]{--kj-tag-bg: transparent;--kj-tag-fg: var(--kj-fg-default);--kj-tag-border-color: transparent}.kj-tag[data-size=xs]{--kj-tag-padding-x: .1875rem;--kj-tag-padding-y: .03125rem;--kj-tag-font-size: .5625rem;--kj-tag-gap: .125rem}.kj-tag[data-size=sm]{--kj-tag-padding-x: .375rem;--kj-tag-padding-y: .125rem;--kj-tag-font-size: .6875rem}.kj-tag[data-size=lg]{--kj-tag-padding-x: var(--kj-space-md);--kj-tag-font-size: .875rem}.kj-tag[role=button],.kj-tag[role=option]{cursor:pointer;-webkit-user-select:none;user-select:none}.kj-tag[role=button]:hover,.kj-tag[role=option]:hover{--kj-tag-bg: color-mix(in oklab, var(--kj-tag-bg) 88%, var(--kj-fg-default))}.kj-tag[aria-pressed=true],.kj-tag[aria-selected=true],.kj-tag[data-selected]{--kj-tag-bg: var(--kj-bg-primary);--kj-tag-fg: var(--kj-fg-on-primary);--kj-tag-border-color: var(--kj-bg-primary)}.kj-tag[data-focus-visible]:focus,.kj-tag:focus-visible{outline:2px solid var(--kj-bg-primary);outline-offset:2px}.kj-tag[aria-disabled=true],.kj-tag[data-disabled]{opacity:.45;cursor:not-allowed;pointer-events:none}.kj-tag-remove{display:inline-flex;align-items:center;justify-content:center;width:1rem;height:1rem;margin-inline-start:.125rem;padding:0;border:none;background:transparent;color:inherit;border-radius:999px;cursor:pointer;line-height:1;font:inherit;position:relative}.kj-tag-remove:after{content:\"\";position:absolute;inset:-.875rem;border-radius:inherit}.kj-tag-remove:hover{background:color-mix(in oklab,currentColor 18%,transparent)}.kj-tag-remove:focus-visible{outline:2px solid currentColor;outline-offset:2px}.kj-tag-remove[aria-disabled=true]{opacity:.45;cursor:not-allowed;pointer-events:none}.kj-tag-list{display:inline-flex;flex-wrap:wrap;gap:var(--kj-space-sm);align-items:center}.kj-tag-list[role=listbox]:focus-visible,.kj-tag-list[role=grid]:focus-visible{outline:2px solid var(--kj-bg-primary);outline-offset:2px}}\n"] }]
|
|
18918
|
+
}, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["@layer kj.component{.kj-tag{--kj-tag-bg: var(--kj-bg-primary);--kj-tag-fg: var(--kj-fg-on-primary);--kj-tag-border-color: transparent;--kj-tag-radius: var(--kj-radius-selector);--kj-tag-padding-x: var(--kj-space-sm);--kj-tag-padding-y: .125rem;--kj-tag-font-size: .75rem;--kj-tag-gap: .25rem;display:inline-flex;align-items:center;gap:var(--kj-tag-gap);background:var(--kj-tag-bg);color:var(--kj-tag-fg);border:var(--kj-border) solid var(--kj-tag-border-color);border-radius:var(--kj-tag-radius);padding:var(--kj-tag-padding-y) var(--kj-tag-padding-x);font:var(--kj-tag-font-size) / 1 var(--kj-font-sans);font-weight:500;transition:background-color var(--kj-transition),color var(--kj-transition),border-color var(--kj-transition)}.kj-tag[data-variant=secondary]{--kj-tag-bg: var(--kj-bg-field);--kj-tag-fg: var(--kj-fg-default)}.kj-tag[data-variant=destructive],.kj-tag[data-variant=danger]{--kj-tag-bg: var(--kj-bg-danger);--kj-tag-fg: var(--kj-fg-on-danger)}.kj-tag[data-variant=success]{--kj-tag-bg: var(--kj-bg-success, var(--kj-bg-primary));--kj-tag-fg: var(--kj-fg-on-success, var(--kj-fg-on-primary))}.kj-tag[data-variant=warning]{--kj-tag-bg: var(--kj-bg-warning, var(--kj-bg-primary));--kj-tag-fg: var(--kj-fg-on-warning, var(--kj-fg-on-primary))}.kj-tag[data-variant=info]{--kj-tag-bg: var(--kj-bg-info, var(--kj-bg-primary));--kj-tag-fg: var(--kj-fg-on-info, var(--kj-fg-on-primary))}.kj-tag[data-variant=outline]{--kj-tag-bg: transparent;--kj-tag-fg: var(--kj-fg-default);--kj-tag-border-color: var(--kj-border-default)}.kj-tag[data-variant=ghost]{--kj-tag-bg: transparent;--kj-tag-fg: var(--kj-fg-default);--kj-tag-border-color: transparent}.kj-tag[data-size=xs]{--kj-tag-padding-x: .1875rem;--kj-tag-padding-y: .03125rem;--kj-tag-font-size: .5625rem;--kj-tag-gap: .125rem}.kj-tag[data-size=sm]{--kj-tag-padding-x: .375rem;--kj-tag-padding-y: .125rem;--kj-tag-font-size: .6875rem}.kj-tag[data-size=lg]{--kj-tag-padding-x: var(--kj-space-md);--kj-tag-font-size: .875rem}.kj-tag[role=button],.kj-tag[role=option]{cursor:pointer;-webkit-user-select:none;user-select:none}.kj-tag[role=button]:hover,.kj-tag[role=option]:hover{--kj-tag-bg: color-mix(in oklab, var(--kj-tag-bg) 88%, var(--kj-fg-default))}.kj-tag[aria-pressed=true],.kj-tag[aria-selected=true],.kj-tag[data-selected]{--kj-tag-bg: var(--kj-bg-primary);--kj-tag-fg: var(--kj-fg-on-primary);--kj-tag-border-color: var(--kj-bg-primary)}.kj-tag[data-focus-visible]:focus,.kj-tag:focus-visible{outline:2px solid var(--kj-bg-primary);outline-offset:2px}.kj-tag[aria-disabled=true],.kj-tag[data-disabled]{opacity:.45;cursor:not-allowed;pointer-events:none}.kj-tag-remove{display:inline-flex;align-items:center;justify-content:center;width:1rem;height:1rem;margin-inline-start:.125rem;padding:0;border:none;background:transparent;color:inherit;border-radius:999px;cursor:pointer;line-height:1;font:inherit;position:relative}.kj-tag-remove:after{content:\"\";position:absolute;inset:-.875rem;border-radius:inherit}.kj-tag-remove:hover{background:color-mix(in oklab,currentColor 18%,transparent)}.kj-tag-remove:focus-visible{outline:2px solid currentColor;outline-offset:2px}.kj-tag-remove[aria-disabled=true]{opacity:.45;cursor:not-allowed;pointer-events:none}.kj-tag[hidden]{display:none}.kj-tag-list{display:inline-flex;flex-wrap:wrap;gap:var(--kj-space-sm);align-items:center}.kj-tag-list-overflow{border-style:dashed;--kj-tag-border-color: var(--kj-border-default)}.kj-tag-list-overflow[aria-expanded=true]{--kj-tag-bg: var(--kj-bg-field)}.kj-tag-list[role=listbox]:focus-visible,.kj-tag-list[role=grid]:focus-visible{outline:2px solid var(--kj-bg-primary);outline-offset:2px}}\n"] }]
|
|
18711
18919
|
}] });
|
|
18712
18920
|
/**
|
|
18713
18921
|
* Trailing remove button for `<kj-tag>`. Composes the headless `KjTagRemove`
|
|
@@ -18744,15 +18952,80 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
18744
18952
|
}] });
|
|
18745
18953
|
/**
|
|
18746
18954
|
* Optional chip-group container. Provides the listbox / grid / group ARIA
|
|
18747
|
-
* wiring + roving tabindex via the headless `KjTagList` directive
|
|
18748
|
-
*
|
|
18749
|
-
*
|
|
18955
|
+
* wiring + roving tabindex via the headless `KjTagList` directive, and — with
|
|
18956
|
+
* `[kjMax]` — collapses the chips past the cap into a "+N" chip. Hovering,
|
|
18957
|
+
* focusing or tapping that chip opens a panel listing the collapsed chips;
|
|
18958
|
+
* project an `<ng-template kjOverflowContent>` to render the panel yourself
|
|
18959
|
+
* (the context carries the collapsed range, so you slice your own data and
|
|
18960
|
+
* add actions such as remove).
|
|
18961
|
+
*
|
|
18962
|
+
* Standalone tags work without it; wrap chips in `<kj-tag-list>` whenever the
|
|
18963
|
+
* group needs a single tab stop and arrow-key navigation.
|
|
18964
|
+
*
|
|
18965
|
+
* The "+N" chip is a button rendered inside the container: keep the container
|
|
18966
|
+
* on its default `group` role when using `kjMax` (a `listbox` / `grid` only
|
|
18967
|
+
* admits option / row children).
|
|
18750
18968
|
* @doc
|
|
18751
18969
|
* @doc-name tag
|
|
18752
18970
|
*/
|
|
18753
18971
|
class KjTagListComponent {
|
|
18972
|
+
list = inject(KjTagList, { self: true });
|
|
18973
|
+
i18n = inject(KjTranslateService);
|
|
18974
|
+
/** Text of the "+N" chip. Defaults to the `overflow.more` translation (`+{count}`). */
|
|
18975
|
+
kjOverflowLabel = input(undefined, /* @ts-ignore */
|
|
18976
|
+
...(ngDevMode ? [{ debugName: "kjOverflowLabel" }] : /* istanbul ignore next */ []));
|
|
18977
|
+
/** Accessible name of the chip button. Defaults to the `overflow.show` translation (`Show {count} more`). */
|
|
18978
|
+
kjOverflowAriaLabel = input(undefined, /* @ts-ignore */
|
|
18979
|
+
...(ngDevMode ? [{ debugName: "kjOverflowAriaLabel" }] : /* istanbul ignore next */ []));
|
|
18980
|
+
/** Variant of the "+N" chip. Default `secondary`. */
|
|
18981
|
+
kjOverflowVariant = input('secondary', /* @ts-ignore */
|
|
18982
|
+
...(ngDevMode ? [{ debugName: "kjOverflowVariant" }] : /* istanbul ignore next */ []));
|
|
18983
|
+
overflowTemplate = contentChild(KjOverflowContent, /* @ts-ignore */
|
|
18984
|
+
...(ngDevMode ? [{ debugName: "overflowTemplate" }] : /* istanbul ignore next */ []));
|
|
18985
|
+
panel = viewChild(KjOverflowPanelComponent, /* @ts-ignore */
|
|
18986
|
+
...(ngDevMode ? [{ debugName: "panel" }] : /* istanbul ignore next */ []));
|
|
18987
|
+
overflowCount = this.list.overflowCount;
|
|
18988
|
+
overflowLabel = computed(() => {
|
|
18989
|
+
const n = this.overflowCount();
|
|
18990
|
+
return this.kjOverflowLabel()?.(n) ?? this.i18n.translate('overflow.more', { count: n });
|
|
18991
|
+
}, /* @ts-ignore */
|
|
18992
|
+
...(ngDevMode ? [{ debugName: "overflowLabel" }] : /* istanbul ignore next */ []));
|
|
18993
|
+
overflowAriaLabel = computed(() => {
|
|
18994
|
+
const n = this.overflowCount();
|
|
18995
|
+
return this.kjOverflowAriaLabel()?.(n) ?? this.i18n.translate('overflow.show', { count: n });
|
|
18996
|
+
}, /* @ts-ignore */
|
|
18997
|
+
...(ngDevMode ? [{ debugName: "overflowAriaLabel" }] : /* istanbul ignore next */ []));
|
|
18998
|
+
focusPanel(event) {
|
|
18999
|
+
event.preventDefault();
|
|
19000
|
+
this.panel()?.focusFirst();
|
|
19001
|
+
}
|
|
18754
19002
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjTagListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
18755
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
19003
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: KjTagListComponent, isStandalone: true, selector: "kj-tag-list", inputs: { kjOverflowLabel: { classPropertyName: "kjOverflowLabel", publicName: "kjOverflowLabel", isSignal: true, isRequired: false, transformFunction: null }, kjOverflowAriaLabel: { classPropertyName: "kjOverflowAriaLabel", publicName: "kjOverflowAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, kjOverflowVariant: { classPropertyName: "kjOverflowVariant", publicName: "kjOverflowVariant", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "kj-tag-list" }, queries: [{ propertyName: "overflowTemplate", first: true, predicate: KjOverflowContent, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "panel", first: true, predicate: KjOverflowPanelComponent, descendants: true, isSignal: true }], hostDirectives: [{ directive: i1.KjTagList, inputs: ["kjTagListRole", "kjTagListRole", "kjTagListOrientation", "kjTagListOrientation", "kjTagListMultiple", "kjTagListMultiple", "kjTagListDisabled", "kjTagListDisabled", "kjMax", "kjMax"] }], ngImport: i0, template: `
|
|
19004
|
+
<ng-content />
|
|
19005
|
+
@if (overflowCount() > 0) {
|
|
19006
|
+
<button
|
|
19007
|
+
type="button"
|
|
19008
|
+
class="kj-tag kj-overflow-trigger kj-tag-list-overflow"
|
|
19009
|
+
[attr.data-variant]="kjOverflowVariant()"
|
|
19010
|
+
kjPopoverTrigger
|
|
19011
|
+
kjTrigger="hover"
|
|
19012
|
+
#trg="kjPopoverTrigger"
|
|
19013
|
+
[attr.aria-label]="overflowAriaLabel()"
|
|
19014
|
+
(keydown.arrowdown)="focusPanel($event)"
|
|
19015
|
+
(keydown.enter)="focusPanel($event)"
|
|
19016
|
+
>
|
|
19017
|
+
{{ overflowLabel() }}
|
|
19018
|
+
</button>
|
|
19019
|
+
<kj-overflow-panel
|
|
19020
|
+
[kjFor]="trg"
|
|
19021
|
+
[kjCount]="overflowCount()"
|
|
19022
|
+
[kjStart]="list.visibleCount()"
|
|
19023
|
+
[kjEnd]="list.total()"
|
|
19024
|
+
[kjLabels]="list.hiddenLabels()"
|
|
19025
|
+
[kjTemplate]="overflowTemplate()"
|
|
19026
|
+
/>
|
|
19027
|
+
}
|
|
19028
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: KjPopoverTrigger, selector: "[kjPopoverTrigger]", inputs: ["kjTrigger", "kjDisabled", "kjOpenDelay", "kjCloseDelay"], exportAs: ["kjPopoverTrigger"] }, { kind: "component", type: KjOverflowPanelComponent, selector: "kj-overflow-panel", inputs: ["kjFor", "kjCount", "kjStart", "kjEnd", "kjLabels", "kjTemplate", "kjSide", "kjAlign"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
18756
19029
|
}
|
|
18757
19030
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjTagListComponent, decorators: [{
|
|
18758
19031
|
type: Component,
|
|
@@ -18767,17 +19040,44 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
18767
19040
|
'kjTagListOrientation',
|
|
18768
19041
|
'kjTagListMultiple',
|
|
18769
19042
|
'kjTagListDisabled',
|
|
19043
|
+
'kjMax',
|
|
18770
19044
|
],
|
|
18771
19045
|
},
|
|
18772
19046
|
],
|
|
18773
|
-
|
|
19047
|
+
imports: [KjPopoverTrigger, KjOverflowPanelComponent],
|
|
19048
|
+
template: `
|
|
19049
|
+
<ng-content />
|
|
19050
|
+
@if (overflowCount() > 0) {
|
|
19051
|
+
<button
|
|
19052
|
+
type="button"
|
|
19053
|
+
class="kj-tag kj-overflow-trigger kj-tag-list-overflow"
|
|
19054
|
+
[attr.data-variant]="kjOverflowVariant()"
|
|
19055
|
+
kjPopoverTrigger
|
|
19056
|
+
kjTrigger="hover"
|
|
19057
|
+
#trg="kjPopoverTrigger"
|
|
19058
|
+
[attr.aria-label]="overflowAriaLabel()"
|
|
19059
|
+
(keydown.arrowdown)="focusPanel($event)"
|
|
19060
|
+
(keydown.enter)="focusPanel($event)"
|
|
19061
|
+
>
|
|
19062
|
+
{{ overflowLabel() }}
|
|
19063
|
+
</button>
|
|
19064
|
+
<kj-overflow-panel
|
|
19065
|
+
[kjFor]="trg"
|
|
19066
|
+
[kjCount]="overflowCount()"
|
|
19067
|
+
[kjStart]="list.visibleCount()"
|
|
19068
|
+
[kjEnd]="list.total()"
|
|
19069
|
+
[kjLabels]="list.hiddenLabels()"
|
|
19070
|
+
[kjTemplate]="overflowTemplate()"
|
|
19071
|
+
/>
|
|
19072
|
+
}
|
|
19073
|
+
`,
|
|
18774
19074
|
encapsulation: ViewEncapsulation.None,
|
|
18775
19075
|
host: {
|
|
18776
19076
|
class: 'kj-tag-list',
|
|
18777
19077
|
},
|
|
18778
19078
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
18779
19079
|
}]
|
|
18780
|
-
}] });
|
|
19080
|
+
}], propDecorators: { kjOverflowLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjOverflowLabel", required: false }] }], kjOverflowAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjOverflowAriaLabel", required: false }] }], kjOverflowVariant: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjOverflowVariant", required: false }] }], overflowTemplate: [{ type: i0.ContentChild, args: [i0.forwardRef(() => KjOverflowContent), { isSignal: true }] }], panel: [{ type: i0.ViewChild, args: [i0.forwardRef(() => KjOverflowPanelComponent), { isSignal: true }] }] } });
|
|
18781
19081
|
|
|
18782
19082
|
let nextId = 0;
|
|
18783
19083
|
/**
|
|
@@ -20688,5 +20988,5 @@ const KJ_COMPONENTS_VERSION = '0.0.1';
|
|
|
20688
20988
|
* Generated bundle index. Do not edit.
|
|
20689
20989
|
*/
|
|
20690
20990
|
|
|
20691
|
-
export { KJ_COMPONENTS_VERSION, KJ_EDITOR_CONTRACT, KJ_FILTER_CONTEXT, KjAccordionComponent, KjAccordionContentComponent, KjAccordionItemComponent, KjAccordionTriggerComponent, KjActionSheet, KjActionSheetComponent, KjActionSheetRef, KjActionSheetService, KjAlertActionsComponent, KjAlertComponent, KjAlertDescriptionComponent, KjAlertDismissComponent, KjAlertIconComponent, KjAlertTitleComponent, KjAvatarComponent, KjAvatarGroupComponent, KjBadgeComponent, KjBooleanEditor, KjBreadcrumbComponent, KjBreadcrumbCurrentComponent, KjBreadcrumbEllipsisComponent, KjBreadcrumbItemComponent, KjBreadcrumbLinkComponent, KjBreadcrumbListComponent, KjBreadcrumbSeparatorComponent, KjBulkAction, KjButtonComponent, KjButtonGroupComponent, KjCalendarComponent, KjCardComponent, KjCardContentComponent, KjCardCoverComponent, KjCardFooterComponent, KjCardHeaderComponent, KjCardSubtitleComponent, KjCardTitleComponent, KjCarouselAutoplayComponent, KjCarouselComponent, KjCarouselIndicatorsComponent, KjCarouselNextComponent, KjCarouselPauseComponent, KjCarouselPreviousComponent, KjCarouselSlideComponent, KjCarouselViewportComponent, KjCascadeOptionComponent, KjCascadeSelectComponent, KjCascadeSubPanelComponent, KjCellEditorOutlet, KjCellTemplateDirective, KjChartComponent, KjChatAvatarComponent, KjChatBubbleComponent, KjChatComponent, KjChatFooterComponent, KjChatHeaderComponent, KjChatLogComponent, KjChatMessage, KjChatThread, KjCheckboxComponent, KjColorPickerComponent, KjComboboxComponent, KjComboboxEmptyComponent, KjComboboxLoadingComponent, KjComboboxOptionComponent, KjCommandEmptyComponent, KjCommandGroupComponent, KjCommandInputComponent, KjCommandItemComponent, KjCommandPaletteComponent, KjCommandPaletteFooter, KjCommandPaletteItemTemplate, KjCommandSeparatorComponent, KjConfirmPopupActionComponent, KjConfirmPopupActionsComponent, KjConfirmPopupCancelComponent, KjConfirmPopupComponent, KjConfirmPopupContentComponent, KjConfirmPopupMessageComponent, KjConfirmPopupTriggerComponent, KjDateEditor, KjDateFilter, KjDatePickerComponent, KjDateRangePresetsComponent, KjDatetimePickerComponent, KjDialogComponent, KjDirectionToggle, KjDividerComponent, KjDrawerComponent, KjDropdownMenuComponent, KjEditorComponent, KjEmptyStateActionsComponent, KjEmptyStateComponent, KjEmptyStateDescriptionComponent, KjEmptyStateIconComponent, KjEmptyStateTitleComponent, KjFieldComponent, KjFieldErrorComponent, KjFieldGroupComponent, KjFieldHelpComponent, KjFieldLabelComponent, KjFileUploadComponent, KjFilterCellOutlet, KjFormActionsComponent, KjFormComponent, KjFormSummaryComponent, KjIconGalleryExample, KjIconUsageExample, KjInputComponent, KjInputGroupAddonComponent, KjInputGroupComponent, KjInputMaskComponent, KjInputMaskCreditCardExample, KjInputMaskCustomTokensExample, KjInputMaskDateExample, KjInputMaskExample, KjInputMaskUsageExample, KjInputMaskValidationExample, KjInputOtpComponent, KjKbdComponent, KjLinkComponent, KjListComponent, KjListItemComponent, KjMenubarComponent, KjMenubarItemComponent, KjNumberEditor, KjNumberFilter, KjNumberInputComponent, KjOptionComponent, KjOverlayBadgeComponent, KjOverlayBadgeContentComponent, KjPaginationComponent, KjPaginationDefaultComponent, KjPaginationEllipsisComponent, KjPaginationFirstComponent, KjPaginationInfoComponent, KjPaginationItemComponent, KjPaginationLastComponent, KjPaginationNextComponent, KjPaginationPreviousComponent, KjPasswordInputComponent, KjPopoverComponent, KjProgressBarComponent, KjPromptInput, KjRadioComponent, KjRadioGroupComponent, KjRichTextEditorComponent, KjSelectComponent, KjSelectEditor, KjSelectFilter, KjSheetComponent, KjSkeletonComponent, KjSkipLinkComponent, KjSliderComponent, KjSpeedDialActionComponent, KjSpeedDialActionsComponent, KjSpeedDialComponent, KjSpeedDialTriggerComponent, KjSpinnerComponent, KjStepComponent, KjStepContentComponent, KjStepLabelComponent, KjStepperComponent, KjStepperNextComponent, KjStepperPreviousComponent, KjStepperResetComponent, KjTabComponent, KjTabListComponent, KjTabPanelComponent, KjTableComponent, KjTableEmptyTemplate, KjTableErrorTemplate, KjTableLoadingTemplate, KjTablePaginationComponent, KjTableSidePanelComponent, KjTableSidePanelContent, KjTableStatusBarComponent, KjTableToolbarComponent, KjTableVirtual, KjTabsComponent, KjTagComponent, KjTagListComponent, KjTagRemoveComponent, KjTextEditor, KjTextFilter, KjTextareaComponent, KjTimePickerComponent, KjToastCloseComponent, KjToastComponent, KjToastViewportComponent, KjToastWrapperComponent, KjToggleComponent, KjTooltipComponent, KjTreeSelectComponent, KjTreeSelectNodeComponent, LUCIDE_ICON_NAMES, bold, bulletList, codeBlock, copyToClipboard, defaultFeatures, downloadString, exportCsv, exportJson, heading, history, image, inlineCode, italic, link, markdownShortcuts, orderedList, provideLucideIcons, quote, renderMarkdown, strike, toTsv, underline };
|
|
20991
|
+
export { KJ_COMPONENTS_VERSION, KJ_EDITOR_CONTRACT, KJ_FILTER_CONTEXT, KjAccordionComponent, KjAccordionContentComponent, KjAccordionItemComponent, KjAccordionTriggerComponent, KjActionSheet, KjActionSheetComponent, KjActionSheetRef, KjActionSheetService, KjAlertActionsComponent, KjAlertComponent, KjAlertDescriptionComponent, KjAlertDismissComponent, KjAlertIconComponent, KjAlertTitleComponent, KjAvatarComponent, KjAvatarGroupComponent, KjBadgeComponent, KjBooleanEditor, KjBreadcrumbComponent, KjBreadcrumbCurrentComponent, KjBreadcrumbEllipsisComponent, KjBreadcrumbItemComponent, KjBreadcrumbLinkComponent, KjBreadcrumbListComponent, KjBreadcrumbSeparatorComponent, KjBulkAction, KjButtonComponent, KjButtonGroupComponent, KjCalendarComponent, KjCardComponent, KjCardContentComponent, KjCardCoverComponent, KjCardFooterComponent, KjCardHeaderComponent, KjCardSubtitleComponent, KjCardTitleComponent, KjCarouselAutoplayComponent, KjCarouselComponent, KjCarouselIndicatorsComponent, KjCarouselNextComponent, KjCarouselPauseComponent, KjCarouselPreviousComponent, KjCarouselSlideComponent, KjCarouselViewportComponent, KjCascadeOptionComponent, KjCascadeSelectComponent, KjCascadeSubPanelComponent, KjCellEditorOutlet, KjCellTemplateDirective, KjChartComponent, KjChatAvatarComponent, KjChatBubbleComponent, KjChatComponent, KjChatFooterComponent, KjChatHeaderComponent, KjChatLogComponent, KjChatMessage, KjChatThread, KjCheckboxComponent, KjColorPickerComponent, KjComboboxComponent, KjComboboxEmptyComponent, KjComboboxLoadingComponent, KjComboboxOptionComponent, KjCommandEmptyComponent, KjCommandGroupComponent, KjCommandInputComponent, KjCommandItemComponent, KjCommandPaletteComponent, KjCommandPaletteFooter, KjCommandPaletteItemTemplate, KjCommandSeparatorComponent, KjConfirmPopupActionComponent, KjConfirmPopupActionsComponent, KjConfirmPopupCancelComponent, KjConfirmPopupComponent, KjConfirmPopupContentComponent, KjConfirmPopupMessageComponent, KjConfirmPopupTriggerComponent, KjDateEditor, KjDateFilter, KjDatePickerComponent, KjDateRangePresetsComponent, KjDatetimePickerComponent, KjDialogComponent, KjDirectionToggle, KjDividerComponent, KjDrawerComponent, KjDropdownMenuComponent, KjEditorComponent, KjEmptyStateActionsComponent, KjEmptyStateComponent, KjEmptyStateDescriptionComponent, KjEmptyStateIconComponent, KjEmptyStateTitleComponent, KjFieldComponent, KjFieldErrorComponent, KjFieldGroupComponent, KjFieldHelpComponent, KjFieldLabelComponent, KjFileUploadComponent, KjFilterCellOutlet, KjFormActionsComponent, KjFormComponent, KjFormSummaryComponent, KjIconGalleryExample, KjIconUsageExample, KjInputComponent, KjInputGroupAddonComponent, KjInputGroupComponent, KjInputMaskComponent, KjInputMaskCreditCardExample, KjInputMaskCustomTokensExample, KjInputMaskDateExample, KjInputMaskExample, KjInputMaskUsageExample, KjInputMaskValidationExample, KjInputOtpComponent, KjKbdComponent, KjLinkComponent, KjListComponent, KjListItemComponent, KjMenubarComponent, KjMenubarItemComponent, KjNumberEditor, KjNumberFilter, KjNumberInputComponent, KjOptionComponent, KjOverflowPanelComponent, KjOverlayBadgeComponent, KjOverlayBadgeContentComponent, KjPaginationComponent, KjPaginationDefaultComponent, KjPaginationEllipsisComponent, KjPaginationFirstComponent, KjPaginationInfoComponent, KjPaginationItemComponent, KjPaginationLastComponent, KjPaginationNextComponent, KjPaginationPreviousComponent, KjPasswordInputComponent, KjPopoverComponent, KjProgressBarComponent, KjPromptInput, KjRadioComponent, KjRadioGroupComponent, KjRichTextEditorComponent, KjSelectComponent, KjSelectEditor, KjSelectFilter, KjSheetComponent, KjSkeletonComponent, KjSkipLinkComponent, KjSliderComponent, KjSpeedDialActionComponent, KjSpeedDialActionsComponent, KjSpeedDialComponent, KjSpeedDialTriggerComponent, KjSpinnerComponent, KjStepComponent, KjStepContentComponent, KjStepLabelComponent, KjStepperComponent, KjStepperNextComponent, KjStepperPreviousComponent, KjStepperResetComponent, KjTabComponent, KjTabListComponent, KjTabPanelComponent, KjTableComponent, KjTableEmptyTemplate, KjTableErrorTemplate, KjTableLoadingTemplate, KjTablePaginationComponent, KjTableSidePanelComponent, KjTableSidePanelContent, KjTableStatusBarComponent, KjTableToolbarComponent, KjTableVirtual, KjTabsComponent, KjTagComponent, KjTagListComponent, KjTagRemoveComponent, KjTextEditor, KjTextFilter, KjTextareaComponent, KjTimePickerComponent, KjToastCloseComponent, KjToastComponent, KjToastViewportComponent, KjToastWrapperComponent, KjToggleComponent, KjTooltipComponent, KjTreeSelectComponent, KjTreeSelectNodeComponent, LUCIDE_ICON_NAMES, bold, bulletList, codeBlock, copyToClipboard, defaultFeatures, downloadString, exportCsv, exportJson, heading, history, image, inlineCode, italic, link, markdownShortcuts, orderedList, provideLucideIcons, quote, renderMarkdown, strike, toTsv, underline };
|
|
20692
20992
|
//# sourceMappingURL=kouji-ui-components.mjs.map
|