@luzmo/ngx-lucero 1.0.3-alpha.9 → 2.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/README.md +37 -0
- package/esm/components/action-button.d.ts +6 -4
- package/esm/components/action-button.js +10 -2
- package/esm/components/action-menu.d.ts +2 -1
- package/esm/components/action-menu.js +8 -1
- package/esm/components/avatar.d.ts +5 -1
- package/esm/components/avatar.js +17 -1
- package/esm/components/button.d.ts +1 -3
- package/esm/components/button.js +2 -7
- package/esm/components/checkbox.js +2 -1
- package/esm/components/menu-group.d.ts +3 -1
- package/esm/components/menu-group.js +15 -1
- package/esm/components/menu-item.d.ts +3 -3
- package/esm/components/menu-item.js +6 -6
- package/esm/components/menu.d.ts +5 -3
- package/esm/components/menu.js +15 -1
- package/esm/components/notice.d.ts +49 -0
- package/esm/components/notice.js +145 -0
- package/esm/components/option.d.ts +66 -0
- package/esm/components/option.js +241 -0
- package/esm/components/options-divider.d.ts +29 -0
- package/esm/components/options-divider.js +69 -0
- package/esm/components/options.d.ts +8 -7
- package/esm/components/options.js +2 -2
- package/esm/components/overlay-trigger.d.ts +45 -0
- package/esm/components/overlay-trigger.js +155 -0
- package/esm/components/overlay.d.ts +5 -3
- package/esm/components/overlay.js +1 -1
- package/esm/components/picker.d.ts +2 -1
- package/esm/components/picker.js +8 -1
- package/esm/components/prompt-box.js +2 -1
- package/esm/components/question-box.d.ts +78 -0
- package/esm/components/question-box.js +253 -0
- package/esm/components/radio-group.d.ts +3 -2
- package/esm/components/radio-group.js +7 -6
- package/esm/components/radio.d.ts +1 -1
- package/esm/components/radio.js +3 -2
- package/esm/components/slider-handle.d.ts +63 -0
- package/esm/components/slider-handle.js +218 -0
- package/esm/components/slider.d.ts +59 -8
- package/esm/components/slider.js +204 -26
- package/esm/components/swatch.d.ts +1 -1
- package/esm/components/tabs.d.ts +1 -1
- package/esm/components/tag.d.ts +1 -1
- package/esm/components/tag.js +1 -1
- package/esm/components/text-field.d.ts +3 -3
- package/esm/components/top-nav.d.ts +2 -2
- package/esm/index.d.ts +14 -2
- package/esm/index.js +24 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -35,6 +35,43 @@ The wrapper class name mirrors the host element (`LuzmoButton`); the
|
|
|
35
35
|
underlying `HTMLElement` subclass type is re-exported as
|
|
36
36
|
`LuzmoButtonElement` for `@ViewChild` / `ElementRef<T>` use cases.
|
|
37
37
|
|
|
38
|
+
## Router links
|
|
39
|
+
|
|
40
|
+
Angular 20 and newer recognize Lucero components with an `href` property as
|
|
41
|
+
link-compatible custom elements. Import `RouterLink` and apply it directly to
|
|
42
|
+
the Lucero component:
|
|
43
|
+
|
|
44
|
+
```ts
|
|
45
|
+
import { Component } from '@angular/core';
|
|
46
|
+
import { RouterLink } from '@angular/router';
|
|
47
|
+
import { LuzmoActionButton } from '@luzmo/ngx-lucero';
|
|
48
|
+
|
|
49
|
+
@Component({
|
|
50
|
+
selector: 'app-settings-link',
|
|
51
|
+
standalone: true,
|
|
52
|
+
imports: [LuzmoActionButton, RouterLink],
|
|
53
|
+
template: `
|
|
54
|
+
<luzmo-action-button routerLink="/settings">
|
|
55
|
+
Settings
|
|
56
|
+
</luzmo-action-button>
|
|
57
|
+
`
|
|
58
|
+
})
|
|
59
|
+
export class SettingsLinkComponent {}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
`RouterLink` writes the resolved `href`, handles the click with the Angular
|
|
63
|
+
router, and prevents a full page refresh. The component forwards exactly one
|
|
64
|
+
`click` event per activation, so the router navigates once.
|
|
65
|
+
|
|
66
|
+
Because activation is proxied through an anchor inside the component's shadow
|
|
67
|
+
root, the button does not expose native link affordances: modified clicks
|
|
68
|
+
(<kbd>Cmd</kbd>/<kbd>Ctrl</kbd>/<kbd>Shift</kbd>) and **Open link in new tab**
|
|
69
|
+
from the context menu are not available. Use a plain `<a>` where those matter.
|
|
70
|
+
|
|
71
|
+
Angular 17–19 do not recognize custom elements as anchor-like. On those
|
|
72
|
+
versions, use `routerLink` without a separate `href` for client-side navigation,
|
|
73
|
+
or upgrade to Angular 20+ when native link behavior is required.
|
|
74
|
+
|
|
38
75
|
## Notes
|
|
39
76
|
|
|
40
77
|
- This package depends on `@luzmo/lucero` for the underlying custom elements.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { OnChanges, SimpleChanges } from '@angular/core';
|
|
2
2
|
import { ControlValueAccessor } from '@angular/forms';
|
|
3
3
|
import '@luzmo/lucero/action-button';
|
|
4
|
-
import type { LuzmoActionButton as LuzmoActionButtonHostElement, ActionButtonVariants } from '@luzmo/lucero/action-button';
|
|
4
|
+
import type { LuzmoActionButton as LuzmoActionButtonHostElement, ActionButtonTreatments, ActionButtonVariants } from '@luzmo/lucero/action-button';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
|
-
export type { ActionButtonVariants } from '@luzmo/lucero/action-button';
|
|
6
|
+
export type { ActionButtonTreatments, ActionButtonVariants } from '@luzmo/lucero/action-button';
|
|
7
7
|
export declare class LuzmoActionButton implements OnChanges, ControlValueAccessor {
|
|
8
8
|
private readonly elementRef;
|
|
9
9
|
private readonly renderer;
|
|
@@ -18,6 +18,8 @@ export declare class LuzmoActionButton implements OnChanges, ControlValueAccesso
|
|
|
18
18
|
holdAffordance?: boolean;
|
|
19
19
|
/** Whether the Action Button should show in a quiet state */
|
|
20
20
|
quiet?: boolean;
|
|
21
|
+
/** The surface treatment for neutral action buttons. `outline` preserves the standard surface; `fill` uses highlighted neutral surface tokens. Quiet, selected, and static-color appearances take precedence. Other variants retain their existing appearance. */
|
|
22
|
+
treatment?: ActionButtonTreatments;
|
|
21
23
|
/** The role for the Action Button */
|
|
22
24
|
role?: string;
|
|
23
25
|
/** Whether an Action Button with `role='button'` should also be `aria-pressed='true'` */
|
|
@@ -26,7 +28,7 @@ export declare class LuzmoActionButton implements OnChanges, ControlValueAccesso
|
|
|
26
28
|
toggles?: boolean;
|
|
27
29
|
/** The static color variant to use for the action button. */
|
|
28
30
|
staticColor?: 'white' | 'black';
|
|
29
|
-
/** The appearance preset to apply to this action button. - `neutral` (default): the standard action button. - `pill`: a content-width chip using the standard action-button radius. - `accent`: a content-width chip with a soft, primary-tinted theme. */
|
|
31
|
+
/** The appearance preset to apply to this action button. - `neutral` (default): the standard action button. - `primary`: a primary-colored outline action button. - `negative`: a destructive tool with negative text and icon colors. - `pill`: a content-width chip using the standard action-button radius. - `accent`: a content-width chip with a soft, primary-tinted theme. */
|
|
30
32
|
variant?: ActionButtonVariants;
|
|
31
33
|
/** The value of the Action Button */
|
|
32
34
|
value?: string;
|
|
@@ -76,7 +78,7 @@ export declare class LuzmoActionButton implements OnChanges, ControlValueAccesso
|
|
|
76
78
|
setDisabledState(isDisabled: boolean): void;
|
|
77
79
|
focus(options?: FocusOptions): void;
|
|
78
80
|
static ɵfac: i0.ɵɵFactoryDeclaration<LuzmoActionButton, never>;
|
|
79
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<LuzmoActionButton, "luzmo-action-button", ["luzmoActionButton"], { "emphasized": { "alias": "emphasized"; "required": false; }; "holdAffordance": { "alias": "holdAffordance"; "required": false; }; "quiet": { "alias": "quiet"; "required": false; }; "role": { "alias": "role"; "required": false; }; "selected": { "alias": "selected"; "required": false; }; "toggles": { "alias": "toggles"; "required": false; }; "staticColor": { "alias": "staticColor"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; "value": { "alias": "value"; "required": false; }; "size": { "alias": "size"; "required": false; }; "download": { "alias": "download"; "required": false; }; "label": { "alias": "label"; "required": false; }; "href": { "alias": "href"; "required": false; }; "target": { "alias": "target"; "required": false; }; "referrerpolicy": { "alias": "referrerpolicy"; "required": false; }; "rel": { "alias": "rel"; "required": false; }; "active": { "alias": "active"; "required": false; }; "type": { "alias": "type"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "tabIndex": { "alias": "tabIndex"; "required": false; }; }, { "longpressEvent": "longpress"; "changeEvent": "change"; "keydownEvent": "keydown"; }, never, ["*"], true, never>;
|
|
81
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<LuzmoActionButton, "luzmo-action-button", ["luzmoActionButton"], { "emphasized": { "alias": "emphasized"; "required": false; }; "holdAffordance": { "alias": "holdAffordance"; "required": false; }; "quiet": { "alias": "quiet"; "required": false; }; "treatment": { "alias": "treatment"; "required": false; }; "role": { "alias": "role"; "required": false; }; "selected": { "alias": "selected"; "required": false; }; "toggles": { "alias": "toggles"; "required": false; }; "staticColor": { "alias": "staticColor"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; "value": { "alias": "value"; "required": false; }; "size": { "alias": "size"; "required": false; }; "download": { "alias": "download"; "required": false; }; "label": { "alias": "label"; "required": false; }; "href": { "alias": "href"; "required": false; }; "target": { "alias": "target"; "required": false; }; "referrerpolicy": { "alias": "referrerpolicy"; "required": false; }; "rel": { "alias": "rel"; "required": false; }; "active": { "alias": "active"; "required": false; }; "type": { "alias": "type"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "tabIndex": { "alias": "tabIndex"; "required": false; }; }, { "longpressEvent": "longpress"; "changeEvent": "change"; "keydownEvent": "keydown"; }, never, ["*"], true, never>;
|
|
80
82
|
}
|
|
81
83
|
/** The underlying custom element type for LuzmoActionButton */
|
|
82
84
|
export type LuzmoActionButtonElement = LuzmoActionButtonHostElement;
|
|
@@ -25,6 +25,8 @@ export class LuzmoActionButton {
|
|
|
25
25
|
holdAffordance;
|
|
26
26
|
/** Whether the Action Button should show in a quiet state */
|
|
27
27
|
quiet;
|
|
28
|
+
/** The surface treatment for neutral action buttons. `outline` preserves the standard surface; `fill` uses highlighted neutral surface tokens. Quiet, selected, and static-color appearances take precedence. Other variants retain their existing appearance. */
|
|
29
|
+
treatment;
|
|
28
30
|
/** The role for the Action Button */
|
|
29
31
|
role;
|
|
30
32
|
/** Whether an Action Button with `role='button'` should also be `aria-pressed='true'` */
|
|
@@ -33,7 +35,7 @@ export class LuzmoActionButton {
|
|
|
33
35
|
toggles;
|
|
34
36
|
/** The static color variant to use for the action button. */
|
|
35
37
|
staticColor;
|
|
36
|
-
/** The appearance preset to apply to this action button. - `neutral` (default): the standard action button. - `pill`: a content-width chip using the standard action-button radius. - `accent`: a content-width chip with a soft, primary-tinted theme. */
|
|
38
|
+
/** The appearance preset to apply to this action button. - `neutral` (default): the standard action button. - `primary`: a primary-colored outline action button. - `negative`: a destructive tool with negative text and icon colors. - `pill`: a content-width chip using the standard action-button radius. - `accent`: a content-width chip with a soft, primary-tinted theme. */
|
|
37
39
|
variant;
|
|
38
40
|
/** The value of the Action Button */
|
|
39
41
|
value;
|
|
@@ -83,6 +85,9 @@ export class LuzmoActionButton {
|
|
|
83
85
|
case 'quiet':
|
|
84
86
|
this.setHostProperty('quiet', changes['quiet'].currentValue);
|
|
85
87
|
break;
|
|
88
|
+
case 'treatment':
|
|
89
|
+
this.setHostProperty('treatment', changes['treatment'].currentValue);
|
|
90
|
+
break;
|
|
86
91
|
case 'role':
|
|
87
92
|
this.setHostProperty('role', changes['role'].currentValue);
|
|
88
93
|
break;
|
|
@@ -209,7 +214,7 @@ export class LuzmoActionButton {
|
|
|
209
214
|
return this.host.focus(options);
|
|
210
215
|
}
|
|
211
216
|
static ɵfac = function LuzmoActionButton_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || LuzmoActionButton)(); };
|
|
212
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LuzmoActionButton, selectors: [["luzmo-action-button"]], inputs: { emphasized: "emphasized", holdAffordance: "holdAffordance", quiet: "quiet", role: "role", selected: "selected", toggles: "toggles", staticColor: "staticColor", variant: "variant", value: "value", size: "size", download: "download", label: "label", href: "href", target: "target", referrerpolicy: "referrerpolicy", rel: "rel", active: "active", type: "type", disabled: "disabled", tabIndex: "tabIndex" }, outputs: { longpressEvent: "longpress", changeEvent: "change", keydownEvent: "keydown" }, exportAs: ["luzmoActionButton"], features: [i0.ɵɵProvidersFeature([
|
|
217
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LuzmoActionButton, selectors: [["luzmo-action-button"]], inputs: { emphasized: "emphasized", holdAffordance: "holdAffordance", quiet: "quiet", treatment: "treatment", role: "role", selected: "selected", toggles: "toggles", staticColor: "staticColor", variant: "variant", value: "value", size: "size", download: "download", label: "label", href: "href", target: "target", referrerpolicy: "referrerpolicy", rel: "rel", active: "active", type: "type", disabled: "disabled", tabIndex: "tabIndex" }, outputs: { longpressEvent: "longpress", changeEvent: "change", keydownEvent: "keydown" }, exportAs: ["luzmoActionButton"], features: [i0.ɵɵProvidersFeature([
|
|
213
218
|
{
|
|
214
219
|
provide: NG_VALUE_ACCESSOR,
|
|
215
220
|
useExisting: forwardRef(() => LuzmoActionButton),
|
|
@@ -245,6 +250,9 @@ export class LuzmoActionButton {
|
|
|
245
250
|
}], quiet: [{
|
|
246
251
|
type: Input,
|
|
247
252
|
args: [{ alias: 'quiet' }]
|
|
253
|
+
}], treatment: [{
|
|
254
|
+
type: Input,
|
|
255
|
+
args: [{ alias: 'treatment' }]
|
|
248
256
|
}], role: [{
|
|
249
257
|
type: Input,
|
|
250
258
|
args: [{ alias: 'role' }]
|
|
@@ -44,6 +44,7 @@ export declare class LuzmoActionMenu implements OnChanges, ControlValueAccessor
|
|
|
44
44
|
selectedItem?: unknown;
|
|
45
45
|
dependencyManager?: unknown;
|
|
46
46
|
isMobile?: unknown;
|
|
47
|
+
isTouchDevice?: unknown;
|
|
47
48
|
strategy?: unknown;
|
|
48
49
|
pendingStateController?: unknown;
|
|
49
50
|
applyFocusElementLabel?: unknown;
|
|
@@ -75,7 +76,7 @@ export declare class LuzmoActionMenu implements OnChanges, ControlValueAccessor
|
|
|
75
76
|
toggle(target?: boolean): void;
|
|
76
77
|
close(): void;
|
|
77
78
|
static ɵfac: i0.ɵɵFactoryDeclaration<LuzmoActionMenu, never>;
|
|
78
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<LuzmoActionMenu, "luzmo-action-menu", ["luzmoActionMenu"], { "selects": { "alias": "selects"; "required": false; }; "staticColor": { "alias": "staticColor"; "required": false; }; "handleSlottableRequest": { "alias": "handleSlottableRequest"; "required": false; }; "managePresenceObservedSlot": { "alias": "managePresenceObservedSlot"; "required": false; }; "size": { "alias": "size"; "required": false; }; "appliedLabel": { "alias": "appliedLabel"; "required": false; }; "button": { "alias": "button"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "focused": { "alias": "focused"; "required": false; }; "icons": { "alias": "icons"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; "invalid": { "alias": "invalid"; "required": false; }; "pending": { "alias": "pending"; "required": false; }; "pendingLabel": { "alias": "pendingLabel"; "required": false; }; "label": { "alias": "label"; "required": false; }; "open": { "alias": "open"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "labelAlignment": { "alias": "labelAlignment"; "required": false; }; "optionsMenu": { "alias": "optionsMenu"; "required": false; }; "overlayElement": { "alias": "overlayElement"; "required": false; }; "placement": { "alias": "placement"; "required": false; }; "quiet": { "alias": "quiet"; "required": false; }; "value": { "alias": "value"; "required": false; }; "selectedItem": { "alias": "selectedItem"; "required": false; }; "dependencyManager": { "alias": "dependencyManager"; "required": false; }; "isMobile": { "alias": "isMobile"; "required": false; }; "strategy": { "alias": "strategy"; "required": false; }; "pendingStateController": { "alias": "pendingStateController"; "required": false; }; "applyFocusElementLabel": { "alias": "applyFocusElementLabel"; "required": false; }; "tabIndex": { "alias": "tabIndex"; "required": false; }; }, { "changeEvent": "change"; "scrollEvent": "scroll"; "keydownEvent": "keydown"; }, never, ["*"], true, never>;
|
|
79
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<LuzmoActionMenu, "luzmo-action-menu", ["luzmoActionMenu"], { "selects": { "alias": "selects"; "required": false; }; "staticColor": { "alias": "staticColor"; "required": false; }; "handleSlottableRequest": { "alias": "handleSlottableRequest"; "required": false; }; "managePresenceObservedSlot": { "alias": "managePresenceObservedSlot"; "required": false; }; "size": { "alias": "size"; "required": false; }; "appliedLabel": { "alias": "appliedLabel"; "required": false; }; "button": { "alias": "button"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "focused": { "alias": "focused"; "required": false; }; "icons": { "alias": "icons"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; "invalid": { "alias": "invalid"; "required": false; }; "pending": { "alias": "pending"; "required": false; }; "pendingLabel": { "alias": "pendingLabel"; "required": false; }; "label": { "alias": "label"; "required": false; }; "open": { "alias": "open"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "labelAlignment": { "alias": "labelAlignment"; "required": false; }; "optionsMenu": { "alias": "optionsMenu"; "required": false; }; "overlayElement": { "alias": "overlayElement"; "required": false; }; "placement": { "alias": "placement"; "required": false; }; "quiet": { "alias": "quiet"; "required": false; }; "value": { "alias": "value"; "required": false; }; "selectedItem": { "alias": "selectedItem"; "required": false; }; "dependencyManager": { "alias": "dependencyManager"; "required": false; }; "isMobile": { "alias": "isMobile"; "required": false; }; "isTouchDevice": { "alias": "isTouchDevice"; "required": false; }; "strategy": { "alias": "strategy"; "required": false; }; "pendingStateController": { "alias": "pendingStateController"; "required": false; }; "applyFocusElementLabel": { "alias": "applyFocusElementLabel"; "required": false; }; "tabIndex": { "alias": "tabIndex"; "required": false; }; }, { "changeEvent": "change"; "scrollEvent": "scroll"; "keydownEvent": "keydown"; }, never, ["*"], true, never>;
|
|
79
80
|
}
|
|
80
81
|
/** The underlying custom element type for LuzmoActionMenu */
|
|
81
82
|
export type LuzmoActionMenuElement = LuzmoActionMenuHostElement;
|
|
@@ -55,6 +55,7 @@ export class LuzmoActionMenu {
|
|
|
55
55
|
selectedItem;
|
|
56
56
|
dependencyManager;
|
|
57
57
|
isMobile;
|
|
58
|
+
isTouchDevice;
|
|
58
59
|
strategy;
|
|
59
60
|
pendingStateController;
|
|
60
61
|
applyFocusElementLabel;
|
|
@@ -153,6 +154,9 @@ export class LuzmoActionMenu {
|
|
|
153
154
|
case 'isMobile':
|
|
154
155
|
this.setHostProperty('isMobile', changes['isMobile'].currentValue);
|
|
155
156
|
break;
|
|
157
|
+
case 'isTouchDevice':
|
|
158
|
+
this.setHostProperty('isTouchDevice', changes['isTouchDevice'].currentValue);
|
|
159
|
+
break;
|
|
156
160
|
case 'strategy':
|
|
157
161
|
this.setHostProperty('strategy', changes['strategy'].currentValue);
|
|
158
162
|
break;
|
|
@@ -246,7 +250,7 @@ export class LuzmoActionMenu {
|
|
|
246
250
|
return this.host.close();
|
|
247
251
|
}
|
|
248
252
|
static ɵfac = function LuzmoActionMenu_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || LuzmoActionMenu)(); };
|
|
249
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LuzmoActionMenu, selectors: [["luzmo-action-menu"]], inputs: { selects: "selects", staticColor: "staticColor", handleSlottableRequest: "handleSlottableRequest", managePresenceObservedSlot: "managePresenceObservedSlot", size: "size", appliedLabel: "appliedLabel", button: "button", disabled: "disabled", focused: "focused", icons: "icons", variant: "variant", invalid: "invalid", pending: "pending", pendingLabel: "pendingLabel", label: "label", open: "open", readonly: "readonly", labelAlignment: "labelAlignment", optionsMenu: "optionsMenu", overlayElement: "overlayElement", placement: "placement", quiet: "quiet", value: "value", selectedItem: "selectedItem", dependencyManager: "dependencyManager", isMobile: "isMobile", strategy: "strategy", pendingStateController: "pendingStateController", applyFocusElementLabel: "applyFocusElementLabel", tabIndex: "tabIndex" }, outputs: { changeEvent: "change", scrollEvent: "scroll", keydownEvent: "keydown" }, exportAs: ["luzmoActionMenu"], features: [i0.ɵɵProvidersFeature([
|
|
253
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LuzmoActionMenu, selectors: [["luzmo-action-menu"]], inputs: { selects: "selects", staticColor: "staticColor", handleSlottableRequest: "handleSlottableRequest", managePresenceObservedSlot: "managePresenceObservedSlot", size: "size", appliedLabel: "appliedLabel", button: "button", disabled: "disabled", focused: "focused", icons: "icons", variant: "variant", invalid: "invalid", pending: "pending", pendingLabel: "pendingLabel", label: "label", open: "open", readonly: "readonly", labelAlignment: "labelAlignment", optionsMenu: "optionsMenu", overlayElement: "overlayElement", placement: "placement", quiet: "quiet", value: "value", selectedItem: "selectedItem", dependencyManager: "dependencyManager", isMobile: "isMobile", isTouchDevice: "isTouchDevice", strategy: "strategy", pendingStateController: "pendingStateController", applyFocusElementLabel: "applyFocusElementLabel", tabIndex: "tabIndex" }, outputs: { changeEvent: "change", scrollEvent: "scroll", keydownEvent: "keydown" }, exportAs: ["luzmoActionMenu"], features: [i0.ɵɵProvidersFeature([
|
|
250
254
|
{
|
|
251
255
|
provide: NG_VALUE_ACCESSOR,
|
|
252
256
|
useExisting: forwardRef(() => LuzmoActionMenu),
|
|
@@ -351,6 +355,9 @@ export class LuzmoActionMenu {
|
|
|
351
355
|
}], isMobile: [{
|
|
352
356
|
type: Input,
|
|
353
357
|
args: [{ alias: 'isMobile' }]
|
|
358
|
+
}], isTouchDevice: [{
|
|
359
|
+
type: Input,
|
|
360
|
+
args: [{ alias: 'isTouchDevice' }]
|
|
354
361
|
}], strategy: [{
|
|
355
362
|
type: Input,
|
|
356
363
|
args: [{ alias: 'strategy' }]
|
|
@@ -16,6 +16,10 @@ export declare class LuzmoAvatar implements OnChanges {
|
|
|
16
16
|
rounding?: 'none' | 'full';
|
|
17
17
|
/** The src of the avatar image. */
|
|
18
18
|
src?: string;
|
|
19
|
+
/** The letter to show when no image is available. Pass a single character; the host decides what to display (for example the first letter of a name). */
|
|
20
|
+
letter?: string;
|
|
21
|
+
/** When true, the letter fallback derives its background color from the letter instead of using the neutral default. */
|
|
22
|
+
colorFromLetter?: boolean;
|
|
19
23
|
/** When true, marks the avatar image as decorative (sets alt=""). Use when the avatar does not convey meaningful information. */
|
|
20
24
|
isDecorative?: boolean;
|
|
21
25
|
/** Causes the browser to treat the linked URL as a download. */
|
|
@@ -49,7 +53,7 @@ export declare class LuzmoAvatar implements OnChanges {
|
|
|
49
53
|
private bindEvents;
|
|
50
54
|
focus(options?: FocusOptions): void;
|
|
51
55
|
static ɵfac: i0.ɵɵFactoryDeclaration<LuzmoAvatar, never>;
|
|
52
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<LuzmoAvatar, "luzmo-avatar", ["luzmoAvatar"], { "border": { "alias": "border"; "required": false; }; "rounding": { "alias": "rounding"; "required": false; }; "src": { "alias": "src"; "required": false; }; "isDecorative": { "alias": "isDecorative"; "required": false; }; "download": { "alias": "download"; "required": false; }; "label": { "alias": "label"; "required": false; }; "href": { "alias": "href"; "required": false; }; "target": { "alias": "target"; "required": false; }; "referrerpolicy": { "alias": "referrerpolicy"; "required": false; }; "rel": { "alias": "rel"; "required": false; }; "size": { "alias": "size"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "tabIndex": { "alias": "tabIndex"; "required": false; }; }, { "keydownEvent": "keydown"; }, never, ["*"], true, never>;
|
|
56
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<LuzmoAvatar, "luzmo-avatar", ["luzmoAvatar"], { "border": { "alias": "border"; "required": false; }; "rounding": { "alias": "rounding"; "required": false; }; "src": { "alias": "src"; "required": false; }; "letter": { "alias": "letter"; "required": false; }; "colorFromLetter": { "alias": "colorFromLetter"; "required": false; }; "isDecorative": { "alias": "isDecorative"; "required": false; }; "download": { "alias": "download"; "required": false; }; "label": { "alias": "label"; "required": false; }; "href": { "alias": "href"; "required": false; }; "target": { "alias": "target"; "required": false; }; "referrerpolicy": { "alias": "referrerpolicy"; "required": false; }; "rel": { "alias": "rel"; "required": false; }; "size": { "alias": "size"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "tabIndex": { "alias": "tabIndex"; "required": false; }; }, { "keydownEvent": "keydown"; }, never, ["*"], true, never>;
|
|
53
57
|
}
|
|
54
58
|
/** The underlying custom element type for LuzmoAvatar */
|
|
55
59
|
export type LuzmoAvatarElement = LuzmoAvatarHostElement;
|
package/esm/components/avatar.js
CHANGED
|
@@ -21,6 +21,10 @@ export class LuzmoAvatar {
|
|
|
21
21
|
rounding;
|
|
22
22
|
/** The src of the avatar image. */
|
|
23
23
|
src;
|
|
24
|
+
/** The letter to show when no image is available. Pass a single character; the host decides what to display (for example the first letter of a name). */
|
|
25
|
+
letter;
|
|
26
|
+
/** When true, the letter fallback derives its background color from the letter instead of using the neutral default. */
|
|
27
|
+
colorFromLetter;
|
|
24
28
|
/** When true, marks the avatar image as decorative (sets alt=""). Use when the avatar does not convey meaningful information. */
|
|
25
29
|
isDecorative;
|
|
26
30
|
/** Causes the browser to treat the linked URL as a download. */
|
|
@@ -62,6 +66,12 @@ export class LuzmoAvatar {
|
|
|
62
66
|
case 'src':
|
|
63
67
|
this.setHostProperty('src', changes['src'].currentValue);
|
|
64
68
|
break;
|
|
69
|
+
case 'letter':
|
|
70
|
+
this.setHostProperty('letter', changes['letter'].currentValue);
|
|
71
|
+
break;
|
|
72
|
+
case 'colorFromLetter':
|
|
73
|
+
this.setHostProperty('colorFromLetter', changes['colorFromLetter'].currentValue);
|
|
74
|
+
break;
|
|
65
75
|
case 'isDecorative':
|
|
66
76
|
this.setHostProperty('isDecorative', changes['isDecorative'].currentValue);
|
|
67
77
|
break;
|
|
@@ -115,7 +125,7 @@ export class LuzmoAvatar {
|
|
|
115
125
|
return this.host.focus(options);
|
|
116
126
|
}
|
|
117
127
|
static ɵfac = function LuzmoAvatar_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || LuzmoAvatar)(); };
|
|
118
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LuzmoAvatar, selectors: [["luzmo-avatar"]], inputs: { border: "border", rounding: "rounding", src: "src", isDecorative: "isDecorative", download: "download", label: "label", href: "href", target: "target", referrerpolicy: "referrerpolicy", rel: "rel", size: "size", disabled: "disabled", tabIndex: "tabIndex" }, outputs: { keydownEvent: "keydown" }, exportAs: ["luzmoAvatar"], features: [i0.ɵɵNgOnChangesFeature], ngContentSelectors: _c0, decls: 1, vars: 0, template: function LuzmoAvatar_Template(rf, ctx) { if (rf & 1) {
|
|
128
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LuzmoAvatar, selectors: [["luzmo-avatar"]], inputs: { border: "border", rounding: "rounding", src: "src", letter: "letter", colorFromLetter: "colorFromLetter", isDecorative: "isDecorative", download: "download", label: "label", href: "href", target: "target", referrerpolicy: "referrerpolicy", rel: "rel", size: "size", disabled: "disabled", tabIndex: "tabIndex" }, outputs: { keydownEvent: "keydown" }, exportAs: ["luzmoAvatar"], features: [i0.ɵɵNgOnChangesFeature], ngContentSelectors: _c0, decls: 1, vars: 0, template: function LuzmoAvatar_Template(rf, ctx) { if (rf & 1) {
|
|
119
129
|
i0.ɵɵprojectionDef();
|
|
120
130
|
i0.ɵɵprojection(0);
|
|
121
131
|
} }, encapsulation: 2 });
|
|
@@ -138,6 +148,12 @@ export class LuzmoAvatar {
|
|
|
138
148
|
}], src: [{
|
|
139
149
|
type: Input,
|
|
140
150
|
args: [{ alias: 'src' }]
|
|
151
|
+
}], letter: [{
|
|
152
|
+
type: Input,
|
|
153
|
+
args: [{ alias: 'letter' }]
|
|
154
|
+
}], colorFromLetter: [{
|
|
155
|
+
type: Input,
|
|
156
|
+
args: [{ alias: 'colorFromLetter' }]
|
|
141
157
|
}], isDecorative: [{
|
|
142
158
|
type: Input,
|
|
143
159
|
args: [{ alias: 'isDecorative' }]
|
|
@@ -38,8 +38,6 @@ export declare class LuzmoButton implements OnChanges {
|
|
|
38
38
|
disabled?: boolean;
|
|
39
39
|
/** The tab index to apply to this control. See general documentation about the tabindex HTML property */
|
|
40
40
|
tabIndex?: number;
|
|
41
|
-
/** Announces that the `value` of the element has changed */
|
|
42
|
-
readonly changeEvent: import("@angular/core").OutputEmitterRef<CustomEvent<unknown>>;
|
|
43
41
|
/** Trick :focus-visible polyfill into thinking keyboard based focus */
|
|
44
42
|
readonly keydownEvent: import("@angular/core").OutputEmitterRef<unknown>;
|
|
45
43
|
constructor();
|
|
@@ -54,7 +52,7 @@ export declare class LuzmoButton implements OnChanges {
|
|
|
54
52
|
private bindEvents;
|
|
55
53
|
focus(options?: FocusOptions): void;
|
|
56
54
|
static ɵfac: i0.ɵɵFactoryDeclaration<LuzmoButton, never>;
|
|
57
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<LuzmoButton, "luzmo-button", ["luzmoButton"], { "pendingLabel": { "alias": "pendingLabel"; "required": false; }; "pending": { "alias": "pending"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; "staticColor": { "alias": "staticColor"; "required": false; }; "treatment": { "alias": "treatment"; "required": false; }; "quiet": { "alias": "quiet"; "required": false; }; "noWrap": { "alias": "noWrap"; "required": false; }; "pendingStateController": { "alias": "pendingStateController"; "required": false; }; "size": { "alias": "size"; "required": false; }; "download": { "alias": "download"; "required": false; }; "label": { "alias": "label"; "required": false; }; "href": { "alias": "href"; "required": false; }; "target": { "alias": "target"; "required": false; }; "referrerpolicy": { "alias": "referrerpolicy"; "required": false; }; "rel": { "alias": "rel"; "required": false; }; "active": { "alias": "active"; "required": false; }; "type": { "alias": "type"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "tabIndex": { "alias": "tabIndex"; "required": false; }; }, { "
|
|
55
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<LuzmoButton, "luzmo-button", ["luzmoButton"], { "pendingLabel": { "alias": "pendingLabel"; "required": false; }; "pending": { "alias": "pending"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; "staticColor": { "alias": "staticColor"; "required": false; }; "treatment": { "alias": "treatment"; "required": false; }; "quiet": { "alias": "quiet"; "required": false; }; "noWrap": { "alias": "noWrap"; "required": false; }; "pendingStateController": { "alias": "pendingStateController"; "required": false; }; "size": { "alias": "size"; "required": false; }; "download": { "alias": "download"; "required": false; }; "label": { "alias": "label"; "required": false; }; "href": { "alias": "href"; "required": false; }; "target": { "alias": "target"; "required": false; }; "referrerpolicy": { "alias": "referrerpolicy"; "required": false; }; "rel": { "alias": "rel"; "required": false; }; "active": { "alias": "active"; "required": false; }; "type": { "alias": "type"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "tabIndex": { "alias": "tabIndex"; "required": false; }; }, { "keydownEvent": "keydown"; }, never, ["*"], true, never>;
|
|
58
56
|
}
|
|
59
57
|
/** The underlying custom element type for LuzmoButton */
|
|
60
58
|
export type LuzmoButtonElement = LuzmoButtonHostElement;
|
package/esm/components/button.js
CHANGED
|
@@ -46,8 +46,6 @@ export class LuzmoButton {
|
|
|
46
46
|
disabled;
|
|
47
47
|
/** The tab index to apply to this control. See general documentation about the tabindex HTML property */
|
|
48
48
|
tabIndex;
|
|
49
|
-
/** Announces that the `value` of the element has changed */
|
|
50
|
-
changeEvent = output({ alias: 'change' });
|
|
51
49
|
/** Trick :focus-visible polyfill into thinking keyboard based focus */
|
|
52
50
|
keydownEvent = output({ alias: 'keydown' });
|
|
53
51
|
constructor() {
|
|
@@ -133,9 +131,6 @@ export class LuzmoButton {
|
|
|
133
131
|
this.renderer.setProperty(this.host, key, value);
|
|
134
132
|
}
|
|
135
133
|
bindEvents() {
|
|
136
|
-
this.listenerCleanup.push(this.renderer.listen(this.host, 'change', (event) => {
|
|
137
|
-
this.changeEvent.emit(event);
|
|
138
|
-
}));
|
|
139
134
|
this.listenerCleanup.push(this.renderer.listen(this.host, 'keydown', (event) => {
|
|
140
135
|
this.keydownEvent.emit(event);
|
|
141
136
|
}));
|
|
@@ -144,7 +139,7 @@ export class LuzmoButton {
|
|
|
144
139
|
return this.host.focus(options);
|
|
145
140
|
}
|
|
146
141
|
static ɵfac = function LuzmoButton_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || LuzmoButton)(); };
|
|
147
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LuzmoButton, selectors: [["luzmo-button"]], inputs: { pendingLabel: "pendingLabel", pending: "pending", variant: "variant", staticColor: "staticColor", treatment: "treatment", quiet: "quiet", noWrap: "noWrap", pendingStateController: "pendingStateController", size: "size", download: "download", label: "label", href: "href", target: "target", referrerpolicy: "referrerpolicy", rel: "rel", active: "active", type: "type", disabled: "disabled", tabIndex: "tabIndex" }, outputs: {
|
|
142
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LuzmoButton, selectors: [["luzmo-button"]], inputs: { pendingLabel: "pendingLabel", pending: "pending", variant: "variant", staticColor: "staticColor", treatment: "treatment", quiet: "quiet", noWrap: "noWrap", pendingStateController: "pendingStateController", size: "size", download: "download", label: "label", href: "href", target: "target", referrerpolicy: "referrerpolicy", rel: "rel", active: "active", type: "type", disabled: "disabled", tabIndex: "tabIndex" }, outputs: { keydownEvent: "keydown" }, exportAs: ["luzmoButton"], features: [i0.ɵɵNgOnChangesFeature], ngContentSelectors: _c0, decls: 1, vars: 0, template: function LuzmoButton_Template(rf, ctx) { if (rf & 1) {
|
|
148
143
|
i0.ɵɵprojectionDef();
|
|
149
144
|
i0.ɵɵprojection(0);
|
|
150
145
|
} }, encapsulation: 2 });
|
|
@@ -215,5 +210,5 @@ export class LuzmoButton {
|
|
|
215
210
|
}], tabIndex: [{
|
|
216
211
|
type: Input,
|
|
217
212
|
args: [{ alias: 'tabIndex' }]
|
|
218
|
-
}],
|
|
213
|
+
}], keydownEvent: [{ type: i0.Output, args: ["keydown"] }] }); })();
|
|
219
214
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(LuzmoButton, { className: "LuzmoButton", filePath: "components/button.ts", lineNumber: 18 }); })();
|
|
@@ -7,6 +7,7 @@ const _c0 = ["*"];
|
|
|
7
7
|
* Angular wrapper component for <luzmo-checkbox>
|
|
8
8
|
*
|
|
9
9
|
* @slot (default) - content to display as the label for the Checkbox
|
|
10
|
+
* @csspart control - Native checkbox indicator. Hidden when used inside `luzmo-question-box`.
|
|
10
11
|
*/
|
|
11
12
|
export class LuzmoCheckbox {
|
|
12
13
|
elementRef = inject(ElementRef);
|
|
@@ -203,4 +204,4 @@ export class LuzmoCheckbox {
|
|
|
203
204
|
type: Input,
|
|
204
205
|
args: [{ alias: 'readonly' }]
|
|
205
206
|
}], changeEvent: [{ type: i0.Output, args: ["change"] }] }); })();
|
|
206
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(LuzmoCheckbox, { className: "LuzmoCheckbox", filePath: "components/checkbox.ts", lineNumber:
|
|
207
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(LuzmoCheckbox, { className: "LuzmoCheckbox", filePath: "components/checkbox.ts", lineNumber: 26 }); })();
|
|
@@ -24,6 +24,8 @@ export declare class LuzmoMenuGroup implements OnChanges, ControlValueAccessor {
|
|
|
24
24
|
menuSlot?: unknown;
|
|
25
25
|
focusedItemIndex?: number;
|
|
26
26
|
focusInItemIndex?: number;
|
|
27
|
+
shouldSupportDragAndSelect?: boolean;
|
|
28
|
+
isScrolling?: boolean;
|
|
27
29
|
handleSubmenuClosed?: unknown;
|
|
28
30
|
handleSubmenuOpened?: unknown;
|
|
29
31
|
/** Announces that the `value` of the element has changed */
|
|
@@ -49,7 +51,7 @@ export declare class LuzmoMenuGroup implements OnChanges, ControlValueAccessor {
|
|
|
49
51
|
setDisabledState(isDisabled: boolean): void;
|
|
50
52
|
focus({ preventScroll }: FocusOptions): void;
|
|
51
53
|
static ɵfac: i0.ɵɵFactoryDeclaration<LuzmoMenuGroup, never>;
|
|
52
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<LuzmoMenuGroup, "luzmo-menu-group", ["luzmoMenuGroup"], { "size": { "alias": "size"; "required": false; }; "label": { "alias": "label"; "required": false; }; "ignore": { "alias": "ignore"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; "selects": { "alias": "selects"; "required": false; }; "value": { "alias": "value"; "required": false; }; "valueSeparator": { "alias": "valueSeparator"; "required": false; }; "selected": { "alias": "selected"; "required": false; }; "selectedItems": { "alias": "selectedItems"; "required": false; }; "menuSlot": { "alias": "menuSlot"; "required": false; }; "focusedItemIndex": { "alias": "focusedItemIndex"; "required": false; }; "focusInItemIndex": { "alias": "focusInItemIndex"; "required": false; }; "handleSubmenuClosed": { "alias": "handleSubmenuClosed"; "required": false; }; "handleSubmenuOpened": { "alias": "handleSubmenuOpened"; "required": false; }; }, { "changeEvent": "change"; "closeEvent": "close"; }, never, ["*"], true, never>;
|
|
54
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<LuzmoMenuGroup, "luzmo-menu-group", ["luzmoMenuGroup"], { "size": { "alias": "size"; "required": false; }; "label": { "alias": "label"; "required": false; }; "ignore": { "alias": "ignore"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; "selects": { "alias": "selects"; "required": false; }; "value": { "alias": "value"; "required": false; }; "valueSeparator": { "alias": "valueSeparator"; "required": false; }; "selected": { "alias": "selected"; "required": false; }; "selectedItems": { "alias": "selectedItems"; "required": false; }; "menuSlot": { "alias": "menuSlot"; "required": false; }; "focusedItemIndex": { "alias": "focusedItemIndex"; "required": false; }; "focusInItemIndex": { "alias": "focusInItemIndex"; "required": false; }; "shouldSupportDragAndSelect": { "alias": "shouldSupportDragAndSelect"; "required": false; }; "isScrolling": { "alias": "isScrolling"; "required": false; }; "handleSubmenuClosed": { "alias": "handleSubmenuClosed"; "required": false; }; "handleSubmenuOpened": { "alias": "handleSubmenuOpened"; "required": false; }; }, { "changeEvent": "change"; "closeEvent": "close"; }, never, ["*"], true, never>;
|
|
53
55
|
}
|
|
54
56
|
/** The underlying custom element type for LuzmoMenuGroup */
|
|
55
57
|
export type LuzmoMenuGroupElement = LuzmoMenuGroupHostElement;
|
|
@@ -31,6 +31,8 @@ export class LuzmoMenuGroup {
|
|
|
31
31
|
menuSlot;
|
|
32
32
|
focusedItemIndex;
|
|
33
33
|
focusInItemIndex;
|
|
34
|
+
shouldSupportDragAndSelect;
|
|
35
|
+
isScrolling;
|
|
34
36
|
handleSubmenuClosed;
|
|
35
37
|
handleSubmenuOpened;
|
|
36
38
|
/** Announces that the `value` of the element has changed */
|
|
@@ -83,6 +85,12 @@ export class LuzmoMenuGroup {
|
|
|
83
85
|
case 'focusInItemIndex':
|
|
84
86
|
this.setHostProperty('focusInItemIndex', changes['focusInItemIndex'].currentValue);
|
|
85
87
|
break;
|
|
88
|
+
case 'shouldSupportDragAndSelect':
|
|
89
|
+
this.setHostProperty('shouldSupportDragAndSelect', changes['shouldSupportDragAndSelect'].currentValue);
|
|
90
|
+
break;
|
|
91
|
+
case 'isScrolling':
|
|
92
|
+
this.setHostProperty('isScrolling', changes['isScrolling'].currentValue);
|
|
93
|
+
break;
|
|
86
94
|
case 'handleSubmenuClosed':
|
|
87
95
|
this.setHostProperty('handleSubmenuClosed', changes['handleSubmenuClosed'].currentValue);
|
|
88
96
|
break;
|
|
@@ -156,7 +164,7 @@ export class LuzmoMenuGroup {
|
|
|
156
164
|
return this.host.focus({ preventScroll });
|
|
157
165
|
}
|
|
158
166
|
static ɵfac = function LuzmoMenuGroup_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || LuzmoMenuGroup)(); };
|
|
159
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LuzmoMenuGroup, selectors: [["luzmo-menu-group"]], inputs: { size: "size", label: "label", ignore: "ignore", variant: "variant", selects: "selects", value: "value", valueSeparator: "valueSeparator", selected: "selected", selectedItems: "selectedItems", menuSlot: "menuSlot", focusedItemIndex: "focusedItemIndex", focusInItemIndex: "focusInItemIndex", handleSubmenuClosed: "handleSubmenuClosed", handleSubmenuOpened: "handleSubmenuOpened" }, outputs: { changeEvent: "change", closeEvent: "close" }, exportAs: ["luzmoMenuGroup"], features: [i0.ɵɵProvidersFeature([
|
|
167
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LuzmoMenuGroup, selectors: [["luzmo-menu-group"]], inputs: { size: "size", label: "label", ignore: "ignore", variant: "variant", selects: "selects", value: "value", valueSeparator: "valueSeparator", selected: "selected", selectedItems: "selectedItems", menuSlot: "menuSlot", focusedItemIndex: "focusedItemIndex", focusInItemIndex: "focusInItemIndex", shouldSupportDragAndSelect: "shouldSupportDragAndSelect", isScrolling: "isScrolling", handleSubmenuClosed: "handleSubmenuClosed", handleSubmenuOpened: "handleSubmenuOpened" }, outputs: { changeEvent: "change", closeEvent: "close" }, exportAs: ["luzmoMenuGroup"], features: [i0.ɵɵProvidersFeature([
|
|
160
168
|
{
|
|
161
169
|
provide: NG_VALUE_ACCESSOR,
|
|
162
170
|
useExisting: forwardRef(() => LuzmoMenuGroup),
|
|
@@ -219,6 +227,12 @@ export class LuzmoMenuGroup {
|
|
|
219
227
|
}], focusInItemIndex: [{
|
|
220
228
|
type: Input,
|
|
221
229
|
args: [{ alias: 'focusInItemIndex' }]
|
|
230
|
+
}], shouldSupportDragAndSelect: [{
|
|
231
|
+
type: Input,
|
|
232
|
+
args: [{ alias: 'shouldSupportDragAndSelect' }]
|
|
233
|
+
}], isScrolling: [{
|
|
234
|
+
type: Input,
|
|
235
|
+
args: [{ alias: 'isScrolling' }]
|
|
222
236
|
}], handleSubmenuClosed: [{
|
|
223
237
|
type: Input,
|
|
224
238
|
args: [{ alias: 'handleSubmenuClosed' }]
|
|
@@ -42,8 +42,8 @@ export declare class LuzmoMenuItem implements OnChanges {
|
|
|
42
42
|
disabled?: boolean;
|
|
43
43
|
/** The tab index to apply to this control. See general documentation about the tabindex HTML property */
|
|
44
44
|
tabIndex?: number;
|
|
45
|
-
/** announces the item has been added so a parent menu can take
|
|
46
|
-
readonly
|
|
45
|
+
/** announces the item has been added or updated so a parent menu can take ownership */
|
|
46
|
+
readonly luzmoMenuItemAddedOrUpdatedEvent: import("@angular/core").OutputEmitterRef<CustomEvent<unknown>>;
|
|
47
47
|
/** Trick :focus-visible polyfill into thinking keyboard based focus */
|
|
48
48
|
readonly keydownEvent: import("@angular/core").OutputEmitterRef<unknown>;
|
|
49
49
|
constructor();
|
|
@@ -58,7 +58,7 @@ export declare class LuzmoMenuItem implements OnChanges {
|
|
|
58
58
|
private bindEvents;
|
|
59
59
|
focus(options?: FocusOptions): void;
|
|
60
60
|
static ɵfac: i0.ɵɵFactoryDeclaration<LuzmoMenuItem, never>;
|
|
61
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<LuzmoMenuItem, "luzmo-menu-item", ["luzmoMenuItem"], { "abortControllerSubmenu": { "alias": "abortControllerSubmenu"; "required": false; }; "active": { "alias": "active"; "required": false; }; "focused": { "alias": "focused"; "required": false; }; "selected": { "alias": "selected"; "required": false; }; "value": { "alias": "value"; "required": false; }; "hasSubmenu": { "alias": "hasSubmenu"; "required": false; }; "tooltip": { "alias": "tooltip"; "required": false; }; "tooltipPlacement": { "alias": "tooltipPlacement"; "required": false; }; "contentSlot": { "alias": "contentSlot"; "required": false; }; "iconSlot": { "alias": "iconSlot"; "required": false; }; "noWrap": { "alias": "noWrap"; "required": false; }; "overlayElement": { "alias": "overlayElement"; "required": false; }; "open": { "alias": "open"; "required": false; }; "menuData": { "alias": "menuData"; "required": false; }; "download": { "alias": "download"; "required": false; }; "label": { "alias": "label"; "required": false; }; "href": { "alias": "href"; "required": false; }; "target": { "alias": "target"; "required": false; }; "referrerpolicy": { "alias": "referrerpolicy"; "required": false; }; "rel": { "alias": "rel"; "required": false; }; "managePresenceObservedSlot": { "alias": "managePresenceObservedSlot"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "tabIndex": { "alias": "tabIndex"; "required": false; }; }, { "
|
|
61
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<LuzmoMenuItem, "luzmo-menu-item", ["luzmoMenuItem"], { "abortControllerSubmenu": { "alias": "abortControllerSubmenu"; "required": false; }; "active": { "alias": "active"; "required": false; }; "focused": { "alias": "focused"; "required": false; }; "selected": { "alias": "selected"; "required": false; }; "value": { "alias": "value"; "required": false; }; "hasSubmenu": { "alias": "hasSubmenu"; "required": false; }; "tooltip": { "alias": "tooltip"; "required": false; }; "tooltipPlacement": { "alias": "tooltipPlacement"; "required": false; }; "contentSlot": { "alias": "contentSlot"; "required": false; }; "iconSlot": { "alias": "iconSlot"; "required": false; }; "noWrap": { "alias": "noWrap"; "required": false; }; "overlayElement": { "alias": "overlayElement"; "required": false; }; "open": { "alias": "open"; "required": false; }; "menuData": { "alias": "menuData"; "required": false; }; "download": { "alias": "download"; "required": false; }; "label": { "alias": "label"; "required": false; }; "href": { "alias": "href"; "required": false; }; "target": { "alias": "target"; "required": false; }; "referrerpolicy": { "alias": "referrerpolicy"; "required": false; }; "rel": { "alias": "rel"; "required": false; }; "managePresenceObservedSlot": { "alias": "managePresenceObservedSlot"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "tabIndex": { "alias": "tabIndex"; "required": false; }; }, { "luzmoMenuItemAddedOrUpdatedEvent": "luzmo-menu-item-added-or-updated"; "keydownEvent": "keydown"; }, never, ["*"], true, never>;
|
|
62
62
|
}
|
|
63
63
|
/** The underlying custom element type for LuzmoMenuItem */
|
|
64
64
|
export type LuzmoMenuItemElement = LuzmoMenuItemHostElement;
|
|
@@ -52,8 +52,8 @@ export class LuzmoMenuItem {
|
|
|
52
52
|
disabled;
|
|
53
53
|
/** The tab index to apply to this control. See general documentation about the tabindex HTML property */
|
|
54
54
|
tabIndex;
|
|
55
|
-
/** announces the item has been added so a parent menu can take
|
|
56
|
-
|
|
55
|
+
/** announces the item has been added or updated so a parent menu can take ownership */
|
|
56
|
+
luzmoMenuItemAddedOrUpdatedEvent = output({ alias: 'luzmo-menu-item-added-or-updated' });
|
|
57
57
|
/** Trick :focus-visible polyfill into thinking keyboard based focus */
|
|
58
58
|
keydownEvent = output({ alias: 'keydown' });
|
|
59
59
|
constructor() {
|
|
@@ -151,8 +151,8 @@ export class LuzmoMenuItem {
|
|
|
151
151
|
this.renderer.setProperty(this.host, key, value);
|
|
152
152
|
}
|
|
153
153
|
bindEvents() {
|
|
154
|
-
this.listenerCleanup.push(this.renderer.listen(this.host, 'luzmo-menu-item-added', (event) => {
|
|
155
|
-
this.
|
|
154
|
+
this.listenerCleanup.push(this.renderer.listen(this.host, 'luzmo-menu-item-added-or-updated', (event) => {
|
|
155
|
+
this.luzmoMenuItemAddedOrUpdatedEvent.emit(event);
|
|
156
156
|
}));
|
|
157
157
|
this.listenerCleanup.push(this.renderer.listen(this.host, 'keydown', (event) => {
|
|
158
158
|
this.keydownEvent.emit(event);
|
|
@@ -162,7 +162,7 @@ export class LuzmoMenuItem {
|
|
|
162
162
|
return this.host.focus(options);
|
|
163
163
|
}
|
|
164
164
|
static ɵfac = function LuzmoMenuItem_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || LuzmoMenuItem)(); };
|
|
165
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LuzmoMenuItem, selectors: [["luzmo-menu-item"]], inputs: { abortControllerSubmenu: "abortControllerSubmenu", active: "active", focused: "focused", selected: "selected", value: "value", hasSubmenu: "hasSubmenu", tooltip: "tooltip", tooltipPlacement: "tooltipPlacement", contentSlot: "contentSlot", iconSlot: "iconSlot", noWrap: "noWrap", overlayElement: "overlayElement", open: "open", menuData: "menuData", download: "download", label: "label", href: "href", target: "target", referrerpolicy: "referrerpolicy", rel: "rel", managePresenceObservedSlot: "managePresenceObservedSlot", disabled: "disabled", tabIndex: "tabIndex" }, outputs: {
|
|
165
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LuzmoMenuItem, selectors: [["luzmo-menu-item"]], inputs: { abortControllerSubmenu: "abortControllerSubmenu", active: "active", focused: "focused", selected: "selected", value: "value", hasSubmenu: "hasSubmenu", tooltip: "tooltip", tooltipPlacement: "tooltipPlacement", contentSlot: "contentSlot", iconSlot: "iconSlot", noWrap: "noWrap", overlayElement: "overlayElement", open: "open", menuData: "menuData", download: "download", label: "label", href: "href", target: "target", referrerpolicy: "referrerpolicy", rel: "rel", managePresenceObservedSlot: "managePresenceObservedSlot", disabled: "disabled", tabIndex: "tabIndex" }, outputs: { luzmoMenuItemAddedOrUpdatedEvent: "luzmo-menu-item-added-or-updated", keydownEvent: "keydown" }, exportAs: ["luzmoMenuItem"], features: [i0.ɵɵNgOnChangesFeature], ngContentSelectors: _c0, decls: 1, vars: 0, template: function LuzmoMenuItem_Template(rf, ctx) { if (rf & 1) {
|
|
166
166
|
i0.ɵɵprojectionDef();
|
|
167
167
|
i0.ɵɵprojection(0);
|
|
168
168
|
} }, encapsulation: 2 });
|
|
@@ -245,5 +245,5 @@ export class LuzmoMenuItem {
|
|
|
245
245
|
}], tabIndex: [{
|
|
246
246
|
type: Input,
|
|
247
247
|
args: [{ alias: 'tabIndex' }]
|
|
248
|
-
}],
|
|
248
|
+
}], luzmoMenuItemAddedOrUpdatedEvent: [{ type: i0.Output, args: ["luzmo-menu-item-added-or-updated"] }], keydownEvent: [{ type: i0.Output, args: ["keydown"] }] }); })();
|
|
249
249
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(LuzmoMenuItem, { className: "LuzmoMenuItem", filePath: "components/menu-item.ts", lineNumber: 22 }); })();
|
package/esm/components/menu.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { OnChanges, SimpleChanges } from '@angular/core';
|
|
2
2
|
import { ControlValueAccessor } from '@angular/forms';
|
|
3
3
|
import '@luzmo/lucero/menu';
|
|
4
|
-
import type { LuzmoMenu as LuzmoMenuHostElement } from '@luzmo/lucero/menu';
|
|
4
|
+
import type { LuzmoMenu as LuzmoMenuHostElement, LuzmoMenuItem } from '@luzmo/lucero/menu';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
export type { MenuChildItem, MenuItemChildren } from '@luzmo/lucero/menu';
|
|
7
7
|
export declare class LuzmoMenu implements OnChanges, ControlValueAccessor {
|
|
@@ -19,10 +19,12 @@ export declare class LuzmoMenu implements OnChanges, ControlValueAccessor {
|
|
|
19
19
|
value?: string;
|
|
20
20
|
valueSeparator?: string;
|
|
21
21
|
selected?: string[];
|
|
22
|
-
selectedItems?:
|
|
22
|
+
selectedItems?: LuzmoMenuItem[];
|
|
23
23
|
menuSlot?: unknown;
|
|
24
24
|
focusedItemIndex?: number;
|
|
25
25
|
focusInItemIndex?: number;
|
|
26
|
+
shouldSupportDragAndSelect?: boolean;
|
|
27
|
+
isScrolling?: boolean;
|
|
26
28
|
handleSubmenuClosed?: unknown;
|
|
27
29
|
handleSubmenuOpened?: unknown;
|
|
28
30
|
size?: ('xxs' | 'xs' | 's' | 'm' | 'l' | 'xl' | 'xxl');
|
|
@@ -49,7 +51,7 @@ export declare class LuzmoMenu implements OnChanges, ControlValueAccessor {
|
|
|
49
51
|
setDisabledState(isDisabled: boolean): void;
|
|
50
52
|
focus({ preventScroll }: FocusOptions): void;
|
|
51
53
|
static ɵfac: i0.ɵɵFactoryDeclaration<LuzmoMenu, never>;
|
|
52
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<LuzmoMenu, "luzmo-menu", ["luzmoMenu"], { "label": { "alias": "label"; "required": false; }; "ignore": { "alias": "ignore"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; "selects": { "alias": "selects"; "required": false; }; "value": { "alias": "value"; "required": false; }; "valueSeparator": { "alias": "valueSeparator"; "required": false; }; "selected": { "alias": "selected"; "required": false; }; "selectedItems": { "alias": "selectedItems"; "required": false; }; "menuSlot": { "alias": "menuSlot"; "required": false; }; "focusedItemIndex": { "alias": "focusedItemIndex"; "required": false; }; "focusInItemIndex": { "alias": "focusInItemIndex"; "required": false; }; "handleSubmenuClosed": { "alias": "handleSubmenuClosed"; "required": false; }; "handleSubmenuOpened": { "alias": "handleSubmenuOpened"; "required": false; }; "size": { "alias": "size"; "required": false; }; }, { "changeEvent": "change"; "closeEvent": "close"; }, never, ["*"], true, never>;
|
|
54
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<LuzmoMenu, "luzmo-menu", ["luzmoMenu"], { "label": { "alias": "label"; "required": false; }; "ignore": { "alias": "ignore"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; "selects": { "alias": "selects"; "required": false; }; "value": { "alias": "value"; "required": false; }; "valueSeparator": { "alias": "valueSeparator"; "required": false; }; "selected": { "alias": "selected"; "required": false; }; "selectedItems": { "alias": "selectedItems"; "required": false; }; "menuSlot": { "alias": "menuSlot"; "required": false; }; "focusedItemIndex": { "alias": "focusedItemIndex"; "required": false; }; "focusInItemIndex": { "alias": "focusInItemIndex"; "required": false; }; "shouldSupportDragAndSelect": { "alias": "shouldSupportDragAndSelect"; "required": false; }; "isScrolling": { "alias": "isScrolling"; "required": false; }; "handleSubmenuClosed": { "alias": "handleSubmenuClosed"; "required": false; }; "handleSubmenuOpened": { "alias": "handleSubmenuOpened"; "required": false; }; "size": { "alias": "size"; "required": false; }; }, { "changeEvent": "change"; "closeEvent": "close"; }, never, ["*"], true, never>;
|
|
53
55
|
}
|
|
54
56
|
/** The underlying custom element type for LuzmoMenu */
|
|
55
57
|
export type LuzmoMenuElement = LuzmoMenuHostElement;
|
package/esm/components/menu.js
CHANGED
|
@@ -29,6 +29,8 @@ export class LuzmoMenu {
|
|
|
29
29
|
menuSlot;
|
|
30
30
|
focusedItemIndex;
|
|
31
31
|
focusInItemIndex;
|
|
32
|
+
shouldSupportDragAndSelect;
|
|
33
|
+
isScrolling;
|
|
32
34
|
handleSubmenuClosed;
|
|
33
35
|
handleSubmenuOpened;
|
|
34
36
|
size;
|
|
@@ -79,6 +81,12 @@ export class LuzmoMenu {
|
|
|
79
81
|
case 'focusInItemIndex':
|
|
80
82
|
this.setHostProperty('focusInItemIndex', changes['focusInItemIndex'].currentValue);
|
|
81
83
|
break;
|
|
84
|
+
case 'shouldSupportDragAndSelect':
|
|
85
|
+
this.setHostProperty('shouldSupportDragAndSelect', changes['shouldSupportDragAndSelect'].currentValue);
|
|
86
|
+
break;
|
|
87
|
+
case 'isScrolling':
|
|
88
|
+
this.setHostProperty('isScrolling', changes['isScrolling'].currentValue);
|
|
89
|
+
break;
|
|
82
90
|
case 'handleSubmenuClosed':
|
|
83
91
|
this.setHostProperty('handleSubmenuClosed', changes['handleSubmenuClosed'].currentValue);
|
|
84
92
|
break;
|
|
@@ -155,7 +163,7 @@ export class LuzmoMenu {
|
|
|
155
163
|
return this.host.focus({ preventScroll });
|
|
156
164
|
}
|
|
157
165
|
static ɵfac = function LuzmoMenu_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || LuzmoMenu)(); };
|
|
158
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LuzmoMenu, selectors: [["luzmo-menu"]], inputs: { label: "label", ignore: "ignore", variant: "variant", selects: "selects", value: "value", valueSeparator: "valueSeparator", selected: "selected", selectedItems: "selectedItems", menuSlot: "menuSlot", focusedItemIndex: "focusedItemIndex", focusInItemIndex: "focusInItemIndex", handleSubmenuClosed: "handleSubmenuClosed", handleSubmenuOpened: "handleSubmenuOpened", size: "size" }, outputs: { changeEvent: "change", closeEvent: "close" }, exportAs: ["luzmoMenu"], features: [i0.ɵɵProvidersFeature([
|
|
166
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LuzmoMenu, selectors: [["luzmo-menu"]], inputs: { label: "label", ignore: "ignore", variant: "variant", selects: "selects", value: "value", valueSeparator: "valueSeparator", selected: "selected", selectedItems: "selectedItems", menuSlot: "menuSlot", focusedItemIndex: "focusedItemIndex", focusInItemIndex: "focusInItemIndex", shouldSupportDragAndSelect: "shouldSupportDragAndSelect", isScrolling: "isScrolling", handleSubmenuClosed: "handleSubmenuClosed", handleSubmenuOpened: "handleSubmenuOpened", size: "size" }, outputs: { changeEvent: "change", closeEvent: "close" }, exportAs: ["luzmoMenu"], features: [i0.ɵɵProvidersFeature([
|
|
159
167
|
{
|
|
160
168
|
provide: NG_VALUE_ACCESSOR,
|
|
161
169
|
useExisting: forwardRef(() => LuzmoMenu),
|
|
@@ -215,6 +223,12 @@ export class LuzmoMenu {
|
|
|
215
223
|
}], focusInItemIndex: [{
|
|
216
224
|
type: Input,
|
|
217
225
|
args: [{ alias: 'focusInItemIndex' }]
|
|
226
|
+
}], shouldSupportDragAndSelect: [{
|
|
227
|
+
type: Input,
|
|
228
|
+
args: [{ alias: 'shouldSupportDragAndSelect' }]
|
|
229
|
+
}], isScrolling: [{
|
|
230
|
+
type: Input,
|
|
231
|
+
args: [{ alias: 'isScrolling' }]
|
|
218
232
|
}], handleSubmenuClosed: [{
|
|
219
233
|
type: Input,
|
|
220
234
|
args: [{ alias: 'handleSubmenuClosed' }]
|