@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 +63 -0
- package/esm/components/action-button.d.ts +2 -2
- package/esm/components/action-button.js +2 -2
- package/esm/components/action-menu.d.ts +7 -2
- package/esm/components/action-menu.js +18 -2
- package/esm/components/progress-steps.d.ts +1 -2
- package/esm/components/progress-steps.js +1 -8
- package/esm/components/table-body.d.ts +30 -0
- package/esm/components/table-body.js +75 -0
- package/esm/components/table-cell.d.ts +30 -0
- package/esm/components/table-cell.js +79 -0
- package/esm/components/table-checkbox-cell.d.ts +37 -0
- package/esm/components/table-checkbox-cell.js +120 -0
- package/esm/components/table-disclosure-cell.d.ts +31 -0
- package/esm/components/table-disclosure-cell.js +84 -0
- package/esm/components/table-head-cell.d.ts +50 -0
- package/esm/components/table-head-cell.js +155 -0
- package/esm/components/table-head.d.ts +30 -0
- package/esm/components/table-head.js +79 -0
- package/esm/components/table-row-details.d.ts +32 -0
- package/esm/components/table-row-details.js +83 -0
- package/esm/components/table-row.d.ts +38 -0
- package/esm/components/table-row.js +111 -0
- package/esm/components/table.d.ts +89 -0
- package/esm/components/table.js +279 -0
- package/esm/components/template-input.d.ts +11 -0
- package/esm/components/template-input.js +56 -0
- package/esm/components/template.d.ts +10 -0
- package/esm/components/template.js +30 -0
- package/esm/index.d.ts +21 -2
- package/esm/index.js +37 -0
- package/package.json +2 -2
|
@@ -0,0 +1,111 @@
|
|
|
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-row>
|
|
7
|
+
*
|
|
8
|
+
* @slot (default) - `luzmo-table-cell` elements of the row.
|
|
9
|
+
*/
|
|
10
|
+
export class LuzmoTableRow {
|
|
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
|
+
/** Selection value. Defaults to the row's position when empty. */
|
|
22
|
+
value;
|
|
23
|
+
/** Whether the row is selected. Mirrored from the table's `selected`. */
|
|
24
|
+
selected;
|
|
25
|
+
/** Whether the row can be selected. Set by the table while it `selects`. */
|
|
26
|
+
selectable;
|
|
27
|
+
/** Whether the row's details are shown. */
|
|
28
|
+
expanded;
|
|
29
|
+
/** Whether the row has a details sibling or data-mode details renderer. */
|
|
30
|
+
expandable;
|
|
31
|
+
constructor() {
|
|
32
|
+
this.bindEvents();
|
|
33
|
+
this.destroyRef.onDestroy(() => {
|
|
34
|
+
for (const cleanup of this.listenerCleanup) {
|
|
35
|
+
cleanup();
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
ngOnChanges(changes) {
|
|
40
|
+
for (const key of Object.keys(changes)) {
|
|
41
|
+
switch (key) {
|
|
42
|
+
case 'role':
|
|
43
|
+
this.setHostProperty('role', changes['role'].currentValue);
|
|
44
|
+
break;
|
|
45
|
+
case 'value':
|
|
46
|
+
this.setHostProperty('value', changes['value'].currentValue);
|
|
47
|
+
break;
|
|
48
|
+
case 'selected':
|
|
49
|
+
this.setHostProperty('selected', changes['selected'].currentValue);
|
|
50
|
+
break;
|
|
51
|
+
case 'selectable':
|
|
52
|
+
this.setHostProperty('selectable', changes['selectable'].currentValue);
|
|
53
|
+
break;
|
|
54
|
+
case 'expanded':
|
|
55
|
+
this.setHostProperty('expanded', changes['expanded'].currentValue);
|
|
56
|
+
break;
|
|
57
|
+
case 'expandable':
|
|
58
|
+
this.setHostProperty('expandable', changes['expandable'].currentValue);
|
|
59
|
+
break;
|
|
60
|
+
default:
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Forward a wrapper @Input to the underlying host element via Renderer2 so
|
|
67
|
+
* the wrapper stays compatible with non-DOM Angular platforms (SSR, tests).
|
|
68
|
+
* Unlike a "skip undefined" guard, this lets consumers reset values back to
|
|
69
|
+
* undefined / null by clearing their bindings.
|
|
70
|
+
*/
|
|
71
|
+
setHostProperty(key, value) {
|
|
72
|
+
this.renderer.setProperty(this.host, key, value);
|
|
73
|
+
}
|
|
74
|
+
bindEvents() {
|
|
75
|
+
// No custom events for this wrapper.
|
|
76
|
+
}
|
|
77
|
+
static ɵfac = function LuzmoTableRow_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || LuzmoTableRow)(); };
|
|
78
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LuzmoTableRow, selectors: [["luzmo-table-row"]], inputs: { role: "role", value: "value", selected: "selected", selectable: "selectable", expanded: "expanded", expandable: "expandable" }, exportAs: ["luzmoTableRow"], features: [i0.ɵɵNgOnChangesFeature], ngContentSelectors: _c0, decls: 1, vars: 0, template: function LuzmoTableRow_Template(rf, ctx) { if (rf & 1) {
|
|
79
|
+
i0.ɵɵprojectionDef();
|
|
80
|
+
i0.ɵɵprojection(0);
|
|
81
|
+
} }, encapsulation: 2 });
|
|
82
|
+
}
|
|
83
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LuzmoTableRow, [{
|
|
84
|
+
type: Component,
|
|
85
|
+
args: [{
|
|
86
|
+
selector: 'luzmo-table-row',
|
|
87
|
+
exportAs: 'luzmoTableRow',
|
|
88
|
+
standalone: true,
|
|
89
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
90
|
+
template: '<ng-content />'
|
|
91
|
+
}]
|
|
92
|
+
}], () => [], { role: [{
|
|
93
|
+
type: Input,
|
|
94
|
+
args: [{ alias: 'role' }]
|
|
95
|
+
}], value: [{
|
|
96
|
+
type: Input,
|
|
97
|
+
args: [{ alias: 'value' }]
|
|
98
|
+
}], selected: [{
|
|
99
|
+
type: Input,
|
|
100
|
+
args: [{ alias: 'selected' }]
|
|
101
|
+
}], selectable: [{
|
|
102
|
+
type: Input,
|
|
103
|
+
args: [{ alias: 'selectable' }]
|
|
104
|
+
}], expanded: [{
|
|
105
|
+
type: Input,
|
|
106
|
+
args: [{ alias: 'expanded' }]
|
|
107
|
+
}], expandable: [{
|
|
108
|
+
type: Input,
|
|
109
|
+
args: [{ alias: 'expandable' }]
|
|
110
|
+
}] }); })();
|
|
111
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(LuzmoTableRow, { className: "LuzmoTableRow", filePath: "components/table-row.ts", lineNumber: 17 }); })();
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { OnChanges, SimpleChanges, TemplateRef } from '@angular/core';
|
|
2
|
+
import '@luzmo/lucero/table';
|
|
3
|
+
import type { LuzmoTable as LuzmoTableHostElement } from '@luzmo/lucero/table';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class LuzmoTable implements OnChanges {
|
|
6
|
+
private readonly elementRef;
|
|
7
|
+
private readonly renderer;
|
|
8
|
+
private readonly destroyRef;
|
|
9
|
+
private readonly host;
|
|
10
|
+
private readonly listenerCleanup;
|
|
11
|
+
private projectedTemplates?;
|
|
12
|
+
private readonly templateValues;
|
|
13
|
+
private readonly templateDefaults;
|
|
14
|
+
private readonly templateInputs;
|
|
15
|
+
/** The underlying custom element instance. Use to call imperative methods. */
|
|
16
|
+
get nativeElement(): LuzmoTableHostElement;
|
|
17
|
+
role?: string;
|
|
18
|
+
/** Row density. Unset is regular. */
|
|
19
|
+
density?: ('compact' | 'spacious');
|
|
20
|
+
/** Use the accent color for selected rows and checkboxes. */
|
|
21
|
+
emphasized?: boolean;
|
|
22
|
+
/** Remove the outer border and background. */
|
|
23
|
+
quiet?: boolean;
|
|
24
|
+
/** Scroll the body inside the table's block size, keeping the head in view. */
|
|
25
|
+
scroller?: boolean;
|
|
26
|
+
/** Row selection mode. Unset disables selection. */
|
|
27
|
+
selects?: ('single' | 'multiple');
|
|
28
|
+
/** Selected row values. */
|
|
29
|
+
selected?: string[];
|
|
30
|
+
/** Accessible name of the select-all checkbox. Overrides `labels.selectAll`. */
|
|
31
|
+
selectAllLabel?: string;
|
|
32
|
+
/** Row records. Setting an array switches the table to data mode. */
|
|
33
|
+
items?: (Record<string, unknown>)[];
|
|
34
|
+
/** Stable, unique selection value of a data-mode row. Defaults to the item index. */
|
|
35
|
+
itemValue?: unknown;
|
|
36
|
+
/** Accessible name of a data-mode row checkbox. Defaults to the first column's text, then `labels.selectRow`. */
|
|
37
|
+
itemLabel?: unknown;
|
|
38
|
+
/** Cell content of a data-mode row. Return `luzmo-table-cell` elements. */
|
|
39
|
+
renderItem?: LuzmoTableHostElement['renderItem'] | TemplateRef<{
|
|
40
|
+
item: Parameters<NonNullable<LuzmoTableHostElement['renderItem']>>[0];
|
|
41
|
+
index: Parameters<NonNullable<LuzmoTableHostElement['renderItem']>>[1];
|
|
42
|
+
$implicit: Parameters<NonNullable<LuzmoTableHostElement['renderItem']>>[0];
|
|
43
|
+
}> | null;
|
|
44
|
+
/** Expanded row values. Setting `renderDetails` enables data-mode disclosure. */
|
|
45
|
+
expanded?: string[];
|
|
46
|
+
/** Details content of a data-mode row. Its presence enables row disclosure for every non-information row. */
|
|
47
|
+
renderDetails?: LuzmoTableHostElement['renderDetails'] | TemplateRef<{
|
|
48
|
+
item: Parameters<NonNullable<LuzmoTableHostElement['renderDetails']>>[0];
|
|
49
|
+
index: Parameters<NonNullable<LuzmoTableHostElement['renderDetails']>>[1];
|
|
50
|
+
$implicit: Parameters<NonNullable<LuzmoTableHostElement['renderDetails']>>[0];
|
|
51
|
+
}> | null;
|
|
52
|
+
/** Resized column widths, in pixels, keyed by column id. A resize updates this map without changing `columns`. */
|
|
53
|
+
columnWidths?: Record<string, number>;
|
|
54
|
+
/** Data-mode columns, used when no `luzmo-table-head` is slotted. */
|
|
55
|
+
columns?: unknown;
|
|
56
|
+
/** Mount only the visible rows. Data mode only; needs a bounded block size. */
|
|
57
|
+
virtualized?: boolean;
|
|
58
|
+
/** Translatable copy. */
|
|
59
|
+
labels?: unknown;
|
|
60
|
+
size?: ('xxs' | 'xs' | 's' | 'm' | 'l' | 'xl' | 'xxl');
|
|
61
|
+
/** `selected` changed. Cancel it to keep the previous selection. */
|
|
62
|
+
readonly changeEvent: import("@angular/core").OutputEmitterRef<Event>;
|
|
63
|
+
/** A sortable header was activated. `detail` is `{ sortKey, sortDirection }`. Cancel it in data mode to skip the client sort. */
|
|
64
|
+
readonly luzmoTableSorted: import("@angular/core").OutputEmitterRef<CustomEvent<unknown>>;
|
|
65
|
+
/** A row's details were expanded or collapsed. `detail` is `{ value, expanded }`. Cancel it to keep the previous state. */
|
|
66
|
+
readonly luzmoTableRowToggle: import("@angular/core").OutputEmitterRef<CustomEvent<unknown>>;
|
|
67
|
+
/** A column resize committed. `detail` is `{ columnId, width, columnWidths }`. */
|
|
68
|
+
readonly luzmoColumnResized: import("@angular/core").OutputEmitterRef<CustomEvent<unknown>>;
|
|
69
|
+
/** The mounted window of a virtualized table changed. `detail` is `{ first, last }`. */
|
|
70
|
+
readonly luzmoRangeChanged: import("@angular/core").OutputEmitterRef<CustomEvent<unknown>>;
|
|
71
|
+
constructor();
|
|
72
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
73
|
+
ngAfterContentChecked(): void;
|
|
74
|
+
private updateTemplateInputs;
|
|
75
|
+
/**
|
|
76
|
+
* Forward a wrapper @Input to the underlying host element via Renderer2 so
|
|
77
|
+
* the wrapper stays compatible with non-DOM Angular platforms (SSR, tests).
|
|
78
|
+
* Unlike a "skip undefined" guard, this lets consumers reset values back to
|
|
79
|
+
* undefined / null by clearing their bindings.
|
|
80
|
+
*/
|
|
81
|
+
private setHostProperty;
|
|
82
|
+
private bindEvents;
|
|
83
|
+
/** Moves focus to the grid's current cell. */
|
|
84
|
+
focus(options?: FocusOptions): void;
|
|
85
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<LuzmoTable, never>;
|
|
86
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<LuzmoTable, "luzmo-table", ["luzmoTable"], { "role": { "alias": "role"; "required": false; }; "density": { "alias": "density"; "required": false; }; "emphasized": { "alias": "emphasized"; "required": false; }; "quiet": { "alias": "quiet"; "required": false; }; "scroller": { "alias": "scroller"; "required": false; }; "selects": { "alias": "selects"; "required": false; }; "selected": { "alias": "selected"; "required": false; }; "selectAllLabel": { "alias": "selectAllLabel"; "required": false; }; "items": { "alias": "items"; "required": false; }; "itemValue": { "alias": "itemValue"; "required": false; }; "itemLabel": { "alias": "itemLabel"; "required": false; }; "renderItem": { "alias": "renderItem"; "required": false; }; "expanded": { "alias": "expanded"; "required": false; }; "renderDetails": { "alias": "renderDetails"; "required": false; }; "columnWidths": { "alias": "columnWidths"; "required": false; }; "columns": { "alias": "columns"; "required": false; }; "virtualized": { "alias": "virtualized"; "required": false; }; "labels": { "alias": "labels"; "required": false; }; "size": { "alias": "size"; "required": false; }; }, { "changeEvent": "changeEvent"; "luzmoTableSorted": "luzmo-table-sorted"; "luzmoTableRowToggle": "luzmo-table-row-toggle"; "luzmoColumnResized": "luzmo-column-resized"; "luzmoRangeChanged": "luzmo-range-changed"; }, ["projectedTemplates"], ["*"], true, never>;
|
|
87
|
+
}
|
|
88
|
+
/** The underlying custom element type for LuzmoTable */
|
|
89
|
+
export type LuzmoTableElement = LuzmoTableHostElement;
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
import { ApplicationRef, ChangeDetectionStrategy, Component, ContentChildren, DestroyRef, ElementRef, inject, Input, output, Renderer2 } from '@angular/core';
|
|
2
|
+
import '@luzmo/lucero/table';
|
|
3
|
+
import { AngularTemplateInput } from './template-input.js';
|
|
4
|
+
import { LuzmoTemplate, collectTemplateSlots } from './template.js';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
const _c0 = ["*"];
|
|
7
|
+
/**
|
|
8
|
+
* Angular wrapper component for <luzmo-table>
|
|
9
|
+
*
|
|
10
|
+
* @slot (default) - `luzmo-table-head` and `luzmo-table-body`.
|
|
11
|
+
*/
|
|
12
|
+
export class LuzmoTable {
|
|
13
|
+
elementRef = inject(ElementRef);
|
|
14
|
+
renderer = inject(Renderer2);
|
|
15
|
+
destroyRef = inject(DestroyRef);
|
|
16
|
+
host = this.elementRef.nativeElement;
|
|
17
|
+
listenerCleanup = [];
|
|
18
|
+
projectedTemplates;
|
|
19
|
+
templateValues = new Map();
|
|
20
|
+
templateDefaults = {
|
|
21
|
+
renderItem: this.host.renderItem,
|
|
22
|
+
renderDetails: this.host.renderDetails
|
|
23
|
+
};
|
|
24
|
+
templateInputs = {
|
|
25
|
+
renderItem: new AngularTemplateInput(inject(ApplicationRef)),
|
|
26
|
+
renderDetails: new AngularTemplateInput(inject(ApplicationRef))
|
|
27
|
+
};
|
|
28
|
+
/** The underlying custom element instance. Use to call imperative methods. */
|
|
29
|
+
get nativeElement() {
|
|
30
|
+
return this.host;
|
|
31
|
+
}
|
|
32
|
+
role;
|
|
33
|
+
/** Row density. Unset is regular. */
|
|
34
|
+
density;
|
|
35
|
+
/** Use the accent color for selected rows and checkboxes. */
|
|
36
|
+
emphasized;
|
|
37
|
+
/** Remove the outer border and background. */
|
|
38
|
+
quiet;
|
|
39
|
+
/** Scroll the body inside the table's block size, keeping the head in view. */
|
|
40
|
+
scroller;
|
|
41
|
+
/** Row selection mode. Unset disables selection. */
|
|
42
|
+
selects;
|
|
43
|
+
/** Selected row values. */
|
|
44
|
+
selected;
|
|
45
|
+
/** Accessible name of the select-all checkbox. Overrides `labels.selectAll`. */
|
|
46
|
+
selectAllLabel;
|
|
47
|
+
/** Row records. Setting an array switches the table to data mode. */
|
|
48
|
+
items;
|
|
49
|
+
/** Stable, unique selection value of a data-mode row. Defaults to the item index. */
|
|
50
|
+
itemValue;
|
|
51
|
+
/** Accessible name of a data-mode row checkbox. Defaults to the first column's text, then `labels.selectRow`. */
|
|
52
|
+
itemLabel;
|
|
53
|
+
/** Cell content of a data-mode row. Return `luzmo-table-cell` elements. */
|
|
54
|
+
renderItem;
|
|
55
|
+
/** Expanded row values. Setting `renderDetails` enables data-mode disclosure. */
|
|
56
|
+
expanded;
|
|
57
|
+
/** Details content of a data-mode row. Its presence enables row disclosure for every non-information row. */
|
|
58
|
+
renderDetails;
|
|
59
|
+
/** Resized column widths, in pixels, keyed by column id. A resize updates this map without changing `columns`. */
|
|
60
|
+
columnWidths;
|
|
61
|
+
/** Data-mode columns, used when no `luzmo-table-head` is slotted. */
|
|
62
|
+
columns;
|
|
63
|
+
/** Mount only the visible rows. Data mode only; needs a bounded block size. */
|
|
64
|
+
virtualized;
|
|
65
|
+
/** Translatable copy. */
|
|
66
|
+
labels;
|
|
67
|
+
size;
|
|
68
|
+
/** `selected` changed. Cancel it to keep the previous selection. */
|
|
69
|
+
changeEvent = output();
|
|
70
|
+
/** A sortable header was activated. `detail` is `{ sortKey, sortDirection }`. Cancel it in data mode to skip the client sort. */
|
|
71
|
+
luzmoTableSorted = output({ alias: 'luzmo-table-sorted' });
|
|
72
|
+
/** A row's details were expanded or collapsed. `detail` is `{ value, expanded }`. Cancel it to keep the previous state. */
|
|
73
|
+
luzmoTableRowToggle = output({ alias: 'luzmo-table-row-toggle' });
|
|
74
|
+
/** A column resize committed. `detail` is `{ columnId, width, columnWidths }`. */
|
|
75
|
+
luzmoColumnResized = output({ alias: 'luzmo-column-resized' });
|
|
76
|
+
/** The mounted window of a virtualized table changed. `detail` is `{ first, last }`. */
|
|
77
|
+
luzmoRangeChanged = output({ alias: 'luzmo-range-changed' });
|
|
78
|
+
constructor() {
|
|
79
|
+
this.bindEvents();
|
|
80
|
+
this.destroyRef.onDestroy(() => {
|
|
81
|
+
for (const input of Object.values(this.templateInputs))
|
|
82
|
+
input.destroy();
|
|
83
|
+
for (const cleanup of this.listenerCleanup) {
|
|
84
|
+
cleanup();
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
ngOnChanges(changes) {
|
|
89
|
+
for (const key of Object.keys(changes)) {
|
|
90
|
+
switch (key) {
|
|
91
|
+
case 'role':
|
|
92
|
+
this.setHostProperty('role', changes['role'].currentValue);
|
|
93
|
+
break;
|
|
94
|
+
case 'density':
|
|
95
|
+
this.setHostProperty('density', changes['density'].currentValue);
|
|
96
|
+
break;
|
|
97
|
+
case 'emphasized':
|
|
98
|
+
this.setHostProperty('emphasized', changes['emphasized'].currentValue);
|
|
99
|
+
break;
|
|
100
|
+
case 'quiet':
|
|
101
|
+
this.setHostProperty('quiet', changes['quiet'].currentValue);
|
|
102
|
+
break;
|
|
103
|
+
case 'scroller':
|
|
104
|
+
this.setHostProperty('scroller', changes['scroller'].currentValue);
|
|
105
|
+
break;
|
|
106
|
+
case 'selects':
|
|
107
|
+
this.setHostProperty('selects', changes['selects'].currentValue);
|
|
108
|
+
break;
|
|
109
|
+
case 'selected':
|
|
110
|
+
this.setHostProperty('selected', changes['selected'].currentValue);
|
|
111
|
+
break;
|
|
112
|
+
case 'selectAllLabel':
|
|
113
|
+
this.setHostProperty('selectAllLabel', changes['selectAllLabel'].currentValue);
|
|
114
|
+
break;
|
|
115
|
+
case 'items':
|
|
116
|
+
this.setHostProperty('items', changes['items'].currentValue);
|
|
117
|
+
break;
|
|
118
|
+
case 'itemValue':
|
|
119
|
+
this.setHostProperty('itemValue', changes['itemValue'].currentValue);
|
|
120
|
+
break;
|
|
121
|
+
case 'itemLabel':
|
|
122
|
+
this.setHostProperty('itemLabel', changes['itemLabel'].currentValue);
|
|
123
|
+
break;
|
|
124
|
+
case 'expanded':
|
|
125
|
+
this.setHostProperty('expanded', changes['expanded'].currentValue);
|
|
126
|
+
break;
|
|
127
|
+
case 'columnWidths':
|
|
128
|
+
this.setHostProperty('columnWidths', changes['columnWidths'].currentValue);
|
|
129
|
+
break;
|
|
130
|
+
case 'columns':
|
|
131
|
+
this.setHostProperty('columns', changes['columns'].currentValue);
|
|
132
|
+
break;
|
|
133
|
+
case 'virtualized':
|
|
134
|
+
this.setHostProperty('virtualized', changes['virtualized'].currentValue);
|
|
135
|
+
break;
|
|
136
|
+
case 'labels':
|
|
137
|
+
this.setHostProperty('labels', changes['labels'].currentValue);
|
|
138
|
+
break;
|
|
139
|
+
case 'size':
|
|
140
|
+
this.setHostProperty('size', changes['size'].currentValue);
|
|
141
|
+
break;
|
|
142
|
+
default:
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
this.updateTemplateInputs();
|
|
147
|
+
}
|
|
148
|
+
ngAfterContentChecked() {
|
|
149
|
+
this.updateTemplateInputs();
|
|
150
|
+
}
|
|
151
|
+
updateTemplateInputs() {
|
|
152
|
+
const slots = collectTemplateSlots(this.projectedTemplates ?? [], ["row", "details"]);
|
|
153
|
+
{
|
|
154
|
+
const value = this.renderItem ?? slots.get("row") ?? this.templateDefaults.renderItem;
|
|
155
|
+
if (!this.templateValues.has('renderItem') || this.templateValues.get('renderItem') !== value) {
|
|
156
|
+
this.setHostProperty('renderItem', this.templateInputs.renderItem.set(value, { "context": ["item", "index"], "implicit": "item", "slot": "row" }));
|
|
157
|
+
this.templateValues.set('renderItem', value);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
{
|
|
161
|
+
const value = this.renderDetails ?? slots.get("details") ?? this.templateDefaults.renderDetails;
|
|
162
|
+
if (!this.templateValues.has('renderDetails') || this.templateValues.get('renderDetails') !== value) {
|
|
163
|
+
this.setHostProperty('renderDetails', this.templateInputs.renderDetails.set(value, { "context": ["item", "index"], "implicit": "item", "slot": "details" }));
|
|
164
|
+
this.templateValues.set('renderDetails', value);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Forward a wrapper @Input to the underlying host element via Renderer2 so
|
|
170
|
+
* the wrapper stays compatible with non-DOM Angular platforms (SSR, tests).
|
|
171
|
+
* Unlike a "skip undefined" guard, this lets consumers reset values back to
|
|
172
|
+
* undefined / null by clearing their bindings.
|
|
173
|
+
*/
|
|
174
|
+
setHostProperty(key, value) {
|
|
175
|
+
this.renderer.setProperty(this.host, key, value);
|
|
176
|
+
}
|
|
177
|
+
bindEvents() {
|
|
178
|
+
this.listenerCleanup.push(this.renderer.listen(this.host, 'change', (event) => {
|
|
179
|
+
this.changeEvent.emit(event);
|
|
180
|
+
}));
|
|
181
|
+
this.listenerCleanup.push(this.renderer.listen(this.host, 'luzmo-table-sorted', (event) => {
|
|
182
|
+
this.luzmoTableSorted.emit(event);
|
|
183
|
+
}));
|
|
184
|
+
this.listenerCleanup.push(this.renderer.listen(this.host, 'luzmo-table-row-toggle', (event) => {
|
|
185
|
+
this.luzmoTableRowToggle.emit(event);
|
|
186
|
+
}));
|
|
187
|
+
this.listenerCleanup.push(this.renderer.listen(this.host, 'luzmo-column-resized', (event) => {
|
|
188
|
+
this.luzmoColumnResized.emit(event);
|
|
189
|
+
}));
|
|
190
|
+
this.listenerCleanup.push(this.renderer.listen(this.host, 'luzmo-range-changed', (event) => {
|
|
191
|
+
this.luzmoRangeChanged.emit(event);
|
|
192
|
+
}));
|
|
193
|
+
}
|
|
194
|
+
/** Moves focus to the grid's current cell. */
|
|
195
|
+
focus(options) {
|
|
196
|
+
return this.host.focus(options);
|
|
197
|
+
}
|
|
198
|
+
static ɵfac = function LuzmoTable_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || LuzmoTable)(); };
|
|
199
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LuzmoTable, selectors: [["luzmo-table"]], contentQueries: function LuzmoTable_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
|
|
200
|
+
i0.ɵɵcontentQuery(dirIndex, LuzmoTemplate, 4);
|
|
201
|
+
} if (rf & 2) {
|
|
202
|
+
let _t;
|
|
203
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.projectedTemplates = _t);
|
|
204
|
+
} }, inputs: { role: "role", density: "density", emphasized: "emphasized", quiet: "quiet", scroller: "scroller", selects: "selects", selected: "selected", selectAllLabel: "selectAllLabel", items: "items", itemValue: "itemValue", itemLabel: "itemLabel", renderItem: "renderItem", expanded: "expanded", renderDetails: "renderDetails", columnWidths: "columnWidths", columns: "columns", virtualized: "virtualized", labels: "labels", size: "size" }, outputs: { changeEvent: "changeEvent", luzmoTableSorted: "luzmo-table-sorted", luzmoTableRowToggle: "luzmo-table-row-toggle", luzmoColumnResized: "luzmo-column-resized", luzmoRangeChanged: "luzmo-range-changed" }, exportAs: ["luzmoTable"], features: [i0.ɵɵNgOnChangesFeature], ngContentSelectors: _c0, decls: 1, vars: 0, template: function LuzmoTable_Template(rf, ctx) { if (rf & 1) {
|
|
205
|
+
i0.ɵɵprojectionDef();
|
|
206
|
+
i0.ɵɵprojection(0);
|
|
207
|
+
} }, encapsulation: 2 });
|
|
208
|
+
}
|
|
209
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LuzmoTable, [{
|
|
210
|
+
type: Component,
|
|
211
|
+
args: [{
|
|
212
|
+
selector: 'luzmo-table',
|
|
213
|
+
exportAs: 'luzmoTable',
|
|
214
|
+
standalone: true,
|
|
215
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
216
|
+
template: '<ng-content />'
|
|
217
|
+
}]
|
|
218
|
+
}], () => [], { projectedTemplates: [{
|
|
219
|
+
type: ContentChildren,
|
|
220
|
+
args: [LuzmoTemplate, { descendants: false }]
|
|
221
|
+
}], role: [{
|
|
222
|
+
type: Input,
|
|
223
|
+
args: [{ alias: 'role' }]
|
|
224
|
+
}], density: [{
|
|
225
|
+
type: Input,
|
|
226
|
+
args: [{ alias: 'density' }]
|
|
227
|
+
}], emphasized: [{
|
|
228
|
+
type: Input,
|
|
229
|
+
args: [{ alias: 'emphasized' }]
|
|
230
|
+
}], quiet: [{
|
|
231
|
+
type: Input,
|
|
232
|
+
args: [{ alias: 'quiet' }]
|
|
233
|
+
}], scroller: [{
|
|
234
|
+
type: Input,
|
|
235
|
+
args: [{ alias: 'scroller' }]
|
|
236
|
+
}], selects: [{
|
|
237
|
+
type: Input,
|
|
238
|
+
args: [{ alias: 'selects' }]
|
|
239
|
+
}], selected: [{
|
|
240
|
+
type: Input,
|
|
241
|
+
args: [{ alias: 'selected' }]
|
|
242
|
+
}], selectAllLabel: [{
|
|
243
|
+
type: Input,
|
|
244
|
+
args: [{ alias: 'selectAllLabel' }]
|
|
245
|
+
}], items: [{
|
|
246
|
+
type: Input,
|
|
247
|
+
args: [{ alias: 'items' }]
|
|
248
|
+
}], itemValue: [{
|
|
249
|
+
type: Input,
|
|
250
|
+
args: [{ alias: 'itemValue' }]
|
|
251
|
+
}], itemLabel: [{
|
|
252
|
+
type: Input,
|
|
253
|
+
args: [{ alias: 'itemLabel' }]
|
|
254
|
+
}], renderItem: [{
|
|
255
|
+
type: Input,
|
|
256
|
+
args: [{ alias: 'renderItem' }]
|
|
257
|
+
}], expanded: [{
|
|
258
|
+
type: Input,
|
|
259
|
+
args: [{ alias: 'expanded' }]
|
|
260
|
+
}], renderDetails: [{
|
|
261
|
+
type: Input,
|
|
262
|
+
args: [{ alias: 'renderDetails' }]
|
|
263
|
+
}], columnWidths: [{
|
|
264
|
+
type: Input,
|
|
265
|
+
args: [{ alias: 'columnWidths' }]
|
|
266
|
+
}], columns: [{
|
|
267
|
+
type: Input,
|
|
268
|
+
args: [{ alias: 'columns' }]
|
|
269
|
+
}], virtualized: [{
|
|
270
|
+
type: Input,
|
|
271
|
+
args: [{ alias: 'virtualized' }]
|
|
272
|
+
}], labels: [{
|
|
273
|
+
type: Input,
|
|
274
|
+
args: [{ alias: 'labels' }]
|
|
275
|
+
}], size: [{
|
|
276
|
+
type: Input,
|
|
277
|
+
args: [{ alias: 'size' }]
|
|
278
|
+
}], changeEvent: [{ type: i0.Output, args: ["changeEvent"] }], luzmoTableSorted: [{ type: i0.Output, args: ["luzmo-table-sorted"] }], luzmoTableRowToggle: [{ type: i0.Output, args: ["luzmo-table-row-toggle"] }], luzmoColumnResized: [{ type: i0.Output, args: ["luzmo-column-resized"] }], luzmoRangeChanged: [{ type: i0.Output, args: ["luzmo-range-changed"] }] }); })();
|
|
279
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(LuzmoTable, { className: "LuzmoTable", filePath: "components/table.ts", lineNumber: 19 }); })();
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ApplicationRef } from '@angular/core';
|
|
2
|
+
import { type TemplatePropertyOptions } from '@luzmo/lucero/utils';
|
|
3
|
+
export declare class AngularTemplateInput {
|
|
4
|
+
private readonly application;
|
|
5
|
+
private readonly views;
|
|
6
|
+
private generation;
|
|
7
|
+
constructor(application: ApplicationRef);
|
|
8
|
+
set(value: unknown, options: TemplatePropertyOptions): unknown;
|
|
9
|
+
destroy(): void;
|
|
10
|
+
private release;
|
|
11
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { TemplateRef } from '@angular/core';
|
|
2
|
+
import { createTemplateRenderer } from '@luzmo/lucero/utils';
|
|
3
|
+
export class AngularTemplateInput {
|
|
4
|
+
application;
|
|
5
|
+
views = new Set();
|
|
6
|
+
generation = 0;
|
|
7
|
+
constructor(application) {
|
|
8
|
+
this.application = application;
|
|
9
|
+
}
|
|
10
|
+
set(value, options) {
|
|
11
|
+
this.destroy();
|
|
12
|
+
if (!(value instanceof TemplateRef))
|
|
13
|
+
return value;
|
|
14
|
+
const generation = this.generation;
|
|
15
|
+
return createTemplateRenderer((args) => {
|
|
16
|
+
if (generation !== this.generation) {
|
|
17
|
+
return { nodes: [], update() { }, destroy() { } };
|
|
18
|
+
}
|
|
19
|
+
const context = Object.fromEntries(options.context.map((name, index) => [name, args[index]]));
|
|
20
|
+
context['$implicit'] = context[options.implicit];
|
|
21
|
+
const view = value.createEmbeddedView(context);
|
|
22
|
+
this.views.add(view);
|
|
23
|
+
try {
|
|
24
|
+
this.application.attachView(view);
|
|
25
|
+
view.detectChanges();
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
this.release(view);
|
|
29
|
+
throw error;
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
nodes: view.rootNodes,
|
|
33
|
+
update: (next) => {
|
|
34
|
+
if (view.destroyed)
|
|
35
|
+
return;
|
|
36
|
+
for (const [index, name] of options.context.entries())
|
|
37
|
+
view.context[name] = next[index];
|
|
38
|
+
view.context['$implicit'] = view.context[options.implicit];
|
|
39
|
+
view.detectChanges();
|
|
40
|
+
},
|
|
41
|
+
destroy: () => this.release(view)
|
|
42
|
+
};
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
destroy() {
|
|
46
|
+
this.generation++;
|
|
47
|
+
for (const view of this.views)
|
|
48
|
+
this.release(view);
|
|
49
|
+
}
|
|
50
|
+
release(view) {
|
|
51
|
+
if (!this.views.delete(view))
|
|
52
|
+
return;
|
|
53
|
+
this.application.detachView(view);
|
|
54
|
+
view.destroy();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { TemplateRef } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/** A named template consumed by its direct parent Lucero wrapper. */
|
|
4
|
+
export declare class LuzmoTemplate {
|
|
5
|
+
luzmoTemplate: string;
|
|
6
|
+
readonly template: TemplateRef<any>;
|
|
7
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<LuzmoTemplate, never>;
|
|
8
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<LuzmoTemplate, "ng-template[luzmoTemplate]", never, { "luzmoTemplate": { "alias": "luzmoTemplate"; "required": true; }; }, {}, never, never, true, never>;
|
|
9
|
+
}
|
|
10
|
+
export declare function collectTemplateSlots(templates: Iterable<LuzmoTemplate>, names: readonly string[]): Map<string, TemplateRef<unknown>>;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Directive, Input, TemplateRef, inject } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/** A named template consumed by its direct parent Lucero wrapper. */
|
|
4
|
+
export class LuzmoTemplate {
|
|
5
|
+
luzmoTemplate;
|
|
6
|
+
template = inject(TemplateRef);
|
|
7
|
+
static ɵfac = function LuzmoTemplate_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || LuzmoTemplate)(); };
|
|
8
|
+
static ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: LuzmoTemplate, selectors: [["ng-template", "luzmoTemplate", ""]], inputs: { luzmoTemplate: "luzmoTemplate" } });
|
|
9
|
+
}
|
|
10
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LuzmoTemplate, [{
|
|
11
|
+
type: Directive,
|
|
12
|
+
args: [{ selector: 'ng-template[luzmoTemplate]', standalone: true }]
|
|
13
|
+
}], null, { luzmoTemplate: [{
|
|
14
|
+
type: Input,
|
|
15
|
+
args: [{ required: true }]
|
|
16
|
+
}] }); })();
|
|
17
|
+
export function collectTemplateSlots(templates, names) {
|
|
18
|
+
const slots = new Map();
|
|
19
|
+
for (const directive of templates) {
|
|
20
|
+
const name = directive.luzmoTemplate;
|
|
21
|
+
if (!names.includes(name)) {
|
|
22
|
+
throw new Error(`Unknown Lucero template slot: ${name}. Expected: ${names.join(', ')}.`);
|
|
23
|
+
}
|
|
24
|
+
if (slots.has(name)) {
|
|
25
|
+
throw new Error(`Duplicate Lucero template slot: ${name}.`);
|
|
26
|
+
}
|
|
27
|
+
slots.set(name, directive.template);
|
|
28
|
+
}
|
|
29
|
+
return slots;
|
|
30
|
+
}
|
package/esm/index.d.ts
CHANGED
|
@@ -66,6 +66,15 @@ import { LuzmoSwatchGroup } from './components/swatch-group.js';
|
|
|
66
66
|
import { LuzmoSwitch } from './components/switch.js';
|
|
67
67
|
import { LuzmoTab } from './components/tab.js';
|
|
68
68
|
import { LuzmoTabPanel } from './components/tab-panel.js';
|
|
69
|
+
import { LuzmoTable } from './components/table.js';
|
|
70
|
+
import { LuzmoTableBody } from './components/table-body.js';
|
|
71
|
+
import { LuzmoTableCell } from './components/table-cell.js';
|
|
72
|
+
import { LuzmoTableCheckboxCell } from './components/table-checkbox-cell.js';
|
|
73
|
+
import { LuzmoTableDisclosureCell } from './components/table-disclosure-cell.js';
|
|
74
|
+
import { LuzmoTableHead } from './components/table-head.js';
|
|
75
|
+
import { LuzmoTableHeadCell } from './components/table-head-cell.js';
|
|
76
|
+
import { LuzmoTableRow } from './components/table-row.js';
|
|
77
|
+
import { LuzmoTableRowDetails } from './components/table-row-details.js';
|
|
69
78
|
import { LuzmoTabs } from './components/tabs.js';
|
|
70
79
|
import { LuzmoTabsOverflow } from './components/tabs-overflow.js';
|
|
71
80
|
import { LuzmoTag } from './components/tag.js';
|
|
@@ -143,6 +152,15 @@ export { LuzmoSwatchGroup, type LuzmoSwatchGroupElement } from './components/swa
|
|
|
143
152
|
export { LuzmoSwitch, type LuzmoSwitchElement } from './components/switch.js';
|
|
144
153
|
export { LuzmoTab, type LuzmoTabElement } from './components/tab.js';
|
|
145
154
|
export { LuzmoTabPanel, type LuzmoTabPanelElement } from './components/tab-panel.js';
|
|
155
|
+
export { LuzmoTable, type LuzmoTableElement } from './components/table.js';
|
|
156
|
+
export { LuzmoTableBody, type LuzmoTableBodyElement } from './components/table-body.js';
|
|
157
|
+
export { LuzmoTableCell, type LuzmoTableCellElement } from './components/table-cell.js';
|
|
158
|
+
export { LuzmoTableCheckboxCell, type LuzmoTableCheckboxCellElement } from './components/table-checkbox-cell.js';
|
|
159
|
+
export { LuzmoTableDisclosureCell, type LuzmoTableDisclosureCellElement } from './components/table-disclosure-cell.js';
|
|
160
|
+
export { LuzmoTableHead, type LuzmoTableHeadElement } from './components/table-head.js';
|
|
161
|
+
export { LuzmoTableHeadCell, type LuzmoTableHeadCellElement } from './components/table-head-cell.js';
|
|
162
|
+
export { LuzmoTableRow, type LuzmoTableRowElement } from './components/table-row.js';
|
|
163
|
+
export { LuzmoTableRowDetails, type LuzmoTableRowDetailsElement } from './components/table-row-details.js';
|
|
146
164
|
export { LuzmoTabs, type LuzmoTabsElement } from './components/tabs.js';
|
|
147
165
|
export { LuzmoTabsOverflow, type LuzmoTabsOverflowElement } from './components/tabs-overflow.js';
|
|
148
166
|
export { LuzmoTag, type LuzmoTagElement } from './components/tag.js';
|
|
@@ -152,6 +170,7 @@ export { LuzmoToast, type LuzmoToastElement } from './components/toast.js';
|
|
|
152
170
|
export { LuzmoTooltip, type LuzmoTooltipElement } from './components/tooltip.js';
|
|
153
171
|
export { LuzmoTopNav, type LuzmoTopNavElement } from './components/top-nav.js';
|
|
154
172
|
export { LuzmoTopNavItem, type LuzmoTopNavItemElement } from './components/top-nav-item.js';
|
|
155
|
-
export
|
|
156
|
-
export declare const
|
|
173
|
+
export { LuzmoTemplate } from './components/template.js';
|
|
174
|
+
export declare const LUZMO_ANGULAR_COMPONENTS: readonly [typeof LuzmoAccordion, typeof LuzmoAccordionItem, typeof LuzmoActionBar, typeof LuzmoActionButton, typeof LuzmoActionGroup, typeof LuzmoActionMenu, typeof LuzmoAvatar, typeof LuzmoBadge, typeof LuzmoButton, typeof LuzmoButtonGroup, typeof LuzmoCalendar, typeof LuzmoChatMessage, typeof LuzmoChatMessageGroup, typeof LuzmoCheckbox, typeof LuzmoClearButton, typeof LuzmoCloseButton, typeof LuzmoColorArea, typeof LuzmoColorField, typeof LuzmoColorHandle, typeof LuzmoColorLoupe, typeof LuzmoColorMenu, typeof LuzmoColorPalette, typeof LuzmoColorPaletteGroup, typeof LuzmoColorPicker, typeof LuzmoColorSlider, typeof LuzmoDateRangePicker, typeof LuzmoDateTimePicker, typeof LuzmoDivider, typeof LuzmoFieldGroup, typeof LuzmoFieldLabel, typeof LuzmoHelpText, typeof LuzmoIcon, typeof LuzmoInfieldButton, typeof LuzmoLabel, typeof LuzmoMenu, typeof LuzmoMenuDivider, typeof LuzmoMenuGroup, typeof LuzmoMenuItem, typeof LuzmoMultiLanguageField, typeof LuzmoNotice, typeof LuzmoNumberField, typeof LuzmoOption, typeof LuzmoOptions, typeof LuzmoOptionsDivider, typeof LuzmoOverlay, typeof LuzmoOverlayTrigger, typeof LuzmoPicker, typeof LuzmoPickerButton, typeof LuzmoPopover, typeof LuzmoProgressBar, typeof LuzmoProgressCircle, typeof LuzmoProgressSteps, typeof LuzmoPromptBox, typeof LuzmoQuestionBox, typeof LuzmoRadio, typeof LuzmoRadioGroup, typeof LuzmoSearch, typeof LuzmoSelect, typeof LuzmoSkeletonLoader, typeof LuzmoSlider, typeof LuzmoSliderHandle, typeof LuzmoSplitView, typeof LuzmoStatusLight, typeof LuzmoSwatch, typeof LuzmoSwatchGroup, typeof LuzmoSwitch, typeof LuzmoTab, typeof LuzmoTabPanel, typeof LuzmoTable, typeof LuzmoTableBody, typeof LuzmoTableCell, typeof LuzmoTableCheckboxCell, typeof LuzmoTableDisclosureCell, typeof LuzmoTableHead, typeof LuzmoTableHeadCell, typeof LuzmoTableRow, typeof LuzmoTableRowDetails, typeof LuzmoTabs, typeof LuzmoTabsOverflow, typeof LuzmoTag, typeof LuzmoTags, typeof LuzmoTextField, typeof LuzmoToast, typeof LuzmoTooltip, typeof LuzmoTopNav, typeof LuzmoTopNavItem];
|
|
175
|
+
export declare const LUZMO_ANGULAR_COMPONENT_NAMES: readonly ["LuzmoAccordion", "LuzmoAccordionItem", "LuzmoActionBar", "LuzmoActionButton", "LuzmoActionGroup", "LuzmoActionMenu", "LuzmoAvatar", "LuzmoBadge", "LuzmoButton", "LuzmoButtonGroup", "LuzmoCalendar", "LuzmoChatMessage", "LuzmoChatMessageGroup", "LuzmoCheckbox", "LuzmoClearButton", "LuzmoCloseButton", "LuzmoColorArea", "LuzmoColorField", "LuzmoColorHandle", "LuzmoColorLoupe", "LuzmoColorMenu", "LuzmoColorPalette", "LuzmoColorPaletteGroup", "LuzmoColorPicker", "LuzmoColorSlider", "LuzmoDateRangePicker", "LuzmoDateTimePicker", "LuzmoDivider", "LuzmoFieldGroup", "LuzmoFieldLabel", "LuzmoHelpText", "LuzmoIcon", "LuzmoInfieldButton", "LuzmoLabel", "LuzmoMenu", "LuzmoMenuDivider", "LuzmoMenuGroup", "LuzmoMenuItem", "LuzmoMultiLanguageField", "LuzmoNotice", "LuzmoNumberField", "LuzmoOption", "LuzmoOptions", "LuzmoOptionsDivider", "LuzmoOverlay", "LuzmoOverlayTrigger", "LuzmoPicker", "LuzmoPickerButton", "LuzmoPopover", "LuzmoProgressBar", "LuzmoProgressCircle", "LuzmoProgressSteps", "LuzmoPromptBox", "LuzmoQuestionBox", "LuzmoRadio", "LuzmoRadioGroup", "LuzmoSearch", "LuzmoSelect", "LuzmoSkeletonLoader", "LuzmoSlider", "LuzmoSliderHandle", "LuzmoSplitView", "LuzmoStatusLight", "LuzmoSwatch", "LuzmoSwatchGroup", "LuzmoSwitch", "LuzmoTab", "LuzmoTabPanel", "LuzmoTable", "LuzmoTableBody", "LuzmoTableCell", "LuzmoTableCheckboxCell", "LuzmoTableDisclosureCell", "LuzmoTableHead", "LuzmoTableHeadCell", "LuzmoTableRow", "LuzmoTableRowDetails", "LuzmoTabs", "LuzmoTabsOverflow", "LuzmoTag", "LuzmoTags", "LuzmoTextField", "LuzmoToast", "LuzmoTooltip", "LuzmoTopNav", "LuzmoTopNavItem"];
|
|
157
176
|
export type LuzmoAngularComponentName = (typeof LUZMO_ANGULAR_COMPONENT_NAMES)[number];
|