@luzmo/ngx-lucero 2.4.2 → 2.5.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 CHANGED
@@ -86,6 +86,69 @@ Angular 17–19 do not recognize custom elements as anchor-like. On those
86
86
  versions, use `routerLink` without a separate `href` for client-side navigation,
87
87
  or upgrade to Angular 20+ when native link behavior is required.
88
88
 
89
+ ## Template inputs
90
+
91
+ Properties marked with `@templateProperty` accept nested named templates through
92
+ `LuzmoTemplate`. Import both the component and `LuzmoTemplate` into your standalone
93
+ component's `imports` array:
94
+
95
+ ```ts
96
+ import { LuzmoTable, LuzmoTableCell, LuzmoTemplate } from '@luzmo/ngx-lucero';
97
+ ```
98
+
99
+ ```html
100
+ <luzmo-table [items]="rows" [columns]="columns">
101
+ <ng-template luzmoTemplate="row" let-item let-index="index">
102
+ <luzmo-table-cell>{{ index }}: {{ item.name }}</luzmo-table-cell>
103
+ </ng-template>
104
+ <ng-template luzmoTemplate="details" let-item>
105
+ Details: {{ item.name }}
106
+ </ng-template>
107
+ </luzmo-table>
108
+ ```
109
+
110
+ The directive must be a direct content child of the wrapper (Angular `@if` and
111
+ `@for` blocks are supported). Templates inside nested components belong to those
112
+ components. Duplicate or unknown slot names throw an error.
113
+
114
+ Explicit inputs remain supported: `[renderItem]="callbackOrTemplate"` takes
115
+ precedence over the `row` slot. A `null` or `undefined` input falls back to the
116
+ nested template; removing that template restores the component's initial renderer.
117
+
118
+ The table context exposes `$implicit`/`item` and the source `index`. Angular views
119
+ refresh when their declaring component is checked, including bindings, events and
120
+ control flow. Each mounted Lit render location owns one view. Changing templates,
121
+ removing content or destroying the wrapper releases the affected views. Unchanged
122
+ templates retain their views across Angular checks. Temporary Lit disconnection
123
+ releases views; reconnecting creates them again.
124
+
125
+ ### Declaring a template property
126
+
127
+ In a web component, replace the renderer's `@property({ attribute: false })`
128
+ with the shared decorator:
129
+
130
+ ```ts
131
+ @templateProperty({ slot: 'row', context: ['item', 'index'], implicit: 'item' })
132
+ public renderItem: ((item: Item, index: number) => unknown) | undefined;
133
+ ```
134
+
135
+ The optional `slot` names the projected template; without it, the property name
136
+ is used. Slot names must be unique within a component.
137
+
138
+ Import `templateProperty` from the core utilities. Continue calling the renderer
139
+ inside a Lit child expression. The analyzer writes the literal context names and
140
+ implicit argument to the Custom Elements Manifest; the Angular generator uses
141
+ that metadata to produce its input and shared adapter. Neither layer branches on
142
+ a component name. This contract requires the renderer result to reach a Lit child
143
+ expression; it does not apply to callbacks that require a string or a DOM element.
144
+
145
+ The wrappers generate typed `TemplateRef` inputs but do not generate
146
+ component-specific context guards to infer `let-item` inside an `ng-template`,
147
+ including templates marked with the generic `LuzmoTemplate` directive.
148
+ The existing callback API remains typed. Decorator options must be literal
149
+ `slot`, `context` and `implicit` values so the analyzer can read them without executing
150
+ component code.
151
+
89
152
  ## Notes
90
153
 
91
154
  - This package depends on `@luzmo/lucero` for the underlying custom elements.
@@ -18,7 +18,7 @@ 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. */
21
+ /** The surface treatment for neutral and primary action buttons. `outline` preserves the standard surface; `fill` uses highlighted neutral surface tokens. Primary fill uses primary surface and inverse content colors. Quiet, selected, and static-color appearances take precedence. Other variants retain their existing appearance. */
22
22
  treatment?: ActionButtonTreatments;
23
23
  /** The role for the Action Button */
24
24
  role?: string;
@@ -28,7 +28,7 @@ export declare class LuzmoActionButton implements OnChanges, ControlValueAccesso
28
28
  toggles?: boolean;
29
29
  /** The static color variant to use for the action button. */
30
30
  staticColor?: 'white' | 'black';
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. */
31
+ /** The appearance preset to apply to this action button. - `neutral` (default): the standard action button. - `primary`: a primary-colored outline or filled 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. */
32
32
  variant?: ActionButtonVariants;
33
33
  /** The value of the Action Button */
34
34
  value?: string;
