@fidurcode/dashboard-widgets-skeleton 1.2.4 → 1.2.6

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.
@@ -95,29 +95,44 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.2", ngImpor
95
95
  }] });
96
96
 
97
97
  class DashboardWidgetsComponent {
98
+ DEFAULT_STORAGE_KEY = 'dashboard-widgets';
99
+ ERROR_PARSING_MESSAGE = 'Error parsing widgets from localStorage';
98
100
  title = input.required(...(ngDevMode ? [{ debugName: "title" }] : []));
99
101
  widgets = input.required(...(ngDevMode ? [{ debugName: "widgets" }] : []));
100
- storageKey = input('dashboard-widgets', ...(ngDevMode ? [{ debugName: "storageKey" }] : []));
101
- ERROR_PARSING_MESSAGE = 'Error parsing widgets from localStorage';
102
+ storageKey = input(this.DEFAULT_STORAGE_KEY, ...(ngDevMode ? [{ debugName: "storageKey" }] : []));
102
103
  store = inject(WidgetService);
103
104
  dashboard;
105
+ constructor() {
106
+ effect(() => {
107
+ localStorage.setItem(this.storageKey(), JSON.stringify(this.store.addedWidgets()));
108
+ });
109
+ }
104
110
  ngOnInit() {
111
+ this.setAvailableWidgets();
112
+ this.loadFromStorage();
113
+ }
114
+ ngAfterViewInit() {
105
115
  wrapGrid(this.dashboard.nativeElement, { duration: 300 });
106
- if (this.widgets?.length > 0) {
107
- this.store.setAvailableWidgets(this.widgets());
116
+ }
117
+ setAvailableWidgets() {
118
+ const widgets = this.widgets();
119
+ if (widgets?.length > 0) {
120
+ this.store.setAvailableWidgets(widgets);
108
121
  }
122
+ }
123
+ loadFromStorage() {
109
124
  const stored = localStorage.getItem(this.storageKey());
110
- if (stored) {
111
- try {
112
- this.store.addedWidgets.set(JSON.parse(stored));
113
- }
114
- catch (e) {
115
- console.error(this.ERROR_PARSING_MESSAGE, e);
125
+ if (!stored)
126
+ return;
127
+ try {
128
+ const parsed = JSON.parse(stored);
129
+ if (Array.isArray(parsed)) {
130
+ this.store.addedWidgets.set(parsed);
116
131
  }
117
132
  }
118
- effect(() => {
119
- localStorage.setItem(this.storageKey(), JSON.stringify(this.store.addedWidgets()));
120
- });
133
+ catch (e) {
134
+ console.error(this.ERROR_PARSING_MESSAGE, e);
135
+ }
121
136
  }
122
137
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: DashboardWidgetsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
123
138
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.2", type: DashboardWidgetsComponent, isStandalone: false, selector: "fidurcode-dashboard-widgets", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: true, transformFunction: null }, widgets: { classPropertyName: "widgets", publicName: "widgets", isSignal: true, isRequired: true, transformFunction: null }, storageKey: { classPropertyName: "storageKey", publicName: "storageKey", isSignal: true, isRequired: false, transformFunction: null } }, providers: [WidgetService], viewQueries: [{ propertyName: "dashboard", first: true, predicate: ["dashboard"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"dashboard-widgets-header\">\n <h2>{{title()}}</h2>\n <button [matMenuTriggerFor]=\"menu\" mat-raised-button>\n <mat-icon>add_circle</mat-icon>\n Add widget\n </button>\n <mat-menu #menu=\"matMenu\">\n @for (widget of store.widgetsToAdd(); track widget.id) {\n <button mat-menu-item (click)=\"store.addWidget(widget)\">{{ widget.label }}</button>\n } @empty {\n <button mat-menu-item>No widget to add</button>\n }\n </mat-menu>\n</div>\n<div #dashboard class=\"dashboard-widgets\">\n @for (w of store.addedWidgets(); track w.id) {\n <app-widget [data]=\"w\"/>\n }\n</div>\n", styles: [".dashboard-widgets-header{display:flex;justify-content:space-between;align-items:center}.dashboard-widgets{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));grid-auto-rows:150px;gap:16px}\n"], dependencies: [{ kind: "component", type: i1$2.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i1$2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i1$2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: WidgetComponent, selector: "app-widget", inputs: ["data"] }] });
@@ -125,7 +140,7 @@ class DashboardWidgetsComponent {
125
140
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: DashboardWidgetsComponent, decorators: [{
126
141
  type: Component,
127
142
  args: [{ selector: 'fidurcode-dashboard-widgets', standalone: false, providers: [WidgetService], template: "<div class=\"dashboard-widgets-header\">\n <h2>{{title()}}</h2>\n <button [matMenuTriggerFor]=\"menu\" mat-raised-button>\n <mat-icon>add_circle</mat-icon>\n Add widget\n </button>\n <mat-menu #menu=\"matMenu\">\n @for (widget of store.widgetsToAdd(); track widget.id) {\n <button mat-menu-item (click)=\"store.addWidget(widget)\">{{ widget.label }}</button>\n } @empty {\n <button mat-menu-item>No widget to add</button>\n }\n </mat-menu>\n</div>\n<div #dashboard class=\"dashboard-widgets\">\n @for (w of store.addedWidgets(); track w.id) {\n <app-widget [data]=\"w\"/>\n }\n</div>\n", styles: [".dashboard-widgets-header{display:flex;justify-content:space-between;align-items:center}.dashboard-widgets{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));grid-auto-rows:150px;gap:16px}\n"] }]
128
- }], propDecorators: { dashboard: [{
143
+ }], ctorParameters: () => [], propDecorators: { dashboard: [{
129
144
  type: ViewChild,
130
145
  args: ['dashboard', { static: true }]
131
146
  }] } });
@@ -1 +1 @@
1
- {"version":3,"file":"fidurcode-dashboard-widgets-skeleton.mjs","sources":["../../../projects/dashboard-widgets-skeleton/src/lib/services/widget.service.ts","../../../projects/dashboard-widgets-skeleton/src/lib/components/widget-options/widget-options.component.ts","../../../projects/dashboard-widgets-skeleton/src/lib/components/widget-options/widget-options.component.html","../../../projects/dashboard-widgets-skeleton/src/lib/components/widget/widget.component.ts","../../../projects/dashboard-widgets-skeleton/src/lib/components/widget/widget.component.html","../../../projects/dashboard-widgets-skeleton/src/lib/components/dashboard-widgets/dashboard-widgets.component.ts","../../../projects/dashboard-widgets-skeleton/src/lib/components/dashboard-widgets/dashboard-widgets.component.html","../../../projects/dashboard-widgets-skeleton/src/lib/dashboard-widgets-skeleton.module.ts","../../../projects/dashboard-widgets-skeleton/src/public-api.ts","../../../projects/dashboard-widgets-skeleton/src/fidurcode-dashboard-widgets-skeleton.ts"],"sourcesContent":["import {\n computed,\n Injectable,\n Signal,\n signal,\n WritableSignal,\n} from '@angular/core';\nimport { Widget } from '../components/widget/widget';\n\n@Injectable()\nexport class WidgetService {\n public widgets: WritableSignal<Widget[]> = signal<Widget[]>([]);\n\n addedWidgets: WritableSignal<Widget[]> = signal<Widget[]>([]);\n\n widgetsToAdd: Signal<Widget[]> = computed((): Widget[] => {\n const addedIds: number[] = this.addedWidgets().map(\n (widget: Widget): number => widget.id,\n );\n return this.widgets().filter((w): boolean => !addedIds.includes(w.id));\n });\n\n setAvailableWidgets(widgets: Widget[]): void {\n this.widgets.set(widgets);\n }\n\n addWidget(widget: Widget): void {\n this.addedWidgets.set([...this.addedWidgets(), { ...widget }]);\n }\n\n updateWidget(id: number, widget: Partial<Widget>): void {\n const index = this.addedWidgets().findIndex((w) => w.id === id);\n if (index !== -1) {\n const newWidgets = [...this.addedWidgets()];\n newWidgets[index] = { ...newWidgets[index], ...widget };\n this.addedWidgets.set(newWidgets);\n }\n }\n\n moveWidgetToLeft(id: number): void {\n const index = this.addedWidgets().findIndex((w) => w.id === id);\n if (index == 0) return;\n const newWidgets = [...this.addedWidgets()];\n [newWidgets[index], newWidgets[index - 1]] = [\n { ...newWidgets[index - 1] },\n { ...newWidgets[index] },\n ];\n\n this.addedWidgets.set(newWidgets);\n }\n\n moveWidgetToRight(id: number): void {\n const index = this.addedWidgets().findIndex((w) => w.id === id);\n if (index == this.addedWidgets().length - 1) return;\n const newWidgets = [...this.addedWidgets()];\n [newWidgets[index], newWidgets[index + 1]] = [\n { ...newWidgets[index + 1] },\n { ...newWidgets[index] },\n ];\n\n this.addedWidgets.set(newWidgets);\n }\n\n deleteWidget(id: number): void {\n this.addedWidgets.set(this.addedWidgets().filter((w) => w.id !== id));\n }\n}\n","import {\n Component,\n inject,\n input,\n InputSignal,\n model,\n ModelSignal,\n} from '@angular/core';\nimport { Widget } from '../widget/widget';\nimport { WidgetService } from '../../services/widget.service';\n\n@Component({\n selector: 'app-widget-options',\n standalone: false,\n templateUrl: './widget-options.component.html',\n styleUrl: './widget-options.component.scss',\n})\nexport class WidgetOptionsComponent {\n widget: InputSignal<Widget> = input.required<Widget>();\n showOptions: ModelSignal<boolean> = model<boolean>(false);\n\n store = inject(WidgetService);\n}\n","<button (click)=\"showOptions.set(false)\" class=\"close-button\" mat-icon-button>\n <mat-icon>close</mat-icon>\n</button>\n\n<div (click)=\"store.moveWidgetToRight(widget().id)\" class=\"move-forward-button\">\n <mat-icon>chevron_right</mat-icon>\n</div>\n\n<div (click)=\"store.moveWidgetToLeft(widget().id)\" class=\"move-backward-button\">\n <mat-icon>chevron_left</mat-icon>\n</div>\n\n<div (click)=\"store.deleteWidget(widget().id)\" class=\"remove-widget-button\">\n <mat-icon>delete</mat-icon>\n</div>\n\n<div>\n Width\n <mat-button-toggle-group\n (change)=\"store.updateWidget(widget().id, { columns: +$event.value })\"\n [hideSingleSelectionIndicator]=\"true\"\n [value]=\"widget().columns ?? 1\">\n <mat-button-toggle [value]=\"1\">1</mat-button-toggle>\n <mat-button-toggle [value]=\"2\">2</mat-button-toggle>\n <mat-button-toggle [value]=\"3\">3</mat-button-toggle>\n <mat-button-toggle [value]=\"4\">4</mat-button-toggle>\n </mat-button-toggle-group>\n</div>\n\n<div>\n Height\n <mat-button-toggle-group\n (change)=\"store.updateWidget(widget().id, { rows: +$event.value })\"\n [hideSingleSelectionIndicator]=\"true\"\n [value]=\"widget().rows ?? 1\">\n <mat-button-toggle [value]=\"1\">1</mat-button-toggle>\n <mat-button-toggle [value]=\"2\">2</mat-button-toggle>\n <mat-button-toggle [value]=\"3\">3</mat-button-toggle>\n <mat-button-toggle [value]=\"4\">4</mat-button-toggle>\n </mat-button-toggle-group>\n</div>","import {\n Component,\n input,\n InputSignal,\n signal,\n WritableSignal,\n} from '@angular/core';\nimport { Widget } from './widget';\n\n@Component({\n selector: 'app-widget',\n standalone: false,\n templateUrl: './widget.component.html',\n styleUrl: './widget.component.scss',\n host: {\n '[style.grid-area]': 'gridArea',\n },\n})\nexport class WidgetComponent {\n data: InputSignal<Widget> = input.required<Widget>();\n\n showWidgetOptions: WritableSignal<boolean> = signal<boolean>(false);\n\n get gridArea(): string {\n const widget: Widget = this.data();\n return `span ${widget.rows ?? 1} / span ${widget.columns ?? 1}`;\n }\n}\n","<div\n class=\"widget-container mat-elevation-z3\"\n>\n <h3 class=\"m-0\">{{ data().label }}</h3>\n <button (click)=\"showWidgetOptions.set(true)\" class=\"settings-button\" mat-icon-button>\n <mat-icon>settings</mat-icon>\n </button>\n\n <ng-container [ngComponentOutlet]=\"data().content\"/>\n\n @if (showWidgetOptions()) {\n <app-widget-options [(showOptions)]=\"showWidgetOptions\" [widget]=\"data()\"/>\n }\n</div>","import {\n Component, effect,\n ElementRef,\n inject, input,\n InputSignal,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport {WidgetService} from '../../services/widget.service';\nimport {wrapGrid} from 'animate-css-grid';\nimport {Widget} from '../widget/widget';\n\n@Component({\n selector: 'fidurcode-dashboard-widgets',\n standalone: false,\n templateUrl: './dashboard-widgets.component.html',\n styleUrl: './dashboard-widgets.component.scss',\n providers: [WidgetService],\n})\nexport class DashboardWidgetsComponent implements OnInit {\n title: InputSignal<string> = input.required<string>();\n widgets: InputSignal<Widget[]> = input.required<Widget[]>();\n storageKey: InputSignal<string> = input<string>('dashboard-widgets');\n\n private readonly ERROR_PARSING_MESSAGE = 'Error parsing widgets from localStorage';\n\n store: WidgetService = inject(WidgetService);\n\n @ViewChild('dashboard', {static: true}) dashboard!: ElementRef;\n\n ngOnInit(): void {\n wrapGrid(this.dashboard.nativeElement, {duration: 300});\n\n if (this.widgets?.length > 0) {\n this.store.setAvailableWidgets(this.widgets());\n }\n\n const stored: string | null = localStorage.getItem(this.storageKey());\n if (stored) {\n try {\n this.store.addedWidgets.set(JSON.parse(stored));\n } catch (e) {\n console.error(this.ERROR_PARSING_MESSAGE, e);\n }\n }\n\n effect((): void => {\n localStorage.setItem(this.storageKey(), JSON.stringify(this.store.addedWidgets()));\n });\n }\n}\n\n","<div class=\"dashboard-widgets-header\">\n <h2>{{title()}}</h2>\n <button [matMenuTriggerFor]=\"menu\" mat-raised-button>\n <mat-icon>add_circle</mat-icon>\n Add widget\n </button>\n <mat-menu #menu=\"matMenu\">\n @for (widget of store.widgetsToAdd(); track widget.id) {\n <button mat-menu-item (click)=\"store.addWidget(widget)\">{{ widget.label }}</button>\n } @empty {\n <button mat-menu-item>No widget to add</button>\n }\n </mat-menu>\n</div>\n<div #dashboard class=\"dashboard-widgets\">\n @for (w of store.addedWidgets(); track w.id) {\n <app-widget [data]=\"w\"/>\n }\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { WidgetComponent } from './components/widget/widget.component';\nimport { WidgetOptionsComponent } from './components/widget-options/widget-options.component';\nimport { DashboardWidgetsComponent } from './components/dashboard-widgets/dashboard-widgets.component';\nimport { WidgetService } from './services/widget.service';\n\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\n\n@NgModule({\n declarations: [\n WidgetComponent,\n WidgetOptionsComponent,\n DashboardWidgetsComponent,\n ],\n imports: [\n CommonModule,\n MatMenuModule,\n MatButtonToggleModule,\n MatButtonModule,\n MatIconModule,\n ],\n exports: [\n WidgetComponent,\n WidgetOptionsComponent,\n DashboardWidgetsComponent,\n MatMenuModule,\n MatButtonToggleModule,\n MatButtonModule,\n MatIconModule,\n ],\n providers: [WidgetService]\n})\nexport class DashboardWidgetsSkeletonModule {}\n","/*\n * Public API Surface of dashboard-widgets-skeleton\n */\n\nexport * from './lib/components/widget/widget.component';\nexport * from './lib/components/widget-options/widget-options.component';\nexport * from './lib/components/dashboard-widgets/dashboard-widgets.component';\nexport * from './lib/services/widget.service';\nexport * from './lib/dashboard-widgets-skeleton.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i4.WidgetOptionsComponent","i4.WidgetComponent"],"mappings":"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"}
1
+ {"version":3,"file":"fidurcode-dashboard-widgets-skeleton.mjs","sources":["../../../projects/dashboard-widgets-skeleton/src/lib/services/widget.service.ts","../../../projects/dashboard-widgets-skeleton/src/lib/components/widget-options/widget-options.component.ts","../../../projects/dashboard-widgets-skeleton/src/lib/components/widget-options/widget-options.component.html","../../../projects/dashboard-widgets-skeleton/src/lib/components/widget/widget.component.ts","../../../projects/dashboard-widgets-skeleton/src/lib/components/widget/widget.component.html","../../../projects/dashboard-widgets-skeleton/src/lib/components/dashboard-widgets/dashboard-widgets.component.ts","../../../projects/dashboard-widgets-skeleton/src/lib/components/dashboard-widgets/dashboard-widgets.component.html","../../../projects/dashboard-widgets-skeleton/src/lib/dashboard-widgets-skeleton.module.ts","../../../projects/dashboard-widgets-skeleton/src/public-api.ts","../../../projects/dashboard-widgets-skeleton/src/fidurcode-dashboard-widgets-skeleton.ts"],"sourcesContent":["import {\n computed,\n Injectable,\n Signal,\n signal,\n WritableSignal,\n} from '@angular/core';\nimport { Widget } from '../components/widget/widget';\n\n@Injectable()\nexport class WidgetService {\n public widgets: WritableSignal<Widget[]> = signal<Widget[]>([]);\n\n addedWidgets: WritableSignal<Widget[]> = signal<Widget[]>([]);\n\n widgetsToAdd: Signal<Widget[]> = computed((): Widget[] => {\n const addedIds: number[] = this.addedWidgets().map(\n (widget: Widget): number => widget.id,\n );\n return this.widgets().filter((w): boolean => !addedIds.includes(w.id));\n });\n\n setAvailableWidgets(widgets: Widget[]): void {\n this.widgets.set(widgets);\n }\n\n addWidget(widget: Widget): void {\n this.addedWidgets.set([...this.addedWidgets(), { ...widget }]);\n }\n\n updateWidget(id: number, widget: Partial<Widget>): void {\n const index = this.addedWidgets().findIndex((w) => w.id === id);\n if (index !== -1) {\n const newWidgets = [...this.addedWidgets()];\n newWidgets[index] = { ...newWidgets[index], ...widget };\n this.addedWidgets.set(newWidgets);\n }\n }\n\n moveWidgetToLeft(id: number): void {\n const index = this.addedWidgets().findIndex((w) => w.id === id);\n if (index == 0) return;\n const newWidgets = [...this.addedWidgets()];\n [newWidgets[index], newWidgets[index - 1]] = [\n { ...newWidgets[index - 1] },\n { ...newWidgets[index] },\n ];\n\n this.addedWidgets.set(newWidgets);\n }\n\n moveWidgetToRight(id: number): void {\n const index = this.addedWidgets().findIndex((w) => w.id === id);\n if (index == this.addedWidgets().length - 1) return;\n const newWidgets = [...this.addedWidgets()];\n [newWidgets[index], newWidgets[index + 1]] = [\n { ...newWidgets[index + 1] },\n { ...newWidgets[index] },\n ];\n\n this.addedWidgets.set(newWidgets);\n }\n\n deleteWidget(id: number): void {\n this.addedWidgets.set(this.addedWidgets().filter((w) => w.id !== id));\n }\n}\n","import {\n Component,\n inject,\n input,\n InputSignal,\n model,\n ModelSignal,\n} from '@angular/core';\nimport { Widget } from '../widget/widget';\nimport { WidgetService } from '../../services/widget.service';\n\n@Component({\n selector: 'app-widget-options',\n standalone: false,\n templateUrl: './widget-options.component.html',\n styleUrl: './widget-options.component.scss',\n})\nexport class WidgetOptionsComponent {\n widget: InputSignal<Widget> = input.required<Widget>();\n showOptions: ModelSignal<boolean> = model<boolean>(false);\n\n store = inject(WidgetService);\n}\n","<button (click)=\"showOptions.set(false)\" class=\"close-button\" mat-icon-button>\n <mat-icon>close</mat-icon>\n</button>\n\n<div (click)=\"store.moveWidgetToRight(widget().id)\" class=\"move-forward-button\">\n <mat-icon>chevron_right</mat-icon>\n</div>\n\n<div (click)=\"store.moveWidgetToLeft(widget().id)\" class=\"move-backward-button\">\n <mat-icon>chevron_left</mat-icon>\n</div>\n\n<div (click)=\"store.deleteWidget(widget().id)\" class=\"remove-widget-button\">\n <mat-icon>delete</mat-icon>\n</div>\n\n<div>\n Width\n <mat-button-toggle-group\n (change)=\"store.updateWidget(widget().id, { columns: +$event.value })\"\n [hideSingleSelectionIndicator]=\"true\"\n [value]=\"widget().columns ?? 1\">\n <mat-button-toggle [value]=\"1\">1</mat-button-toggle>\n <mat-button-toggle [value]=\"2\">2</mat-button-toggle>\n <mat-button-toggle [value]=\"3\">3</mat-button-toggle>\n <mat-button-toggle [value]=\"4\">4</mat-button-toggle>\n </mat-button-toggle-group>\n</div>\n\n<div>\n Height\n <mat-button-toggle-group\n (change)=\"store.updateWidget(widget().id, { rows: +$event.value })\"\n [hideSingleSelectionIndicator]=\"true\"\n [value]=\"widget().rows ?? 1\">\n <mat-button-toggle [value]=\"1\">1</mat-button-toggle>\n <mat-button-toggle [value]=\"2\">2</mat-button-toggle>\n <mat-button-toggle [value]=\"3\">3</mat-button-toggle>\n <mat-button-toggle [value]=\"4\">4</mat-button-toggle>\n </mat-button-toggle-group>\n</div>","import {\n Component,\n input,\n InputSignal,\n signal,\n WritableSignal,\n} from '@angular/core';\nimport { Widget } from './widget';\n\n@Component({\n selector: 'app-widget',\n standalone: false,\n templateUrl: './widget.component.html',\n styleUrl: './widget.component.scss',\n host: {\n '[style.grid-area]': 'gridArea',\n },\n})\nexport class WidgetComponent {\n data: InputSignal<Widget> = input.required<Widget>();\n\n showWidgetOptions: WritableSignal<boolean> = signal<boolean>(false);\n\n get gridArea(): string {\n const widget: Widget = this.data();\n return `span ${widget.rows ?? 1} / span ${widget.columns ?? 1}`;\n }\n}\n","<div\n class=\"widget-container mat-elevation-z3\"\n>\n <h3 class=\"m-0\">{{ data().label }}</h3>\n <button (click)=\"showWidgetOptions.set(true)\" class=\"settings-button\" mat-icon-button>\n <mat-icon>settings</mat-icon>\n </button>\n\n <ng-container [ngComponentOutlet]=\"data().content\"/>\n\n @if (showWidgetOptions()) {\n <app-widget-options [(showOptions)]=\"showWidgetOptions\" [widget]=\"data()\"/>\n }\n</div>","import {\n Component,\n ElementRef,\n ViewChild,\n InputSignal,\n input,\n inject,\n effect,\n OnInit,\n AfterViewInit,\n} from '@angular/core';\nimport { WidgetService } from '../../services/widget.service';\nimport { wrapGrid } from 'animate-css-grid';\nimport { Widget } from '../widget/widget';\n\n@Component({\n selector: 'fidurcode-dashboard-widgets',\n standalone: false,\n templateUrl: './dashboard-widgets.component.html',\n styleUrls: ['./dashboard-widgets.component.scss'],\n providers: [WidgetService],\n})\nexport class DashboardWidgetsComponent implements OnInit, AfterViewInit {\n private readonly DEFAULT_STORAGE_KEY = 'dashboard-widgets';\n private readonly ERROR_PARSING_MESSAGE = 'Error parsing widgets from localStorage';\n\n title: InputSignal<string> = input.required<string>();\n widgets: InputSignal<Widget[]> = input.required<Widget[]>();\n storageKey: InputSignal<string> = input<string>(this.DEFAULT_STORAGE_KEY);\n\n public store = inject(WidgetService);\n\n @ViewChild('dashboard', { static: true }) dashboard!: ElementRef;\n\n constructor() {\n effect((): void => {\n localStorage.setItem(\n this.storageKey(),\n JSON.stringify(this.store.addedWidgets())\n );\n });\n }\n\n ngOnInit(): void {\n this.setAvailableWidgets();\n this.loadFromStorage();\n }\n\n ngAfterViewInit(): void {\n wrapGrid(this.dashboard.nativeElement, { duration: 300 });\n }\n\n private setAvailableWidgets(): void {\n const widgets = this.widgets();\n if (widgets?.length > 0) {\n this.store.setAvailableWidgets(widgets);\n }\n }\n\n private loadFromStorage(): void {\n const stored: string | null = localStorage.getItem(this.storageKey());\n if (!stored) return;\n\n try {\n const parsed: unknown = JSON.parse(stored);\n if (Array.isArray(parsed)) {\n this.store.addedWidgets.set(parsed as Widget[]);\n }\n } catch (e) {\n console.error(this.ERROR_PARSING_MESSAGE, e);\n }\n }\n}\n","<div class=\"dashboard-widgets-header\">\n <h2>{{title()}}</h2>\n <button [matMenuTriggerFor]=\"menu\" mat-raised-button>\n <mat-icon>add_circle</mat-icon>\n Add widget\n </button>\n <mat-menu #menu=\"matMenu\">\n @for (widget of store.widgetsToAdd(); track widget.id) {\n <button mat-menu-item (click)=\"store.addWidget(widget)\">{{ widget.label }}</button>\n } @empty {\n <button mat-menu-item>No widget to add</button>\n }\n </mat-menu>\n</div>\n<div #dashboard class=\"dashboard-widgets\">\n @for (w of store.addedWidgets(); track w.id) {\n <app-widget [data]=\"w\"/>\n }\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { WidgetComponent } from './components/widget/widget.component';\nimport { WidgetOptionsComponent } from './components/widget-options/widget-options.component';\nimport { DashboardWidgetsComponent } from './components/dashboard-widgets/dashboard-widgets.component';\nimport { WidgetService } from './services/widget.service';\n\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\n\n@NgModule({\n declarations: [\n WidgetComponent,\n WidgetOptionsComponent,\n DashboardWidgetsComponent,\n ],\n imports: [\n CommonModule,\n MatMenuModule,\n MatButtonToggleModule,\n MatButtonModule,\n MatIconModule,\n ],\n exports: [\n WidgetComponent,\n WidgetOptionsComponent,\n DashboardWidgetsComponent,\n MatMenuModule,\n MatButtonToggleModule,\n MatButtonModule,\n MatIconModule,\n ],\n providers: [WidgetService]\n})\nexport class DashboardWidgetsSkeletonModule {}\n","/*\n * Public API Surface of dashboard-widgets-skeleton\n */\n\nexport * from './lib/components/widget/widget.component';\nexport * from './lib/components/widget-options/widget-options.component';\nexport * from './lib/components/dashboard-widgets/dashboard-widgets.component';\nexport * from './lib/services/widget.service';\nexport * from './lib/dashboard-widgets-skeleton.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i4.WidgetOptionsComponent","i4.WidgetComponent"],"mappings":"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"}
package/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Type, InputSignal, WritableSignal, Signal, ModelSignal, OnInit, ElementRef } from '@angular/core';
2
+ import { Type, InputSignal, WritableSignal, Signal, ModelSignal, OnInit, AfterViewInit, ElementRef } from '@angular/core';
3
3
  import * as i4 from '@angular/common';
4
4
  import * as i5 from '@angular/material/menu';
5
5
  import * as i6 from '@angular/material/button-toggle';
@@ -44,14 +44,19 @@ declare class WidgetOptionsComponent {
44
44
  static ɵcmp: i0.ɵɵComponentDeclaration<WidgetOptionsComponent, "app-widget-options", never, { "widget": { "alias": "widget"; "required": true; "isSignal": true; }; "showOptions": { "alias": "showOptions"; "required": false; "isSignal": true; }; }, { "showOptions": "showOptionsChange"; }, never, never, false, never>;
45
45
  }
46
46
 
47
- declare class DashboardWidgetsComponent implements OnInit {
47
+ declare class DashboardWidgetsComponent implements OnInit, AfterViewInit {
48
+ private readonly DEFAULT_STORAGE_KEY;
49
+ private readonly ERROR_PARSING_MESSAGE;
48
50
  title: InputSignal<string>;
49
51
  widgets: InputSignal<Widget[]>;
50
52
  storageKey: InputSignal<string>;
51
- private readonly ERROR_PARSING_MESSAGE;
52
53
  store: WidgetService;
53
54
  dashboard: ElementRef;
55
+ constructor();
54
56
  ngOnInit(): void;
57
+ ngAfterViewInit(): void;
58
+ private setAvailableWidgets;
59
+ private loadFromStorage;
55
60
  static ɵfac: i0.ɵɵFactoryDeclaration<DashboardWidgetsComponent, never>;
56
61
  static ɵcmp: i0.ɵɵComponentDeclaration<DashboardWidgetsComponent, "fidurcode-dashboard-widgets", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "widgets": { "alias": "widgets"; "required": true; "isSignal": true; }; "storageKey": { "alias": "storageKey"; "required": false; "isSignal": true; }; }, {}, never, never, false, never>;
57
62
  }
package/index.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sources":["../../projects/dashboard-widgets-skeleton/src/lib/components/widget/widget.ts","../../projects/dashboard-widgets-skeleton/src/lib/components/widget/widget.component.ts","../../projects/dashboard-widgets-skeleton/src/lib/services/widget.service.ts","../../projects/dashboard-widgets-skeleton/src/lib/components/widget-options/widget-options.component.ts","../../projects/dashboard-widgets-skeleton/src/lib/components/dashboard-widgets/dashboard-widgets.component.ts","../../projects/dashboard-widgets-skeleton/src/lib/dashboard-widgets-skeleton.module.ts"],"sourcesContent":[null,null,null,null,null,null],"names":[],"mappings":";;;;;;;;;;;AAKE;;;AAGD;;ACCD;AAUE;AAEA;;;;AAMD;;AClBD;AAES;AAEP;AAEA;AAOA;AAIA;AAIA;AASA;AAYA;AAYA;;;AAGD;;ACvDD;AAOE;AACA;AAEA;;;AACD;;ACVD;AAQE;AACA;AACA;AAEA;;;AAMA;;;AAoBD;;ACtCD;;;;AAwB8C;;"}
1
+ {"version":3,"file":"index.d.ts","sources":["../../projects/dashboard-widgets-skeleton/src/lib/components/widget/widget.ts","../../projects/dashboard-widgets-skeleton/src/lib/components/widget/widget.component.ts","../../projects/dashboard-widgets-skeleton/src/lib/services/widget.service.ts","../../projects/dashboard-widgets-skeleton/src/lib/components/widget-options/widget-options.component.ts","../../projects/dashboard-widgets-skeleton/src/lib/components/dashboard-widgets/dashboard-widgets.component.ts","../../projects/dashboard-widgets-skeleton/src/lib/dashboard-widgets-skeleton.module.ts"],"sourcesContent":[null,null,null,null,null,null],"names":[],"mappings":";;;;;;;;;;;AAKE;;;AAGD;;ACCD;AAUE;AAEA;;;;AAMD;;AClBD;AAES;AAEP;AAEA;AAOA;AAIA;AAIA;AASA;AAYA;AAYA;;;AAGD;;ACvDD;AAOE;AACA;AAEA;;;AACD;;ACPD;AAQE;AACA;AAEA;AACA;AACA;AAEO;;;AAaP;AAKA;AAIA;AAOA;;;AAaD;;AC5DD;;;;AAwB8C;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fidurcode/dashboard-widgets-skeleton",
3
- "version": "1.2.4",
3
+ "version": "1.2.6",
4
4
  "license": "MIT",
5
5
  "private": false,
6
6
  "peerDependencies": {