@luzmo/ngx-lucero 1.0.3-alpha.9 → 2.0.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.
Files changed (50) hide show
  1. package/README.md +37 -0
  2. package/esm/components/action-button.d.ts +6 -4
  3. package/esm/components/action-button.js +10 -2
  4. package/esm/components/action-menu.d.ts +2 -1
  5. package/esm/components/action-menu.js +8 -1
  6. package/esm/components/avatar.d.ts +5 -1
  7. package/esm/components/avatar.js +17 -1
  8. package/esm/components/button.d.ts +1 -3
  9. package/esm/components/button.js +2 -7
  10. package/esm/components/checkbox.js +2 -1
  11. package/esm/components/menu-group.d.ts +3 -1
  12. package/esm/components/menu-group.js +15 -1
  13. package/esm/components/menu-item.d.ts +3 -3
  14. package/esm/components/menu-item.js +6 -6
  15. package/esm/components/menu.d.ts +5 -3
  16. package/esm/components/menu.js +15 -1
  17. package/esm/components/notice.d.ts +49 -0
  18. package/esm/components/notice.js +145 -0
  19. package/esm/components/option.d.ts +66 -0
  20. package/esm/components/option.js +241 -0
  21. package/esm/components/options-divider.d.ts +29 -0
  22. package/esm/components/options-divider.js +69 -0
  23. package/esm/components/options.d.ts +7 -6
  24. package/esm/components/options.js +1 -1
  25. package/esm/components/overlay-trigger.d.ts +45 -0
  26. package/esm/components/overlay-trigger.js +155 -0
  27. package/esm/components/overlay.d.ts +5 -3
  28. package/esm/components/overlay.js +1 -1
  29. package/esm/components/picker.d.ts +2 -1
  30. package/esm/components/picker.js +8 -1
  31. package/esm/components/prompt-box.js +2 -1
  32. package/esm/components/question-box.d.ts +78 -0
  33. package/esm/components/question-box.js +253 -0
  34. package/esm/components/radio-group.d.ts +3 -2
  35. package/esm/components/radio-group.js +7 -6
  36. package/esm/components/radio.d.ts +1 -1
  37. package/esm/components/radio.js +3 -2
  38. package/esm/components/slider-handle.d.ts +63 -0
  39. package/esm/components/slider-handle.js +218 -0
  40. package/esm/components/slider.d.ts +59 -8
  41. package/esm/components/slider.js +204 -26
  42. package/esm/components/swatch.d.ts +1 -1
  43. package/esm/components/tabs.d.ts +1 -1
  44. package/esm/components/tag.d.ts +1 -1
  45. package/esm/components/tag.js +1 -1
  46. package/esm/components/text-field.d.ts +3 -3
  47. package/esm/components/top-nav.d.ts +2 -2
  48. package/esm/index.d.ts +14 -2
  49. package/esm/index.js +24 -0
  50. 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;
@@ -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; }; }, { "changeEvent": "change"; "keydownEvent": "keydown"; }, never, ["*"], true, never>;
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;
@@ -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: { changeEvent: "change", keydownEvent: "keydown" }, exportAs: ["luzmoButton"], features: [i0.ɵɵNgOnChangesFeature], ngContentSelectors: _c0, decls: 1, vars: 0, template: function LuzmoButton_Template(rf, ctx) { if (rf & 1) {
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
- }], changeEvent: [{ type: i0.Output, args: ["change"] }], keydownEvent: [{ type: i0.Output, args: ["keydown"] }] }); })();
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: 25 }); })();
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 ownerships */
46
- readonly luzmoMenuItemAddedEvent: import("@angular/core").OutputEmitterRef<CustomEvent<unknown>>;
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; }; }, { "luzmoMenuItemAddedEvent": "luzmo-menu-item-added"; "keydownEvent": "keydown"; }, never, ["*"], true, 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; }; }, { "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 ownerships */
56
- luzmoMenuItemAddedEvent = output({ alias: 'luzmo-menu-item-added' });
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.luzmoMenuItemAddedEvent.emit(event);
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: { luzmoMenuItemAddedEvent: "luzmo-menu-item-added", keydownEvent: "keydown" }, exportAs: ["luzmoMenuItem"], features: [i0.ɵɵNgOnChangesFeature], ngContentSelectors: _c0, decls: 1, vars: 0, template: function LuzmoMenuItem_Template(rf, ctx) { if (rf & 1) {
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
- }], luzmoMenuItemAddedEvent: [{ type: i0.Output, args: ["luzmo-menu-item-added"] }], keydownEvent: [{ type: i0.Output, args: ["keydown"] }] }); })();
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 }); })();
@@ -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?: unknown;
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;
@@ -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' }]