@@ -25,7 +25,7 @@ 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. */
28
+ /** The surface treatment for neutral and primary action buttons. `outline` preserves the standard surface; `fill` uses highlighted neutral surface tokens. Primary fill uses primary surface and inverse content colors. Quiet, selected, and static-color appearances take precedence. Other variants retain their existing appearance. */
29
29
  treatment;
30
30
  /** The role for the Action Button */
31
31
  role;
@@ -35,7 +35,7 @@ export class LuzmoActionButton {
35
35
  toggles;
36
36
  /** The static color variant to use for the action button. */
37
37
  staticColor;
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. */
38
+ /** The appearance preset to apply to this action button. - `neutral` (default): the standard action button. - `primary`: a primary-colored outline or filled 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. */
39
39
  variant;
40
40
  /** The value of the Action Button */
41
41
  value;
@@ -1,8 +1,9 @@
1
1
  import { OnChanges, SimpleChanges } from '@angular/core';
2
2
  import { ControlValueAccessor } from '@angular/forms';
3
3
  import '@luzmo/lucero/action-menu';
4
- import type { LuzmoActionMenu as LuzmoActionMenuHostElement } from '@luzmo/lucero/action-menu';
4
+ import type { LuzmoActionMenu as LuzmoActionMenuHostElement, ActionButtonTreatments, ActionButtonVariants } from '@luzmo/lucero/action-menu';
5
5
  import * as i0 from "@angular/core";
6
+ export type { ActionButtonTreatments, ActionButtonVariants } from '@luzmo/lucero/action-menu';
6
7
  export declare class LuzmoActionMenu implements OnChanges, ControlValueAccessor {
7
8
  private readonly elementRef;
8
9
  private readonly renderer;
@@ -13,6 +14,10 @@ export declare class LuzmoActionMenu implements OnChanges, ControlValueAccessor
13
14
  get nativeElement(): LuzmoActionMenuHostElement;
14
15
  selects?: never | 'single';
15
16
  staticColor?: 'white' | 'black';
17
+ /** The appearance preset for the trigger, independent of the menu variant. When omitted, the trigger uses its neutral variant. */
18
+ buttonVariant?: ActionButtonVariants;
19
+ /** The surface treatment for the trigger, including primary filled actions. When omitted, the trigger uses its outline treatment. */
20
+ buttonTreatment?: ActionButtonTreatments;
16
21
  handleSlottableRequest?: unknown;
17
22
  managePresenceObservedSlot?: unknown;
18
23
  size?: ('xxs' | 'xs' | 's' | 'm' | 'l' | 'xl' | 'xxl');
@@ -76,7 +81,7 @@ export declare class LuzmoActionMenu implements OnChanges, ControlValueAccessor
76
81
  toggle(target?: boolean): void;
77
82
  close(): void;
78
83
  static ɵfac: i0.ɵɵFactoryDeclaration<LuzmoActionMenu, 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": "changeEvent"; "scrollEvent": "scrollEvent"; "keydownEvent": "keydownEvent"; }, never, ["*"], true, never>;
84
+ static ɵcmp: i0.ɵɵComponentDeclaration<LuzmoActionMenu, "luzmo-action-menu", ["luzmoActionMenu"], { "selects": { "alias": "selects"; "required": false; }; "staticColor": { "alias": "staticColor"; "required": false; }; "buttonVariant": { "alias": "buttonVariant"; "required": false; }; "buttonTreatment": { "alias": "buttonTreatment"; "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": "changeEvent"; "scrollEvent": "scrollEvent"; "keydownEvent": "keydownEvent"; }, never, ["*"], true, never>;
80
85
  }
81
86
  /** The underlying custom element type for LuzmoActionMenu */
82
87
  export type LuzmoActionMenuElement = LuzmoActionMenuHostElement;
@@ -24,6 +24,10 @@ export class LuzmoActionMenu {
24
24
  }
25
25
  selects;
26
26
  staticColor;
27
+ /** The appearance preset for the trigger, independent of the menu variant. When omitted, the trigger uses its neutral variant. */
28
+ buttonVariant;
29
+ /** The surface treatment for the trigger, including primary filled actions. When omitted, the trigger uses its outline treatment. */
30
+ buttonTreatment;
27
31
  handleSlottableRequest;
28
32
  managePresenceObservedSlot;
29
33
  size;
@@ -82,6 +86,12 @@ export class LuzmoActionMenu {
82
86
  case 'staticColor':
83
87
  this.setHostProperty('staticColor', changes['staticColor'].currentValue);
84
88
  break;
89
+ case 'buttonVariant':
90
+ this.setHostProperty('buttonVariant', changes['buttonVariant'].currentValue);
91
+ break;
92
+ case 'buttonTreatment':
93
+ this.setHostProperty('buttonTreatment', changes['buttonTreatment'].currentValue);
94
+ break;
85
95
  case 'handleSlottableRequest':
86
96
  this.setHostProperty('handleSlottableRequest', changes['handleSlottableRequest'].currentValue);
87
97
  break;
@@ -249,7 +259,7 @@ export class LuzmoActionMenu {
249
259
  return this.host.close();
250
260
  }
251
261
  static ɵfac = function LuzmoActionMenu_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || LuzmoActionMenu)(); };
252
- 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: "changeEvent", scrollEvent: "scrollEvent", keydownEvent: "keydownEvent" }, exportAs: ["luzmoActionMenu"], features: [i0.ɵɵProvidersFeature([
262
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LuzmoActionMenu, selectors: [["luzmo-action-menu"]], inputs: { selects: "selects", staticColor: "staticColor", buttonVariant: "buttonVariant", buttonTreatment: "buttonTreatment", 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: "changeEvent", scrollEvent: "scrollEvent", keydownEvent: "keydownEvent" }, exportAs: ["luzmoActionMenu"], features: [i0.ɵɵProvidersFeature([
253
263
  {
254
264
  provide: NG_VALUE_ACCESSOR,
255
265
  useExisting: forwardRef(() => LuzmoActionMenu),
@@ -282,6 +292,12 @@ export class LuzmoActionMenu {
282
292
  }], staticColor: [{
283
293
  type: Input,
284
294
  args: [{ alias: 'staticColor' }]
295
+ }], buttonVariant: [{
296
+ type: Input,
297
+ args: [{ alias: 'buttonVariant' }]
298
+ }], buttonTreatment: [{
299
+ type: Input,
300
+ args: [{ alias: 'buttonTreatment' }]
285
301
  }], handleSlottableRequest: [{
286
302
  type: Input,
287
303
  args: [{ alias: 'handleSlottableRequest' }]
@@ -370,4 +386,4 @@ export class LuzmoActionMenu {
370
386
  type: Input,
371
387
  args: [{ alias: 'tabIndex' }]
372
388
  }], changeEvent: [{ type: i0.Output, args: ["changeEvent"] }], scrollEvent: [{ type: i0.Output, args: ["scrollEvent"] }], keydownEvent: [{ type: i0.Output, args: ["keydownEvent"] }] }); })();
373
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(LuzmoActionMenu, { className: "LuzmoActionMenu", filePath: "components/action-menu.ts", lineNumber: 29 }); })();
389
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(LuzmoActionMenu, { className: "LuzmoActionMenu", filePath: "components/action-menu.ts", lineNumber: 30 }); })();
@@ -19,7 +19,6 @@ export declare class LuzmoProgressSteps implements OnChanges {
19
19
  collapsed?: boolean;
20
20
  /** 'detailed' (default): the history lists main steps with their substeps - 'compact': the history lists main steps only */
21
21
  displayMode?: ProgressStepsDisplayMode;
22
- condensed?: boolean;
23
22
  /** Visible and announced copy. Partial overrides are merged over the English defaults. `{{count}}` is replaced in the count labels. */
24
23
  labels?: Partial<ProgressStepsLabels>;
25
24
  /** Disables the shimmer and transitions. */
@@ -42,7 +41,7 @@ export declare class LuzmoProgressSteps implements OnChanges {
42
41
  private setHostProperty;
43
42
  private bindEvents;
44
43
  static ɵfac: i0.ɵɵFactoryDeclaration<LuzmoProgressSteps, never>;
45
- static ɵcmp: i0.ɵɵComponentDeclaration<LuzmoProgressSteps, "luzmo-progress-steps", ["luzmoProgressSteps"], { "progress": { "alias": "progress"; "required": false; }; "locale": { "alias": "locale"; "required": false; }; "collapsed": { "alias": "collapsed"; "required": false; }; "displayMode": { "alias": "displayMode"; "required": false; }; "condensed": { "alias": "condensed"; "required": false; }; "labels": { "alias": "labels"; "required": false; }; "noAnimate": { "alias": "noAnimate"; "required": false; }; "open": { "alias": "open"; "required": false; }; "size": { "alias": "size"; "required": false; }; }, { "luzmoStepExpanded": "luzmo-step-expanded"; "luzmoStepCollapsed": "luzmo-step-collapsed"; }, never, ["*"], true, never>;
44
+ static ɵcmp: i0.ɵɵComponentDeclaration<LuzmoProgressSteps, "luzmo-progress-steps", ["luzmoProgressSteps"], { "progress": { "alias": "progress"; "required": false; }; "locale": { "alias": "locale"; "required": false; }; "collapsed": { "alias": "collapsed"; "required": false; }; "displayMode": { "alias": "displayMode"; "required": false; }; "labels": { "alias": "labels"; "required": false; }; "noAnimate": { "alias": "noAnimate"; "required": false; }; "open": { "alias": "open"; "required": false; }; "size": { "alias": "size"; "required": false; }; }, { "luzmoStepExpanded": "luzmo-step-expanded"; "luzmoStepCollapsed": "luzmo-step-collapsed"; }, never, ["*"], true, never>;
46
45
  }
47
46
  /** The underlying custom element type for LuzmoProgressSteps */
48
47
  export type LuzmoProgressStepsElement = LuzmoProgressStepsHostElement;
@@ -23,7 +23,6 @@ export class LuzmoProgressSteps {
23
23
  collapsed;
24
24
  /** 'detailed' (default): the history lists main steps with their substeps - 'compact': the history lists main steps only */
25
25
  displayMode;
26
- condensed;
27
26
  /** Visible and announced copy. Partial overrides are merged over the English defaults. `{{count}}` is replaced in the count labels. */
28
27
  labels;
29
28
  /** Disables the shimmer and transitions. */
@@ -58,9 +57,6 @@ export class LuzmoProgressSteps {
58
57
  case 'displayMode':
59
58
  this.setHostProperty('displayMode', changes['displayMode'].currentValue);
60
59
  break;
61
- case 'condensed':
62
- this.setHostProperty('condensed', changes['condensed'].currentValue);
63
- break;
64
60
  case 'labels':
65
61
  this.setHostProperty('labels', changes['labels'].currentValue);
66
62
  break;
@@ -96,7 +92,7 @@ export class LuzmoProgressSteps {
96
92
  }));
97
93
  }
