@dso-design-system/ui 0.1.0 → 0.1.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/esm2022/lib/badge/badge.directive.mjs +68 -0
- package/esm2022/public-api.mjs +4 -2
- package/fesm2022/dso-design-system-ui.mjs +68 -71
- package/fesm2022/dso-design-system-ui.mjs.map +1 -1
- package/lib/badge/badge.directive.d.ts +15 -0
- package/package.json +1 -1
- package/public-api.d.ts +3 -1
- package/esm2022/lib/directives/truncate.directive.mjs +0 -71
- package/lib/directives/truncate.directive.d.ts +0 -23
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { Directive, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class BadgeDirective {
|
|
4
|
+
el;
|
|
5
|
+
renderer;
|
|
6
|
+
// The text or number displayed inside the badge (e.g. "5" or empty for a dot)
|
|
7
|
+
label = null;
|
|
8
|
+
// Optional color input, defaulting to 'primary'
|
|
9
|
+
badgeColor = 'info';
|
|
10
|
+
// We'll store a reference to the created badge element here
|
|
11
|
+
badgeEl = null;
|
|
12
|
+
constructor(el, // Reference to the host element (the one with [dsoDirectiveBadge])
|
|
13
|
+
renderer // Used for safe DOM manipulation in Angular
|
|
14
|
+
) {
|
|
15
|
+
this.el = el;
|
|
16
|
+
this.renderer = renderer;
|
|
17
|
+
// Ensure the host element is relatively positioned so the badge can be placed absolutely
|
|
18
|
+
this.renderer.setStyle(this.el.nativeElement, 'position', 'relative');
|
|
19
|
+
}
|
|
20
|
+
// Called automatically whenever @Input values change (label or badgeColor)
|
|
21
|
+
ngOnChanges(changes) {
|
|
22
|
+
this.updateBadge();
|
|
23
|
+
}
|
|
24
|
+
// Create or update the badge element
|
|
25
|
+
updateBadge() {
|
|
26
|
+
// console.log('BadgeDirective running on', this.el.nativeElement);
|
|
27
|
+
// ✅ STEP 1: If we don’t already have a badge element, create one
|
|
28
|
+
if (!this.badgeEl) {
|
|
29
|
+
this.badgeEl = this.renderer.createElement('span'); // create <span>
|
|
30
|
+
this.renderer.addClass(this.badgeEl, 'badge-directive'); // add base class
|
|
31
|
+
// Append the badge <span> inside the host element (the icon, button, avatar, etc.)
|
|
32
|
+
this.renderer.appendChild(this.el.nativeElement, this.badgeEl);
|
|
33
|
+
}
|
|
34
|
+
// At this point, badgeEl definitely exists, but TypeScript doesn’t know that.
|
|
35
|
+
// So, we use a non-null assertion (!) to tell TypeScript “we’re sure it’s not null”.
|
|
36
|
+
const badge = this.badgeEl;
|
|
37
|
+
// ✅ STEP 2: Update label and style
|
|
38
|
+
// If the label is empty/null, it becomes a dot badge
|
|
39
|
+
if (this.label === null || this.label === '' || this.label === undefined) {
|
|
40
|
+
this.renderer.addClass(badge, 'dot');
|
|
41
|
+
badge.textContent = ''; // no text, just a dot
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
this.renderer.removeClass(badge, 'dot');
|
|
45
|
+
badge.textContent = this.label.toString();
|
|
46
|
+
}
|
|
47
|
+
// ✅ STEP 3: Update color classes
|
|
48
|
+
// First, remove all possible color classes
|
|
49
|
+
badge.classList.remove('info', 'success', 'warning', 'danger');
|
|
50
|
+
// Then, add the one we want
|
|
51
|
+
badge.classList.add(this.badgeColor);
|
|
52
|
+
}
|
|
53
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BadgeDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
|
|
54
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: BadgeDirective, isStandalone: true, selector: "[dsoDirectiveBadge]", inputs: { label: ["dsoDirectiveBadge", "label"], badgeColor: "badgeColor" }, usesOnChanges: true, ngImport: i0 });
|
|
55
|
+
}
|
|
56
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BadgeDirective, decorators: [{
|
|
57
|
+
type: Directive,
|
|
58
|
+
args: [{
|
|
59
|
+
selector: '[dsoDirectiveBadge]', // This directive is used like: <app-icon dsoDirectiveBadge="5"></app-icon>
|
|
60
|
+
standalone: true
|
|
61
|
+
}]
|
|
62
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { label: [{
|
|
63
|
+
type: Input,
|
|
64
|
+
args: ['dsoDirectiveBadge']
|
|
65
|
+
}], badgeColor: [{
|
|
66
|
+
type: Input
|
|
67
|
+
}] } });
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFkZ2UuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9iYWRnZS9iYWRnZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxLQUFLLEVBQXVDLE1BQU0sZUFBZSxDQUFDOztBQU1sRyxNQUFNLE9BQU8sY0FBYztJQVdmO0lBQ0E7SUFYViw4RUFBOEU7SUFDbEQsS0FBSyxHQUEyQixJQUFJLENBQUM7SUFFakUsZ0RBQWdEO0lBQ3ZDLFVBQVUsR0FBOEMsTUFBTSxDQUFDO0lBRXhFLDREQUE0RDtJQUNwRCxPQUFPLEdBQXVCLElBQUksQ0FBQztJQUUzQyxZQUNVLEVBQWMsRUFBRSxtRUFBbUU7SUFDbkYsUUFBbUIsQ0FBQyw0Q0FBNEM7O1FBRGhFLE9BQUUsR0FBRixFQUFFLENBQVk7UUFDZCxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBRTNCLHlGQUF5RjtRQUN6RixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELDJFQUEyRTtJQUMzRSxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxxQ0FBcUM7SUFDN0IsV0FBVztRQUNqQixtRUFBbUU7UUFFbkUsaUVBQWlFO1FBQ2pFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGdCQUFnQjtZQUNwRSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxpQkFBaUI7WUFFMUUsbUZBQW1GO1lBQ25GLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBRUQsOEVBQThFO1FBQzlFLHFGQUFxRjtRQUNyRixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBUSxDQUFDO1FBRTVCLG1DQUFtQztRQUNuQyxxREFBcUQ7UUFDckQsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLEVBQUUsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3pFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNyQyxLQUFLLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQyxDQUFDLHNCQUFzQjtRQUNoRCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN4QyxLQUFLLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDNUMsQ0FBQztRQUVELGlDQUFpQztRQUNqQywyQ0FBMkM7UUFDM0MsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDL0QsNEJBQTRCO1FBQzVCLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN2QyxDQUFDO3dHQXZEVSxjQUFjOzRGQUFkLGNBQWM7OzRGQUFkLGNBQWM7a0JBSjFCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHFCQUFxQixFQUFFLDJFQUEyRTtvQkFDNUcsVUFBVSxFQUFFLElBQUk7aUJBQ2pCO3VHQUc2QixLQUFLO3NCQUFoQyxLQUFLO3VCQUFDLG1CQUFtQjtnQkFHakIsVUFBVTtzQkFBbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSW5wdXQsIFJlbmRlcmVyMiwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1tkc29EaXJlY3RpdmVCYWRnZV0nLCAvLyBUaGlzIGRpcmVjdGl2ZSBpcyB1c2VkIGxpa2U6IDxhcHAtaWNvbiBkc29EaXJlY3RpdmVCYWRnZT1cIjVcIj48L2FwcC1pY29uPlxyXG4gIHN0YW5kYWxvbmU6IHRydWVcclxufSlcclxuZXhwb3J0IGNsYXNzIEJhZGdlRGlyZWN0aXZlIGltcGxlbWVudHMgT25DaGFuZ2VzIHtcclxuICAvLyBUaGUgdGV4dCBvciBudW1iZXIgZGlzcGxheWVkIGluc2lkZSB0aGUgYmFkZ2UgKGUuZy4gXCI1XCIgb3IgZW1wdHkgZm9yIGEgZG90KVxyXG4gIEBJbnB1dCgnZHNvRGlyZWN0aXZlQmFkZ2UnKSBsYWJlbDogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIC8vIE9wdGlvbmFsIGNvbG9yIGlucHV0LCBkZWZhdWx0aW5nIHRvICdwcmltYXJ5J1xyXG4gIEBJbnB1dCgpIGJhZGdlQ29sb3I6ICdpbmZvJyB8ICdzdWNjZXNzJyB8ICd3YXJuaW5nJyB8ICdkYW5nZXInID0gJ2luZm8nO1xyXG5cclxuICAvLyBXZSdsbCBzdG9yZSBhIHJlZmVyZW5jZSB0byB0aGUgY3JlYXRlZCBiYWRnZSBlbGVtZW50IGhlcmVcclxuICBwcml2YXRlIGJhZGdlRWw6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZiwgLy8gUmVmZXJlbmNlIHRvIHRoZSBob3N0IGVsZW1lbnQgKHRoZSBvbmUgd2l0aCBbZHNvRGlyZWN0aXZlQmFkZ2VdKVxyXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyIC8vIFVzZWQgZm9yIHNhZmUgRE9NIG1hbmlwdWxhdGlvbiBpbiBBbmd1bGFyXHJcbiAgKSB7XHJcbiAgICAvLyBFbnN1cmUgdGhlIGhvc3QgZWxlbWVudCBpcyByZWxhdGl2ZWx5IHBvc2l0aW9uZWQgc28gdGhlIGJhZGdlIGNhbiBiZSBwbGFjZWQgYWJzb2x1dGVseVxyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICdwb3NpdGlvbicsICdyZWxhdGl2ZScpO1xyXG4gIH1cclxuXHJcbiAgLy8gQ2FsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbmV2ZXIgQElucHV0IHZhbHVlcyBjaGFuZ2UgKGxhYmVsIG9yIGJhZGdlQ29sb3IpXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgdGhpcy51cGRhdGVCYWRnZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gQ3JlYXRlIG9yIHVwZGF0ZSB0aGUgYmFkZ2UgZWxlbWVudFxyXG4gIHByaXZhdGUgdXBkYXRlQmFkZ2UoKTogdm9pZCB7XHJcbiAgICAvLyBjb25zb2xlLmxvZygnQmFkZ2VEaXJlY3RpdmUgcnVubmluZyBvbicsIHRoaXMuZWwubmF0aXZlRWxlbWVudCk7XHJcblxyXG4gICAgLy8g4pyFIFNURVAgMTogSWYgd2UgZG9u4oCZdCBhbHJlYWR5IGhhdmUgYSBiYWRnZSBlbGVtZW50LCBjcmVhdGUgb25lXHJcbiAgICBpZiAoIXRoaXMuYmFkZ2VFbCkge1xyXG4gICAgICB0aGlzLmJhZGdlRWwgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsgLy8gY3JlYXRlIDxzcGFuPlxyXG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuYmFkZ2VFbCwgJ2JhZGdlLWRpcmVjdGl2ZScpOyAvLyBhZGQgYmFzZSBjbGFzc1xyXG5cclxuICAgICAgLy8gQXBwZW5kIHRoZSBiYWRnZSA8c3Bhbj4gaW5zaWRlIHRoZSBob3N0IGVsZW1lbnQgKHRoZSBpY29uLCBidXR0b24sIGF2YXRhciwgZXRjLilcclxuICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIHRoaXMuYmFkZ2VFbCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQXQgdGhpcyBwb2ludCwgYmFkZ2VFbCBkZWZpbml0ZWx5IGV4aXN0cywgYnV0IFR5cGVTY3JpcHQgZG9lc27igJl0IGtub3cgdGhhdC5cclxuICAgIC8vIFNvLCB3ZSB1c2UgYSBub24tbnVsbCBhc3NlcnRpb24gKCEpIHRvIHRlbGwgVHlwZVNjcmlwdCDigJx3ZeKAmXJlIHN1cmUgaXTigJlzIG5vdCBudWxs4oCdLlxyXG4gICAgY29uc3QgYmFkZ2UgPSB0aGlzLmJhZGdlRWwhO1xyXG5cclxuICAgIC8vIOKchSBTVEVQIDI6IFVwZGF0ZSBsYWJlbCBhbmQgc3R5bGVcclxuICAgIC8vIElmIHRoZSBsYWJlbCBpcyBlbXB0eS9udWxsLCBpdCBiZWNvbWVzIGEgZG90IGJhZGdlXHJcbiAgICBpZiAodGhpcy5sYWJlbCA9PT0gbnVsbCB8fCB0aGlzLmxhYmVsID09PSAnJyB8fCB0aGlzLmxhYmVsID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhiYWRnZSwgJ2RvdCcpO1xyXG4gICAgICBiYWRnZS50ZXh0Q29udGVudCA9ICcnOyAvLyBubyB0ZXh0LCBqdXN0IGEgZG90XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGJhZGdlLCAnZG90Jyk7XHJcbiAgICAgIGJhZGdlLnRleHRDb250ZW50ID0gdGhpcy5sYWJlbC50b1N0cmluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOKchSBTVEVQIDM6IFVwZGF0ZSBjb2xvciBjbGFzc2VzXHJcbiAgICAvLyBGaXJzdCwgcmVtb3ZlIGFsbCBwb3NzaWJsZSBjb2xvciBjbGFzc2VzXHJcbiAgICBiYWRnZS5jbGFzc0xpc3QucmVtb3ZlKCdpbmZvJywgJ3N1Y2Nlc3MnLCAnd2FybmluZycsICdkYW5nZXInKTtcclxuICAgIC8vIFRoZW4sIGFkZCB0aGUgb25lIHdlIHdhbnRcclxuICAgIGJhZGdlLmNsYXNzTGlzdC5hZGQodGhpcy5iYWRnZUNvbG9yKTtcclxuICB9XHJcbn1cclxuIl19
|
package/esm2022/public-api.mjs
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
export * from './lib/alert/alert.component';
|
|
2
2
|
export * from './lib/badge/badge.component';
|
|
3
|
+
export * from './lib/badge/badge.directive';
|
|
3
4
|
export * from './lib/breadcrumb/breadcrumb.component';
|
|
4
5
|
export * from './lib/button/button.component';
|
|
5
6
|
export * from './lib/checkbox/checkbox.component';
|
|
6
7
|
export * from './lib/datepicker/datepicker.component';
|
|
7
8
|
export * from './lib/dialog/dialog.component';
|
|
8
|
-
export * from './lib/directives/truncate.directive';
|
|
9
9
|
export * from './lib/dropdown-list/dropdown-list.component';
|
|
10
10
|
export * from './lib/file-upload-items/file-upload-items.component';
|
|
11
11
|
export * from './lib/file-upload-multiple/file-upload-multiple.component';
|
|
@@ -20,9 +20,11 @@ export * from './lib/side-navigation-bar/side-navigation-bar.component';
|
|
|
20
20
|
export * from './lib/spinner/spinner.component';
|
|
21
21
|
export * from './lib/table/table.component';
|
|
22
22
|
export * from './lib/tabs/tabs.component';
|
|
23
|
+
export * from './lib/tabs/tab.component';
|
|
23
24
|
export * from './lib/tag/tag.component';
|
|
24
25
|
export * from './lib/text-area/text-area.component';
|
|
25
26
|
export * from './lib/toast/toast.component';
|
|
26
27
|
export * from './lib/tooltip/tooltip.component';
|
|
28
|
+
export * from './lib/tooltip/tooltip.directive';
|
|
27
29
|
export * from './lib/top-navigation-bar/top-navigation-bar.component';
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMscURBQXFELENBQUM7QUFDcEUsY0FBYywyREFBMkQsQ0FBQztBQUMxRSxjQUFjLHVEQUF1RCxDQUFDO0FBQ3RFLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyx1Q0FBdUMsQ0FBQztBQUN0RCxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLGlEQUFpRCxDQUFDO0FBQ2hFLGNBQWMseURBQXlELENBQUM7QUFDeEUsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyx1REFBdUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL2FsZXJ0L2FsZXJ0LmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2JhZGdlL2JhZGdlLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2JhZGdlL2JhZGdlLmRpcmVjdGl2ZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2JyZWFkY3J1bWIvYnJlYWRjcnVtYi5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9idXR0b24vYnV0dG9uLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NoZWNrYm94L2NoZWNrYm94LmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaWFsb2cvZGlhbG9nLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Ryb3Bkb3duLWxpc3QvZHJvcGRvd24tbGlzdC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9maWxlLXVwbG9hZC1pdGVtcy9maWxlLXVwbG9hZC1pdGVtcy5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9maWxlLXVwbG9hZC1tdWx0aXBsZS9maWxlLXVwbG9hZC1tdWx0aXBsZS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9maWxlLXVwbG9hZC1zaW5nbGUvZmlsZS11cGxvYWQtc2luZ2xlLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ljb24vaWNvbi5jb21wb25lbnQnOyBcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvaW5wdXQtdGV4dC9pbnB1dC10ZXh0LmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3BhZ2luYXRpb24vcGFnaW5hdGlvbi5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcm9ncmVzcy1iYXIvcHJvZ3Jlc3MtYmFyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3JhZGlvL3JhZGlvLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlbGVjdC1kcm9wZG93bi9zZWxlY3QtZHJvcGRvd24uY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2lkZS1uYXZpZ2F0aW9uLWJhci9zaWRlLW5hdmlnYXRpb24tYmFyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NwaW5uZXIvc3Bpbm5lci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWJsZS90YWJsZS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWJzL3RhYnMuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFicy90YWIuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFnL3RhZy5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi90ZXh0LWFyZWEvdGV4dC1hcmVhLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RvYXN0L3RvYXN0LmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Rvb2x0aXAvdG9vbHRpcC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi90b29sdGlwL3Rvb2x0aXAuZGlyZWN0aXZlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvdG9wLW5hdmlnYXRpb24tYmFyL3RvcC1uYXZpZ2F0aW9uLWJhci5jb21wb25lbnQnO1xyXG4iXX0=
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i1 from '@angular/common';
|
|
2
2
|
import { CommonModule, DatePipe } from '@angular/common';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
|
-
import { Component, Input, EventEmitter, Output, ViewChild, HostListener,
|
|
4
|
+
import { Component, Input, EventEmitter, Output, Directive, ViewChild, HostListener, Injectable, ContentChildren } from '@angular/core';
|
|
5
5
|
import * as i2$1 from '@angular/router';
|
|
6
6
|
import { RouterLink, RouterModule } from '@angular/router';
|
|
7
7
|
import * as i2 from '@angular/forms';
|
|
@@ -194,6 +194,72 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
194
194
|
type: Input
|
|
195
195
|
}] } });
|
|
196
196
|
|
|
197
|
+
class BadgeDirective {
|
|
198
|
+
el;
|
|
199
|
+
renderer;
|
|
200
|
+
// The text or number displayed inside the badge (e.g. "5" or empty for a dot)
|
|
201
|
+
label = null;
|
|
202
|
+
// Optional color input, defaulting to 'primary'
|
|
203
|
+
badgeColor = 'info';
|
|
204
|
+
// We'll store a reference to the created badge element here
|
|
205
|
+
badgeEl = null;
|
|
206
|
+
constructor(el, // Reference to the host element (the one with [dsoDirectiveBadge])
|
|
207
|
+
renderer // Used for safe DOM manipulation in Angular
|
|
208
|
+
) {
|
|
209
|
+
this.el = el;
|
|
210
|
+
this.renderer = renderer;
|
|
211
|
+
// Ensure the host element is relatively positioned so the badge can be placed absolutely
|
|
212
|
+
this.renderer.setStyle(this.el.nativeElement, 'position', 'relative');
|
|
213
|
+
}
|
|
214
|
+
// Called automatically whenever @Input values change (label or badgeColor)
|
|
215
|
+
ngOnChanges(changes) {
|
|
216
|
+
this.updateBadge();
|
|
217
|
+
}
|
|
218
|
+
// Create or update the badge element
|
|
219
|
+
updateBadge() {
|
|
220
|
+
// console.log('BadgeDirective running on', this.el.nativeElement);
|
|
221
|
+
// ✅ STEP 1: If we don’t already have a badge element, create one
|
|
222
|
+
if (!this.badgeEl) {
|
|
223
|
+
this.badgeEl = this.renderer.createElement('span'); // create <span>
|
|
224
|
+
this.renderer.addClass(this.badgeEl, 'badge-directive'); // add base class
|
|
225
|
+
// Append the badge <span> inside the host element (the icon, button, avatar, etc.)
|
|
226
|
+
this.renderer.appendChild(this.el.nativeElement, this.badgeEl);
|
|
227
|
+
}
|
|
228
|
+
// At this point, badgeEl definitely exists, but TypeScript doesn’t know that.
|
|
229
|
+
// So, we use a non-null assertion (!) to tell TypeScript “we’re sure it’s not null”.
|
|
230
|
+
const badge = this.badgeEl;
|
|
231
|
+
// ✅ STEP 2: Update label and style
|
|
232
|
+
// If the label is empty/null, it becomes a dot badge
|
|
233
|
+
if (this.label === null || this.label === '' || this.label === undefined) {
|
|
234
|
+
this.renderer.addClass(badge, 'dot');
|
|
235
|
+
badge.textContent = ''; // no text, just a dot
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
this.renderer.removeClass(badge, 'dot');
|
|
239
|
+
badge.textContent = this.label.toString();
|
|
240
|
+
}
|
|
241
|
+
// ✅ STEP 3: Update color classes
|
|
242
|
+
// First, remove all possible color classes
|
|
243
|
+
badge.classList.remove('info', 'success', 'warning', 'danger');
|
|
244
|
+
// Then, add the one we want
|
|
245
|
+
badge.classList.add(this.badgeColor);
|
|
246
|
+
}
|
|
247
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BadgeDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
|
|
248
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: BadgeDirective, isStandalone: true, selector: "[dsoDirectiveBadge]", inputs: { label: ["dsoDirectiveBadge", "label"], badgeColor: "badgeColor" }, usesOnChanges: true, ngImport: i0 });
|
|
249
|
+
}
|
|
250
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BadgeDirective, decorators: [{
|
|
251
|
+
type: Directive,
|
|
252
|
+
args: [{
|
|
253
|
+
selector: '[dsoDirectiveBadge]', // This directive is used like: <app-icon dsoDirectiveBadge="5"></app-icon>
|
|
254
|
+
standalone: true
|
|
255
|
+
}]
|
|
256
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { label: [{
|
|
257
|
+
type: Input,
|
|
258
|
+
args: ['dsoDirectiveBadge']
|
|
259
|
+
}], badgeColor: [{
|
|
260
|
+
type: Input
|
|
261
|
+
}] } });
|
|
262
|
+
|
|
197
263
|
class BreadcrumbComponent {
|
|
198
264
|
items = [];
|
|
199
265
|
itemSelected = new EventEmitter();
|
|
@@ -470,75 +536,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
470
536
|
type: Output
|
|
471
537
|
}] } });
|
|
472
538
|
|
|
473
|
-
class DsoTruncateDirective {
|
|
474
|
-
el;
|
|
475
|
-
/**
|
|
476
|
-
* Enable or disable truncation.
|
|
477
|
-
* Can be used as `<div dsoTruncate>` (enabled by default) or `[dsoTruncate]="false"`.
|
|
478
|
-
*/
|
|
479
|
-
enableTruncate = true;
|
|
480
|
-
/** Optional: override tooltip text when text is truncated */
|
|
481
|
-
truncateTooltipText;
|
|
482
|
-
constructor(el) {
|
|
483
|
-
this.el = el;
|
|
484
|
-
}
|
|
485
|
-
/** Initialize truncation after the view is loaded */
|
|
486
|
-
ngAfterViewInit() {
|
|
487
|
-
if (this.enableTruncate) {
|
|
488
|
-
this.applyTruncationStyles();
|
|
489
|
-
this.updateTooltip();
|
|
490
|
-
}
|
|
491
|
-
}
|
|
492
|
-
/** Re-check overflow and update tooltip on window resize */
|
|
493
|
-
onResize() {
|
|
494
|
-
if (this.enableTruncate) {
|
|
495
|
-
this.updateTooltip();
|
|
496
|
-
}
|
|
497
|
-
}
|
|
498
|
-
// -------------------------
|
|
499
|
-
// PRIVATE METHODS
|
|
500
|
-
// -------------------------
|
|
501
|
-
/** Apply CSS styles necessary for truncation */
|
|
502
|
-
applyTruncationStyles() {
|
|
503
|
-
const element = this.el.nativeElement;
|
|
504
|
-
element.style.whiteSpace = 'nowrap';
|
|
505
|
-
element.style.overflow = 'hidden';
|
|
506
|
-
element.style.textOverflow = 'ellipsis';
|
|
507
|
-
element.style.display = 'inline-block';
|
|
508
|
-
element.style.maxWidth = '100%';
|
|
509
|
-
}
|
|
510
|
-
/** Update tooltip based on overflow state */
|
|
511
|
-
updateTooltip() {
|
|
512
|
-
const el = this.el.nativeElement;
|
|
513
|
-
const isOverflowing = el.scrollWidth > el.clientWidth;
|
|
514
|
-
if (isOverflowing) {
|
|
515
|
-
// Add or update tooltip with either the provided text or element content
|
|
516
|
-
el.setAttribute('dsoDirectiveTooltip', this.truncateTooltipText || el.textContent || '');
|
|
517
|
-
}
|
|
518
|
-
else {
|
|
519
|
-
// Remove tooltip if content fits
|
|
520
|
-
el.removeAttribute('dsoDirectiveTooltip');
|
|
521
|
-
}
|
|
522
|
-
}
|
|
523
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DsoTruncateDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
524
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: DsoTruncateDirective, isStandalone: true, selector: "[dsoTruncate]", inputs: { enableTruncate: ["dsoTruncate", "enableTruncate"], truncateTooltipText: "truncateTooltipText" }, host: { listeners: { "window:resize": "onResize()" } }, ngImport: i0 });
|
|
525
|
-
}
|
|
526
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DsoTruncateDirective, decorators: [{
|
|
527
|
-
type: Directive,
|
|
528
|
-
args: [{
|
|
529
|
-
selector: '[dsoTruncate]',
|
|
530
|
-
standalone: true
|
|
531
|
-
}]
|
|
532
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { enableTruncate: [{
|
|
533
|
-
type: Input,
|
|
534
|
-
args: ['dsoTruncate']
|
|
535
|
-
}], truncateTooltipText: [{
|
|
536
|
-
type: Input
|
|
537
|
-
}], onResize: [{
|
|
538
|
-
type: HostListener,
|
|
539
|
-
args: ['window:resize']
|
|
540
|
-
}] } });
|
|
541
|
-
|
|
542
539
|
class DropdownListComponent {
|
|
543
540
|
// -------------------------------
|
|
544
541
|
// ELEMENT REFERENCE
|
|
@@ -2179,5 +2176,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
2179
2176
|
* Generated bundle index. Do not edit.
|
|
2180
2177
|
*/
|
|
2181
2178
|
|
|
2182
|
-
export { AlertComponent, BadgeComponent, BreadcrumbComponent, ButtonComponent, CheckboxComponent, DatepickerComponent, DialogComponent, DropdownListComponent,
|
|
2179
|
+
export { AlertComponent, BadgeComponent, BadgeDirective, BreadcrumbComponent, ButtonComponent, CheckboxComponent, DatepickerComponent, DialogComponent, DropdownListComponent, FileUploadItemComponent, FileUploadMultiComponent, FileUploadSingleComponent, IconComponent, PaginationComponent, ProgressBarComponent, RadioComponent, SideNavComponent, SingleSelectComponent, SpinnerComponent, TabComponent, TableComponent, TabsComponent, TagComponent, TextAreaComponent, TextInputComponent, ToastComponent, TooltipComponent, TooltipDirective, TopNavComponent };
|
|
2183
2180
|
//# sourceMappingURL=dso-design-system-ui.mjs.map
|