@cdevhub/ngx-tw 0.2.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +264 -49
- package/fesm2022/cdevhub-ngx-tw-accordion.mjs +11 -7
- package/fesm2022/cdevhub-ngx-tw-accordion.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-alert.mjs +43 -29
- package/fesm2022/cdevhub-ngx-tw-alert.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-aspect-ratio.mjs +103 -0
- package/fesm2022/cdevhub-ngx-tw-aspect-ratio.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-avatar.mjs +56 -31
- package/fesm2022/cdevhub-ngx-tw-avatar.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-badge.mjs +61 -35
- package/fesm2022/cdevhub-ngx-tw-badge.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-breadcrumbs.mjs +154 -93
- package/fesm2022/cdevhub-ngx-tw-breadcrumbs.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-button.mjs +24 -15
- package/fesm2022/cdevhub-ngx-tw-button.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-calendar-luxon.mjs +3 -3
- package/fesm2022/cdevhub-ngx-tw-calendar-luxon.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-calendar.mjs +408 -215
- package/fesm2022/cdevhub-ngx-tw-calendar.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-card.mjs +33 -24
- package/fesm2022/cdevhub-ngx-tw-card.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-carousel.mjs +144 -79
- package/fesm2022/cdevhub-ngx-tw-carousel.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-checkbox.mjs +99 -47
- package/fesm2022/cdevhub-ngx-tw-checkbox.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-code-block.mjs +34 -20
- package/fesm2022/cdevhub-ngx-tw-code-block.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-collapsible.mjs +46 -29
- package/fesm2022/cdevhub-ngx-tw-collapsible.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-combobox.mjs +195 -110
- package/fesm2022/cdevhub-ngx-tw-combobox.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-command-palette.mjs +140 -73
- package/fesm2022/cdevhub-ngx-tw-command-palette.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-core.mjs +16 -11
- package/fesm2022/cdevhub-ngx-tw-core.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-date-picker.mjs +393 -149
- package/fesm2022/cdevhub-ngx-tw-date-picker.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs +305 -150
- package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-dialog.mjs +56 -43
- package/fesm2022/cdevhub-ngx-tw-dialog.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-empty-state.mjs +51 -33
- package/fesm2022/cdevhub-ngx-tw-empty-state.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-file-upload.mjs +905 -0
- package/fesm2022/cdevhub-ngx-tw-file-upload.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-flip-card.mjs +49 -26
- package/fesm2022/cdevhub-ngx-tw-flip-card.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-form-field.mjs +133 -74
- package/fesm2022/cdevhub-ngx-tw-form-field.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-icon-lucide.mjs +2 -2
- package/fesm2022/cdevhub-ngx-tw-icon-lucide.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-icon.mjs +28 -17
- package/fesm2022/cdevhub-ngx-tw-icon.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-input.mjs +37 -21
- package/fesm2022/cdevhub-ngx-tw-input.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-item.mjs +33 -24
- package/fesm2022/cdevhub-ngx-tw-item.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-menu.mjs +63 -48
- package/fesm2022/cdevhub-ngx-tw-menu.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-number-input.mjs +622 -0
- package/fesm2022/cdevhub-ngx-tw-number-input.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-paginator.mjs +137 -71
- package/fesm2022/cdevhub-ngx-tw-paginator.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-popover.mjs +101 -46
- package/fesm2022/cdevhub-ngx-tw-popover.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-progress-bar.mjs +57 -30
- package/fesm2022/cdevhub-ngx-tw-progress-bar.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-radio.mjs +108 -57
- package/fesm2022/cdevhub-ngx-tw-radio.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-segmented-control.mjs +46 -26
- package/fesm2022/cdevhub-ngx-tw-segmented-control.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-select.mjs +217 -122
- package/fesm2022/cdevhub-ngx-tw-select.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-separator.mjs +21 -12
- package/fesm2022/cdevhub-ngx-tw-separator.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-sheet.mjs +58 -44
- package/fesm2022/cdevhub-ngx-tw-sheet.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-skeleton.mjs +25 -14
- package/fesm2022/cdevhub-ngx-tw-skeleton.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-slider.mjs +155 -79
- package/fesm2022/cdevhub-ngx-tw-slider.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-sort.mjs +44 -25
- package/fesm2022/cdevhub-ngx-tw-sort.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-spinner.mjs +29 -16
- package/fesm2022/cdevhub-ngx-tw-spinner.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-split.mjs +72 -42
- package/fesm2022/cdevhub-ngx-tw-split.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-stat.mjs +107 -64
- package/fesm2022/cdevhub-ngx-tw-stat.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-stepper.mjs +113 -47
- package/fesm2022/cdevhub-ngx-tw-stepper.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-switch.mjs +61 -32
- package/fesm2022/cdevhub-ngx-tw-switch.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-tab-nav.mjs +88 -42
- package/fesm2022/cdevhub-ngx-tw-tab-nav.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-table.mjs +266 -118
- package/fesm2022/cdevhub-ngx-tw-table.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-tabs.mjs +101 -51
- package/fesm2022/cdevhub-ngx-tw-tabs.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-tags-input.mjs +798 -0
- package/fesm2022/cdevhub-ngx-tw-tags-input.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-textarea.mjs +11 -7
- package/fesm2022/cdevhub-ngx-tw-textarea.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-theme.mjs +22 -14
- package/fesm2022/cdevhub-ngx-tw-theme.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-time-picker.mjs +243 -95
- package/fesm2022/cdevhub-ngx-tw-time-picker.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-timeline.mjs +149 -82
- package/fesm2022/cdevhub-ngx-tw-timeline.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-toast.mjs +89 -55
- package/fesm2022/cdevhub-ngx-tw-toast.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-tooltip.mjs +50 -28
- package/fesm2022/cdevhub-ngx-tw-tooltip.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-transfer.mjs +1129 -0
- package/fesm2022/cdevhub-ngx-tw-transfer.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-tree.mjs +554 -0
- package/fesm2022/cdevhub-ngx-tw-tree.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw.mjs +7 -0
- package/fesm2022/cdevhub-ngx-tw.mjs.map +1 -1
- package/package.json +45 -20
- package/theme/index.css +10 -2
- package/types/cdevhub-ngx-tw-aspect-ratio.d.ts +40 -0
- package/types/cdevhub-ngx-tw-calendar.d.ts +39 -8
- package/types/cdevhub-ngx-tw-command-palette.d.ts +7 -0
- package/types/cdevhub-ngx-tw-date-picker.d.ts +36 -10
- package/types/cdevhub-ngx-tw-file-upload.d.ts +250 -0
- package/types/cdevhub-ngx-tw-form-field.d.ts +22 -3
- package/types/cdevhub-ngx-tw-icon-lucide.d.ts +21 -3
- package/types/cdevhub-ngx-tw-number-input.d.ts +130 -0
- package/types/cdevhub-ngx-tw-popover.d.ts +8 -0
- package/types/cdevhub-ngx-tw-stepper.d.ts +30 -2
- package/types/cdevhub-ngx-tw-tab-nav.d.ts +8 -0
- package/types/cdevhub-ngx-tw-table.d.ts +30 -1
- package/types/cdevhub-ngx-tw-tabs.d.ts +8 -0
- package/types/cdevhub-ngx-tw-tags-input.d.ts +217 -0
- package/types/cdevhub-ngx-tw-time-picker.d.ts +31 -6
- package/types/cdevhub-ngx-tw-transfer.d.ts +330 -0
- package/types/cdevhub-ngx-tw-tree.d.ts +189 -0
- package/types/cdevhub-ngx-tw.d.ts +7 -0
|
@@ -104,16 +104,18 @@ const menuItemSubmenuIndicatorVariants = tv({
|
|
|
104
104
|
// ── MenuComponent ──
|
|
105
105
|
class MenuComponent {
|
|
106
106
|
/** Controls item density and padding. Defaults to `'md'`. */
|
|
107
|
-
size = input('md',
|
|
107
|
+
size = input('md', /* @ts-ignore */
|
|
108
|
+
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
108
109
|
/** Accessible label for the menu panel. Use when no visible heading describes the menu (e.g. a kebab-icon trigger). */
|
|
109
110
|
ariaLabel = input(undefined, { ...(ngDevMode ? { debugName: "ariaLabel" } : /* istanbul ignore next */ {}), alias: 'aria-label' });
|
|
110
111
|
/** ID of an element that labels the menu panel. Ignored when `ariaLabel` is set. */
|
|
111
112
|
ariaLabelledBy = input(undefined, { ...(ngDevMode ? { debugName: "ariaLabelledBy" } : /* istanbul ignore next */ {}), alias: 'aria-labelledby' });
|
|
112
|
-
classes = computed(() => menuVariants({ size: this.size() }),
|
|
113
|
-
|
|
114
|
-
static
|
|
113
|
+
classes = computed(() => menuVariants({ size: this.size() }), /* @ts-ignore */
|
|
114
|
+
...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
|
|
115
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
116
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.7", type: MenuComponent, isStandalone: true, selector: "tw-menu", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, ariaLabelledBy: { classPropertyName: "ariaLabelledBy", publicName: "aria-labelledby", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "attr.aria-label": "ariaLabel() ?? null", "attr.aria-labelledby": "ariaLabel() ? null : (ariaLabelledBy() ?? null)", "animate.enter": "\"scale-in\"", "animate.leave": "\"scale-out\"" } }, hostDirectives: [{ directive: i1.CdkMenu, outputs: ["closed", "closed"] }], ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
115
117
|
}
|
|
116
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
118
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MenuComponent, decorators: [{
|
|
117
119
|
type: Component,
|
|
118
120
|
args: [{
|
|
119
121
|
selector: 'tw-menu',
|
|
@@ -136,10 +138,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
136
138
|
}], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }], ariaLabelledBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-labelledby", required: false }] }] } });
|
|
137
139
|
// ── MenuTriggerDirective ──
|
|
138
140
|
class MenuTriggerDirective {
|
|
139
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
140
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
141
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MenuTriggerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
142
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: MenuTriggerDirective, isStandalone: true, selector: "[twMenuTrigger]", hostDirectives: [{ directive: i1.CdkMenuTrigger, inputs: ["cdkMenuTriggerFor", "twMenuTrigger", "cdkMenuPosition", "position", "cdkMenuTriggerData", "data"], outputs: ["cdkMenuOpened", "opened", "cdkMenuClosed", "closed"] }], ngImport: i0 });
|
|
141
143
|
}
|
|
142
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
144
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MenuTriggerDirective, decorators: [{
|
|
143
145
|
type: Directive,
|
|
144
146
|
args: [{
|
|
145
147
|
selector: '[twMenuTrigger]',
|
|
@@ -161,10 +163,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
161
163
|
}] });
|
|
162
164
|
// ── ContextMenuTriggerDirective ──
|
|
163
165
|
class ContextMenuTriggerDirective {
|
|
164
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
165
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
166
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ContextMenuTriggerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
167
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: ContextMenuTriggerDirective, isStandalone: true, selector: "[twContextMenuTrigger]", hostDirectives: [{ directive: i1.CdkContextMenuTrigger, inputs: ["cdkContextMenuTriggerFor", "twContextMenuTrigger", "cdkContextMenuDisabled", "disabled", "cdkContextMenuPosition", "position", "cdkContextMenuTriggerData", "data"], outputs: ["cdkContextMenuOpened", "opened", "cdkContextMenuClosed", "closed"] }], ngImport: i0 });
|
|
166
168
|
}
|
|
167
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
169
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ContextMenuTriggerDirective, decorators: [{
|
|
168
170
|
type: Directive,
|
|
169
171
|
args: [{
|
|
170
172
|
selector: '[twContextMenuTrigger]',
|
|
@@ -192,9 +194,11 @@ class MenuItemDirective {
|
|
|
192
194
|
* base `text-fg` styling at full prominence; `'neutral'` (the explicit muted
|
|
193
195
|
* variant) is a distinct value with `text-fg-muted` + `bg-surface-muted` hovers.
|
|
194
196
|
*/
|
|
195
|
-
color = input(undefined,
|
|
197
|
+
color = input(undefined, /* @ts-ignore */
|
|
198
|
+
...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
|
|
196
199
|
/** Whether this item is disabled. Defaults to `false`. */
|
|
197
|
-
disabled = input(false,
|
|
200
|
+
disabled = input(false, /* @ts-ignore */
|
|
201
|
+
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
198
202
|
menu = inject(MenuComponent, { optional: true });
|
|
199
203
|
cdkItem = inject(CdkMenuItem);
|
|
200
204
|
constructor() {
|
|
@@ -208,11 +212,12 @@ class MenuItemDirective {
|
|
|
208
212
|
size: this.menu?.size() ?? 'md',
|
|
209
213
|
color: this.color(),
|
|
210
214
|
disabled: this.disabled(),
|
|
211
|
-
}),
|
|
212
|
-
|
|
213
|
-
static
|
|
215
|
+
}), /* @ts-ignore */
|
|
216
|
+
...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
|
|
217
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MenuItemDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
218
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: MenuItemDirective, isStandalone: true, selector: "[twMenuItem]", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, hostDirectives: [{ directive: i1.CdkMenuItem, outputs: ["cdkMenuItemTriggered", "triggered"] }], ngImport: i0 });
|
|
214
219
|
}
|
|
215
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
220
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MenuItemDirective, decorators: [{
|
|
216
221
|
type: Directive,
|
|
217
222
|
args: [{
|
|
218
223
|
selector: '[twMenuItem]',
|
|
@@ -230,12 +235,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
230
235
|
// ── MenuItemCheckboxComponent ──
|
|
231
236
|
class MenuItemCheckboxComponent {
|
|
232
237
|
/** Whether this item is disabled. Defaults to `false`. */
|
|
233
|
-
disabled = input(false,
|
|
238
|
+
disabled = input(false, /* @ts-ignore */
|
|
239
|
+
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
234
240
|
/** Fires when the item is activated, carrying the new `checked` value after CDK toggles it. */
|
|
235
241
|
checkedChange = output();
|
|
236
242
|
cdkCheckbox = inject(CdkMenuItemCheckbox);
|
|
237
243
|
menu = inject(MenuComponent, { optional: true });
|
|
238
|
-
resolvedSize = computed(() => this.menu?.size() ?? 'md',
|
|
244
|
+
resolvedSize = computed(() => this.menu?.size() ?? 'md', /* @ts-ignore */
|
|
245
|
+
...(ngDevMode ? [{ debugName: "resolvedSize" }] : /* istanbul ignore next */ []));
|
|
239
246
|
constructor() {
|
|
240
247
|
effect(() => {
|
|
241
248
|
this.cdkCheckbox.disabled = this.disabled();
|
|
@@ -248,10 +255,12 @@ class MenuItemCheckboxComponent {
|
|
|
248
255
|
classes = computed(() => menuItemVariants({
|
|
249
256
|
size: this.resolvedSize(),
|
|
250
257
|
disabled: this.disabled(),
|
|
251
|
-
}),
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
258
|
+
}), /* @ts-ignore */
|
|
259
|
+
...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
|
|
260
|
+
indicatorClasses = computed(() => menuItemIndicatorVariants({ size: this.resolvedSize() }), /* @ts-ignore */
|
|
261
|
+
...(ngDevMode ? [{ debugName: "indicatorClasses" }] : /* istanbul ignore next */ []));
|
|
262
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MenuItemCheckboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
263
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MenuItemCheckboxComponent, isStandalone: true, selector: "[twMenuItemCheckbox]", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { checkedChange: "checkedChange" }, host: { properties: { "class": "classes()" } }, hostDirectives: [{ directive: i1.CdkMenuItemCheckbox, inputs: ["cdkMenuItemChecked", "checked"], outputs: ["cdkMenuItemTriggered", "triggered"] }], ngImport: i0, template: `
|
|
255
264
|
<span [class]="indicatorClasses()">
|
|
256
265
|
@if (cdkCheckbox.checked) {
|
|
257
266
|
<svg class="size-full" viewBox="0 0 20 20" fill="currentColor">
|
|
@@ -262,7 +271,7 @@ class MenuItemCheckboxComponent {
|
|
|
262
271
|
<ng-content />
|
|
263
272
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
264
273
|
}
|
|
265
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
274
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MenuItemCheckboxComponent, decorators: [{
|
|
266
275
|
type: Component,
|
|
267
276
|
args: [{
|
|
268
277
|
selector: '[twMenuItemCheckbox]',
|
|
@@ -292,12 +301,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
292
301
|
// ── MenuItemRadioComponent ──
|
|
293
302
|
class MenuItemRadioComponent {
|
|
294
303
|
/** Whether this item is disabled. Defaults to `false`. */
|
|
295
|
-
disabled = input(false,
|
|
304
|
+
disabled = input(false, /* @ts-ignore */
|
|
305
|
+
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
296
306
|
/** Fires when the item is activated, carrying the new `checked` value after CDK selects it. */
|
|
297
307
|
checkedChange = output();
|
|
298
308
|
cdkRadio = inject(CdkMenuItemRadio);
|
|
299
309
|
menu = inject(MenuComponent, { optional: true });
|
|
300
|
-
resolvedSize = computed(() => this.menu?.size() ?? 'md',
|
|
310
|
+
resolvedSize = computed(() => this.menu?.size() ?? 'md', /* @ts-ignore */
|
|
311
|
+
...(ngDevMode ? [{ debugName: "resolvedSize" }] : /* istanbul ignore next */ []));
|
|
301
312
|
constructor() {
|
|
302
313
|
effect(() => {
|
|
303
314
|
this.cdkRadio.disabled = this.disabled();
|
|
@@ -310,10 +321,12 @@ class MenuItemRadioComponent {
|
|
|
310
321
|
classes = computed(() => menuItemVariants({
|
|
311
322
|
size: this.resolvedSize(),
|
|
312
323
|
disabled: this.disabled(),
|
|
313
|
-
}),
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
324
|
+
}), /* @ts-ignore */
|
|
325
|
+
...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
|
|
326
|
+
indicatorClasses = computed(() => menuItemIndicatorVariants({ size: this.resolvedSize() }), /* @ts-ignore */
|
|
327
|
+
...(ngDevMode ? [{ debugName: "indicatorClasses" }] : /* istanbul ignore next */ []));
|
|
328
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MenuItemRadioComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
329
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MenuItemRadioComponent, isStandalone: true, selector: "[twMenuItemRadio]", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { checkedChange: "checkedChange" }, host: { properties: { "class": "classes()" } }, hostDirectives: [{ directive: i1.CdkMenuItemRadio, inputs: ["cdkMenuItemChecked", "checked"], outputs: ["cdkMenuItemTriggered", "triggered"] }], ngImport: i0, template: `
|
|
317
330
|
<span [class]="indicatorClasses()">
|
|
318
331
|
@if (cdkRadio.checked) {
|
|
319
332
|
<svg class="size-full" viewBox="0 0 20 20" fill="currentColor">
|
|
@@ -324,7 +337,7 @@ class MenuItemRadioComponent {
|
|
|
324
337
|
<ng-content />
|
|
325
338
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
326
339
|
}
|
|
327
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
340
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MenuItemRadioComponent, decorators: [{
|
|
328
341
|
type: Component,
|
|
329
342
|
args: [{
|
|
330
343
|
selector: '[twMenuItemRadio]',
|
|
@@ -353,10 +366,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
353
366
|
}], ctorParameters: () => [], propDecorators: { disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], checkedChange: [{ type: i0.Output, args: ["checkedChange"] }] } });
|
|
354
367
|
// ── MenuGroupDirective ──
|
|
355
368
|
class MenuGroupDirective {
|
|
356
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
357
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
369
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MenuGroupDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
370
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: MenuGroupDirective, isStandalone: true, selector: "[twMenuGroup]", hostDirectives: [{ directive: i1.CdkMenuGroup }], ngImport: i0 });
|
|
358
371
|
}
|
|
359
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
372
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MenuGroupDirective, decorators: [{
|
|
360
373
|
type: Directive,
|
|
361
374
|
args: [{
|
|
362
375
|
selector: '[twMenuGroup]',
|
|
@@ -367,11 +380,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
367
380
|
/** Styles a leading icon inside a menu item. */
|
|
368
381
|
class MenuItemIconDirective {
|
|
369
382
|
menu = inject(MenuComponent, { optional: true });
|
|
370
|
-
classes = computed(() => menuItemIconVariants({ size: this.menu?.size() ?? 'md' }),
|
|
371
|
-
|
|
372
|
-
static
|
|
383
|
+
classes = computed(() => menuItemIconVariants({ size: this.menu?.size() ?? 'md' }), /* @ts-ignore */
|
|
384
|
+
...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
|
|
385
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MenuItemIconDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
386
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: MenuItemIconDirective, isStandalone: true, selector: "[twMenuItemIcon]", host: { properties: { "class": "classes()" } }, ngImport: i0 });
|
|
373
387
|
}
|
|
374
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
388
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MenuItemIconDirective, decorators: [{
|
|
375
389
|
type: Directive,
|
|
376
390
|
args: [{
|
|
377
391
|
selector: '[twMenuItemIcon]',
|
|
@@ -382,10 +396,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
382
396
|
}] });
|
|
383
397
|
/** Styles secondary description text inside a menu item. */
|
|
384
398
|
class MenuItemDescriptionDirective {
|
|
385
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
386
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
399
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MenuItemDescriptionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
400
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: MenuItemDescriptionDirective, isStandalone: true, selector: "[twMenuItemDescription]", host: { classAttribute: "block text-xs text-fg-muted min-w-0 truncate order-last basis-full" }, ngImport: i0 });
|
|
387
401
|
}
|
|
388
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
402
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MenuItemDescriptionDirective, decorators: [{
|
|
389
403
|
type: Directive,
|
|
390
404
|
args: [{
|
|
391
405
|
selector: '[twMenuItemDescription]',
|
|
@@ -396,10 +410,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
396
410
|
}] });
|
|
397
411
|
/** Right-aligns and mutes keyboard shortcut hint text. */
|
|
398
412
|
class MenuItemShortcutDirective {
|
|
399
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
400
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
413
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MenuItemShortcutDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
414
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: MenuItemShortcutDirective, isStandalone: true, selector: "[twMenuItemShortcut]", host: { classAttribute: "ml-auto pl-3 text-xs text-fg-subtle tracking-wide" }, ngImport: i0 });
|
|
401
415
|
}
|
|
402
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
416
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MenuItemShortcutDirective, decorators: [{
|
|
403
417
|
type: Directive,
|
|
404
418
|
args: [{
|
|
405
419
|
selector: '[twMenuItemShortcut]',
|
|
@@ -411,11 +425,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
411
425
|
/** Styles the trailing chevron for submenu triggers. */
|
|
412
426
|
class MenuItemSubmenuIndicatorDirective {
|
|
413
427
|
menu = inject(MenuComponent, { optional: true });
|
|
414
|
-
classes = computed(() => menuItemSubmenuIndicatorVariants({ size: this.menu?.size() ?? 'md' }),
|
|
415
|
-
|
|
416
|
-
static
|
|
428
|
+
classes = computed(() => menuItemSubmenuIndicatorVariants({ size: this.menu?.size() ?? 'md' }), /* @ts-ignore */
|
|
429
|
+
...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
|
|
430
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MenuItemSubmenuIndicatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
431
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: MenuItemSubmenuIndicatorDirective, isStandalone: true, selector: "[twMenuItemSubmenuIcon]", host: { properties: { "class": "classes()" } }, ngImport: i0 });
|
|
417
432
|
}
|
|
418
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
433
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MenuItemSubmenuIndicatorDirective, decorators: [{
|
|
419
434
|
type: Directive,
|
|
420
435
|
args: [{
|
|
421
436
|
selector: '[twMenuItemSubmenuIcon]',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cdevhub-ngx-tw-menu.mjs","sources":["../../../projects/ngx-tw/menu/menu.ts","../../../projects/ngx-tw/menu/cdevhub-ngx-tw-menu.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n Directive,\n effect,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n CdkContextMenuTrigger,\n CdkMenu,\n CdkMenuGroup,\n CdkMenuItem,\n CdkMenuItemCheckbox,\n CdkMenuItemRadio,\n CdkMenuTrigger,\n} from '@angular/cdk/menu';\nimport { tv } from 'tailwind-variants';\nimport type { TwColor, TwSize } from '@cdevhub/ngx-tw/core';\n\n// ── Variant configs ──\n\nconst menuVariants = tv(\n {\n base: 'min-w-48 flex flex-col max-h-96 rounded-lg bg-surface-overlay border border-border shadow-md overflow-y-auto text-fg',\n variants: {\n // Menu panels intentionally use sub-`p-1` padding at xs/sm because items\n // carry their own inline padding — the codified `p-2`/`p-3`/`p-4` container\n // scale would over-pad the panel gutter. The size axis here scales the panel\n // border-to-item gap only, not item density.\n size: {\n xs: 'p-0.5 [&>tw-separator]:-mx-0.5 [&>tw-separator]:my-0.5',\n sm: 'p-0.5 [&>tw-separator]:-mx-0.5 [&>tw-separator]:my-0.5',\n md: 'p-1 [&>tw-separator]:-mx-1 [&>tw-separator]:my-1',\n lg: 'p-1.5 [&>tw-separator]:-mx-1.5 [&>tw-separator]:my-1',\n xl: 'p-2 [&>tw-separator]:-mx-2 [&>tw-separator]:my-1',\n },\n },\n defaultVariants: { size: 'md' },\n },\n { twMerge: true },\n);\n\n// Menu items use the codified menu-item focus carve-out: `focus-visible:bg-surface-muted`\n// (and color-tinted equivalents below) in place of the canonical outline ring. See the\n// \"Focus Rings → Menu-item carve-out\" section in CLAUDE.md.\nconst menuItemVariants = tv(\n {\n base: 'relative flex w-full flex-wrap items-center gap-2 rounded-md cursor-pointer select-none transition-colors duration-normal motion-reduce:transition-none text-fg outline-none focus-visible:bg-surface-muted hover:bg-surface-muted',\n variants: {\n size: {\n xs: 'px-1.5 py-0.5 text-xs',\n sm: 'px-2 py-1 text-xs',\n md: 'px-3 py-1.5 text-sm',\n lg: 'px-4 py-2 text-sm',\n xl: 'px-5 py-2.5 text-base',\n },\n // Slot tokens own light/dark contrast — no `dark:`, no shade picks.\n // `undefined` (the default) leaves the base text-fg styling untouched.\n color: {\n primary: 'text-primary-fg hover:bg-primary-soft focus-visible:bg-primary-soft',\n secondary: 'text-secondary-fg hover:bg-secondary-soft focus-visible:bg-secondary-soft',\n accent: 'text-accent-fg hover:bg-accent-soft focus-visible:bg-accent-soft',\n info: 'text-info-fg hover:bg-info-soft focus-visible:bg-info-soft',\n success: 'text-success-fg hover:bg-success-soft focus-visible:bg-success-soft',\n warning: 'text-warning-fg hover:bg-warning-soft focus-visible:bg-warning-soft',\n error: 'text-error-fg hover:bg-error-soft focus-visible:bg-error-soft',\n neutral: 'text-fg-muted hover:bg-surface-muted focus-visible:bg-surface-muted',\n },\n // `cursor-not-allowed` is layered so a programmatically-focused disabled item\n // still reads as disabled — `pointer-events-none` blocks pointer activation, but\n // the cursor cue communicates the state if focus lands here via CDK's own paths.\n // CDK's `FocusableOption` honours `cdkItem.disabled` (synced via the effect below)\n // and skips disabled items in keyboard navigation automatically.\n disabled: {\n true: 'opacity-50 pointer-events-none cursor-not-allowed',\n },\n },\n defaultVariants: { size: 'md', disabled: false },\n },\n { twMerge: true },\n);\n\nconst menuItemIconVariants = tv(\n {\n base: 'shrink-0 text-fg-muted',\n variants: {\n size: {\n xs: 'size-4',\n sm: 'size-4',\n md: 'size-4',\n lg: 'size-5',\n xl: 'size-5',\n },\n },\n defaultVariants: { size: 'md' },\n },\n { twMerge: true },\n);\n\nconst menuItemIndicatorVariants = tv(\n {\n base: 'shrink-0 flex items-center justify-center',\n variants: {\n size: {\n xs: 'size-4',\n sm: 'size-4',\n md: 'size-4',\n lg: 'size-5',\n xl: 'size-5',\n },\n },\n defaultVariants: { size: 'md' },\n },\n { twMerge: true },\n);\n\n// Submenu indicator (trailing chevron). Keeps the `ml-auto pl-2` layout intent\n// separate from the leading-icon scale; size axis follows the glyph scale per\n// CLAUDE.md \"Icon Sizing\" so the chevron scales with the parent menu's density.\nconst menuItemSubmenuIndicatorVariants = tv(\n {\n base: 'ml-auto pl-2 shrink-0 text-fg-muted',\n variants: {\n size: {\n xs: 'size-3',\n sm: 'size-4',\n md: 'size-4',\n lg: 'size-5',\n xl: 'size-5',\n },\n },\n defaultVariants: { size: 'md' },\n },\n { twMerge: true },\n);\n\n// ── MenuComponent ──\n\n@Component({\n selector: 'tw-menu',\n changeDetection: ChangeDetectionStrategy.OnPush,\n hostDirectives: [\n {\n directive: CdkMenu,\n outputs: ['closed'],\n },\n ],\n host: {\n '[class]': 'classes()',\n '[attr.aria-label]': 'ariaLabel() ?? null',\n '[attr.aria-labelledby]': 'ariaLabel() ? null : (ariaLabelledBy() ?? null)',\n '[animate.enter]': '\"scale-in\"',\n '[animate.leave]': '\"scale-out\"',\n },\n template: `<ng-content />`,\n})\nexport class MenuComponent {\n /** Controls item density and padding. Defaults to `'md'`. */\n readonly size = input<TwSize>('md');\n\n /** Accessible label for the menu panel. Use when no visible heading describes the menu (e.g. a kebab-icon trigger). */\n readonly ariaLabel = input<string | undefined>(undefined, { alias: 'aria-label' });\n\n /** ID of an element that labels the menu panel. Ignored when `ariaLabel` is set. */\n readonly ariaLabelledBy = input<string | undefined>(undefined, { alias: 'aria-labelledby' });\n\n readonly classes = computed(() => menuVariants({ size: this.size() }));\n}\n\n// ── MenuTriggerDirective ──\n\n@Directive({\n selector: '[twMenuTrigger]',\n hostDirectives: [\n {\n directive: CdkMenuTrigger,\n inputs: [\n 'cdkMenuTriggerFor: twMenuTrigger',\n // Forward CDK's positioning so consumers can anchor the menu (e.g. bottom-end vs bottom-start).\n // Accepts `ConnectedPosition[]` from `@angular/cdk/overlay`.\n 'cdkMenuPosition: position',\n // Forward menu context data so consumers can parameterise the template.\n 'cdkMenuTriggerData: data',\n ],\n outputs: ['cdkMenuOpened: opened', 'cdkMenuClosed: closed'],\n },\n ],\n})\nexport class MenuTriggerDirective {}\n\n// ── ContextMenuTriggerDirective ──\n\n@Directive({\n selector: '[twContextMenuTrigger]',\n hostDirectives: [\n {\n directive: CdkContextMenuTrigger,\n inputs: [\n 'cdkContextMenuTriggerFor: twContextMenuTrigger',\n 'cdkContextMenuDisabled: disabled',\n // Context menus open at pointer coordinates; `position` here tunes the\n // `ConnectedPosition[]` fallback list once CDK has anchored the overlay.\n 'cdkContextMenuPosition: position',\n 'cdkContextMenuTriggerData: data',\n ],\n outputs: ['cdkContextMenuOpened: opened', 'cdkContextMenuClosed: closed'],\n },\n ],\n})\nexport class ContextMenuTriggerDirective {}\n\n// ── MenuItemDirective ──\n\n@Directive({\n selector: '[twMenuItem]',\n hostDirectives: [\n {\n directive: CdkMenuItem,\n outputs: ['cdkMenuItemTriggered: triggered'],\n },\n ],\n host: {\n '[class]': 'classes()',\n },\n})\nexport class MenuItemDirective {\n /**\n * Semantic role tint applied to the item. Use `'error'` for destructive actions.\n * Defaults to `undefined` — no role tint is applied and the item inherits the\n * base `text-fg` styling at full prominence; `'neutral'` (the explicit muted\n * variant) is a distinct value with `text-fg-muted` + `bg-surface-muted` hovers.\n */\n readonly color = input<TwColor | undefined>(undefined);\n\n /** Whether this item is disabled. Defaults to `false`. */\n readonly disabled = input(false);\n\n private readonly menu = inject(MenuComponent, { optional: true });\n private readonly cdkItem = inject(CdkMenuItem);\n\n constructor() {\n // Single source of truth: the local `disabled` signal drives both visual state\n // and the underlying CDK directive's behavior (`disabled` is a plain property on CDK).\n effect(() => {\n this.cdkItem.disabled = this.disabled();\n });\n }\n\n readonly classes = computed(() =>\n menuItemVariants({\n size: this.menu?.size() ?? 'md',\n color: this.color(),\n disabled: this.disabled(),\n }),\n );\n}\n\n// ── MenuItemCheckboxComponent ──\n\n@Component({\n selector: '[twMenuItemCheckbox]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n hostDirectives: [\n {\n directive: CdkMenuItemCheckbox,\n inputs: ['cdkMenuItemChecked: checked'],\n outputs: ['cdkMenuItemTriggered: triggered'],\n },\n ],\n host: {\n '[class]': 'classes()',\n },\n template: `\n <span [class]=\"indicatorClasses()\">\n @if (cdkCheckbox.checked) {\n <svg class=\"size-full\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z\" clip-rule=\"evenodd\"/>\n </svg>\n }\n </span>\n <ng-content />\n `,\n})\nexport class MenuItemCheckboxComponent {\n /** Whether this item is disabled. Defaults to `false`. */\n readonly disabled = input(false);\n\n /** Fires when the item is activated, carrying the new `checked` value after CDK toggles it. */\n readonly checkedChange = output<boolean>();\n\n protected readonly cdkCheckbox = inject(CdkMenuItemCheckbox);\n private readonly menu = inject(MenuComponent, { optional: true });\n\n private readonly resolvedSize = computed(() => this.menu?.size() ?? 'md');\n\n constructor() {\n effect(() => {\n this.cdkCheckbox.disabled = this.disabled();\n });\n // CDK fires `triggered` BEFORE updating `checked`; emit the post-toggle value.\n this.cdkCheckbox.triggered\n .pipe(takeUntilDestroyed())\n .subscribe(() => this.checkedChange.emit(!this.cdkCheckbox.checked));\n }\n\n readonly classes = computed(() =>\n menuItemVariants({\n size: this.resolvedSize(),\n disabled: this.disabled(),\n }),\n );\n\n readonly indicatorClasses = computed(() =>\n menuItemIndicatorVariants({ size: this.resolvedSize() }),\n );\n}\n\n// ── MenuItemRadioComponent ──\n\n@Component({\n selector: '[twMenuItemRadio]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n hostDirectives: [\n {\n directive: CdkMenuItemRadio,\n inputs: ['cdkMenuItemChecked: checked'],\n outputs: ['cdkMenuItemTriggered: triggered'],\n },\n ],\n host: {\n '[class]': 'classes()',\n },\n template: `\n <span [class]=\"indicatorClasses()\">\n @if (cdkRadio.checked) {\n <svg class=\"size-full\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <circle cx=\"10\" cy=\"10\" r=\"5\"/>\n </svg>\n }\n </span>\n <ng-content />\n `,\n})\nexport class MenuItemRadioComponent {\n /** Whether this item is disabled. Defaults to `false`. */\n readonly disabled = input(false);\n\n /** Fires when the item is activated, carrying the new `checked` value after CDK selects it. */\n readonly checkedChange = output<boolean>();\n\n protected readonly cdkRadio = inject(CdkMenuItemRadio);\n private readonly menu = inject(MenuComponent, { optional: true });\n\n private readonly resolvedSize = computed(() => this.menu?.size() ?? 'md');\n\n constructor() {\n effect(() => {\n this.cdkRadio.disabled = this.disabled();\n });\n // Radio activation always selects the item; emit `true` (the post-trigger checked state).\n this.cdkRadio.triggered\n .pipe(takeUntilDestroyed())\n .subscribe(() => this.checkedChange.emit(true));\n }\n\n readonly classes = computed(() =>\n menuItemVariants({\n size: this.resolvedSize(),\n disabled: this.disabled(),\n }),\n );\n\n readonly indicatorClasses = computed(() =>\n menuItemIndicatorVariants({ size: this.resolvedSize() }),\n );\n}\n\n// ── MenuGroupDirective ──\n\n@Directive({\n selector: '[twMenuGroup]',\n hostDirectives: [CdkMenuGroup],\n})\nexport class MenuGroupDirective {}\n\n// ── Content directives ──\n\n/** Styles a leading icon inside a menu item. */\n@Directive({\n selector: '[twMenuItemIcon]',\n host: {\n '[class]': 'classes()',\n },\n})\nexport class MenuItemIconDirective {\n private readonly menu = inject(MenuComponent, { optional: true });\n\n readonly classes = computed(() =>\n menuItemIconVariants({ size: this.menu?.size() ?? 'md' }),\n );\n}\n\n/** Styles secondary description text inside a menu item. */\n@Directive({\n selector: '[twMenuItemDescription]',\n host: {\n class: 'block text-xs text-fg-muted min-w-0 truncate order-last basis-full',\n },\n})\nexport class MenuItemDescriptionDirective {}\n\n/** Right-aligns and mutes keyboard shortcut hint text. */\n@Directive({\n selector: '[twMenuItemShortcut]',\n host: {\n class: 'ml-auto pl-3 text-xs text-fg-subtle tracking-wide',\n },\n})\nexport class MenuItemShortcutDirective {}\n\n/** Styles the trailing chevron for submenu triggers. */\n@Directive({\n selector: '[twMenuItemSubmenuIcon]',\n host: {\n '[class]': 'classes()',\n },\n})\nexport class MenuItemSubmenuIndicatorDirective {\n private readonly menu = inject(MenuComponent, { optional: true });\n\n readonly classes = computed(() =>\n menuItemSubmenuIndicatorVariants({ size: this.menu?.size() ?? 'md' }),\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cdevhub-ngx-tw-menu.mjs","sources":["../../../projects/ngx-tw/menu/menu.ts","../../../projects/ngx-tw/menu/cdevhub-ngx-tw-menu.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n Directive,\n effect,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n CdkContextMenuTrigger,\n CdkMenu,\n CdkMenuGroup,\n CdkMenuItem,\n CdkMenuItemCheckbox,\n CdkMenuItemRadio,\n CdkMenuTrigger,\n} from '@angular/cdk/menu';\nimport { tv } from 'tailwind-variants';\nimport type { TwColor, TwSize } from '@cdevhub/ngx-tw/core';\n\n// ── Variant configs ──\n\nconst menuVariants = tv(\n {\n base: 'min-w-48 flex flex-col max-h-96 rounded-lg bg-surface-overlay border border-border shadow-md overflow-y-auto text-fg',\n variants: {\n // Menu panels intentionally use sub-`p-1` padding at xs/sm because items\n // carry their own inline padding — the codified `p-2`/`p-3`/`p-4` container\n // scale would over-pad the panel gutter. The size axis here scales the panel\n // border-to-item gap only, not item density.\n size: {\n xs: 'p-0.5 [&>tw-separator]:-mx-0.5 [&>tw-separator]:my-0.5',\n sm: 'p-0.5 [&>tw-separator]:-mx-0.5 [&>tw-separator]:my-0.5',\n md: 'p-1 [&>tw-separator]:-mx-1 [&>tw-separator]:my-1',\n lg: 'p-1.5 [&>tw-separator]:-mx-1.5 [&>tw-separator]:my-1',\n xl: 'p-2 [&>tw-separator]:-mx-2 [&>tw-separator]:my-1',\n },\n },\n defaultVariants: { size: 'md' },\n },\n { twMerge: true },\n);\n\n// Menu items use the codified menu-item focus carve-out: `focus-visible:bg-surface-muted`\n// (and color-tinted equivalents below) in place of the canonical outline ring. See the\n// \"Focus Rings → Menu-item carve-out\" section in CLAUDE.md.\nconst menuItemVariants = tv(\n {\n base: 'relative flex w-full flex-wrap items-center gap-2 rounded-md cursor-pointer select-none transition-colors duration-normal motion-reduce:transition-none text-fg outline-none focus-visible:bg-surface-muted hover:bg-surface-muted',\n variants: {\n size: {\n xs: 'px-1.5 py-0.5 text-xs',\n sm: 'px-2 py-1 text-xs',\n md: 'px-3 py-1.5 text-sm',\n lg: 'px-4 py-2 text-sm',\n xl: 'px-5 py-2.5 text-base',\n },\n // Slot tokens own light/dark contrast — no `dark:`, no shade picks.\n // `undefined` (the default) leaves the base text-fg styling untouched.\n color: {\n primary: 'text-primary-fg hover:bg-primary-soft focus-visible:bg-primary-soft',\n secondary: 'text-secondary-fg hover:bg-secondary-soft focus-visible:bg-secondary-soft',\n accent: 'text-accent-fg hover:bg-accent-soft focus-visible:bg-accent-soft',\n info: 'text-info-fg hover:bg-info-soft focus-visible:bg-info-soft',\n success: 'text-success-fg hover:bg-success-soft focus-visible:bg-success-soft',\n warning: 'text-warning-fg hover:bg-warning-soft focus-visible:bg-warning-soft',\n error: 'text-error-fg hover:bg-error-soft focus-visible:bg-error-soft',\n neutral: 'text-fg-muted hover:bg-surface-muted focus-visible:bg-surface-muted',\n },\n // `cursor-not-allowed` is layered so a programmatically-focused disabled item\n // still reads as disabled — `pointer-events-none` blocks pointer activation, but\n // the cursor cue communicates the state if focus lands here via CDK's own paths.\n // CDK's `FocusableOption` honours `cdkItem.disabled` (synced via the effect below)\n // and skips disabled items in keyboard navigation automatically.\n disabled: {\n true: 'opacity-50 pointer-events-none cursor-not-allowed',\n },\n },\n defaultVariants: { size: 'md', disabled: false },\n },\n { twMerge: true },\n);\n\nconst menuItemIconVariants = tv(\n {\n base: 'shrink-0 text-fg-muted',\n variants: {\n size: {\n xs: 'size-4',\n sm: 'size-4',\n md: 'size-4',\n lg: 'size-5',\n xl: 'size-5',\n },\n },\n defaultVariants: { size: 'md' },\n },\n { twMerge: true },\n);\n\nconst menuItemIndicatorVariants = tv(\n {\n base: 'shrink-0 flex items-center justify-center',\n variants: {\n size: {\n xs: 'size-4',\n sm: 'size-4',\n md: 'size-4',\n lg: 'size-5',\n xl: 'size-5',\n },\n },\n defaultVariants: { size: 'md' },\n },\n { twMerge: true },\n);\n\n// Submenu indicator (trailing chevron). Keeps the `ml-auto pl-2` layout intent\n// separate from the leading-icon scale; size axis follows the glyph scale per\n// CLAUDE.md \"Icon Sizing\" so the chevron scales with the parent menu's density.\nconst menuItemSubmenuIndicatorVariants = tv(\n {\n base: 'ml-auto pl-2 shrink-0 text-fg-muted',\n variants: {\n size: {\n xs: 'size-3',\n sm: 'size-4',\n md: 'size-4',\n lg: 'size-5',\n xl: 'size-5',\n },\n },\n defaultVariants: { size: 'md' },\n },\n { twMerge: true },\n);\n\n// ── MenuComponent ──\n\n@Component({\n selector: 'tw-menu',\n changeDetection: ChangeDetectionStrategy.OnPush,\n hostDirectives: [\n {\n directive: CdkMenu,\n outputs: ['closed'],\n },\n ],\n host: {\n '[class]': 'classes()',\n '[attr.aria-label]': 'ariaLabel() ?? null',\n '[attr.aria-labelledby]': 'ariaLabel() ? null : (ariaLabelledBy() ?? null)',\n '[animate.enter]': '\"scale-in\"',\n '[animate.leave]': '\"scale-out\"',\n },\n template: `<ng-content />`,\n})\nexport class MenuComponent {\n /** Controls item density and padding. Defaults to `'md'`. */\n readonly size = input<TwSize>('md');\n\n /** Accessible label for the menu panel. Use when no visible heading describes the menu (e.g. a kebab-icon trigger). */\n readonly ariaLabel = input<string | undefined>(undefined, { alias: 'aria-label' });\n\n /** ID of an element that labels the menu panel. Ignored when `ariaLabel` is set. */\n readonly ariaLabelledBy = input<string | undefined>(undefined, { alias: 'aria-labelledby' });\n\n readonly classes = computed(() => menuVariants({ size: this.size() }));\n}\n\n// ── MenuTriggerDirective ──\n\n@Directive({\n selector: '[twMenuTrigger]',\n hostDirectives: [\n {\n directive: CdkMenuTrigger,\n inputs: [\n 'cdkMenuTriggerFor: twMenuTrigger',\n // Forward CDK's positioning so consumers can anchor the menu (e.g. bottom-end vs bottom-start).\n // Accepts `ConnectedPosition[]` from `@angular/cdk/overlay`.\n 'cdkMenuPosition: position',\n // Forward menu context data so consumers can parameterise the template.\n 'cdkMenuTriggerData: data',\n ],\n outputs: ['cdkMenuOpened: opened', 'cdkMenuClosed: closed'],\n },\n ],\n})\nexport class MenuTriggerDirective {}\n\n// ── ContextMenuTriggerDirective ──\n\n@Directive({\n selector: '[twContextMenuTrigger]',\n hostDirectives: [\n {\n directive: CdkContextMenuTrigger,\n inputs: [\n 'cdkContextMenuTriggerFor: twContextMenuTrigger',\n 'cdkContextMenuDisabled: disabled',\n // Context menus open at pointer coordinates; `position` here tunes the\n // `ConnectedPosition[]` fallback list once CDK has anchored the overlay.\n 'cdkContextMenuPosition: position',\n 'cdkContextMenuTriggerData: data',\n ],\n outputs: ['cdkContextMenuOpened: opened', 'cdkContextMenuClosed: closed'],\n },\n ],\n})\nexport class ContextMenuTriggerDirective {}\n\n// ── MenuItemDirective ──\n\n@Directive({\n selector: '[twMenuItem]',\n hostDirectives: [\n {\n directive: CdkMenuItem,\n outputs: ['cdkMenuItemTriggered: triggered'],\n },\n ],\n host: {\n '[class]': 'classes()',\n },\n})\nexport class MenuItemDirective {\n /**\n * Semantic role tint applied to the item. Use `'error'` for destructive actions.\n * Defaults to `undefined` — no role tint is applied and the item inherits the\n * base `text-fg` styling at full prominence; `'neutral'` (the explicit muted\n * variant) is a distinct value with `text-fg-muted` + `bg-surface-muted` hovers.\n */\n readonly color = input<TwColor | undefined>(undefined);\n\n /** Whether this item is disabled. Defaults to `false`. */\n readonly disabled = input(false);\n\n private readonly menu = inject(MenuComponent, { optional: true });\n private readonly cdkItem = inject(CdkMenuItem);\n\n constructor() {\n // Single source of truth: the local `disabled` signal drives both visual state\n // and the underlying CDK directive's behavior (`disabled` is a plain property on CDK).\n effect(() => {\n this.cdkItem.disabled = this.disabled();\n });\n }\n\n readonly classes = computed(() =>\n menuItemVariants({\n size: this.menu?.size() ?? 'md',\n color: this.color(),\n disabled: this.disabled(),\n }),\n );\n}\n\n// ── MenuItemCheckboxComponent ──\n\n@Component({\n selector: '[twMenuItemCheckbox]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n hostDirectives: [\n {\n directive: CdkMenuItemCheckbox,\n inputs: ['cdkMenuItemChecked: checked'],\n outputs: ['cdkMenuItemTriggered: triggered'],\n },\n ],\n host: {\n '[class]': 'classes()',\n },\n template: `\n <span [class]=\"indicatorClasses()\">\n @if (cdkCheckbox.checked) {\n <svg class=\"size-full\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z\" clip-rule=\"evenodd\"/>\n </svg>\n }\n </span>\n <ng-content />\n `,\n})\nexport class MenuItemCheckboxComponent {\n /** Whether this item is disabled. Defaults to `false`. */\n readonly disabled = input(false);\n\n /** Fires when the item is activated, carrying the new `checked` value after CDK toggles it. */\n readonly checkedChange = output<boolean>();\n\n protected readonly cdkCheckbox = inject(CdkMenuItemCheckbox);\n private readonly menu = inject(MenuComponent, { optional: true });\n\n private readonly resolvedSize = computed(() => this.menu?.size() ?? 'md');\n\n constructor() {\n effect(() => {\n this.cdkCheckbox.disabled = this.disabled();\n });\n // CDK fires `triggered` BEFORE updating `checked`; emit the post-toggle value.\n this.cdkCheckbox.triggered\n .pipe(takeUntilDestroyed())\n .subscribe(() => this.checkedChange.emit(!this.cdkCheckbox.checked));\n }\n\n readonly classes = computed(() =>\n menuItemVariants({\n size: this.resolvedSize(),\n disabled: this.disabled(),\n }),\n );\n\n readonly indicatorClasses = computed(() =>\n menuItemIndicatorVariants({ size: this.resolvedSize() }),\n );\n}\n\n// ── MenuItemRadioComponent ──\n\n@Component({\n selector: '[twMenuItemRadio]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n hostDirectives: [\n {\n directive: CdkMenuItemRadio,\n inputs: ['cdkMenuItemChecked: checked'],\n outputs: ['cdkMenuItemTriggered: triggered'],\n },\n ],\n host: {\n '[class]': 'classes()',\n },\n template: `\n <span [class]=\"indicatorClasses()\">\n @if (cdkRadio.checked) {\n <svg class=\"size-full\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <circle cx=\"10\" cy=\"10\" r=\"5\"/>\n </svg>\n }\n </span>\n <ng-content />\n `,\n})\nexport class MenuItemRadioComponent {\n /** Whether this item is disabled. Defaults to `false`. */\n readonly disabled = input(false);\n\n /** Fires when the item is activated, carrying the new `checked` value after CDK selects it. */\n readonly checkedChange = output<boolean>();\n\n protected readonly cdkRadio = inject(CdkMenuItemRadio);\n private readonly menu = inject(MenuComponent, { optional: true });\n\n private readonly resolvedSize = computed(() => this.menu?.size() ?? 'md');\n\n constructor() {\n effect(() => {\n this.cdkRadio.disabled = this.disabled();\n });\n // Radio activation always selects the item; emit `true` (the post-trigger checked state).\n this.cdkRadio.triggered\n .pipe(takeUntilDestroyed())\n .subscribe(() => this.checkedChange.emit(true));\n }\n\n readonly classes = computed(() =>\n menuItemVariants({\n size: this.resolvedSize(),\n disabled: this.disabled(),\n }),\n );\n\n readonly indicatorClasses = computed(() =>\n menuItemIndicatorVariants({ size: this.resolvedSize() }),\n );\n}\n\n// ── MenuGroupDirective ──\n\n@Directive({\n selector: '[twMenuGroup]',\n hostDirectives: [CdkMenuGroup],\n})\nexport class MenuGroupDirective {}\n\n// ── Content directives ──\n\n/** Styles a leading icon inside a menu item. */\n@Directive({\n selector: '[twMenuItemIcon]',\n host: {\n '[class]': 'classes()',\n },\n})\nexport class MenuItemIconDirective {\n private readonly menu = inject(MenuComponent, { optional: true });\n\n readonly classes = computed(() =>\n menuItemIconVariants({ size: this.menu?.size() ?? 'md' }),\n );\n}\n\n/** Styles secondary description text inside a menu item. */\n@Directive({\n selector: '[twMenuItemDescription]',\n host: {\n class: 'block text-xs text-fg-muted min-w-0 truncate order-last basis-full',\n },\n})\nexport class MenuItemDescriptionDirective {}\n\n/** Right-aligns and mutes keyboard shortcut hint text. */\n@Directive({\n selector: '[twMenuItemShortcut]',\n host: {\n class: 'ml-auto pl-3 text-xs text-fg-subtle tracking-wide',\n },\n})\nexport class MenuItemShortcutDirective {}\n\n/** Styles the trailing chevron for submenu triggers. */\n@Directive({\n selector: '[twMenuItemSubmenuIcon]',\n host: {\n '[class]': 'classes()',\n },\n})\nexport class MenuItemSubmenuIndicatorDirective {\n private readonly menu = inject(MenuComponent, { optional: true });\n\n readonly classes = computed(() =>\n menuItemSubmenuIndicatorVariants({ size: this.menu?.size() ?? 'md' }),\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|