@luzmo/ngx-lucero 1.0.1-alpha.78
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 +41 -0
- package/esm/components/accordion-item.d.ts +32 -0
- package/esm/components/accordion-item.js +89 -0
- package/esm/components/accordion.d.ts +38 -0
- package/esm/components/accordion.js +107 -0
- package/esm/components/action-bar.d.ts +32 -0
- package/esm/components/action-bar.js +83 -0
- package/esm/components/action-button.d.ts +59 -0
- package/esm/components/action-button.js +205 -0
- package/esm/components/action-group.d.ts +42 -0
- package/esm/components/action-group.js +155 -0
- package/esm/components/action-menu.d.ts +75 -0
- package/esm/components/action-menu.js +337 -0
- package/esm/components/avatar.d.ts +35 -0
- package/esm/components/avatar.js +94 -0
- package/esm/components/badge.d.ts +31 -0
- package/esm/components/badge.js +86 -0
- package/esm/components/button-group.d.ts +28 -0
- package/esm/components/button-group.js +71 -0
- package/esm/components/button.d.ts +40 -0
- package/esm/components/button.js +140 -0
- package/esm/components/calendar.d.ts +64 -0
- package/esm/components/calendar.js +218 -0
- package/esm/components/chat-message-group.d.ts +29 -0
- package/esm/components/chat-message-group.js +76 -0
- package/esm/components/chat-message.d.ts +50 -0
- package/esm/components/chat-message.js +156 -0
- package/esm/components/checkbox.d.ts +55 -0
- package/esm/components/checkbox.js +196 -0
- package/esm/components/clear-button.d.ts +32 -0
- package/esm/components/clear-button.js +88 -0
- package/esm/components/close-button.d.ts +33 -0
- package/esm/components/close-button.js +95 -0
- package/esm/components/color-area.d.ts +45 -0
- package/esm/components/color-area.js +167 -0
- package/esm/components/color-field.d.ts +91 -0
- package/esm/components/color-field.js +321 -0
- package/esm/components/color-handle.d.ts +31 -0
- package/esm/components/color-handle.js +90 -0
- package/esm/components/color-loupe.d.ts +29 -0
- package/esm/components/color-loupe.js +76 -0
- package/esm/components/color-menu.d.ts +36 -0
- package/esm/components/color-menu.js +97 -0
- package/esm/components/color-palette-group.d.ts +40 -0
- package/esm/components/color-palette-group.js +117 -0
- package/esm/components/color-palette.d.ts +43 -0
- package/esm/components/color-palette.js +126 -0
- package/esm/components/color-picker.d.ts +49 -0
- package/esm/components/color-picker.js +143 -0
- package/esm/components/color-slider.d.ts +53 -0
- package/esm/components/color-slider.js +215 -0
- package/esm/components/date-range-picker.d.ts +69 -0
- package/esm/components/date-range-picker.js +228 -0
- package/esm/components/date-time-picker.d.ts +71 -0
- package/esm/components/date-time-picker.js +249 -0
- package/esm/components/divider.d.ts +31 -0
- package/esm/components/divider.js +78 -0
- package/esm/components/field-group.d.ts +32 -0
- package/esm/components/field-group.js +101 -0
- package/esm/components/field-label.d.ts +37 -0
- package/esm/components/field-label.js +104 -0
- package/esm/components/help-text.d.ts +30 -0
- package/esm/components/help-text.js +77 -0
- package/esm/components/icon.d.ts +33 -0
- package/esm/components/icon.js +104 -0
- package/esm/components/infield-button.d.ts +35 -0
- package/esm/components/infield-button.js +103 -0
- package/esm/components/label.d.ts +29 -0
- package/esm/components/label.js +76 -0
- package/esm/components/menu.d.ts +53 -0
- package/esm/components/menu.js +218 -0
- package/esm/components/multi-language-field.d.ts +58 -0
- package/esm/components/multi-language-field.js +263 -0
- package/esm/components/number-field.d.ts +103 -0
- package/esm/components/number-field.js +372 -0
- package/esm/components/options.d.ts +58 -0
- package/esm/components/options.js +207 -0
- package/esm/components/overlay.d.ts +67 -0
- package/esm/components/overlay.js +212 -0
- package/esm/components/picker-button.d.ts +32 -0
- package/esm/components/picker-button.js +94 -0
- package/esm/components/picker.d.ts +79 -0
- package/esm/components/picker.js +340 -0
- package/esm/components/popover.d.ts +33 -0
- package/esm/components/popover.js +93 -0
- package/esm/components/progress-bar.d.ts +35 -0
- package/esm/components/progress-bar.js +121 -0
- package/esm/components/progress-circle.d.ts +35 -0
- package/esm/components/progress-circle.js +94 -0
- package/esm/components/progress-steps.d.ts +46 -0
- package/esm/components/progress-steps.js +127 -0
- package/esm/components/prompt-box.d.ts +88 -0
- package/esm/components/prompt-box.js +280 -0
- package/esm/components/radio-group.d.ts +39 -0
- package/esm/components/radio-group.js +136 -0
- package/esm/components/radio.d.ts +46 -0
- package/esm/components/radio.js +172 -0
- package/esm/components/search.d.ts +95 -0
- package/esm/components/search.js +351 -0
- package/esm/components/select.d.ts +82 -0
- package/esm/components/select.js +351 -0
- package/esm/components/slider.d.ts +47 -0
- package/esm/components/slider.js +185 -0
- package/esm/components/status-light.d.ts +30 -0
- package/esm/components/status-light.js +78 -0
- package/esm/components/swatch-group.d.ts +37 -0
- package/esm/components/swatch-group.js +126 -0
- package/esm/components/swatch.d.ts +49 -0
- package/esm/components/swatch.js +197 -0
- package/esm/components/switch.d.ts +48 -0
- package/esm/components/switch.js +160 -0
- package/esm/components/tab-panel.d.ts +29 -0
- package/esm/components/tab-panel.js +78 -0
- package/esm/components/tab.d.ts +32 -0
- package/esm/components/tab.js +100 -0
- package/esm/components/tabs-overflow.d.ts +33 -0
- package/esm/components/tabs-overflow.js +97 -0
- package/esm/components/tabs.d.ts +43 -0
- package/esm/components/tabs.js +150 -0
- package/esm/components/tag.d.ts +31 -0
- package/esm/components/tag.js +90 -0
- package/esm/components/tags.d.ts +30 -0
- package/esm/components/tags.js +81 -0
- package/esm/components/text-field.d.ts +87 -0
- package/esm/components/text-field.js +308 -0
- package/esm/components/toast.d.ts +30 -0
- package/esm/components/toast.js +68 -0
- package/esm/components/tooltip.d.ts +44 -0
- package/esm/components/tooltip.js +154 -0
- package/esm/components/top-nav-item.d.ts +35 -0
- package/esm/components/top-nav-item.js +120 -0
- package/esm/components/top-nav.d.ts +35 -0
- package/esm/components/top-nav.js +110 -0
- package/esm/index.d.ts +135 -0
- package/esm/index.js +269 -0
- package/package.json +40 -0
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, DestroyRef, ElementRef, inject, Input, Renderer2 } from '@angular/core';
|
|
2
|
+
import '@luzmo/lucero/button-group';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
const _c0 = ["*"];
|
|
5
|
+
/**
|
|
6
|
+
* Angular wrapper component for <luzmo-button-group>
|
|
7
|
+
*
|
|
8
|
+
* @slot (default) - the luzmo-button elements that make up the group
|
|
9
|
+
*/
|
|
10
|
+
export class LuzmoButtonGroup {
|
|
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
|
+
vertical;
|
|
21
|
+
constructor() {
|
|
22
|
+
this.bindEvents();
|
|
23
|
+
this.destroyRef.onDestroy(() => {
|
|
24
|
+
for (const cleanup of this.listenerCleanup) {
|
|
25
|
+
cleanup();
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
ngOnChanges(changes) {
|
|
30
|
+
for (const key of Object.keys(changes)) {
|
|
31
|
+
switch (key) {
|
|
32
|
+
case 'vertical':
|
|
33
|
+
this.setHostProperty('vertical', changes['vertical'].currentValue);
|
|
34
|
+
break;
|
|
35
|
+
default:
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Forward a wrapper @Input to the underlying host element via Renderer2 so
|
|
42
|
+
* the wrapper stays compatible with non-DOM Angular platforms (SSR, tests).
|
|
43
|
+
* Unlike a "skip undefined" guard, this lets consumers reset values back to
|
|
44
|
+
* undefined / null by clearing their bindings.
|
|
45
|
+
*/
|
|
46
|
+
setHostProperty(key, value) {
|
|
47
|
+
this.renderer.setProperty(this.host, key, value);
|
|
48
|
+
}
|
|
49
|
+
bindEvents() {
|
|
50
|
+
// No custom events for this wrapper.
|
|
51
|
+
}
|
|
52
|
+
static ɵfac = function LuzmoButtonGroup_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || LuzmoButtonGroup)(); };
|
|
53
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LuzmoButtonGroup, selectors: [["luzmo-button-group"]], inputs: { vertical: "vertical" }, exportAs: ["luzmoButtonGroup"], features: [i0.ɵɵNgOnChangesFeature], ngContentSelectors: _c0, decls: 1, vars: 0, template: function LuzmoButtonGroup_Template(rf, ctx) { if (rf & 1) {
|
|
54
|
+
i0.ɵɵprojectionDef();
|
|
55
|
+
i0.ɵɵprojection(0);
|
|
56
|
+
} }, encapsulation: 2, changeDetection: 0 });
|
|
57
|
+
}
|
|
58
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LuzmoButtonGroup, [{
|
|
59
|
+
type: Component,
|
|
60
|
+
args: [{
|
|
61
|
+
selector: 'luzmo-button-group',
|
|
62
|
+
exportAs: 'luzmoButtonGroup',
|
|
63
|
+
standalone: true,
|
|
64
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
65
|
+
template: '<ng-content />'
|
|
66
|
+
}]
|
|
67
|
+
}], () => [], { vertical: [{
|
|
68
|
+
type: Input,
|
|
69
|
+
args: [{ alias: 'vertical' }]
|
|
70
|
+
}] }); })();
|
|
71
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(LuzmoButtonGroup, { className: "LuzmoButtonGroup", filePath: "components/button-group.ts", lineNumber: 17 }); })();
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { OnChanges, SimpleChanges } from '@angular/core';
|
|
2
|
+
import '@luzmo/lucero/button';
|
|
3
|
+
import type { LuzmoButton as LuzmoButtonHostElement } from '@luzmo/lucero/button';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class LuzmoButton 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(): LuzmoButtonHostElement;
|
|
13
|
+
pendingLabel?: string;
|
|
14
|
+
pending?: boolean;
|
|
15
|
+
variant?: ('primary' | 'secondary' | 'negative' | 'positive' | ('white' | 'black'));
|
|
16
|
+
staticColor?: 'black' | 'white';
|
|
17
|
+
treatment?: ('fill' | 'outline');
|
|
18
|
+
quiet?: boolean;
|
|
19
|
+
noWrap?: boolean;
|
|
20
|
+
pendingStateController?: unknown;
|
|
21
|
+
active?: boolean;
|
|
22
|
+
/** The default behavior of the button. Possible values are: `button` (default), `submit`, and `reset`. */
|
|
23
|
+
type?: 'button' | 'submit' | 'reset';
|
|
24
|
+
/** Announces that the `value` of the element has changed */
|
|
25
|
+
readonly changeEvent: import("@angular/core").OutputEmitterRef<CustomEvent<unknown>>;
|
|
26
|
+
constructor();
|
|
27
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
28
|
+
/**
|
|
29
|
+
* Forward a wrapper @Input to the underlying host element via Renderer2 so
|
|
30
|
+
* the wrapper stays compatible with non-DOM Angular platforms (SSR, tests).
|
|
31
|
+
* Unlike a "skip undefined" guard, this lets consumers reset values back to
|
|
32
|
+
* undefined / null by clearing their bindings.
|
|
33
|
+
*/
|
|
34
|
+
private setHostProperty;
|
|
35
|
+
private bindEvents;
|
|
36
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<LuzmoButton, never>;
|
|
37
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<LuzmoButton, "luzmo-button", ["luzmoButton"], { "pendingLabel": { "alias": "pending-label"; "required": false; }; "pending": { "alias": "pending"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; "staticColor": { "alias": "static-color"; "required": false; }; "treatment": { "alias": "treatment"; "required": false; }; "quiet": { "alias": "quiet"; "required": false; }; "noWrap": { "alias": "no-wrap"; "required": false; }; "pendingStateController": { "alias": "pending-state-controller"; "required": false; }; "active": { "alias": "active"; "required": false; }; "type": { "alias": "type"; "required": false; }; }, { "changeEvent": "change"; }, never, ["*"], true, never>;
|
|
38
|
+
}
|
|
39
|
+
/** The underlying custom element type for LuzmoButton */
|
|
40
|
+
export type LuzmoButtonElement = LuzmoButtonHostElement;
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, DestroyRef, ElementRef, inject, Input, output, Renderer2 } from '@angular/core';
|
|
2
|
+
import '@luzmo/lucero/button';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
const _c0 = ["*"];
|
|
5
|
+
/**
|
|
6
|
+
* Angular wrapper component for <luzmo-button>
|
|
7
|
+
*
|
|
8
|
+
* @slot (default) - text label of the Button
|
|
9
|
+
* @slot icon - The icon to use for Button
|
|
10
|
+
*/
|
|
11
|
+
export class LuzmoButton {
|
|
12
|
+
elementRef = inject(ElementRef);
|
|
13
|
+
renderer = inject(Renderer2);
|
|
14
|
+
destroyRef = inject(DestroyRef);
|
|
15
|
+
host = this.elementRef.nativeElement;
|
|
16
|
+
listenerCleanup = [];
|
|
17
|
+
/** The underlying custom element instance. Use to call imperative methods. */
|
|
18
|
+
get nativeElement() {
|
|
19
|
+
return this.host;
|
|
20
|
+
}
|
|
21
|
+
pendingLabel;
|
|
22
|
+
pending;
|
|
23
|
+
variant;
|
|
24
|
+
staticColor;
|
|
25
|
+
treatment;
|
|
26
|
+
quiet;
|
|
27
|
+
noWrap;
|
|
28
|
+
pendingStateController;
|
|
29
|
+
active;
|
|
30
|
+
/** The default behavior of the button. Possible values are: `button` (default), `submit`, and `reset`. */
|
|
31
|
+
type;
|
|
32
|
+
/** Announces that the `value` of the element has changed */
|
|
33
|
+
changeEvent = output({ alias: 'change' });
|
|
34
|
+
constructor() {
|
|
35
|
+
this.bindEvents();
|
|
36
|
+
this.destroyRef.onDestroy(() => {
|
|
37
|
+
for (const cleanup of this.listenerCleanup) {
|
|
38
|
+
cleanup();
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
ngOnChanges(changes) {
|
|
43
|
+
for (const key of Object.keys(changes)) {
|
|
44
|
+
switch (key) {
|
|
45
|
+
case 'pendingLabel':
|
|
46
|
+
this.setHostProperty('pendingLabel', changes['pendingLabel'].currentValue);
|
|
47
|
+
break;
|
|
48
|
+
case 'pending':
|
|
49
|
+
this.setHostProperty('pending', changes['pending'].currentValue);
|
|
50
|
+
break;
|
|
51
|
+
case 'variant':
|
|
52
|
+
this.setHostProperty('variant', changes['variant'].currentValue);
|
|
53
|
+
break;
|
|
54
|
+
case 'staticColor':
|
|
55
|
+
this.setHostProperty('staticColor', changes['staticColor'].currentValue);
|
|
56
|
+
break;
|
|
57
|
+
case 'treatment':
|
|
58
|
+
this.setHostProperty('treatment', changes['treatment'].currentValue);
|
|
59
|
+
break;
|
|
60
|
+
case 'quiet':
|
|
61
|
+
this.setHostProperty('quiet', changes['quiet'].currentValue);
|
|
62
|
+
break;
|
|
63
|
+
case 'noWrap':
|
|
64
|
+
this.setHostProperty('noWrap', changes['noWrap'].currentValue);
|
|
65
|
+
break;
|
|
66
|
+
case 'pendingStateController':
|
|
67
|
+
this.setHostProperty('pendingStateController', changes['pendingStateController'].currentValue);
|
|
68
|
+
break;
|
|
69
|
+
case 'active':
|
|
70
|
+
this.setHostProperty('active', changes['active'].currentValue);
|
|
71
|
+
break;
|
|
72
|
+
case 'type':
|
|
73
|
+
this.setHostProperty('type', changes['type'].currentValue);
|
|
74
|
+
break;
|
|
75
|
+
default:
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Forward a wrapper @Input to the underlying host element via Renderer2 so
|
|
82
|
+
* the wrapper stays compatible with non-DOM Angular platforms (SSR, tests).
|
|
83
|
+
* Unlike a "skip undefined" guard, this lets consumers reset values back to
|
|
84
|
+
* undefined / null by clearing their bindings.
|
|
85
|
+
*/
|
|
86
|
+
setHostProperty(key, value) {
|
|
87
|
+
this.renderer.setProperty(this.host, key, value);
|
|
88
|
+
}
|
|
89
|
+
bindEvents() {
|
|
90
|
+
this.listenerCleanup.push(this.renderer.listen(this.host, 'change', (event) => {
|
|
91
|
+
this.changeEvent.emit(event);
|
|
92
|
+
}));
|
|
93
|
+
}
|
|
94
|
+
static ɵfac = function LuzmoButton_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || LuzmoButton)(); };
|
|
95
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LuzmoButton, selectors: [["luzmo-button"]], inputs: { pendingLabel: [0, "pending-label", "pendingLabel"], pending: "pending", variant: "variant", staticColor: [0, "static-color", "staticColor"], treatment: "treatment", quiet: "quiet", noWrap: [0, "no-wrap", "noWrap"], pendingStateController: [0, "pending-state-controller", "pendingStateController"], active: "active", type: "type" }, outputs: { changeEvent: "change" }, exportAs: ["luzmoButton"], features: [i0.ɵɵNgOnChangesFeature], ngContentSelectors: _c0, decls: 1, vars: 0, template: function LuzmoButton_Template(rf, ctx) { if (rf & 1) {
|
|
96
|
+
i0.ɵɵprojectionDef();
|
|
97
|
+
i0.ɵɵprojection(0);
|
|
98
|
+
} }, encapsulation: 2, changeDetection: 0 });
|
|
99
|
+
}
|
|
100
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LuzmoButton, [{
|
|
101
|
+
type: Component,
|
|
102
|
+
args: [{
|
|
103
|
+
selector: 'luzmo-button',
|
|
104
|
+
exportAs: 'luzmoButton',
|
|
105
|
+
standalone: true,
|
|
106
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
107
|
+
template: '<ng-content />'
|
|
108
|
+
}]
|
|
109
|
+
}], () => [], { pendingLabel: [{
|
|
110
|
+
type: Input,
|
|
111
|
+
args: [{ alias: 'pending-label' }]
|
|
112
|
+
}], pending: [{
|
|
113
|
+
type: Input,
|
|
114
|
+
args: [{ alias: 'pending' }]
|
|
115
|
+
}], variant: [{
|
|
116
|
+
type: Input,
|
|
117
|
+
args: [{ alias: 'variant' }]
|
|
118
|
+
}], staticColor: [{
|
|
119
|
+
type: Input,
|
|
120
|
+
args: [{ alias: 'static-color' }]
|
|
121
|
+
}], treatment: [{
|
|
122
|
+
type: Input,
|
|
123
|
+
args: [{ alias: 'treatment' }]
|
|
124
|
+
}], quiet: [{
|
|
125
|
+
type: Input,
|
|
126
|
+
args: [{ alias: 'quiet' }]
|
|
127
|
+
}], noWrap: [{
|
|
128
|
+
type: Input,
|
|
129
|
+
args: [{ alias: 'no-wrap' }]
|
|
130
|
+
}], pendingStateController: [{
|
|
131
|
+
type: Input,
|
|
132
|
+
args: [{ alias: 'pending-state-controller' }]
|
|
133
|
+
}], active: [{
|
|
134
|
+
type: Input,
|
|
135
|
+
args: [{ alias: 'active' }]
|
|
136
|
+
}], type: [{
|
|
137
|
+
type: Input,
|
|
138
|
+
args: [{ alias: 'type' }]
|
|
139
|
+
}], changeEvent: [{ type: i0.Output, args: ["change"] }] }); })();
|
|
140
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(LuzmoButton, { className: "LuzmoButton", filePath: "components/button.ts", lineNumber: 18 }); })();
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { OnChanges, SimpleChanges } from '@angular/core';
|
|
2
|
+
import { ControlValueAccessor } from '@angular/forms';
|
|
3
|
+
import '@luzmo/lucero/calendar';
|
|
4
|
+
import type { LuzmoCalendar as LuzmoCalendarHostElement, CalendarLabels, CalendarSelectionMode } from '@luzmo/lucero/calendar';
|
|
5
|
+
import type { CalendarDate as __extt_CalendarDate } from '@internationalized/date';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export type { CalendarLabels, CalendarSelectionMode, CalendarViewMode, CalendarWeekday, DateCellProperties } from '@luzmo/lucero/calendar';
|
|
8
|
+
export declare class LuzmoCalendar implements OnChanges, ControlValueAccessor {
|
|
9
|
+
private readonly elementRef;
|
|
10
|
+
private readonly renderer;
|
|
11
|
+
private readonly destroyRef;
|
|
12
|
+
private readonly host;
|
|
13
|
+
private readonly listenerCleanup;
|
|
14
|
+
/** The underlying custom element instance. Use to call imperative methods. */
|
|
15
|
+
get nativeElement(): LuzmoCalendarHostElement;
|
|
16
|
+
/** The selected date in the calendar. If defined, this also indicates where the calendar opens. If not, the calendar opens at the current month. */
|
|
17
|
+
value?: string;
|
|
18
|
+
/** The minimum allowed date a user can select */
|
|
19
|
+
min?: string;
|
|
20
|
+
/** The maximum allowed date a user can select */
|
|
21
|
+
max?: string;
|
|
22
|
+
/** Indicates when the calendar should be disabled entirely */
|
|
23
|
+
disabled?: boolean;
|
|
24
|
+
/** The language used to format the dates and weekdays. */
|
|
25
|
+
language?: string;
|
|
26
|
+
/** Labels read by screen readers. The default values are in English and can be overridden to localize the content. */
|
|
27
|
+
labels?: CalendarLabels;
|
|
28
|
+
/** Selection mode: 'single' for a single date, 'range' for start/end date selection. */
|
|
29
|
+
selectionMode?: CalendarSelectionMode;
|
|
30
|
+
/** The start date of the range selection (ISO date string, e.g. '2024-01-15'). Only used when selectionMode is 'range'. */
|
|
31
|
+
startDate?: string;
|
|
32
|
+
/** The end date of the range selection (ISO date string, e.g. '2024-01-20'). Only used when selectionMode is 'range'. */
|
|
33
|
+
endDate?: string;
|
|
34
|
+
/** The date being hovered, used for range preview between start and end during range selection. Can be set externally to synchronize hover previews across multiple calendar instances. */
|
|
35
|
+
hoveredDate?: __extt_CalendarDate;
|
|
36
|
+
readonly monthChangeEvent: import("@angular/core").OutputEmitterRef<CustomEvent<unknown>>;
|
|
37
|
+
readonly changeEvent: import("@angular/core").OutputEmitterRef<CustomEvent<unknown>>;
|
|
38
|
+
readonly rangeSelectEvent: import("@angular/core").OutputEmitterRef<CustomEvent<unknown>>;
|
|
39
|
+
readonly hoverDateEvent: import("@angular/core").OutputEmitterRef<CustomEvent<unknown>>;
|
|
40
|
+
constructor();
|
|
41
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
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
|
+
private setHostProperty;
|
|
49
|
+
private bindEvents;
|
|
50
|
+
private onChange;
|
|
51
|
+
private onTouched;
|
|
52
|
+
private isWritingValue;
|
|
53
|
+
private lastCvaValue;
|
|
54
|
+
writeValue(value: string): void;
|
|
55
|
+
registerOnChange(fn: (value: string) => void): void;
|
|
56
|
+
registerOnTouched(fn: () => void): void;
|
|
57
|
+
setDisabledState(isDisabled: boolean): void;
|
|
58
|
+
/** Resets the component's value */
|
|
59
|
+
clear(): void;
|
|
60
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<LuzmoCalendar, never>;
|
|
61
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<LuzmoCalendar, "luzmo-calendar", ["luzmoCalendar"], { "value": { "alias": "value"; "required": false; }; "min": { "alias": "min"; "required": false; }; "max": { "alias": "max"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "language": { "alias": "language"; "required": false; }; "labels": { "alias": "labels"; "required": false; }; "selectionMode": { "alias": "selection-mode"; "required": false; }; "startDate": { "alias": "start-date"; "required": false; }; "endDate": { "alias": "end-date"; "required": false; }; "hoveredDate": { "alias": "hovered-date"; "required": false; }; }, { "monthChangeEvent": "month-change"; "changeEvent": "change"; "rangeSelectEvent": "range-select"; "hoverDateEvent": "hover-date"; }, never, ["*"], true, never>;
|
|
62
|
+
}
|
|
63
|
+
/** The underlying custom element type for LuzmoCalendar */
|
|
64
|
+
export type LuzmoCalendarElement = LuzmoCalendarHostElement;
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, DestroyRef, ElementRef, forwardRef, inject, Input, output, Renderer2 } from '@angular/core';
|
|
2
|
+
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
3
|
+
import '@luzmo/lucero/calendar';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
const _c0 = ["*"];
|
|
6
|
+
/**
|
|
7
|
+
* Angular wrapper component for <luzmo-calendar>
|
|
8
|
+
*/
|
|
9
|
+
export class LuzmoCalendar {
|
|
10
|
+
elementRef = inject(ElementRef);
|
|
11
|
+
renderer = inject(Renderer2);
|
|
12
|
+
destroyRef = inject(DestroyRef);
|
|
13
|
+
host = this.elementRef.nativeElement;
|
|
14
|
+
listenerCleanup = [];
|
|
15
|
+
/** The underlying custom element instance. Use to call imperative methods. */
|
|
16
|
+
get nativeElement() {
|
|
17
|
+
return this.host;
|
|
18
|
+
}
|
|
19
|
+
/** The selected date in the calendar. If defined, this also indicates where the calendar opens. If not, the calendar opens at the current month. */
|
|
20
|
+
value;
|
|
21
|
+
/** The minimum allowed date a user can select */
|
|
22
|
+
min;
|
|
23
|
+
/** The maximum allowed date a user can select */
|
|
24
|
+
max;
|
|
25
|
+
/** Indicates when the calendar should be disabled entirely */
|
|
26
|
+
disabled;
|
|
27
|
+
/** The language used to format the dates and weekdays. */
|
|
28
|
+
language;
|
|
29
|
+
/** Labels read by screen readers. The default values are in English and can be overridden to localize the content. */
|
|
30
|
+
labels;
|
|
31
|
+
/** Selection mode: 'single' for a single date, 'range' for start/end date selection. */
|
|
32
|
+
selectionMode;
|
|
33
|
+
/** The start date of the range selection (ISO date string, e.g. '2024-01-15'). Only used when selectionMode is 'range'. */
|
|
34
|
+
startDate;
|
|
35
|
+
/** The end date of the range selection (ISO date string, e.g. '2024-01-20'). Only used when selectionMode is 'range'. */
|
|
36
|
+
endDate;
|
|
37
|
+
/** The date being hovered, used for range preview between start and end during range selection. Can be set externally to synchronize hover previews across multiple calendar instances. */
|
|
38
|
+
hoveredDate;
|
|
39
|
+
monthChangeEvent = output({ alias: 'month-change' });
|
|
40
|
+
changeEvent = output({ alias: 'change' });
|
|
41
|
+
rangeSelectEvent = output({ alias: 'range-select' });
|
|
42
|
+
hoverDateEvent = output({ alias: 'hover-date' });
|
|
43
|
+
constructor() {
|
|
44
|
+
this.bindEvents();
|
|
45
|
+
this.destroyRef.onDestroy(() => {
|
|
46
|
+
for (const cleanup of this.listenerCleanup) {
|
|
47
|
+
cleanup();
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
ngOnChanges(changes) {
|
|
52
|
+
for (const key of Object.keys(changes)) {
|
|
53
|
+
switch (key) {
|
|
54
|
+
case 'value':
|
|
55
|
+
this.setHostProperty('value', changes['value'].currentValue);
|
|
56
|
+
break;
|
|
57
|
+
case 'min':
|
|
58
|
+
this.setHostProperty('min', changes['min'].currentValue);
|
|
59
|
+
break;
|
|
60
|
+
case 'max':
|
|
61
|
+
this.setHostProperty('max', changes['max'].currentValue);
|
|
62
|
+
break;
|
|
63
|
+
case 'disabled':
|
|
64
|
+
this.setHostProperty('disabled', changes['disabled'].currentValue);
|
|
65
|
+
break;
|
|
66
|
+
case 'language':
|
|
67
|
+
this.setHostProperty('language', changes['language'].currentValue);
|
|
68
|
+
break;
|
|
69
|
+
case 'labels':
|
|
70
|
+
this.setHostProperty('labels', changes['labels'].currentValue);
|
|
71
|
+
break;
|
|
72
|
+
case 'selectionMode':
|
|
73
|
+
this.setHostProperty('selectionMode', changes['selectionMode'].currentValue);
|
|
74
|
+
break;
|
|
75
|
+
case 'startDate':
|
|
76
|
+
this.setHostProperty('startDate', changes['startDate'].currentValue);
|
|
77
|
+
break;
|
|
78
|
+
case 'endDate':
|
|
79
|
+
this.setHostProperty('endDate', changes['endDate'].currentValue);
|
|
80
|
+
break;
|
|
81
|
+
case 'hoveredDate':
|
|
82
|
+
this.setHostProperty('hoveredDate', changes['hoveredDate'].currentValue);
|
|
83
|
+
break;
|
|
84
|
+
default:
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Forward a wrapper @Input to the underlying host element via Renderer2 so
|
|
91
|
+
* the wrapper stays compatible with non-DOM Angular platforms (SSR, tests).
|
|
92
|
+
* Unlike a "skip undefined" guard, this lets consumers reset values back to
|
|
93
|
+
* undefined / null by clearing their bindings.
|
|
94
|
+
*/
|
|
95
|
+
setHostProperty(key, value) {
|
|
96
|
+
this.renderer.setProperty(this.host, key, value);
|
|
97
|
+
}
|
|
98
|
+
bindEvents() {
|
|
99
|
+
this.listenerCleanup.push(this.renderer.listen(this.host, 'month-change', (event) => {
|
|
100
|
+
this.monthChangeEvent.emit(event);
|
|
101
|
+
}));
|
|
102
|
+
this.listenerCleanup.push(this.renderer.listen(this.host, 'change', (event) => {
|
|
103
|
+
this.changeEvent.emit(event);
|
|
104
|
+
if (!this.isWritingValue) {
|
|
105
|
+
const eventWithDetail = event;
|
|
106
|
+
const eventTarget = event.target;
|
|
107
|
+
const detail = 'detail' in eventWithDetail ? eventWithDetail.detail : undefined;
|
|
108
|
+
const hostRecord = this.host;
|
|
109
|
+
const nextValue = (detail
|
|
110
|
+
?? eventTarget?.['value']
|
|
111
|
+
?? hostRecord['value']);
|
|
112
|
+
if (Object.is(this.lastCvaValue, nextValue)) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
this.lastCvaValue = nextValue;
|
|
116
|
+
this.setHostProperty('value', nextValue);
|
|
117
|
+
this.onChange(nextValue);
|
|
118
|
+
}
|
|
119
|
+
}));
|
|
120
|
+
this.listenerCleanup.push(this.renderer.listen(this.host, 'range-select', (event) => {
|
|
121
|
+
this.rangeSelectEvent.emit(event);
|
|
122
|
+
}));
|
|
123
|
+
this.listenerCleanup.push(this.renderer.listen(this.host, 'hover-date', (event) => {
|
|
124
|
+
this.hoverDateEvent.emit(event);
|
|
125
|
+
}));
|
|
126
|
+
this.listenerCleanup.push(this.renderer.listen(this.host, 'blur', () => {
|
|
127
|
+
this.onTouched();
|
|
128
|
+
}));
|
|
129
|
+
}
|
|
130
|
+
onChange = () => { };
|
|
131
|
+
onTouched = () => { };
|
|
132
|
+
isWritingValue = false;
|
|
133
|
+
lastCvaValue;
|
|
134
|
+
writeValue(value) {
|
|
135
|
+
this.isWritingValue = true;
|
|
136
|
+
this.lastCvaValue = value;
|
|
137
|
+
this.setHostProperty('value', value);
|
|
138
|
+
this.isWritingValue = false;
|
|
139
|
+
}
|
|
140
|
+
registerOnChange(fn) {
|
|
141
|
+
this.onChange = fn;
|
|
142
|
+
}
|
|
143
|
+
registerOnTouched(fn) {
|
|
144
|
+
this.onTouched = fn;
|
|
145
|
+
}
|
|
146
|
+
setDisabledState(isDisabled) {
|
|
147
|
+
this.setHostProperty('disabled', isDisabled);
|
|
148
|
+
if (isDisabled) {
|
|
149
|
+
this.renderer.setAttribute(this.host, 'disabled', '');
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
this.renderer.removeAttribute(this.host, 'disabled');
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/** Resets the component's value */
|
|
156
|
+
clear() {
|
|
157
|
+
return this.host.clear();
|
|
158
|
+
}
|
|
159
|
+
static ɵfac = function LuzmoCalendar_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || LuzmoCalendar)(); };
|
|
160
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LuzmoCalendar, selectors: [["luzmo-calendar"]], inputs: { value: "value", min: "min", max: "max", disabled: "disabled", language: "language", labels: "labels", selectionMode: [0, "selection-mode", "selectionMode"], startDate: [0, "start-date", "startDate"], endDate: [0, "end-date", "endDate"], hoveredDate: [0, "hovered-date", "hoveredDate"] }, outputs: { monthChangeEvent: "month-change", changeEvent: "change", rangeSelectEvent: "range-select", hoverDateEvent: "hover-date" }, exportAs: ["luzmoCalendar"], features: [i0.ɵɵProvidersFeature([
|
|
161
|
+
{
|
|
162
|
+
provide: NG_VALUE_ACCESSOR,
|
|
163
|
+
useExisting: forwardRef(() => LuzmoCalendar),
|
|
164
|
+
multi: true
|
|
165
|
+
}
|
|
166
|
+
]), i0.ɵɵNgOnChangesFeature], ngContentSelectors: _c0, decls: 1, vars: 0, template: function LuzmoCalendar_Template(rf, ctx) { if (rf & 1) {
|
|
167
|
+
i0.ɵɵprojectionDef();
|
|
168
|
+
i0.ɵɵprojection(0);
|
|
169
|
+
} }, encapsulation: 2, changeDetection: 0 });
|
|
170
|
+
}
|
|
171
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LuzmoCalendar, [{
|
|
172
|
+
type: Component,
|
|
173
|
+
args: [{
|
|
174
|
+
selector: 'luzmo-calendar',
|
|
175
|
+
exportAs: 'luzmoCalendar',
|
|
176
|
+
standalone: true,
|
|
177
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
178
|
+
template: '<ng-content />',
|
|
179
|
+
providers: [
|
|
180
|
+
{
|
|
181
|
+
provide: NG_VALUE_ACCESSOR,
|
|
182
|
+
useExisting: forwardRef(() => LuzmoCalendar),
|
|
183
|
+
multi: true
|
|
184
|
+
}
|
|
185
|
+
]
|
|
186
|
+
}]
|
|
187
|
+
}], () => [], { value: [{
|
|
188
|
+
type: Input,
|
|
189
|
+
args: [{ alias: 'value' }]
|
|
190
|
+
}], min: [{
|
|
191
|
+
type: Input,
|
|
192
|
+
args: [{ alias: 'min' }]
|
|
193
|
+
}], max: [{
|
|
194
|
+
type: Input,
|
|
195
|
+
args: [{ alias: 'max' }]
|
|
196
|
+
}], disabled: [{
|
|
197
|
+
type: Input,
|
|
198
|
+
args: [{ alias: 'disabled' }]
|
|
199
|
+
}], language: [{
|
|
200
|
+
type: Input,
|
|
201
|
+
args: [{ alias: 'language' }]
|
|
202
|
+
}], labels: [{
|
|
203
|
+
type: Input,
|
|
204
|
+
args: [{ alias: 'labels' }]
|
|
205
|
+
}], selectionMode: [{
|
|
206
|
+
type: Input,
|
|
207
|
+
args: [{ alias: 'selection-mode' }]
|
|
208
|
+
}], startDate: [{
|
|
209
|
+
type: Input,
|
|
210
|
+
args: [{ alias: 'start-date' }]
|
|
211
|
+
}], endDate: [{
|
|
212
|
+
type: Input,
|
|
213
|
+
args: [{ alias: 'end-date' }]
|
|
214
|
+
}], hoveredDate: [{
|
|
215
|
+
type: Input,
|
|
216
|
+
args: [{ alias: 'hovered-date' }]
|
|
217
|
+
}], monthChangeEvent: [{ type: i0.Output, args: ["month-change"] }], changeEvent: [{ type: i0.Output, args: ["change"] }], rangeSelectEvent: [{ type: i0.Output, args: ["range-select"] }], hoverDateEvent: [{ type: i0.Output, args: ["hover-date"] }] }); })();
|
|
218
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(LuzmoCalendar, { className: "LuzmoCalendar", filePath: "components/calendar.ts", lineNumber: 25 }); })();
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { OnChanges, SimpleChanges } from '@angular/core';
|
|
2
|
+
import '@luzmo/lucero/chat-message-group';
|
|
3
|
+
import type { LuzmoChatMessageGroup as LuzmoChatMessageGroupHostElement } from '@luzmo/lucero/chat-message-group';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class LuzmoChatMessageGroup 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(): LuzmoChatMessageGroupHostElement;
|
|
13
|
+
/** The vertical placement of the avatar relative to the message group. - `top`: Avatar appears next to the first message - `middle`: Avatar appears centered relative to the group - `bottom`: Avatar appears next to the last message (default) */
|
|
14
|
+
avatarPlacement?: unknown;
|
|
15
|
+
constructor();
|
|
16
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
17
|
+
/**
|
|
18
|
+
* Forward a wrapper @Input to the underlying host element via Renderer2 so
|
|
19
|
+
* the wrapper stays compatible with non-DOM Angular platforms (SSR, tests).
|
|
20
|
+
* Unlike a "skip undefined" guard, this lets consumers reset values back to
|
|
21
|
+
* undefined / null by clearing their bindings.
|
|
22
|
+
*/
|
|
23
|
+
private setHostProperty;
|
|
24
|
+
private bindEvents;
|
|
25
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<LuzmoChatMessageGroup, never>;
|
|
26
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<LuzmoChatMessageGroup, "luzmo-chat-message-group", ["luzmoChatMessageGroup"], { "avatarPlacement": { "alias": "avatar-placement"; "required": false; }; }, {}, never, ["*"], true, never>;
|
|
27
|
+
}
|
|
28
|
+
/** The underlying custom element type for LuzmoChatMessageGroup */
|
|
29
|
+
export type LuzmoChatMessageGroupElement = LuzmoChatMessageGroupHostElement;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, DestroyRef, ElementRef, inject, Input, Renderer2 } from '@angular/core';
|
|
2
|
+
import '@luzmo/lucero/chat-message-group';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
const _c0 = ["*"];
|
|
5
|
+
/**
|
|
6
|
+
* A chat message group component for displaying consecutive messages from the same user.
|
|
7
|
+
*
|
|
8
|
+
* When multiple messages are grouped together, only the first or last message
|
|
9
|
+
* will display the name/date metadata and avatar, reducing visual clutter.
|
|
10
|
+
*
|
|
11
|
+
* @slot (default) - the luzmo-chat-message elements that make up the group
|
|
12
|
+
* @slot avatar - Optional avatar slot at the group level. If provided, this avatar will be used. If not provided, the first message's avatar will be reused.
|
|
13
|
+
*/
|
|
14
|
+
export class LuzmoChatMessageGroup {
|
|
15
|
+
elementRef = inject(ElementRef);
|
|
16
|
+
renderer = inject(Renderer2);
|
|
17
|
+
destroyRef = inject(DestroyRef);
|
|
18
|
+
host = this.elementRef.nativeElement;
|
|
19
|
+
listenerCleanup = [];
|
|
20
|
+
/** The underlying custom element instance. Use to call imperative methods. */
|
|
21
|
+
get nativeElement() {
|
|
22
|
+
return this.host;
|
|
23
|
+
}
|
|
24
|
+
/** The vertical placement of the avatar relative to the message group. - `top`: Avatar appears next to the first message - `middle`: Avatar appears centered relative to the group - `bottom`: Avatar appears next to the last message (default) */
|
|
25
|
+
avatarPlacement;
|
|
26
|
+
constructor() {
|
|
27
|
+
this.bindEvents();
|
|
28
|
+
this.destroyRef.onDestroy(() => {
|
|
29
|
+
for (const cleanup of this.listenerCleanup) {
|
|
30
|
+
cleanup();
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
ngOnChanges(changes) {
|
|
35
|
+
for (const key of Object.keys(changes)) {
|
|
36
|
+
switch (key) {
|
|
37
|
+
case 'avatarPlacement':
|
|
38
|
+
this.setHostProperty('avatarPlacement', changes['avatarPlacement'].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 LuzmoChatMessageGroup_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || LuzmoChatMessageGroup)(); };
|
|
58
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LuzmoChatMessageGroup, selectors: [["luzmo-chat-message-group"]], inputs: { avatarPlacement: [0, "avatar-placement", "avatarPlacement"] }, exportAs: ["luzmoChatMessageGroup"], features: [i0.ɵɵNgOnChangesFeature], ngContentSelectors: _c0, decls: 1, vars: 0, template: function LuzmoChatMessageGroup_Template(rf, ctx) { if (rf & 1) {
|
|
59
|
+
i0.ɵɵprojectionDef();
|
|
60
|
+
i0.ɵɵprojection(0);
|
|
61
|
+
} }, encapsulation: 2, changeDetection: 0 });
|
|
62
|
+
}
|
|
63
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LuzmoChatMessageGroup, [{
|
|
64
|
+
type: Component,
|
|
65
|
+
args: [{
|
|
66
|
+
selector: 'luzmo-chat-message-group',
|
|
67
|
+
exportAs: 'luzmoChatMessageGroup',
|
|
68
|
+
standalone: true,
|
|
69
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
70
|
+
template: '<ng-content />'
|
|
71
|
+
}]
|
|
72
|
+
}], () => [], { avatarPlacement: [{
|
|
73
|
+
type: Input,
|
|
74
|
+
args: [{ alias: 'avatar-placement' }]
|
|
75
|
+
}] }); })();
|
|
76
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(LuzmoChatMessageGroup, { className: "LuzmoChatMessageGroup", filePath: "components/chat-message-group.ts", lineNumber: 21 }); })();
|