98
94
  static ɵfac = function LuzmoProgressSteps_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || LuzmoProgressSteps)(); };
99
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LuzmoProgressSteps, selectors: [["luzmo-progress-steps"]], inputs: { progress: "progress", locale: "locale", collapsed: "collapsed", displayMode: "displayMode", condensed: "condensed", labels: "labels", noAnimate: "noAnimate", open: "open", size: "size" }, outputs: { luzmoStepExpanded: "luzmo-step-expanded", luzmoStepCollapsed: "luzmo-step-collapsed" }, exportAs: ["luzmoProgressSteps"], features: [i0.ɵɵNgOnChangesFeature], ngContentSelectors: _c0, decls: 1, vars: 0, template: function LuzmoProgressSteps_Template(rf, ctx) { if (rf & 1) {
95
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LuzmoProgressSteps, selectors: [["luzmo-progress-steps"]], inputs: { progress: "progress", locale: "locale", collapsed: "collapsed", displayMode: "displayMode", labels: "labels", noAnimate: "noAnimate", open: "open", size: "size" }, outputs: { luzmoStepExpanded: "luzmo-step-expanded", luzmoStepCollapsed: "luzmo-step-collapsed" }, exportAs: ["luzmoProgressSteps"], features: [i0.ɵɵNgOnChangesFeature], ngContentSelectors: _c0, decls: 1, vars: 0, template: function LuzmoProgressSteps_Template(rf, ctx) { if (rf & 1) {
100
96
  i0.ɵɵprojectionDef();
101
97
  i0.ɵɵprojection(0);
102
98
  } }, encapsulation: 2 });
