yukit-web 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.npm/_logs/2026-08-20T08_40_55_706Z-debug-0.log +38 -0
- package/.npm/_logs/2026-08-20T08_40_56_280Z-debug-0.log +14 -0
- package/README.md +1465 -0
- package/fesm2022/yukit-web-helm-accordion.mjs +141 -0
- package/fesm2022/yukit-web-helm-accordion.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-alert-dialog.mjs +250 -0
- package/fesm2022/yukit-web-helm-alert-dialog.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-alert.mjs +94 -0
- package/fesm2022/yukit-web-helm-alert.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-aspect-ratio.mjs +47 -0
- package/fesm2022/yukit-web-helm-aspect-ratio.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-attachment.mjs +211 -0
- package/fesm2022/yukit-web-helm-attachment.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-autocomplete.mjs +361 -0
- package/fesm2022/yukit-web-helm-autocomplete.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-avatar.mjs +152 -0
- package/fesm2022/yukit-web-helm-avatar.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-badge.mjs +47 -0
- package/fesm2022/yukit-web-helm-badge.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-breadcrumb.mjs +196 -0
- package/fesm2022/yukit-web-helm-breadcrumb.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-bubble.mjs +121 -0
- package/fesm2022/yukit-web-helm-bubble.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-button-group.mjs +86 -0
- package/fesm2022/yukit-web-helm-button-group.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-button.mjs +77 -0
- package/fesm2022/yukit-web-helm-button.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-calendar.mjs +937 -0
- package/fesm2022/yukit-web-helm-calendar.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-card.mjs +141 -0
- package/fesm2022/yukit-web-helm-card.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-carousel.mjs +270 -0
- package/fesm2022/yukit-web-helm-carousel.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-checkbox.mjs +147 -0
- package/fesm2022/yukit-web-helm-checkbox.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-collapsible.mjs +62 -0
- package/fesm2022/yukit-web-helm-collapsible.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-combobox.mjs +624 -0
- package/fesm2022/yukit-web-helm-combobox.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-command.mjs +315 -0
- package/fesm2022/yukit-web-helm-command.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-context-menu.mjs +71 -0
- package/fesm2022/yukit-web-helm-context-menu.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-date-picker.mjs +1517 -0
- package/fesm2022/yukit-web-helm-date-picker.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-dialog.mjs +271 -0
- package/fesm2022/yukit-web-helm-dialog.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-drawer.mjs +233 -0
- package/fesm2022/yukit-web-helm-drawer.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-dropdown-menu.mjs +508 -0
- package/fesm2022/yukit-web-helm-dropdown-menu.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-empty.mjs +125 -0
- package/fesm2022/yukit-web-helm-empty.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-field.mjs +325 -0
- package/fesm2022/yukit-web-helm-field.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-hover-card.mjs +102 -0
- package/fesm2022/yukit-web-helm-hover-card.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-input-group.mjs +171 -0
- package/fesm2022/yukit-web-helm-input-group.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-input-otp.mjs +127 -0
- package/fesm2022/yukit-web-helm-input-otp.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-input.mjs +32 -0
- package/fesm2022/yukit-web-helm-input.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-item.mjs +242 -0
- package/fesm2022/yukit-web-helm-item.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-kbd.mjs +46 -0
- package/fesm2022/yukit-web-helm-kbd.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-label.mjs +30 -0
- package/fesm2022/yukit-web-helm-label.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-marker.mjs +77 -0
- package/fesm2022/yukit-web-helm-marker.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-menubar.mjs +90 -0
- package/fesm2022/yukit-web-helm-menubar.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-message.mjs +115 -0
- package/fesm2022/yukit-web-helm-message.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-native-select.mjs +180 -0
- package/fesm2022/yukit-web-helm-native-select.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-navigation-menu.mjs +173 -0
- package/fesm2022/yukit-web-helm-navigation-menu.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-pagination.mjs +745 -0
- package/fesm2022/yukit-web-helm-pagination.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-popover.mjs +136 -0
- package/fesm2022/yukit-web-helm-popover.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-progress.mjs +60 -0
- package/fesm2022/yukit-web-helm-progress.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-radio-group.mjs +185 -0
- package/fesm2022/yukit-web-helm-radio-group.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-resizable.mjs +98 -0
- package/fesm2022/yukit-web-helm-resizable.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-scroll-area.mjs +36 -0
- package/fesm2022/yukit-web-helm-scroll-area.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-select.mjs +412 -0
- package/fesm2022/yukit-web-helm-select.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-separator.mjs +33 -0
- package/fesm2022/yukit-web-helm-separator.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-sheet.mjs +254 -0
- package/fesm2022/yukit-web-helm-sheet.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-sidebar.mjs +857 -0
- package/fesm2022/yukit-web-helm-sidebar.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-skeleton.mjs +29 -0
- package/fesm2022/yukit-web-helm-skeleton.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-slider.mjs +123 -0
- package/fesm2022/yukit-web-helm-slider.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-sonner.mjs +126 -0
- package/fesm2022/yukit-web-helm-sonner.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-spinner.mjs +48 -0
- package/fesm2022/yukit-web-helm-spinner.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-switch.mjs +126 -0
- package/fesm2022/yukit-web-helm-switch.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-table.mjs +180 -0
- package/fesm2022/yukit-web-helm-table.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-tabs.mjs +251 -0
- package/fesm2022/yukit-web-helm-tabs.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-textarea.mjs +32 -0
- package/fesm2022/yukit-web-helm-textarea.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-toggle-group.mjs +95 -0
- package/fesm2022/yukit-web-helm-toggle-group.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-toggle.mjs +61 -0
- package/fesm2022/yukit-web-helm-toggle.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-tooltip.mjs +57 -0
- package/fesm2022/yukit-web-helm-tooltip.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-typography.mjs +205 -0
- package/fesm2022/yukit-web-helm-typography.mjs.map +1 -0
- package/fesm2022/yukit-web-helm-utils.mjs +272 -0
- package/fesm2022/yukit-web-helm-utils.mjs.map +1 -0
- package/fesm2022/yukit-web.mjs +3592 -0
- package/fesm2022/yukit-web.mjs.map +1 -0
- package/package.json +291 -0
- package/src/lib/theme/spartan-overwrites/accordion.css +4 -0
- package/src/lib/theme/theme.css +161 -0
- package/src/lib/theme/tokens/color.css +356 -0
- package/src/lib/theme/tokens/component-colors.css +167 -0
- package/src/lib/theme/tokens/radius.css +18 -0
- package/src/lib/theme/tokens/typography.css +201 -0
- package/types/yukit-web-helm-accordion.d.ts +32 -0
- package/types/yukit-web-helm-alert-dialog.d.ts +85 -0
- package/types/yukit-web-helm-alert.d.ts +37 -0
- package/types/yukit-web-helm-aspect-ratio.d.ts +16 -0
- package/types/yukit-web-helm-attachment.d.ts +80 -0
- package/types/yukit-web-helm-autocomplete.d.ts +91 -0
- package/types/yukit-web-helm-avatar.d.ts +45 -0
- package/types/yukit-web-helm-badge.d.ts +19 -0
- package/types/yukit-web-helm-breadcrumb.d.ts +52 -0
- package/types/yukit-web-helm-bubble.d.ts +46 -0
- package/types/yukit-web-helm-button-group.d.ts +25 -0
- package/types/yukit-web-helm-button.d.ts +33 -0
- package/types/yukit-web-helm-calendar.d.ts +89 -0
- package/types/yukit-web-helm-card.d.ts +49 -0
- package/types/yukit-web-helm-carousel.d.ts +79 -0
- package/types/yukit-web-helm-checkbox.d.ts +60 -0
- package/types/yukit-web-helm-collapsible.d.ts +22 -0
- package/types/yukit-web-helm-combobox.d.ts +150 -0
- package/types/yukit-web-helm-command.d.ts +84 -0
- package/types/yukit-web-helm-context-menu.d.ts +29 -0
- package/types/yukit-web-helm-date-picker.d.ts +574 -0
- package/types/yukit-web-helm-dialog.d.ts +90 -0
- package/types/yukit-web-helm-drawer.d.ts +71 -0
- package/types/yukit-web-helm-dropdown-menu.d.ts +171 -0
- package/types/yukit-web-helm-empty.d.ts +49 -0
- package/types/yukit-web-helm-field.d.ts +102 -0
- package/types/yukit-web-helm-hover-card.d.ts +31 -0
- package/types/yukit-web-helm-input-group.d.ts +47 -0
- package/types/yukit-web-helm-input-otp.d.ts +40 -0
- package/types/yukit-web-helm-input.d.ts +13 -0
- package/types/yukit-web-helm-item.d.ts +96 -0
- package/types/yukit-web-helm-kbd.d.ts +17 -0
- package/types/yukit-web-helm-label.d.ts +12 -0
- package/types/yukit-web-helm-marker.d.ts +31 -0
- package/types/yukit-web-helm-menubar.d.ts +35 -0
- package/types/yukit-web-helm-message.d.ts +44 -0
- package/types/yukit-web-helm-native-select.d.ts +65 -0
- package/types/yukit-web-helm-navigation-menu.d.ts +49 -0
- package/types/yukit-web-helm-pagination.d.ts +187 -0
- package/types/yukit-web-helm-popover.d.ts +49 -0
- package/types/yukit-web-helm-progress.d.ts +22 -0
- package/types/yukit-web-helm-radio-group.d.ts +66 -0
- package/types/yukit-web-helm-resizable.d.ts +27 -0
- package/types/yukit-web-helm-scroll-area.d.ts +11 -0
- package/types/yukit-web-helm-select.d.ts +114 -0
- package/types/yukit-web-helm-separator.d.ts +13 -0
- package/types/yukit-web-helm-sheet.d.ts +75 -0
- package/types/yukit-web-helm-sidebar.d.ts +232 -0
- package/types/yukit-web-helm-skeleton.d.ts +11 -0
- package/types/yukit-web-helm-slider.d.ts +14 -0
- package/types/yukit-web-helm-sonner.d.ts +52 -0
- package/types/yukit-web-helm-spinner.d.ts +18 -0
- package/types/yukit-web-helm-switch.d.ts +54 -0
- package/types/yukit-web-helm-table.d.ts +82 -0
- package/types/yukit-web-helm-tabs.d.ts +66 -0
- package/types/yukit-web-helm-textarea.d.ts +13 -0
- package/types/yukit-web-helm-toggle-group.d.ts +34 -0
- package/types/yukit-web-helm-toggle.d.ts +22 -0
- package/types/yukit-web-helm-tooltip.d.ts +17 -0
- package/types/yukit-web-helm-typography.d.ts +89 -0
- package/types/yukit-web-helm-utils.d.ts +44 -0
- package/types/yukit-web.d.ts +2426 -0
|
@@ -0,0 +1,508 @@
|
|
|
1
|
+
import * as i1 from '@angular/cdk/menu';
|
|
2
|
+
import { CdkMenu, CdkMenuItem, CdkMenuItemCheckbox, CdkMenuItemSelectable, CdkMenuGroup, CdkMenuItemRadio, CdkMenuTrigger } from '@angular/cdk/menu';
|
|
3
|
+
import * as i0 from '@angular/core';
|
|
4
|
+
import { inject, ElementRef, signal, input, numberAttribute, Directive, booleanAttribute, ChangeDetectionStrategy, Component, HOST_TAG_NAME, InjectionToken, computed, effect, forwardRef } from '@angular/core';
|
|
5
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
6
|
+
import { MENU_SIDE, deriveMenuSideFromTransformOrigin, createMenuPosition } from '@spartan-ng/brain/core';
|
|
7
|
+
import { classes } from 'yukit-web/helm/utils';
|
|
8
|
+
import { InputModalityDetector } from '@angular/cdk/a11y';
|
|
9
|
+
import { NgIcon, provideIcons } from '@ng-icons/core';
|
|
10
|
+
import { lucideCheck, lucideChevronRight } from '@ng-icons/lucide';
|
|
11
|
+
|
|
12
|
+
class HlmDropdownMenu {
|
|
13
|
+
constructor() {
|
|
14
|
+
this._host = inject(CdkMenu);
|
|
15
|
+
this._elementRef = inject((ElementRef));
|
|
16
|
+
// The trigger provides its configured side; CDK parents this content's injector under the trigger's.
|
|
17
|
+
this._menuSide = inject(MENU_SIDE, { optional: true });
|
|
18
|
+
this._state = signal('open', ...(ngDevMode ? [{ debugName: "_state" }] : /* istanbul ignore next */ []));
|
|
19
|
+
this._side = signal(this._menuSide?.side() ?? 'bottom', ...(ngDevMode ? [{ debugName: "_side" }] : /* istanbul ignore next */ []));
|
|
20
|
+
this.sideOffset = input(1, { ...(ngDevMode ? { debugName: "sideOffset" } : /* istanbul ignore next */ {}), transform: numberAttribute });
|
|
21
|
+
classes(() => 'motion-safe:data-open:animate-in motion-safe:data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground min-w-32 rounded-lg p-1 shadow-md ring-1 duration-100 my-[--spacing(var(--side-offset))] overflow-x-hidden overflow-y-auto outline-none');
|
|
22
|
+
this.setSideFromTransformOrigin();
|
|
23
|
+
// this is a best effort, but does not seem to work currently
|
|
24
|
+
// TODO: figure out a way for us to know the host is about to be closed. might not be possible with CDK
|
|
25
|
+
this._host.closed.pipe(takeUntilDestroyed()).subscribe(() => this._state.set('closed'));
|
|
26
|
+
}
|
|
27
|
+
setSideFromTransformOrigin() {
|
|
28
|
+
const side = this._menuSide?.side() ?? 'bottom';
|
|
29
|
+
// CDK sets transform-origin on this element synchronously on attach; read it next tick and derive side
|
|
30
|
+
setTimeout(() => {
|
|
31
|
+
this._side.set(deriveMenuSideFromTransformOrigin(this._elementRef.nativeElement.style.transformOrigin, side));
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: HlmDropdownMenu, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
35
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.8", type: HlmDropdownMenu, isStandalone: true, selector: "[hlmDropdownMenu],hlm-dropdown-menu", inputs: { sideOffset: { classPropertyName: "sideOffset", publicName: "sideOffset", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "dropdown-menu" }, properties: { "attr.data-state": "_state()", "attr.data-side": "_side()", "style.--side-offset": "sideOffset()" } }, hostDirectives: [{ directive: i1.CdkMenu }], ngImport: i0 }); }
|
|
36
|
+
}
|
|
37
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: HlmDropdownMenu, decorators: [{
|
|
38
|
+
type: Directive,
|
|
39
|
+
args: [{
|
|
40
|
+
selector: '[hlmDropdownMenu],hlm-dropdown-menu',
|
|
41
|
+
hostDirectives: [CdkMenu],
|
|
42
|
+
host: {
|
|
43
|
+
'data-slot': 'dropdown-menu',
|
|
44
|
+
'[attr.data-state]': '_state()',
|
|
45
|
+
'[attr.data-side]': '_side()',
|
|
46
|
+
'[style.--side-offset]': 'sideOffset()',
|
|
47
|
+
},
|
|
48
|
+
}]
|
|
49
|
+
}], ctorParameters: () => [], propDecorators: { sideOffset: [{ type: i0.Input, args: [{ isSignal: true, alias: "sideOffset", required: false }] }] } });
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* @internal
|
|
53
|
+
* Moves DOM focus to the hovered menu item. CDK menus only move focus with the keyboard, so on a pointer
|
|
54
|
+
* the highlight would otherwise stay on the last keyboard-focused item (leaving two rows highlighted) and,
|
|
55
|
+
* when a submenu closes, focus would fall to <body>, the menu stack would report no focus, and the whole
|
|
56
|
+
* dropdown would collapse. Following the pointer with focus (Radix/shadcn behaviour) keeps a single
|
|
57
|
+
* highlight and keeps focus inside the menu stack. setActiveMenuItem also syncs the key manager so keyboard
|
|
58
|
+
* navigation continues from the hovered item.
|
|
59
|
+
*
|
|
60
|
+
* Applied as a host directive on every dropdown item type (item, checkbox, radio, sub-trigger).
|
|
61
|
+
*/
|
|
62
|
+
class HlmDropdownMenuFocusOnHover {
|
|
63
|
+
constructor() {
|
|
64
|
+
this._cdkMenuItem = inject(CdkMenuItem, { self: true });
|
|
65
|
+
this._parentMenu = inject(CdkMenu, { optional: true });
|
|
66
|
+
this._inputModality = inject(InputModalityDetector);
|
|
67
|
+
}
|
|
68
|
+
_focusOnHover() {
|
|
69
|
+
// Only skip synthetic hovers from touch taps; every real hover (mouse, or keyboard-then-hover,
|
|
70
|
+
// which leaves the modality as 'keyboard') should move focus to keep a single highlight.
|
|
71
|
+
if (this._inputModality.mostRecentModality === 'touch' || this._cdkMenuItem.disabled) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
this._parentMenu?.setActiveMenuItem(this._cdkMenuItem);
|
|
75
|
+
}
|
|
76
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: HlmDropdownMenuFocusOnHover, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
77
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.8", type: HlmDropdownMenuFocusOnHover, isStandalone: true, selector: "[hlmDropdownMenuFocusOnHover]", host: { listeners: { "mouseenter": "_focusOnHover()" } }, ngImport: i0 }); }
|
|
78
|
+
}
|
|
79
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: HlmDropdownMenuFocusOnHover, decorators: [{
|
|
80
|
+
type: Directive,
|
|
81
|
+
args: [{
|
|
82
|
+
selector: '[hlmDropdownMenuFocusOnHover]',
|
|
83
|
+
host: {
|
|
84
|
+
'(mouseenter)': '_focusOnHover()',
|
|
85
|
+
},
|
|
86
|
+
}]
|
|
87
|
+
}] });
|
|
88
|
+
|
|
89
|
+
/** @internal. Use HlmDropdownMenuCheckbox instead. */
|
|
90
|
+
class HlmDropdownMenuCheckboxCdk extends CdkMenuItemCheckbox {
|
|
91
|
+
constructor() {
|
|
92
|
+
super(...arguments);
|
|
93
|
+
this.keepOpen = input(true, { ...(ngDevMode ? { debugName: "keepOpen" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
94
|
+
}
|
|
95
|
+
trigger(options) {
|
|
96
|
+
super.trigger({ ...options, keepOpen: this.keepOpen() });
|
|
97
|
+
}
|
|
98
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: HlmDropdownMenuCheckboxCdk, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
99
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.8", type: HlmDropdownMenuCheckboxCdk, isStandalone: true, selector: "[hlmDropdownMenuCheckboxCdk]", inputs: { keepOpen: { classPropertyName: "keepOpen", publicName: "keepOpen", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
|
|
100
|
+
{ provide: CdkMenuItemCheckbox, useExisting: HlmDropdownMenuCheckboxCdk },
|
|
101
|
+
{ provide: CdkMenuItemSelectable, useExisting: HlmDropdownMenuCheckboxCdk },
|
|
102
|
+
{ provide: CdkMenuItem, useExisting: CdkMenuItemSelectable },
|
|
103
|
+
], usesInheritance: true, ngImport: i0 }); }
|
|
104
|
+
}
|
|
105
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: HlmDropdownMenuCheckboxCdk, decorators: [{
|
|
106
|
+
type: Directive,
|
|
107
|
+
args: [{
|
|
108
|
+
selector: '[hlmDropdownMenuCheckboxCdk]',
|
|
109
|
+
providers: [
|
|
110
|
+
{ provide: CdkMenuItemCheckbox, useExisting: HlmDropdownMenuCheckboxCdk },
|
|
111
|
+
{ provide: CdkMenuItemSelectable, useExisting: HlmDropdownMenuCheckboxCdk },
|
|
112
|
+
{ provide: CdkMenuItem, useExisting: CdkMenuItemSelectable },
|
|
113
|
+
],
|
|
114
|
+
}]
|
|
115
|
+
}], propDecorators: { keepOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "keepOpen", required: false }] }] } });
|
|
116
|
+
class HlmDropdownMenuCheckbox {
|
|
117
|
+
constructor() {
|
|
118
|
+
this._cdkMenuItem = inject(HlmDropdownMenuCheckboxCdk);
|
|
119
|
+
this.inset = input(false, { ...(ngDevMode ? { debugName: "inset" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
120
|
+
classes(() => "hover:bg-accent focus:bg-accent hover:text-accent-foreground focus:text-accent-foreground hover:**:text-accent-foreground focus:**:text-accent-foreground gap-1.5 rounded-md py-1 ps-1.5 pe-8 text-sm data-inset:ps-7 [&_ng-icon:not([class*='text-'])]:text-[length:--spacing(4)] group/dropdown-menu-checkbox relative flex w-full cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_ng-icon]:pointer-events-none [&_ng-icon]:shrink-0");
|
|
121
|
+
}
|
|
122
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: HlmDropdownMenuCheckbox, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
123
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.8", type: HlmDropdownMenuCheckbox, isStandalone: true, selector: "[hlmDropdownMenuCheckbox],[hlmDropdownMenuCheckboxItem]", inputs: { inset: { classPropertyName: "inset", publicName: "inset", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "dropdown-menu-checkbox-item" }, properties: { "attr.data-disabled": "_cdkMenuItem.disabled ? \"\" : null", "attr.data-checked": "_cdkMenuItem.checked ? \"\" : null", "attr.data-inset": "inset() ? \"\" : null" } }, hostDirectives: [{ directive: HlmDropdownMenuCheckboxCdk, inputs: ["cdkMenuItemDisabled", "disabled", "cdkMenuItemChecked", "checked", "keepOpen", "keepOpen"], outputs: ["cdkMenuItemTriggered", "triggered"] }, { directive: HlmDropdownMenuFocusOnHover }], ngImport: i0 }); }
|
|
124
|
+
}
|
|
125
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: HlmDropdownMenuCheckbox, decorators: [{
|
|
126
|
+
type: Directive,
|
|
127
|
+
args: [{
|
|
128
|
+
selector: '[hlmDropdownMenuCheckbox],[hlmDropdownMenuCheckboxItem]',
|
|
129
|
+
hostDirectives: [
|
|
130
|
+
{
|
|
131
|
+
directive: HlmDropdownMenuCheckboxCdk,
|
|
132
|
+
inputs: ['cdkMenuItemDisabled: disabled', 'cdkMenuItemChecked: checked', 'keepOpen'],
|
|
133
|
+
outputs: ['cdkMenuItemTriggered: triggered'],
|
|
134
|
+
},
|
|
135
|
+
HlmDropdownMenuFocusOnHover,
|
|
136
|
+
],
|
|
137
|
+
host: {
|
|
138
|
+
'data-slot': 'dropdown-menu-checkbox-item',
|
|
139
|
+
'[attr.data-disabled]': '_cdkMenuItem.disabled ? "" : null',
|
|
140
|
+
'[attr.data-checked]': '_cdkMenuItem.checked ? "" : null',
|
|
141
|
+
'[attr.data-inset]': 'inset() ? "" : null',
|
|
142
|
+
},
|
|
143
|
+
}]
|
|
144
|
+
}], ctorParameters: () => [], propDecorators: { inset: [{ type: i0.Input, args: [{ isSignal: true, alias: "inset", required: false }] }] } });
|
|
145
|
+
|
|
146
|
+
class HlmDropdownMenuCheckboxIndicator {
|
|
147
|
+
constructor() {
|
|
148
|
+
classes(() => 'absolute end-2 flex items-center justify-center [&_ng-icon]:text-[length:--spacing(4)] pointer-events-none opacity-0 group-data-checked/dropdown-menu-checkbox:opacity-100');
|
|
149
|
+
}
|
|
150
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: HlmDropdownMenuCheckboxIndicator, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
151
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.8", type: HlmDropdownMenuCheckboxIndicator, isStandalone: true, selector: "hlm-dropdown-menu-checkbox-indicator", host: { attributes: { "data-slot": "dropdown-menu-checkbox-item-indicator" } }, providers: [provideIcons({ lucideCheck })], ngImport: i0, template: `
|
|
152
|
+
<ng-icon name="lucideCheck" />
|
|
153
|
+
`, isInline: true, dependencies: [{ kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
154
|
+
}
|
|
155
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: HlmDropdownMenuCheckboxIndicator, decorators: [{
|
|
156
|
+
type: Component,
|
|
157
|
+
args: [{
|
|
158
|
+
selector: 'hlm-dropdown-menu-checkbox-indicator',
|
|
159
|
+
imports: [NgIcon],
|
|
160
|
+
providers: [provideIcons({ lucideCheck })],
|
|
161
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
162
|
+
host: { 'data-slot': 'dropdown-menu-checkbox-item-indicator' },
|
|
163
|
+
template: `
|
|
164
|
+
<ng-icon name="lucideCheck" />
|
|
165
|
+
`,
|
|
166
|
+
}]
|
|
167
|
+
}], ctorParameters: () => [] });
|
|
168
|
+
|
|
169
|
+
class HlmDropdownMenuGroup {
|
|
170
|
+
constructor() {
|
|
171
|
+
classes(() => 'block');
|
|
172
|
+
}
|
|
173
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: HlmDropdownMenuGroup, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
174
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.8", type: HlmDropdownMenuGroup, isStandalone: true, selector: "[hlmDropdownMenuGroup],hlm-dropdown-menu-group", host: { attributes: { "data-slot": "dropdown-menu-group" } }, hostDirectives: [{ directive: i1.CdkMenuGroup }], ngImport: i0 }); }
|
|
175
|
+
}
|
|
176
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: HlmDropdownMenuGroup, decorators: [{
|
|
177
|
+
type: Directive,
|
|
178
|
+
args: [{
|
|
179
|
+
selector: '[hlmDropdownMenuGroup],hlm-dropdown-menu-group',
|
|
180
|
+
hostDirectives: [CdkMenuGroup],
|
|
181
|
+
host: { 'data-slot': 'dropdown-menu-group' },
|
|
182
|
+
}]
|
|
183
|
+
}], ctorParameters: () => [] });
|
|
184
|
+
|
|
185
|
+
class HlmDropdownMenuItem {
|
|
186
|
+
constructor() {
|
|
187
|
+
this._isButton = inject(HOST_TAG_NAME) === 'button';
|
|
188
|
+
this.disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
189
|
+
this.variant = input('default', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
190
|
+
this.inset = input(false, { ...(ngDevMode ? { debugName: "inset" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
191
|
+
classes(() => "hover:bg-accent focus:bg-accent hover:text-accent-foreground focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:hover:bg-destructive/10 data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:hover:bg-destructive/20 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:hover:text-destructive data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[ng-icon]:text-destructive not-data-[variant=destructive]:hover:**:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground gap-1.5 rounded-md px-1.5 py-1 text-sm data-inset:ps-7 [&_ng-icon:not([class*='text-'])]:text-[length:--spacing(4)] group/dropdown-menu-item relative flex w-full cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_ng-icon]:pointer-events-none [&_ng-icon]:shrink-0");
|
|
192
|
+
}
|
|
193
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: HlmDropdownMenuItem, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
194
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.8", type: HlmDropdownMenuItem, isStandalone: true, selector: "[hlmDropdownMenuItem],hlm-dropdown-menu-item", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, inset: { classPropertyName: "inset", publicName: "inset", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "dropdown-menu-item" }, properties: { "attr.disabled": "_isButton && disabled() ? \"\" : null", "attr.data-disabled": "disabled() ? \"\" : null", "attr.data-variant": "variant()", "attr.data-inset": "inset() ? \"\" : null" } }, hostDirectives: [{ directive: i1.CdkMenuItem, inputs: ["cdkMenuItemDisabled", "disabled"], outputs: ["cdkMenuItemTriggered", "triggered"] }, { directive: HlmDropdownMenuFocusOnHover }], ngImport: i0 }); }
|
|
195
|
+
}
|
|
196
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: HlmDropdownMenuItem, decorators: [{
|
|
197
|
+
type: Directive,
|
|
198
|
+
args: [{
|
|
199
|
+
selector: '[hlmDropdownMenuItem],hlm-dropdown-menu-item',
|
|
200
|
+
hostDirectives: [
|
|
201
|
+
{
|
|
202
|
+
directive: CdkMenuItem,
|
|
203
|
+
inputs: ['cdkMenuItemDisabled: disabled'],
|
|
204
|
+
outputs: ['cdkMenuItemTriggered: triggered'],
|
|
205
|
+
},
|
|
206
|
+
HlmDropdownMenuFocusOnHover,
|
|
207
|
+
],
|
|
208
|
+
host: {
|
|
209
|
+
'data-slot': 'dropdown-menu-item',
|
|
210
|
+
'[attr.disabled]': '_isButton && disabled() ? "" : null',
|
|
211
|
+
'[attr.data-disabled]': 'disabled() ? "" : null',
|
|
212
|
+
'[attr.data-variant]': 'variant()',
|
|
213
|
+
'[attr.data-inset]': 'inset() ? "" : null',
|
|
214
|
+
},
|
|
215
|
+
}]
|
|
216
|
+
}], ctorParameters: () => [], propDecorators: { disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], inset: [{ type: i0.Input, args: [{ isSignal: true, alias: "inset", required: false }] }] } });
|
|
217
|
+
|
|
218
|
+
class HlmDropdownMenuItemSubIndicator {
|
|
219
|
+
constructor() {
|
|
220
|
+
classes(() => 'ms-auto flex items-center justify-center');
|
|
221
|
+
}
|
|
222
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: HlmDropdownMenuItemSubIndicator, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
223
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.8", type: HlmDropdownMenuItemSubIndicator, isStandalone: true, selector: "hlm-dropdown-menu-item-sub-indicator", providers: [provideIcons({ lucideChevronRight })], ngImport: i0, template: `
|
|
224
|
+
<ng-icon name="lucideChevronRight" class="text-[length:--spacing(4)] rtl:rotate-180" />
|
|
225
|
+
`, isInline: true, dependencies: [{ kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
226
|
+
}
|
|
227
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: HlmDropdownMenuItemSubIndicator, decorators: [{
|
|
228
|
+
type: Component,
|
|
229
|
+
args: [{
|
|
230
|
+
selector: 'hlm-dropdown-menu-item-sub-indicator',
|
|
231
|
+
imports: [NgIcon],
|
|
232
|
+
providers: [provideIcons({ lucideChevronRight })],
|
|
233
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
234
|
+
template: `
|
|
235
|
+
<ng-icon name="lucideChevronRight" class="text-[length:--spacing(4)] rtl:rotate-180" />
|
|
236
|
+
`,
|
|
237
|
+
}]
|
|
238
|
+
}], ctorParameters: () => [] });
|
|
239
|
+
|
|
240
|
+
class HlmDropdownMenuLabel {
|
|
241
|
+
constructor() {
|
|
242
|
+
this.inset = input(false, { ...(ngDevMode ? { debugName: "inset" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
243
|
+
classes(() => 'text-muted-foreground px-1.5 py-1 text-xs font-medium data-inset:ps-7 block');
|
|
244
|
+
}
|
|
245
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: HlmDropdownMenuLabel, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
246
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.8", type: HlmDropdownMenuLabel, isStandalone: true, selector: "[hlmDropdownMenuLabel],hlm-dropdown-menu-label", inputs: { inset: { classPropertyName: "inset", publicName: "inset", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "dropdown-menu-label" }, properties: { "attr.data-inset": "inset() ? \"\" : null" } }, ngImport: i0 }); }
|
|
247
|
+
}
|
|
248
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: HlmDropdownMenuLabel, decorators: [{
|
|
249
|
+
type: Directive,
|
|
250
|
+
args: [{
|
|
251
|
+
selector: '[hlmDropdownMenuLabel],hlm-dropdown-menu-label',
|
|
252
|
+
host: {
|
|
253
|
+
'data-slot': 'dropdown-menu-label',
|
|
254
|
+
'[attr.data-inset]': 'inset() ? "" : null',
|
|
255
|
+
},
|
|
256
|
+
}]
|
|
257
|
+
}], ctorParameters: () => [], propDecorators: { inset: [{ type: i0.Input, args: [{ isSignal: true, alias: "inset", required: false }] }] } });
|
|
258
|
+
|
|
259
|
+
/** @internal. Use HlmDropdownMenuRadio instead. */
|
|
260
|
+
class HlmDropdownMenuRadioCdk extends CdkMenuItemRadio {
|
|
261
|
+
constructor() {
|
|
262
|
+
super(...arguments);
|
|
263
|
+
this.keepOpen = input(true, { ...(ngDevMode ? { debugName: "keepOpen" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
264
|
+
}
|
|
265
|
+
trigger(options) {
|
|
266
|
+
super.trigger({ ...options, keepOpen: this.keepOpen() });
|
|
267
|
+
}
|
|
268
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: HlmDropdownMenuRadioCdk, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
269
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.8", type: HlmDropdownMenuRadioCdk, isStandalone: true, selector: "[hlmDropdownMenuRadioCdk]", inputs: { keepOpen: { classPropertyName: "keepOpen", publicName: "keepOpen", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
|
|
270
|
+
{ provide: CdkMenuItemRadio, useExisting: HlmDropdownMenuRadioCdk },
|
|
271
|
+
{ provide: CdkMenuItemSelectable, useExisting: HlmDropdownMenuRadioCdk },
|
|
272
|
+
{ provide: CdkMenuItem, useExisting: CdkMenuItemSelectable },
|
|
273
|
+
], usesInheritance: true, ngImport: i0 }); }
|
|
274
|
+
}
|
|
275
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: HlmDropdownMenuRadioCdk, decorators: [{
|
|
276
|
+
type: Directive,
|
|
277
|
+
args: [{
|
|
278
|
+
selector: '[hlmDropdownMenuRadioCdk]',
|
|
279
|
+
providers: [
|
|
280
|
+
{ provide: CdkMenuItemRadio, useExisting: HlmDropdownMenuRadioCdk },
|
|
281
|
+
{ provide: CdkMenuItemSelectable, useExisting: HlmDropdownMenuRadioCdk },
|
|
282
|
+
{ provide: CdkMenuItem, useExisting: CdkMenuItemSelectable },
|
|
283
|
+
],
|
|
284
|
+
}]
|
|
285
|
+
}], propDecorators: { keepOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "keepOpen", required: false }] }] } });
|
|
286
|
+
class HlmDropdownMenuRadio {
|
|
287
|
+
constructor() {
|
|
288
|
+
this._cdkMenuItem = inject(HlmDropdownMenuRadioCdk);
|
|
289
|
+
classes(() => "hover:bg-accent focus:bg-accent hover:text-accent-foreground focus:text-accent-foreground hover:**:text-accent-foreground focus:**:text-accent-foreground gap-1.5 rounded-md py-1 ps-1.5 pe-8 text-sm data-inset:ps-7 [&_ng-icon:not([class*='text-'])]:text-[length:--spacing(4)] group/dropdown-menu-radio relative flex w-full cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_ng-icon]:pointer-events-none [&_ng-icon]:shrink-0");
|
|
290
|
+
}
|
|
291
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: HlmDropdownMenuRadio, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
292
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.8", type: HlmDropdownMenuRadio, isStandalone: true, selector: "[hlmDropdownMenuRadio]", host: { attributes: { "data-slot": "dropdown-menu-radio-item" }, properties: { "attr.data-disabled": "_cdkMenuItem.disabled ? \"\" : null", "attr.data-checked": "_cdkMenuItem.checked ? \"\" : null" } }, hostDirectives: [{ directive: HlmDropdownMenuRadioCdk, inputs: ["cdkMenuItemDisabled", "disabled", "cdkMenuItemChecked", "checked", "keepOpen", "keepOpen"], outputs: ["cdkMenuItemTriggered", "triggered"] }, { directive: HlmDropdownMenuFocusOnHover }], ngImport: i0 }); }
|
|
293
|
+
}
|
|
294
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: HlmDropdownMenuRadio, decorators: [{
|
|
295
|
+
type: Directive,
|
|
296
|
+
args: [{
|
|
297
|
+
selector: '[hlmDropdownMenuRadio]',
|
|
298
|
+
hostDirectives: [
|
|
299
|
+
{
|
|
300
|
+
directive: HlmDropdownMenuRadioCdk,
|
|
301
|
+
inputs: ['cdkMenuItemDisabled: disabled', 'cdkMenuItemChecked: checked', 'keepOpen'],
|
|
302
|
+
outputs: ['cdkMenuItemTriggered: triggered'],
|
|
303
|
+
},
|
|
304
|
+
HlmDropdownMenuFocusOnHover,
|
|
305
|
+
],
|
|
306
|
+
host: {
|
|
307
|
+
'data-slot': 'dropdown-menu-radio-item',
|
|
308
|
+
'[attr.data-disabled]': '_cdkMenuItem.disabled ? "" : null',
|
|
309
|
+
'[attr.data-checked]': '_cdkMenuItem.checked ? "" : null',
|
|
310
|
+
},
|
|
311
|
+
}]
|
|
312
|
+
}], ctorParameters: () => [] });
|
|
313
|
+
|
|
314
|
+
class HlmDropdownMenuRadioIndicator {
|
|
315
|
+
constructor() {
|
|
316
|
+
classes(() => 'absolute end-2 flex items-center justify-center [&_ng-icon]:text-[length:--spacing(4)] pointer-events-none opacity-0 group-data-checked/dropdown-menu-radio:opacity-100');
|
|
317
|
+
}
|
|
318
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: HlmDropdownMenuRadioIndicator, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
319
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.8", type: HlmDropdownMenuRadioIndicator, isStandalone: true, selector: "hlm-dropdown-menu-radio-indicator", host: { attributes: { "data-slot": "dropdown-menu-radio-item-indicator" } }, providers: [provideIcons({ lucideCheck })], ngImport: i0, template: `
|
|
320
|
+
<ng-icon name="lucideCheck" />
|
|
321
|
+
`, isInline: true, dependencies: [{ kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
322
|
+
}
|
|
323
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: HlmDropdownMenuRadioIndicator, decorators: [{
|
|
324
|
+
type: Component,
|
|
325
|
+
args: [{
|
|
326
|
+
selector: 'hlm-dropdown-menu-radio-indicator',
|
|
327
|
+
imports: [NgIcon],
|
|
328
|
+
providers: [provideIcons({ lucideCheck })],
|
|
329
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
330
|
+
host: { 'data-slot': 'dropdown-menu-radio-item-indicator' },
|
|
331
|
+
template: `
|
|
332
|
+
<ng-icon name="lucideCheck" />
|
|
333
|
+
`,
|
|
334
|
+
}]
|
|
335
|
+
}], ctorParameters: () => [] });
|
|
336
|
+
|
|
337
|
+
class HlmDropdownMenuSeparator {
|
|
338
|
+
constructor() {
|
|
339
|
+
classes(() => 'bg-border -mx-1 my-1 h-px block');
|
|
340
|
+
}
|
|
341
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: HlmDropdownMenuSeparator, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
342
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.8", type: HlmDropdownMenuSeparator, isStandalone: true, selector: "[hlmDropdownMenuSeparator],hlm-dropdown-menu-separator", host: { attributes: { "data-slot": "dropdown-menu-separator" } }, ngImport: i0 }); }
|
|
343
|
+
}
|
|
344
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: HlmDropdownMenuSeparator, decorators: [{
|
|
345
|
+
type: Directive,
|
|
346
|
+
args: [{
|
|
347
|
+
selector: '[hlmDropdownMenuSeparator],hlm-dropdown-menu-separator',
|
|
348
|
+
host: { 'data-slot': 'dropdown-menu-separator' },
|
|
349
|
+
}]
|
|
350
|
+
}], ctorParameters: () => [] });
|
|
351
|
+
|
|
352
|
+
class HlmDropdownMenuShortcut {
|
|
353
|
+
constructor() {
|
|
354
|
+
classes(() => 'text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground ms-auto text-xs tracking-widest');
|
|
355
|
+
}
|
|
356
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: HlmDropdownMenuShortcut, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
357
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.8", type: HlmDropdownMenuShortcut, isStandalone: true, selector: "[hlmDropdownMenuShortcut],hlm-dropdown-menu-shortcut", host: { attributes: { "data-slot": "dropdown-menu-shortcut" } }, ngImport: i0 }); }
|
|
358
|
+
}
|
|
359
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: HlmDropdownMenuShortcut, decorators: [{
|
|
360
|
+
type: Directive,
|
|
361
|
+
args: [{
|
|
362
|
+
selector: '[hlmDropdownMenuShortcut],hlm-dropdown-menu-shortcut',
|
|
363
|
+
host: { 'data-slot': 'dropdown-menu-shortcut' },
|
|
364
|
+
}]
|
|
365
|
+
}], ctorParameters: () => [] });
|
|
366
|
+
|
|
367
|
+
class HlmDropdownMenuSub {
|
|
368
|
+
constructor() {
|
|
369
|
+
this._host = inject(CdkMenu);
|
|
370
|
+
this._elementRef = inject((ElementRef));
|
|
371
|
+
// The sub-trigger provides its configured side; CDK parents this content's injector under it.
|
|
372
|
+
this._menuSide = inject(MENU_SIDE, { optional: true });
|
|
373
|
+
this._state = signal('open', ...(ngDevMode ? [{ debugName: "_state" }] : /* istanbul ignore next */ []));
|
|
374
|
+
this._side = signal(this._menuSide?.side() ?? 'right', ...(ngDevMode ? [{ debugName: "_side" }] : /* istanbul ignore next */ []));
|
|
375
|
+
this.setSideFromTransformOrigin();
|
|
376
|
+
// this is a best effort, but does not seem to work currently
|
|
377
|
+
// TODO: figure out a way for us to know the host is about to be closed. might not be possible with CDK
|
|
378
|
+
this._host.closed.pipe(takeUntilDestroyed()).subscribe(() => this._state.set('closed'));
|
|
379
|
+
classes(() => 'motion-safe:data-open:animate-in motion-safe:data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground min-w-24 rounded-lg p-1 shadow-lg ring-1 duration-100 w-auto');
|
|
380
|
+
}
|
|
381
|
+
setSideFromTransformOrigin() {
|
|
382
|
+
const side = this._menuSide?.side() ?? 'right';
|
|
383
|
+
// CDK sets transform-origin on this element synchronously on attach; read it next tick and derive side
|
|
384
|
+
setTimeout(() => {
|
|
385
|
+
this._side.set(deriveMenuSideFromTransformOrigin(this._elementRef.nativeElement.style.transformOrigin, side));
|
|
386
|
+
});
|
|
387
|
+
}
|
|
388
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: HlmDropdownMenuSub, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
389
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.8", type: HlmDropdownMenuSub, isStandalone: true, selector: "[hlmDropdownMenuSub],hlm-dropdown-menu-sub", host: { attributes: { "data-slot": "dropdown-menu-sub" }, properties: { "attr.data-state": "_state()", "attr.data-side": "_side()" } }, hostDirectives: [{ directive: i1.CdkMenu }], ngImport: i0 }); }
|
|
390
|
+
}
|
|
391
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: HlmDropdownMenuSub, decorators: [{
|
|
392
|
+
type: Directive,
|
|
393
|
+
args: [{
|
|
394
|
+
selector: '[hlmDropdownMenuSub],hlm-dropdown-menu-sub',
|
|
395
|
+
hostDirectives: [CdkMenu],
|
|
396
|
+
host: {
|
|
397
|
+
'data-slot': 'dropdown-menu-sub',
|
|
398
|
+
'[attr.data-state]': '_state()',
|
|
399
|
+
'[attr.data-side]': '_side()',
|
|
400
|
+
},
|
|
401
|
+
}]
|
|
402
|
+
}], ctorParameters: () => [] });
|
|
403
|
+
|
|
404
|
+
const defaultConfig = {
|
|
405
|
+
align: 'start',
|
|
406
|
+
side: 'bottom',
|
|
407
|
+
};
|
|
408
|
+
const HlmDropdownMenuConfigToken = new InjectionToken('HlmDropdownMenuConfig');
|
|
409
|
+
function provideHlmDropdownMenuConfig(config) {
|
|
410
|
+
return { provide: HlmDropdownMenuConfigToken, useValue: { ...defaultConfig, ...config } };
|
|
411
|
+
}
|
|
412
|
+
function injectHlmDropdownMenuConfig() {
|
|
413
|
+
return inject(HlmDropdownMenuConfigToken, { optional: true }) ?? defaultConfig;
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
class HlmDropdownMenuSubTrigger {
|
|
417
|
+
constructor() {
|
|
418
|
+
this._cdkTrigger = inject(CdkMenuTrigger, { host: true });
|
|
419
|
+
this._config = injectHlmDropdownMenuConfig();
|
|
420
|
+
this.align = input(this._config.align, ...(ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []));
|
|
421
|
+
this.side = input(this._config.side, ...(ngDevMode ? [{ debugName: "side" }] : /* istanbul ignore next */ []));
|
|
422
|
+
this._menuPosition = computed(() => createMenuPosition(this.align(), this.side()), ...(ngDevMode ? [{ debugName: "_menuPosition" }] : /* istanbul ignore next */ []));
|
|
423
|
+
// CDK sets transform-origin on the submenu content from the resolved position; the content reads it
|
|
424
|
+
// to animate from the anchored corner and to derive its data-side. Cast tolerates @angular/cdk < 21.2
|
|
425
|
+
// (we still support >=21.0), where the property is absent and the assignment is a harmless no-op.
|
|
426
|
+
this._cdkTrigger.transformOriginSelector =
|
|
427
|
+
'[data-slot="dropdown-menu-sub"]';
|
|
428
|
+
effect(() => {
|
|
429
|
+
this._cdkTrigger.menuPosition = this._menuPosition();
|
|
430
|
+
});
|
|
431
|
+
classes(() => 'aria-expanded:bg-accent aria-expanded:text-accent-foreground');
|
|
432
|
+
}
|
|
433
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: HlmDropdownMenuSubTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
434
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.8", type: HlmDropdownMenuSubTrigger, isStandalone: true, selector: "[hlmDropdownMenuSubTrigger]", inputs: { align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, side: { classPropertyName: "side", publicName: "side", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "dropdown-menu-sub-trigger" } }, providers: [{ provide: MENU_SIDE, useExisting: forwardRef(() => HlmDropdownMenuSubTrigger) }], hostDirectives: [{ directive: i1.CdkMenuTrigger, inputs: ["cdkMenuTriggerFor", "hlmDropdownMenuSubTrigger", "cdkMenuTriggerData", "hlmDropdownMenuTriggerData"], outputs: ["cdkMenuOpened", "hlmDropdownMenuSubOpened", "cdkMenuClosed", "hlmDropdownMenuSubClosed"] }], ngImport: i0 }); }
|
|
435
|
+
}
|
|
436
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: HlmDropdownMenuSubTrigger, decorators: [{
|
|
437
|
+
type: Directive,
|
|
438
|
+
args: [{
|
|
439
|
+
selector: '[hlmDropdownMenuSubTrigger]',
|
|
440
|
+
providers: [{ provide: MENU_SIDE, useExisting: forwardRef(() => HlmDropdownMenuSubTrigger) }],
|
|
441
|
+
hostDirectives: [
|
|
442
|
+
{
|
|
443
|
+
directive: CdkMenuTrigger,
|
|
444
|
+
inputs: ['cdkMenuTriggerFor: hlmDropdownMenuSubTrigger', 'cdkMenuTriggerData: hlmDropdownMenuTriggerData'],
|
|
445
|
+
outputs: ['cdkMenuOpened: hlmDropdownMenuSubOpened', 'cdkMenuClosed: hlmDropdownMenuSubClosed'],
|
|
446
|
+
},
|
|
447
|
+
],
|
|
448
|
+
host: { 'data-slot': 'dropdown-menu-sub-trigger' },
|
|
449
|
+
}]
|
|
450
|
+
}], ctorParameters: () => [], propDecorators: { align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], side: [{ type: i0.Input, args: [{ isSignal: true, alias: "side", required: false }] }] } });
|
|
451
|
+
|
|
452
|
+
class HlmDropdownMenuTrigger {
|
|
453
|
+
constructor() {
|
|
454
|
+
this._cdkTrigger = inject(CdkMenuTrigger, { host: true });
|
|
455
|
+
this._config = injectHlmDropdownMenuConfig();
|
|
456
|
+
this.align = input(this._config.align, ...(ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []));
|
|
457
|
+
this.side = input(this._config.side, ...(ngDevMode ? [{ debugName: "side" }] : /* istanbul ignore next */ []));
|
|
458
|
+
this._menuPosition = computed(() => createMenuPosition(this.align(), this.side()), ...(ngDevMode ? [{ debugName: "_menuPosition" }] : /* istanbul ignore next */ []));
|
|
459
|
+
// CDK sets transform-origin on the menu content from the resolved position; the content reads it to
|
|
460
|
+
// animate from the anchored corner and to derive its data-side. Cast tolerates @angular/cdk < 21.2
|
|
461
|
+
// (we still support >=21.0), where the property is absent and the assignment is a harmless no-op.
|
|
462
|
+
this._cdkTrigger.transformOriginSelector = '[data-slot="dropdown-menu"]';
|
|
463
|
+
effect(() => {
|
|
464
|
+
this._cdkTrigger.menuPosition = this._menuPosition();
|
|
465
|
+
});
|
|
466
|
+
}
|
|
467
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: HlmDropdownMenuTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
468
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.8", type: HlmDropdownMenuTrigger, isStandalone: true, selector: "[hlmDropdownMenuTrigger]", inputs: { align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, side: { classPropertyName: "side", publicName: "side", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "dropdown-menu-trigger" } }, providers: [{ provide: MENU_SIDE, useExisting: forwardRef(() => HlmDropdownMenuTrigger) }], hostDirectives: [{ directive: i1.CdkMenuTrigger, inputs: ["cdkMenuTriggerFor", "hlmDropdownMenuTrigger", "cdkMenuTriggerData", "hlmDropdownMenuTriggerData"], outputs: ["cdkMenuOpened", "hlmDropdownMenuOpened", "cdkMenuClosed", "hlmDropdownMenuClosed"] }], ngImport: i0 }); }
|
|
469
|
+
}
|
|
470
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: HlmDropdownMenuTrigger, decorators: [{
|
|
471
|
+
type: Directive,
|
|
472
|
+
args: [{
|
|
473
|
+
selector: '[hlmDropdownMenuTrigger]',
|
|
474
|
+
providers: [{ provide: MENU_SIDE, useExisting: forwardRef(() => HlmDropdownMenuTrigger) }],
|
|
475
|
+
hostDirectives: [
|
|
476
|
+
{
|
|
477
|
+
directive: CdkMenuTrigger,
|
|
478
|
+
inputs: ['cdkMenuTriggerFor: hlmDropdownMenuTrigger', 'cdkMenuTriggerData: hlmDropdownMenuTriggerData'],
|
|
479
|
+
outputs: ['cdkMenuOpened: hlmDropdownMenuOpened', 'cdkMenuClosed: hlmDropdownMenuClosed'],
|
|
480
|
+
},
|
|
481
|
+
],
|
|
482
|
+
host: { 'data-slot': 'dropdown-menu-trigger' },
|
|
483
|
+
}]
|
|
484
|
+
}], ctorParameters: () => [], propDecorators: { align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], side: [{ type: i0.Input, args: [{ isSignal: true, alias: "side", required: false }] }] } });
|
|
485
|
+
|
|
486
|
+
const HlmDropdownMenuImports = [
|
|
487
|
+
HlmDropdownMenu,
|
|
488
|
+
HlmDropdownMenuCheckbox,
|
|
489
|
+
HlmDropdownMenuCheckboxIndicator,
|
|
490
|
+
HlmDropdownMenuGroup,
|
|
491
|
+
HlmDropdownMenuItem,
|
|
492
|
+
HlmDropdownMenuItemSubIndicator,
|
|
493
|
+
HlmDropdownMenuLabel,
|
|
494
|
+
HlmDropdownMenuRadio,
|
|
495
|
+
HlmDropdownMenuRadioIndicator,
|
|
496
|
+
HlmDropdownMenuSeparator,
|
|
497
|
+
HlmDropdownMenuShortcut,
|
|
498
|
+
HlmDropdownMenuSub,
|
|
499
|
+
HlmDropdownMenuSubTrigger,
|
|
500
|
+
HlmDropdownMenuTrigger,
|
|
501
|
+
];
|
|
502
|
+
|
|
503
|
+
/**
|
|
504
|
+
* Generated bundle index. Do not edit.
|
|
505
|
+
*/
|
|
506
|
+
|
|
507
|
+
export { HlmDropdownMenu, HlmDropdownMenuCheckbox, HlmDropdownMenuCheckboxCdk, HlmDropdownMenuCheckboxIndicator, HlmDropdownMenuFocusOnHover, HlmDropdownMenuGroup, HlmDropdownMenuImports, HlmDropdownMenuItem, HlmDropdownMenuItemSubIndicator, HlmDropdownMenuLabel, HlmDropdownMenuRadio, HlmDropdownMenuRadioCdk, HlmDropdownMenuRadioIndicator, HlmDropdownMenuSeparator, HlmDropdownMenuShortcut, HlmDropdownMenuSub, HlmDropdownMenuSubTrigger, HlmDropdownMenuTrigger, injectHlmDropdownMenuConfig, provideHlmDropdownMenuConfig };
|
|
508
|
+
//# sourceMappingURL=yukit-web-helm-dropdown-menu.mjs.map
|