@solifi/platform-ui 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,122 @@
1
+ import * as i0 from '@angular/core';
2
+ import { EventEmitter, Output, Input, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
3
+ import * as i1 from '@angular/common';
4
+ import { CommonModule } from '@angular/common';
5
+
6
+ class ButtonComponent {
7
+ constructor() {
8
+ this.variant = 'primary';
9
+ this.size = 'md';
10
+ this.disabled = false;
11
+ this.loading = false;
12
+ this.fullWidth = false;
13
+ this.type = 'button';
14
+ this.buttonClick = new EventEmitter();
15
+ }
16
+ get hostClasses() {
17
+ return [
18
+ 'pui-btn',
19
+ `pui-btn--${this.variant}`,
20
+ `pui-btn--${this.size}`,
21
+ this.fullWidth ? 'pui-btn--full' : '',
22
+ this.loading ? 'pui-btn--loading' : '',
23
+ ].filter(Boolean).join(' ');
24
+ }
25
+ onClick(event) {
26
+ if (!this.disabled && !this.loading) {
27
+ this.buttonClick.emit(event);
28
+ }
29
+ }
30
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: ButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
31
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: ButtonComponent, isStandalone: true, selector: "pui-button", inputs: { variant: "variant", size: "size", disabled: "disabled", loading: "loading", fullWidth: "fullWidth", type: "type" }, outputs: { buttonClick: "buttonClick" }, ngImport: i0, template: "<button\n [class]=\"hostClasses\"\n [type]=\"type\"\n [disabled]=\"disabled || loading\"\n (click)=\"onClick($event)\"\n [attr.aria-busy]=\"loading\"\n [attr.aria-disabled]=\"disabled\"\n>\n <span *ngIf=\"loading\" class=\"pui-btn__spinner\" aria-hidden=\"true\"></span>\n <ng-content></ng-content>\n</button>\n", styles: [":host{display:inline-block}.pui-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;border:none;border-radius:6px;font-family:inherit;font-weight:600;cursor:pointer;transition:background .2s ease,opacity .2s ease,transform .1s ease;white-space:nowrap;outline:none;box-sizing:border-box}.pui-btn:focus-visible{box-shadow:0 0 0 3px #3b82f666}.pui-btn:active:not(:disabled){transform:translateY(1px)}.pui-btn--sm{padding:6px 12px;font-size:12px;line-height:1.5}.pui-btn--md{padding:10px 20px;font-size:14px;line-height:1.5}.pui-btn--lg{padding:14px 28px;font-size:16px;line-height:1.5}.pui-btn--full{width:100%}.pui-btn--primary{background:#3b82f6;color:#fff}.pui-btn--primary:hover:not(:disabled){background:#2563eb}.pui-btn--secondary{background:#f1f5f9;color:#334155;border:1px solid #cbd5e1}.pui-btn--secondary:hover:not(:disabled){background:#e2e8f0}.pui-btn--danger{background:#ef4444;color:#fff}.pui-btn--danger:hover:not(:disabled){background:#dc2626}.pui-btn--ghost{background:transparent;color:#3b82f6;border:1px solid #3b82f6}.pui-btn--ghost:hover:not(:disabled){background:#eff6ff}.pui-btn:disabled{opacity:.5;cursor:not-allowed}.pui-btn--loading{cursor:wait}.pui-btn__spinner{width:14px;height:14px;border:2px solid currentColor;border-top-color:transparent;border-radius:50%;animation:pui-spin .7s linear infinite;flex-shrink:0}@keyframes pui-spin{to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
32
+ }
33
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: ButtonComponent, decorators: [{
34
+ type: Component,
35
+ args: [{ selector: 'pui-button', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n [class]=\"hostClasses\"\n [type]=\"type\"\n [disabled]=\"disabled || loading\"\n (click)=\"onClick($event)\"\n [attr.aria-busy]=\"loading\"\n [attr.aria-disabled]=\"disabled\"\n>\n <span *ngIf=\"loading\" class=\"pui-btn__spinner\" aria-hidden=\"true\"></span>\n <ng-content></ng-content>\n</button>\n", styles: [":host{display:inline-block}.pui-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;border:none;border-radius:6px;font-family:inherit;font-weight:600;cursor:pointer;transition:background .2s ease,opacity .2s ease,transform .1s ease;white-space:nowrap;outline:none;box-sizing:border-box}.pui-btn:focus-visible{box-shadow:0 0 0 3px #3b82f666}.pui-btn:active:not(:disabled){transform:translateY(1px)}.pui-btn--sm{padding:6px 12px;font-size:12px;line-height:1.5}.pui-btn--md{padding:10px 20px;font-size:14px;line-height:1.5}.pui-btn--lg{padding:14px 28px;font-size:16px;line-height:1.5}.pui-btn--full{width:100%}.pui-btn--primary{background:#3b82f6;color:#fff}.pui-btn--primary:hover:not(:disabled){background:#2563eb}.pui-btn--secondary{background:#f1f5f9;color:#334155;border:1px solid #cbd5e1}.pui-btn--secondary:hover:not(:disabled){background:#e2e8f0}.pui-btn--danger{background:#ef4444;color:#fff}.pui-btn--danger:hover:not(:disabled){background:#dc2626}.pui-btn--ghost{background:transparent;color:#3b82f6;border:1px solid #3b82f6}.pui-btn--ghost:hover:not(:disabled){background:#eff6ff}.pui-btn:disabled{opacity:.5;cursor:not-allowed}.pui-btn--loading{cursor:wait}.pui-btn__spinner{width:14px;height:14px;border:2px solid currentColor;border-top-color:transparent;border-radius:50%;animation:pui-spin .7s linear infinite;flex-shrink:0}@keyframes pui-spin{to{transform:rotate(360deg)}}\n"] }]
36
+ }], propDecorators: { variant: [{
37
+ type: Input
38
+ }], size: [{
39
+ type: Input
40
+ }], disabled: [{
41
+ type: Input
42
+ }], loading: [{
43
+ type: Input
44
+ }], fullWidth: [{
45
+ type: Input
46
+ }], type: [{
47
+ type: Input
48
+ }], buttonClick: [{
49
+ type: Output
50
+ }] } });
51
+
52
+ class CardComponent {
53
+ constructor() {
54
+ /** Apply extra CSS class on the card wrapper. */
55
+ this.cardClass = '';
56
+ /** Enables subtle drop-shadow. Default: true. */
57
+ this.elevated = true;
58
+ /** Adds a hover lift effect — use when the card is interactive. */
59
+ this.clickable = false;
60
+ }
61
+ get hostClasses() {
62
+ return [
63
+ 'pui-card',
64
+ this.elevated ? 'pui-card--elevated' : '',
65
+ this.clickable ? 'pui-card--clickable' : '',
66
+ this.cardClass,
67
+ ].filter(Boolean).join(' ');
68
+ }
69
+ get trendClass() {
70
+ return this.data?.trend ? `pui-card__trend--${this.data.trend}` : '';
71
+ }
72
+ get trendIcon() {
73
+ switch (this.data?.trend) {
74
+ case 'up': return '▲';
75
+ case 'down': return '▼';
76
+ default: return '—';
77
+ }
78
+ }
79
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
80
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: CardComponent, isStandalone: true, selector: "pui-card", inputs: { data: "data", cardClass: "cardClass", elevated: "elevated", clickable: "clickable" }, ngImport: i0, template: "<div [class]=\"hostClasses\">\n\n <!-- \u2500\u2500 Stat / metric layout (when [data] is provided) \u2500\u2500 -->\n <ng-container *ngIf=\"data; else slotLayout\">\n <div class=\"pui-card__header\">\n <span *ngIf=\"data.icon\" class=\"pui-card__icon\" aria-hidden=\"true\">{{ data.icon }}</span>\n <span class=\"pui-card__title\">{{ data.title }}</span>\n </div>\n\n <div class=\"pui-card__value\">{{ data.value }}</div>\n\n <div class=\"pui-card__footer\">\n <span *ngIf=\"data.subtitle\" class=\"pui-card__subtitle\">{{ data.subtitle }}</span>\n <span *ngIf=\"data.trend\" [class]=\"'pui-card__trend ' + trendClass\">\n {{ trendIcon }} {{ data.trendValue }}\n </span>\n </div>\n </ng-container>\n\n <!-- \u2500\u2500 Slot layout (consumers project their own content) \u2500\u2500 -->\n <ng-template #slotLayout>\n <ng-content select=\"[card-header]\"></ng-content>\n <div class=\"pui-card__body\">\n <ng-content></ng-content>\n </div>\n <ng-content select=\"[card-footer]\"></ng-content>\n </ng-template>\n\n</div>\n", styles: [".pui-card{background:#fff;border-radius:12px;border:1px solid #e2e8f0;padding:24px;box-sizing:border-box}.pui-card--elevated{box-shadow:0 1px 3px #00000014,0 4px 12px #0000000a}.pui-card--clickable{cursor:pointer;transition:transform .15s ease,box-shadow .15s ease}.pui-card--clickable:hover{transform:translateY(-2px);box-shadow:0 4px 16px #0000001f}.pui-card__header{display:flex;align-items:center;gap:10px;margin-bottom:12px}.pui-card__icon{font-size:20px;line-height:1}.pui-card__title{font-size:12px;font-weight:600;color:#64748b;text-transform:uppercase;letter-spacing:.06em}.pui-card__value{font-size:32px;font-weight:700;color:#0f172a;line-height:1.2;margin-bottom:12px}.pui-card__footer{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px}.pui-card__subtitle{font-size:12px;color:#94a3b8}.pui-card__trend{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:600;padding:2px 8px;border-radius:99px}.pui-card__trend--up{color:#16a34a;background:#dcfce7}.pui-card__trend--down{color:#dc2626;background:#fee2e2}.pui-card__trend--neutral{color:#64748b;background:#f1f5f9}.pui-card__body{padding:4px 0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
81
+ }
82
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CardComponent, decorators: [{
83
+ type: Component,
84
+ args: [{ selector: 'pui-card', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [class]=\"hostClasses\">\n\n <!-- \u2500\u2500 Stat / metric layout (when [data] is provided) \u2500\u2500 -->\n <ng-container *ngIf=\"data; else slotLayout\">\n <div class=\"pui-card__header\">\n <span *ngIf=\"data.icon\" class=\"pui-card__icon\" aria-hidden=\"true\">{{ data.icon }}</span>\n <span class=\"pui-card__title\">{{ data.title }}</span>\n </div>\n\n <div class=\"pui-card__value\">{{ data.value }}</div>\n\n <div class=\"pui-card__footer\">\n <span *ngIf=\"data.subtitle\" class=\"pui-card__subtitle\">{{ data.subtitle }}</span>\n <span *ngIf=\"data.trend\" [class]=\"'pui-card__trend ' + trendClass\">\n {{ trendIcon }} {{ data.trendValue }}\n </span>\n </div>\n </ng-container>\n\n <!-- \u2500\u2500 Slot layout (consumers project their own content) \u2500\u2500 -->\n <ng-template #slotLayout>\n <ng-content select=\"[card-header]\"></ng-content>\n <div class=\"pui-card__body\">\n <ng-content></ng-content>\n </div>\n <ng-content select=\"[card-footer]\"></ng-content>\n </ng-template>\n\n</div>\n", styles: [".pui-card{background:#fff;border-radius:12px;border:1px solid #e2e8f0;padding:24px;box-sizing:border-box}.pui-card--elevated{box-shadow:0 1px 3px #00000014,0 4px 12px #0000000a}.pui-card--clickable{cursor:pointer;transition:transform .15s ease,box-shadow .15s ease}.pui-card--clickable:hover{transform:translateY(-2px);box-shadow:0 4px 16px #0000001f}.pui-card__header{display:flex;align-items:center;gap:10px;margin-bottom:12px}.pui-card__icon{font-size:20px;line-height:1}.pui-card__title{font-size:12px;font-weight:600;color:#64748b;text-transform:uppercase;letter-spacing:.06em}.pui-card__value{font-size:32px;font-weight:700;color:#0f172a;line-height:1.2;margin-bottom:12px}.pui-card__footer{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px}.pui-card__subtitle{font-size:12px;color:#94a3b8}.pui-card__trend{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:600;padding:2px 8px;border-radius:99px}.pui-card__trend--up{color:#16a34a;background:#dcfce7}.pui-card__trend--down{color:#dc2626;background:#fee2e2}.pui-card__trend--neutral{color:#64748b;background:#f1f5f9}.pui-card__body{padding:4px 0}\n"] }]
85
+ }], propDecorators: { data: [{
86
+ type: Input
87
+ }], cardClass: [{
88
+ type: Input
89
+ }], elevated: [{
90
+ type: Input
91
+ }], clickable: [{
92
+ type: Input
93
+ }] } });
94
+
95
+ /**
96
+ * Convenience NgModule — import PlatformUiModule in any NgModule-based app.
97
+ * Standalone apps can also import ButtonComponent / CardComponent directly.
98
+ */
99
+ class PlatformUiModule {
100
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: PlatformUiModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
101
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.25", ngImport: i0, type: PlatformUiModule, imports: [ButtonComponent, CardComponent], exports: [ButtonComponent, CardComponent] }); }
102
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: PlatformUiModule, imports: [ButtonComponent, CardComponent] }); }
103
+ }
104
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: PlatformUiModule, decorators: [{
105
+ type: NgModule,
106
+ args: [{
107
+ imports: [ButtonComponent, CardComponent],
108
+ exports: [ButtonComponent, CardComponent],
109
+ }]
110
+ }] });
111
+
112
+ /*
113
+ * Public API surface of platform-ui.
114
+ * Everything exported here is available to any app that installs this package.
115
+ */
116
+
117
+ /**
118
+ * Generated bundle index. Do not edit.
119
+ */
120
+
121
+ export { ButtonComponent, CardComponent, PlatformUiModule };
122
+ //# sourceMappingURL=solifi-platform-ui.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solifi-platform-ui.mjs","sources":["../../../projects/platform-ui/src/lib/button/button.component.ts","../../../projects/platform-ui/src/lib/button/button.component.html","../../../projects/platform-ui/src/lib/card/card.component.ts","../../../projects/platform-ui/src/lib/card/card.component.html","../../../projects/platform-ui/src/lib/platform-ui.module.ts","../../../projects/platform-ui/src/public-api.ts","../../../projects/platform-ui/src/solifi-platform-ui.ts"],"sourcesContent":["import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonVariant, ButtonSize } from '../models/button.model';\n\n@Component({\n selector: 'pui-button',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './button.component.html',\n styleUrls: ['./button.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ButtonComponent {\n @Input() variant: ButtonVariant = 'primary';\n @Input() size: ButtonSize = 'md';\n @Input() disabled = false;\n @Input() loading = false;\n @Input() fullWidth = false;\n @Input() type: 'button' | 'submit' | 'reset' = 'button';\n\n @Output() buttonClick = new EventEmitter<MouseEvent>();\n\n get hostClasses(): string {\n return [\n 'pui-btn',\n `pui-btn--${this.variant}`,\n `pui-btn--${this.size}`,\n this.fullWidth ? 'pui-btn--full' : '',\n this.loading ? 'pui-btn--loading' : '',\n ].filter(Boolean).join(' ');\n }\n\n onClick(event: MouseEvent): void {\n if (!this.disabled && !this.loading) {\n this.buttonClick.emit(event);\n }\n }\n}\n","<button\n [class]=\"hostClasses\"\n [type]=\"type\"\n [disabled]=\"disabled || loading\"\n (click)=\"onClick($event)\"\n [attr.aria-busy]=\"loading\"\n [attr.aria-disabled]=\"disabled\"\n>\n <span *ngIf=\"loading\" class=\"pui-btn__spinner\" aria-hidden=\"true\"></span>\n <ng-content></ng-content>\n</button>\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CardData } from '../models/card.model';\n\n@Component({\n selector: 'pui-card',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './card.component.html',\n styleUrls: ['./card.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CardComponent {\n /** Provide a CardData object to render a stat/metric layout automatically. */\n @Input() data?: CardData;\n\n /** Apply extra CSS class on the card wrapper. */\n @Input() cardClass = '';\n\n /** Enables subtle drop-shadow. Default: true. */\n @Input() elevated = true;\n\n /** Adds a hover lift effect — use when the card is interactive. */\n @Input() clickable = false;\n\n get hostClasses(): string {\n return [\n 'pui-card',\n this.elevated ? 'pui-card--elevated' : '',\n this.clickable ? 'pui-card--clickable' : '',\n this.cardClass,\n ].filter(Boolean).join(' ');\n }\n\n get trendClass(): string {\n return this.data?.trend ? `pui-card__trend--${this.data.trend}` : '';\n }\n\n get trendIcon(): string {\n switch (this.data?.trend) {\n case 'up': return '▲';\n case 'down': return '▼';\n default: return '—';\n }\n }\n}\n","<div [class]=\"hostClasses\">\n\n <!-- ── Stat / metric layout (when [data] is provided) ── -->\n <ng-container *ngIf=\"data; else slotLayout\">\n <div class=\"pui-card__header\">\n <span *ngIf=\"data.icon\" class=\"pui-card__icon\" aria-hidden=\"true\">{{ data.icon }}</span>\n <span class=\"pui-card__title\">{{ data.title }}</span>\n </div>\n\n <div class=\"pui-card__value\">{{ data.value }}</div>\n\n <div class=\"pui-card__footer\">\n <span *ngIf=\"data.subtitle\" class=\"pui-card__subtitle\">{{ data.subtitle }}</span>\n <span *ngIf=\"data.trend\" [class]=\"'pui-card__trend ' + trendClass\">\n {{ trendIcon }} {{ data.trendValue }}\n </span>\n </div>\n </ng-container>\n\n <!-- ── Slot layout (consumers project their own content) ── -->\n <ng-template #slotLayout>\n <ng-content select=\"[card-header]\"></ng-content>\n <div class=\"pui-card__body\">\n <ng-content></ng-content>\n </div>\n <ng-content select=\"[card-footer]\"></ng-content>\n </ng-template>\n\n</div>\n","import { NgModule } from '@angular/core';\nimport { ButtonComponent } from './button/button.component';\nimport { CardComponent } from './card/card.component';\n\n/**\n * Convenience NgModule — import PlatformUiModule in any NgModule-based app.\n * Standalone apps can also import ButtonComponent / CardComponent directly.\n */\n@NgModule({\n imports: [ButtonComponent, CardComponent],\n exports: [ButtonComponent, CardComponent],\n})\nexport class PlatformUiModule {}\n","/*\n * Public API surface of platform-ui.\n * Everything exported here is available to any app that installs this package.\n */\n\nexport * from './lib/platform-ui.module';\nexport * from './lib/button/button.component';\nexport * from './lib/card/card.component';\nexport * from './lib/models/button.model';\nexport * from './lib/models/card.model';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@solifi/platform-ui" />
5
+ export * from './public-api';
6
+ //# sourceMappingURL=solifi-platform-ui.d.ts.map
@@ -0,0 +1,17 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import { ButtonVariant, ButtonSize } from '../models/button.model';
3
+ import * as i0 from "@angular/core";
4
+ export declare class ButtonComponent {
5
+ variant: ButtonVariant;
6
+ size: ButtonSize;
7
+ disabled: boolean;
8
+ loading: boolean;
9
+ fullWidth: boolean;
10
+ type: 'button' | 'submit' | 'reset';
11
+ buttonClick: EventEmitter<MouseEvent>;
12
+ get hostClasses(): string;
13
+ onClick(event: MouseEvent): void;
14
+ static ɵfac: i0.ɵɵFactoryDeclaration<ButtonComponent, never>;
15
+ static ɵcmp: i0.ɵɵComponentDeclaration<ButtonComponent, "pui-button", never, { "variant": { "alias": "variant"; "required": false; }; "size": { "alias": "size"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "fullWidth": { "alias": "fullWidth"; "required": false; }; "type": { "alias": "type"; "required": false; }; }, { "buttonClick": "buttonClick"; }, never, ["*"], true, never>;
16
+ }
17
+ //# sourceMappingURL=button.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button.component.d.ts","sourceRoot":"","sources":["../../../../projects/platform-ui/src/lib/button/button.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAA2B,MAAM,eAAe,CAAC;AAEhG,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;;AAEnE,qBAQa,eAAe;IACjB,OAAO,EAAE,aAAa,CAAa;IACnC,IAAI,EAAE,UAAU,CAAQ;IACxB,QAAQ,UAAS;IACjB,OAAO,UAAS;IAChB,SAAS,UAAS;IAClB,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAY;IAE9C,WAAW,2BAAkC;IAEvD,IAAI,WAAW,IAAI,MAAM,CAQxB;IAED,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;yCApBrB,eAAe;2CAAf,eAAe;CAyB3B"}
@@ -0,0 +1,18 @@
1
+ import { CardData } from '../models/card.model';
2
+ import * as i0 from "@angular/core";
3
+ export declare class CardComponent {
4
+ /** Provide a CardData object to render a stat/metric layout automatically. */
5
+ data?: CardData;
6
+ /** Apply extra CSS class on the card wrapper. */
7
+ cardClass: string;
8
+ /** Enables subtle drop-shadow. Default: true. */
9
+ elevated: boolean;
10
+ /** Adds a hover lift effect — use when the card is interactive. */
11
+ clickable: boolean;
12
+ get hostClasses(): string;
13
+ get trendClass(): string;
14
+ get trendIcon(): string;
15
+ static ɵfac: i0.ɵɵFactoryDeclaration<CardComponent, never>;
16
+ static ɵcmp: i0.ɵɵComponentDeclaration<CardComponent, "pui-card", never, { "data": { "alias": "data"; "required": false; }; "cardClass": { "alias": "cardClass"; "required": false; }; "elevated": { "alias": "elevated"; "required": false; }; "clickable": { "alias": "clickable"; "required": false; }; }, {}, never, ["[card-header]", "*", "[card-footer]"], true, never>;
17
+ }
18
+ //# sourceMappingURL=card.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card.component.d.ts","sourceRoot":"","sources":["../../../../projects/platform-ui/src/lib/card/card.component.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;;AAEhD,qBAQa,aAAa;IACxB,8EAA8E;IACrE,IAAI,CAAC,EAAE,QAAQ,CAAC;IAEzB,iDAAiD;IACxC,SAAS,SAAM;IAExB,iDAAiD;IACxC,QAAQ,UAAQ;IAEzB,mEAAmE;IAC1D,SAAS,UAAS;IAE3B,IAAI,WAAW,IAAI,MAAM,CAOxB;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,IAAI,SAAS,IAAI,MAAM,CAMtB;yCAhCU,aAAa;2CAAb,aAAa;CAiCzB"}
@@ -0,0 +1,3 @@
1
+ export type ButtonVariant = 'primary' | 'secondary' | 'danger' | 'ghost';
2
+ export type ButtonSize = 'sm' | 'md' | 'lg';
3
+ //# sourceMappingURL=button.model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button.model.d.ts","sourceRoot":"","sources":["../../../../projects/platform-ui/src/lib/models/button.model.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,OAAO,CAAC;AACzE,MAAM,MAAM,UAAU,GAAM,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC"}
@@ -0,0 +1,9 @@
1
+ export interface CardData {
2
+ title: string;
3
+ subtitle?: string;
4
+ value?: string | number;
5
+ icon?: string;
6
+ trend?: 'up' | 'down' | 'neutral';
7
+ trendValue?: string;
8
+ }
9
+ //# sourceMappingURL=card.model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card.model.d.ts","sourceRoot":"","sources":["../../../../projects/platform-ui/src/lib/models/card.model.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
@@ -0,0 +1,13 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./button/button.component";
3
+ import * as i2 from "./card/card.component";
4
+ /**
5
+ * Convenience NgModule — import PlatformUiModule in any NgModule-based app.
6
+ * Standalone apps can also import ButtonComponent / CardComponent directly.
7
+ */
8
+ export declare class PlatformUiModule {
9
+ static ɵfac: i0.ɵɵFactoryDeclaration<PlatformUiModule, never>;
10
+ static ɵmod: i0.ɵɵNgModuleDeclaration<PlatformUiModule, never, [typeof i1.ButtonComponent, typeof i2.CardComponent], [typeof i1.ButtonComponent, typeof i2.CardComponent]>;
11
+ static ɵinj: i0.ɵɵInjectorDeclaration<PlatformUiModule>;
12
+ }
13
+ //# sourceMappingURL=platform-ui.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-ui.module.d.ts","sourceRoot":"","sources":["../../../projects/platform-ui/src/lib/platform-ui.module.ts"],"names":[],"mappings":";;;AAIA;;;GAGG;AACH,qBAIa,gBAAgB;yCAAhB,gBAAgB;0CAAhB,gBAAgB;0CAAhB,gBAAgB;CAAG"}
package/package.json ADDED
@@ -0,0 +1,27 @@
1
+ {
2
+ "name": "@solifi/platform-ui",
3
+ "version": "1.0.0",
4
+ "publishConfig": {
5
+ "registry": "https://registry.npmjs.org",
6
+ "access": "public"
7
+ },
8
+ "peerDependencies": {
9
+ "@angular/common": "^19.0.0",
10
+ "@angular/core": "^19.0.0"
11
+ },
12
+ "dependencies": {
13
+ "tslib": "^2.3.0"
14
+ },
15
+ "sideEffects": false,
16
+ "module": "fesm2022/solifi-platform-ui.mjs",
17
+ "typings": "index.d.ts",
18
+ "exports": {
19
+ "./package.json": {
20
+ "default": "./package.json"
21
+ },
22
+ ".": {
23
+ "types": "./index.d.ts",
24
+ "default": "./fesm2022/solifi-platform-ui.mjs"
25
+ }
26
+ }
27
+ }
@@ -0,0 +1,6 @@
1
+ export * from './lib/platform-ui.module';
2
+ export * from './lib/button/button.component';
3
+ export * from './lib/card/card.component';
4
+ export * from './lib/models/button.model';
5
+ export * from './lib/models/card.model';
6
+ //# sourceMappingURL=public-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public-api.d.ts","sourceRoot":"","sources":["../../projects/platform-ui/src/public-api.ts"],"names":[],"mappings":"AAKA,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solifi-platform-ui.d.ts","sourceRoot":"","sources":["../../projects/platform-ui/src/solifi-platform-ui.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,cAAc,cAAc,CAAC"}