@@ -122,9 +118,6 @@ export class LuzmoProgressSteps {
122
118
  }], displayMode: [{
123
119
  type: Input,
124
120
  args: [{ alias: 'displayMode' }]
125
- }], condensed: [{
126
- type: Input,
127
- args: [{ alias: 'condensed' }]
128
121
  }], labels: [{
129
122
  type: Input,
130
123
  args: [{ alias: 'labels' }]
@@ -0,0 +1,30 @@
1
+ import { OnChanges, SimpleChanges } from '@angular/core';
2
+ import '@luzmo/lucero/table';
3
+ import type { LuzmoTableBody as LuzmoTableBodyHostElement } from '@luzmo/lucero/table';
4
+ import * as i0 from "@angular/core";
5
+ export declare class LuzmoTableBody implements OnChanges {
6
+ private readonly elementRef;
7
+ private readonly renderer;
8
+ private readonly destroyRef;
9
+ private readonly host;
10
+ private readonly listenerCleanup;
11
+ /** The underlying custom element instance. Use to call imperative methods. */
12
+ get nativeElement(): LuzmoTableBodyHostElement;
13
+ role?: string;
14
+ /** The body scroll position changed. */
15
+ readonly luzmoTableBodyScroll: import("@angular/core").OutputEmitterRef<CustomEvent<unknown>>;
16
+ constructor();
17
+ ngOnChanges(changes: SimpleChanges): void;
18
+ /**
19
+ * Forward a wrapper @Input to the underlying host element via Renderer2 so
20
+ * the wrapper stays compatible with non-DOM Angular platforms (SSR, tests).
21
+ * Unlike a "skip undefined" guard, this lets consumers reset values back to
22
+ * undefined / null by clearing their bindings.
23
+ */
24
+ private setHostProperty;
25
+ private bindEvents;
26
+ static ɵfac: i0.ɵɵFactoryDeclaration<LuzmoTableBody, never>;
27
+ static ɵcmp: i0.ɵɵComponentDeclaration<LuzmoTableBody, "luzmo-table-body", ["luzmoTableBody"], { "role": { "alias": "role"; "required": false; }; }, { "luzmoTableBodyScroll": "luzmo-table-body-scroll"; }, never, ["*"], true, never>;
28
+ }
29
+ /** The underlying custom element type for LuzmoTableBody */
30
+ export type LuzmoTableBodyElement = LuzmoTableBodyHostElement;
@@ -0,0 +1,75 @@
1
+ import { ChangeDetectionStrategy, Component, DestroyRef, ElementRef, inject, Input, output, Renderer2 } from '@angular/core';
2
+ import '@luzmo/lucero/table';
3
+ import * as i0 from "@angular/core";
4
+ const _c0 = ["*"];
5
+ /**
6
+ * Angular wrapper component for <luzmo-table-body>
7
+ *
8
+ * @slot (default) - `luzmo-table-row` elements.
9
+ */
10
+ export class LuzmoTableBody {
11
+ elementRef = inject(ElementRef);
12
+ renderer = inject(Renderer2);
13
+ destroyRef = inject(DestroyRef);
14
+ host = this.elementRef.nativeElement;
15
+ listenerCleanup = [];
16
+ /** The underlying custom element instance. Use to call imperative methods. */
17
+ get nativeElement() {
18
+ return this.host;
19
+ }
20
+ role;
21
+ /** The body scroll position changed. */
22
+ luzmoTableBodyScroll = output({ alias: 'luzmo-table-body-scroll' });
23
+ constructor() {
24
+ this.bindEvents();
25
+ this.destroyRef.onDestroy(() => {
26
+ for (const cleanup of this.listenerCleanup) {
27
+ cleanup();
28
+ }
29
+ });
30
+ }
31
+ ngOnChanges(changes) {
32
+ for (const key of Object.keys(changes)) {
33
+ switch (key) {
34
+ case 'role':
35
+ this.setHostProperty('role', changes['role'].currentValue);
36
+ break;
37
+ default:
38
+ break;
39
+ }
40
+ }
41
+ }
42
+ /**
43
+ * Forward a wrapper @Input to the underlying host element via Renderer2 so
44
+ * the wrapper stays compatible with non-DOM Angular platforms (SSR, tests).
45
+ * Unlike a "skip undefined" guard, this lets consumers reset values back to
46
+ * undefined / null by clearing their bindings.
47
+ */
48
+ setHostProperty(key, value) {
49
+ this.renderer.setProperty(this.host, key, value);
50
+ }
51
+ bindEvents() {
52
+ this.listenerCleanup.push(this.renderer.listen(this.host, 'luzmo-table-body-scroll', (event) => {
53
+ this.luzmoTableBodyScroll.emit(event);
54
+ }));
55
+ }
56
+ static ɵfac = function LuzmoTableBody_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || LuzmoTableBody)(); };
57
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LuzmoTableBody, selectors: [["luzmo-table-body"]], inputs: { role: "role" }, outputs: { luzmoTableBodyScroll: "luzmo-table-body-scroll" }, exportAs: ["luzmoTableBody"], features: [i0.ɵɵNgOnChangesFeature], ngContentSelectors: _c0, decls: 1, vars: 0, template: function LuzmoTableBody_Template(rf, ctx) { if (rf & 1) {
58
+ i0.ɵɵprojectionDef();
59
+ i0.ɵɵprojection(0);
60
+ } }, encapsulation: 2 });
61
+ }
62
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LuzmoTableBody, [{
63
+ type: Component,
64
+ args: [{
65
+ selector: 'luzmo-table-body',
66
+ exportAs: 'luzmoTableBody',
67
+ standalone: true,
68
+ changeDetection: ChangeDetectionStrategy.OnPush,
69
+ template: '<ng-content />'
70
+ }]
71
+ }], () => [], { role: [{
72
+ type: Input,
73
+ args: [{ alias: 'role' }]
74
+ }], luzmoTableBodyScroll: [{ type: i0.Output, args: ["luzmo-table-body-scroll"] }] }); })();
75
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(LuzmoTableBody, { className: "LuzmoTableBody", filePath: "components/table-body.ts", lineNumber: 17 }); })();
@@ -0,0 +1,30 @@
1
+ import { OnChanges, SimpleChanges } from '@angular/core';
2
+ import '@luzmo/lucero/table';
3
+ import type { LuzmoTableCell as LuzmoTableCellHostElement } from '@luzmo/lucero/table';
4
+ import * as i0 from "@angular/core";
5
+ export declare class LuzmoTableCell implements OnChanges {
6
+ private readonly elementRef;
7
+ private readonly renderer;
8
+ private readonly destroyRef;
9
+ private readonly host;
10
+ private readonly listenerCleanup;
11
+ /** The underlying custom element instance. Use to call imperative methods. */
12
+ get nativeElement(): LuzmoTableCellHostElement;
13
+ role?: string;
14
+ /** Maximum number of lines before the cell truncates. Unset wraps. Overrides the column's `lineClamp`. */
15
+ lineClamp?: number;
16
+ constructor();
17
+ ngOnChanges(changes: SimpleChanges): void;
18
+ /**
19
+ * Forward a wrapper @Input to the underlying host element via Renderer2 so
20
+ * the wrapper stays compatible with non-DOM Angular platforms (SSR, tests).
21
+ * Unlike a "skip undefined" guard, this lets consumers reset values back to
22
+ * undefined / null by clearing their bindings.
23
+ */
24
+ private setHostProperty;
25
+ private bindEvents;
26
+ static ɵfac: i0.ɵɵFactoryDeclaration<LuzmoTableCell, never>;
27
+ static ɵcmp: i0.ɵɵComponentDeclaration<LuzmoTableCell, "luzmo-table-cell", ["luzmoTableCell"], { "role": { "alias": "role"; "required": false; }; "lineClamp": { "alias": "lineClamp"; "required": false; }; }, {}, never, ["*"], true, never>;
28
+ }
29
+ /** The underlying custom element type for LuzmoTableCell */
30
+ export type LuzmoTableCellElement = LuzmoTableCellHostElement;
@@ -0,0 +1,79 @@
1
+ import { ChangeDetectionStrategy, Component, DestroyRef, ElementRef, inject, Input, Renderer2 } from '@angular/core';
2
+ import '@luzmo/lucero/table';
3
+ import * as i0 from "@angular/core";
4
+ const _c0 = ["*"];
5
+ /**
6
+ * Angular wrapper component for <luzmo-table-cell>
7
+ *
8
+ * @slot (default) - Cell content.
9
+ */
10
+ export class LuzmoTableCell {
11
+ elementRef = inject(ElementRef);
12
+ renderer = inject(Renderer2);
13
+ destroyRef = inject(DestroyRef);
14
+ host = this.elementRef.nativeElement;
15
+ listenerCleanup = [];
16
+ /** The underlying custom element instance. Use to call imperative methods. */
17
+ get nativeElement() {
18
+ return this.host;
19
+ }
20
+ role;
21
+ /** Maximum number of lines before the cell truncates. Unset wraps. Overrides the column's `lineClamp`. */
22
+ lineClamp;
23
+ constructor() {
24
+ this.bindEvents();
25
+ this.destroyRef.onDestroy(() => {
26
+ for (const cleanup of this.listenerCleanup) {
27
+ cleanup();
28
+ }
29
+ });
30
+ }
31
+ ngOnChanges(changes) {
32
+ for (const key of Object.keys(changes)) {
33
+ switch (key) {
34
+ case 'role':
35
+ this.setHostProperty('role', changes['role'].currentValue);
36
+ break;
37
+ case 'lineClamp':
38
+ this.setHostProperty('lineClamp', changes['lineClamp'].currentValue);
39
+ break;
40
+ default:
41
+ break;
42
+ }
43
+ }
44
+ }
45
+ /**
46
+ * Forward a wrapper @Input to the underlying host element via Renderer2 so
47
+ * the wrapper stays compatible with non-DOM Angular platforms (SSR, tests).
48
+ * Unlike a "skip undefined" guard, this lets consumers reset values back to
49
+ * undefined / null by clearing their bindings.
50
+ */
51
+ setHostProperty(key, value) {
52
+ this.renderer.setProperty(this.host, key, value);
53
+ }
54
+ bindEvents() {
55
+ // No custom events for this wrapper.
56
+ }
57
+ static ɵfac = function LuzmoTableCell_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || LuzmoTableCell)(); };
58
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LuzmoTableCell, selectors: [["luzmo-table-cell"]], inputs: { role: "role", lineClamp: "lineClamp" }, exportAs: ["luzmoTableCell"], features: [i0.ɵɵNgOnChangesFeature], ngContentSelectors: _c0, decls: 1, vars: 0, template: function LuzmoTableCell_Template(rf, ctx) { if (rf & 1) {
59
+ i0.ɵɵprojectionDef();
60
+ i0.ɵɵprojection(0);
61
+ } }, encapsulation: 2 });
62
+ }
63
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LuzmoTableCell, [{
64
+ type: Component,
65
+ args: [{
66
+ selector: 'luzmo-table-cell',
67
+ exportAs: 'luzmoTableCell',
68
+ standalone: true,
69
+ changeDetection: ChangeDetectionStrategy.OnPush,
70
+ template: '<ng-content />'
71
+ }]
72
+ }], () => [], { role: [{
73
+ type: Input,
74
+ args: [{ alias: 'role' }]
75
+ }], lineClamp: [{
76
+ type: Input,
77
+ args: [{ alias: 'lineClamp' }]
78
+ }] }); })();
79
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(LuzmoTableCell, { className: "LuzmoTableCell", filePath: "components/table-cell.ts", lineNumber: 17 }); })();
@@ -0,0 +1,37 @@
1
+ import { OnChanges, SimpleChanges } from '@angular/core';
2
+ import '@luzmo/lucero/table';
3
+ import type { LuzmoTableCheckboxCell as LuzmoTableCheckboxCellHostElement } from '@luzmo/lucero/table';
4
+ import * as i0 from "@angular/core";
5
+ export declare class LuzmoTableCheckboxCell implements OnChanges {
6
+ private readonly elementRef;
7
+ private readonly renderer;
8
+ private readonly destroyRef;
9
+ private readonly host;
10
+ private readonly listenerCleanup;
11
+ /** The underlying custom element instance. Use to call imperative methods. */
12
+ get nativeElement(): LuzmoTableCheckboxCellHostElement;
13
+ role?: string;
14
+ /** Whether this is the select-all cell of the header row. */
15
+ headCell?: boolean;
16
+ checked?: boolean;
17
+ indeterminate?: boolean;
18
+ disabled?: boolean;
19
+ selectsSingle?: boolean;
20
+ emphasized?: boolean;
21
+ /** Accessible name of the checkbox. */
22
+ label?: string;
23
+ constructor();
24
+ ngOnChanges(changes: SimpleChanges): void;
25
+ /**
26
+ * Forward a wrapper @Input to the underlying host element via Renderer2 so
27
+ * the wrapper stays compatible with non-DOM Angular platforms (SSR, tests).
28
+ * Unlike a "skip undefined" guard, this lets consumers reset values back to
29
+ * undefined / null by clearing their bindings.
30
+ */
31
+ private setHostProperty;
32
+ private bindEvents;
33
+ static ɵfac: i0.ɵɵFactoryDeclaration<LuzmoTableCheckboxCell, never>;
34
+ static ɵcmp: i0.ɵɵComponentDeclaration<LuzmoTableCheckboxCell, "luzmo-table-checkbox-cell", ["luzmoTableCheckboxCell"], { "role": { "alias": "role"; "required": false; }; "headCell": { "alias": "headCell"; "required": false; }; "checked": { "alias": "checked"; "required": false; }; "indeterminate": { "alias": "indeterminate"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "selectsSingle": { "alias": "selectsSingle"; "required": false; }; "emphasized": { "alias": "emphasized"; "required": false; }; "label": { "alias": "label"; "required": false; }; }, {}, never, ["*"], true, never>;
35
+ }
36
+ /** The underlying custom element type for LuzmoTableCheckboxCell */
37
+ export type LuzmoTableCheckboxCellElement = LuzmoTableCheckboxCellHostElement;
@@ -0,0 +1,120 @@
1
+ import { ChangeDetectionStrategy, Component, DestroyRef, ElementRef, inject, Input, Renderer2 } from '@angular/core';
2
+ import '@luzmo/lucero/table';
3
+ import * as i0 from "@angular/core";
4
+ const _c0 = ["*"];
5
+ /**
6
+ * Angular wrapper component for <luzmo-table-checkbox-cell>
7
+ */
8
+ export class LuzmoTableCheckboxCell {
9
+ elementRef = inject(ElementRef);
10
+ renderer = inject(Renderer2);
11
+ destroyRef = inject(DestroyRef);
12
+ host = this.elementRef.nativeElement;
13
+ listenerCleanup = [];
14
+ /** The underlying custom element instance. Use to call imperative methods. */
15
+ get nativeElement() {
16
+ return this.host;
17
+ }
18
+ role;
19
+ /** Whether this is the select-all cell of the header row. */
20
+ headCell;
21
+ checked;
22
+ indeterminate;
23
+ disabled;
24
+ selectsSingle;
25
+ emphasized;
26
+ /** Accessible name of the checkbox. */
27
+ label;
28
+ constructor() {
29
+ this.bindEvents();
30
+ this.destroyRef.onDestroy(() => {
31
+ for (const cleanup of this.listenerCleanup) {
32
+ cleanup();
33
+ }
34
+ });
35
+ }
36
+ ngOnChanges(changes) {
37
+ for (const key of Object.keys(changes)) {
38
+ switch (key) {
39
+ case 'role':
40
+ this.setHostProperty('role', changes['role'].currentValue);
41
+ break;
42
+ case 'headCell':
43
+ this.setHostProperty('headCell', changes['headCell'].currentValue);
44
+ break;
45
+ case 'checked':
46
+ this.setHostProperty('checked', changes['checked'].currentValue);
47
+ break;
48
+ case 'indeterminate':
49
+ this.setHostProperty('indeterminate', changes['indeterminate'].currentValue);
50
+ break;
51
+ case 'disabled':
52
+ this.setHostProperty('disabled', changes['disabled'].currentValue);
53
+ break;
54
+ case 'selectsSingle':
55
+ this.setHostProperty('selectsSingle', changes['selectsSingle'].currentValue);
56
+ break;
57
+ case 'emphasized':
58
+ this.setHostProperty('emphasized', changes['emphasized'].currentValue);
59
+ break;
60
+ case 'label':
61
+ this.setHostProperty('label', changes['label'].currentValue);
62
+ break;
63
+ default:
64
+ break;
65
+ }
66
+ }
67
+ }
68
+ /**
69
+ * Forward a wrapper @Input to the underlying host element via Renderer2 so
70
+ * the wrapper stays compatible with non-DOM Angular platforms (SSR, tests).
71
+ * Unlike a "skip undefined" guard, this lets consumers reset values back to
72
+ * undefined / null by clearing their bindings.
73
+ */
74
+ setHostProperty(key, value) {
75
+ this.renderer.setProperty(this.host, key, value);
76
+ }
77
+ bindEvents() {
78
+ // No custom events for this wrapper.
79
+ }
80
+ static ɵfac = function LuzmoTableCheckboxCell_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || LuzmoTableCheckboxCell)(); };
81
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LuzmoTableCheckboxCell, selectors: [["luzmo-table-checkbox-cell"]], inputs: { role: "role", headCell: "headCell", checked: "checked", indeterminate: "indeterminate", disabled: "disabled", selectsSingle: "selectsSingle", emphasized: "emphasized", label: "label" }, exportAs: ["luzmoTableCheckboxCell"], features: [i0.ɵɵNgOnChangesFeature], ngContentSelectors: _c0, decls: 1, vars: 0, template: function LuzmoTableCheckboxCell_Template(rf, ctx) { if (rf & 1) {
82
+ i0.ɵɵprojectionDef();
83
+ i0.ɵɵprojection(0);
84
+ } }, encapsulation: 2 });
85
+ }
86
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LuzmoTableCheckboxCell, [{
87
+ type: Component,
88
+ args: [{
89
+ selector: 'luzmo-table-checkbox-cell',
90
+ exportAs: 'luzmoTableCheckboxCell',
91
+ standalone: true,
92
+ changeDetection: ChangeDetectionStrategy.OnPush,
93
+ template: '<ng-content />'
94
+ }]
95
+ }], () => [], { role: [{
96
+ type: Input,
97
+ args: [{ alias: 'role' }]
98
+ }], headCell: [{
99
+ type: Input,
100
+ args: [{ alias: 'headCell' }]
101
+ }], checked: [{
102
+ type: Input,
103
+ args: [{ alias: 'checked' }]
104
+ }], indeterminate: [{
105
+ type: Input,
106
+ args: [{ alias: 'indeterminate' }]
107
+ }], disabled: [{
108
+ type: Input,
109
+ args: [{ alias: 'disabled' }]
110
+ }], selectsSingle: [{
111
+ type: Input,
112
+ args: [{ alias: 'selectsSingle' }]
113
+ }], emphasized: [{
114
+ type: Input,
115
+ args: [{ alias: 'emphasized' }]
116
+ }], label: [{
117
+ type: Input,
118
+ args: [{ alias: 'label' }]
119
+ }] }); })();
120
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(LuzmoTableCheckboxCell, { className: "LuzmoTableCheckboxCell", filePath: "components/table-checkbox-cell.ts", lineNumber: 15 }); })();