@doug-williamson/ng-rhombus 0.0.19 → 0.0.20

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.
@@ -207,11 +207,11 @@ class NgRhombusHeaderComponent {
207
207
  this.logOut.emit();
208
208
  }
209
209
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.4", ngImport: i0, type: NgRhombusHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
210
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.4", type: NgRhombusHeaderComponent, isStandalone: true, selector: "ng-rhombus-header", inputs: { isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: false, transformFunction: null }, isMobile: { classPropertyName: "isMobile", publicName: "isMobile", isSignal: false, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { logOut: "logOut", menuToggled: "menuToggled" }, ngImport: i0, template: "<mat-toolbar class=\"header-theme relative\">\r\n @if (isMobile) {\r\n <button mat-icon-button (click)=\"toggleSidebar()\" color=\"red\">\r\n <mat-icon>menu</mat-icon>\r\n </button>\r\n }\r\n\r\n <span class=\"flex-1\">{{ title }}</span>\r\n\r\n <button class=\"mr-2\" mat-icon-button [mat-menu-trigger-for]=\"themeMenu\">\r\n <mat-icon>{{ themeService.selectedTheme()?.icon }}</mat-icon>\r\n </button>\r\n <mat-menu #themeMenu=\"matMenu\">\r\n @for (theme of themeService.getThemes(); track theme.name) {\r\n <button [class.selected-theme]=\"themeService.selectedTheme()?.name === theme.name\" mat-menu-item\r\n (click)=\"themeService.setTheme(theme.name)\">\r\n <mat-icon>{{ theme.icon }}</mat-icon>\r\n <span>{{ theme.name | titlecase }}</span>\r\n </button>\r\n }\r\n </mat-menu>\r\n\r\n @if (user()) {\r\n <button mat-raised-button color=\"primary\" class=\"logout-button\" (click)=\"logout()\">\r\n Logout\r\n </button>\r\n }\r\n</mat-toolbar>\r\n@if (isLoading()) {\r\n<mat-progress-bar class=\"!absolute top-[64px] z-10\" mode=\"indeterminate\" />\r\n}", styles: [".header-theme{--mat-toolbar-container-background-color: var(--mat-sys-primary);--mat-toolbar-container-text-color: var(--mat-sys-on-primary);--mat-icon-button-icon-color: var(--mat-sys-on-primary);box-shadow:0 3px 5px -1px #0003,0 6px 10px #00000024,0 1px 18px #0000001f}.selected-theme{--mat-menu-item-icon-color: var(--mat-sys-primary);--mat-menu-item-label-text-color: var(--mat-sys-primary)}mat-progress-bar{--mat-progress-bar-active-indicator-color: var(--mat-sys-primary);--mat-progress-bar-track-color: var(--mat-sys-surface-variant)}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$1.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: i1$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i3.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: i3.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i3.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: MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i4.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }] }); }
210
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.4", type: NgRhombusHeaderComponent, isStandalone: true, selector: "ng-rhombus-header", inputs: { isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: false, transformFunction: null }, isMobile: { classPropertyName: "isMobile", publicName: "isMobile", isSignal: false, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { logOut: "logOut", menuToggled: "menuToggled" }, ngImport: i0, template: "<mat-toolbar class=\"header-theme relative\">\r\n @if (isMobile) {\r\n <button mat-icon-button (click)=\"toggleSidebar()\" color=\"red\">\r\n <mat-icon>menu</mat-icon>\r\n </button>\r\n }\r\n\r\n <span class=\"title flex-1\">{{ title }}</span>\r\n\r\n <button class=\"mr-2\" mat-icon-button [mat-menu-trigger-for]=\"themeMenu\">\r\n <mat-icon>{{ themeService.selectedTheme()?.icon }}</mat-icon>\r\n </button>\r\n <mat-menu #themeMenu=\"matMenu\">\r\n @for (theme of themeService.getThemes(); track theme.name) {\r\n <button [class.selected-theme]=\"themeService.selectedTheme()?.name === theme.name\" mat-menu-item\r\n (click)=\"themeService.setTheme(theme.name)\">\r\n <mat-icon>{{ theme.icon }}</mat-icon>\r\n <span>{{ theme.name | titlecase }}</span>\r\n </button>\r\n }\r\n </mat-menu>\r\n\r\n @if (user()) {\r\n <button mat-raised-button color=\"primary\" class=\"logout-button\" (click)=\"logout()\">\r\n Logout\r\n </button>\r\n }\r\n</mat-toolbar>\r\n@if (isLoading()) {\r\n<mat-progress-bar class=\"!absolute top-[64px] z-10\" mode=\"indeterminate\" />\r\n}", styles: [".header-theme{--mat-toolbar-container-background-color: var(--mat-sys-primary);--mat-toolbar-container-text-color: var(--mat-sys-on-primary);--mat-icon-button-icon-color: var(--mat-sys-on-primary);box-shadow:0 3px 5px -1px #0003,0 6px 10px #00000024,0 1px 18px #0000001f}.title{margin-left:16px}.selected-theme{--mat-menu-item-icon-color: var(--mat-sys-primary);--mat-menu-item-label-text-color: var(--mat-sys-primary)}mat-progress-bar{--mat-progress-bar-active-indicator-color: var(--mat-sys-primary);--mat-progress-bar-track-color: var(--mat-sys-surface-variant)}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$1.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: i1$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i3.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: i3.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i3.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: MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i4.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }] }); }
211
211
  }
212
212
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.4", ngImport: i0, type: NgRhombusHeaderComponent, decorators: [{
213
213
  type: Component,
214
- args: [{ selector: 'ng-rhombus-header', imports: [MatButtonModule, MatIconModule, MatMenuModule, MatToolbar, TitleCasePipe, MatProgressBarModule], template: "<mat-toolbar class=\"header-theme relative\">\r\n @if (isMobile) {\r\n <button mat-icon-button (click)=\"toggleSidebar()\" color=\"red\">\r\n <mat-icon>menu</mat-icon>\r\n </button>\r\n }\r\n\r\n <span class=\"flex-1\">{{ title }}</span>\r\n\r\n <button class=\"mr-2\" mat-icon-button [mat-menu-trigger-for]=\"themeMenu\">\r\n <mat-icon>{{ themeService.selectedTheme()?.icon }}</mat-icon>\r\n </button>\r\n <mat-menu #themeMenu=\"matMenu\">\r\n @for (theme of themeService.getThemes(); track theme.name) {\r\n <button [class.selected-theme]=\"themeService.selectedTheme()?.name === theme.name\" mat-menu-item\r\n (click)=\"themeService.setTheme(theme.name)\">\r\n <mat-icon>{{ theme.icon }}</mat-icon>\r\n <span>{{ theme.name | titlecase }}</span>\r\n </button>\r\n }\r\n </mat-menu>\r\n\r\n @if (user()) {\r\n <button mat-raised-button color=\"primary\" class=\"logout-button\" (click)=\"logout()\">\r\n Logout\r\n </button>\r\n }\r\n</mat-toolbar>\r\n@if (isLoading()) {\r\n<mat-progress-bar class=\"!absolute top-[64px] z-10\" mode=\"indeterminate\" />\r\n}", styles: [".header-theme{--mat-toolbar-container-background-color: var(--mat-sys-primary);--mat-toolbar-container-text-color: var(--mat-sys-on-primary);--mat-icon-button-icon-color: var(--mat-sys-on-primary);box-shadow:0 3px 5px -1px #0003,0 6px 10px #00000024,0 1px 18px #0000001f}.selected-theme{--mat-menu-item-icon-color: var(--mat-sys-primary);--mat-menu-item-label-text-color: var(--mat-sys-primary)}mat-progress-bar{--mat-progress-bar-active-indicator-color: var(--mat-sys-primary);--mat-progress-bar-track-color: var(--mat-sys-surface-variant)}\n"] }]
214
+ args: [{ selector: 'ng-rhombus-header', imports: [MatButtonModule, MatIconModule, MatMenuModule, MatToolbar, TitleCasePipe, MatProgressBarModule], template: "<mat-toolbar class=\"header-theme relative\">\r\n @if (isMobile) {\r\n <button mat-icon-button (click)=\"toggleSidebar()\" color=\"red\">\r\n <mat-icon>menu</mat-icon>\r\n </button>\r\n }\r\n\r\n <span class=\"title flex-1\">{{ title }}</span>\r\n\r\n <button class=\"mr-2\" mat-icon-button [mat-menu-trigger-for]=\"themeMenu\">\r\n <mat-icon>{{ themeService.selectedTheme()?.icon }}</mat-icon>\r\n </button>\r\n <mat-menu #themeMenu=\"matMenu\">\r\n @for (theme of themeService.getThemes(); track theme.name) {\r\n <button [class.selected-theme]=\"themeService.selectedTheme()?.name === theme.name\" mat-menu-item\r\n (click)=\"themeService.setTheme(theme.name)\">\r\n <mat-icon>{{ theme.icon }}</mat-icon>\r\n <span>{{ theme.name | titlecase }}</span>\r\n </button>\r\n }\r\n </mat-menu>\r\n\r\n @if (user()) {\r\n <button mat-raised-button color=\"primary\" class=\"logout-button\" (click)=\"logout()\">\r\n Logout\r\n </button>\r\n }\r\n</mat-toolbar>\r\n@if (isLoading()) {\r\n<mat-progress-bar class=\"!absolute top-[64px] z-10\" mode=\"indeterminate\" />\r\n}", styles: [".header-theme{--mat-toolbar-container-background-color: var(--mat-sys-primary);--mat-toolbar-container-text-color: var(--mat-sys-on-primary);--mat-icon-button-icon-color: var(--mat-sys-on-primary);box-shadow:0 3px 5px -1px #0003,0 6px 10px #00000024,0 1px 18px #0000001f}.title{margin-left:16px}.selected-theme{--mat-menu-item-icon-color: var(--mat-sys-primary);--mat-menu-item-label-text-color: var(--mat-sys-primary)}mat-progress-bar{--mat-progress-bar-active-indicator-color: var(--mat-sys-primary);--mat-progress-bar-track-color: var(--mat-sys-surface-variant)}\n"] }]
215
215
  }], propDecorators: { isLoading: [{ type: i0.Input, args: [{ isSignal: true, alias: "isLoading", required: false }] }], logOut: [{ type: i0.Output, args: ["logOut"] }], isMobile: [{
216
216
  type: Input
217
217
  }], title: [{
@@ -224,11 +224,11 @@ class NgRhombusNavListComponent {
224
224
  ngOnInit() {
225
225
  }
226
226
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.4", ngImport: i0, type: NgRhombusNavListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
227
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.4", type: NgRhombusNavListComponent, isStandalone: true, selector: "ng-rhombus-nav-list", inputs: { routeCollection: "routeCollection" }, ngImport: i0, template: "<mat-nav-list>\r\n @for (link of routeCollection; track link) {\r\n <a mat-list-item [routerLink]=\"link.route\" routerLinkActive=\"selected-menu-item\">\r\n <span>{{ link.label }}</span>\r\n </a>\r\n }\r\n</mat-nav-list>", styles: [".selected-menu-item{--mat-list-list-item-container-color: var(--mat-sys-primary);--mat-list-list-item-label-text-color: var(--mat-sys-on-primary);--mat-list-list-item-hover-label-text-color: var(--mat-sys-on-primary);--mat-list-list-item-focus-label-text-color: var(--mat-sys-on-primary)}\n"], dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i1$2.MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "component", type: i1$2.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatTabsModule }] }); }
227
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.4", type: NgRhombusNavListComponent, isStandalone: true, selector: "ng-rhombus-nav-list", inputs: { routeCollection: "routeCollection" }, ngImport: i0, template: "<mat-nav-list>\r\n @for (link of routeCollection; track link) {\r\n <a mat-list-item [routerLink]=\"link.route\" routerLinkActive=\"selected-menu-item\">\r\n <span>{{ link.label }}</span>\r\n </a>\r\n }\r\n</mat-nav-list>", styles: [":host{display:block;flex:0 0 250px;max-width:250px;margin:12px}.selected-menu-item{--mat-list-list-item-container-color: var(--mat-sys-primary);--mat-list-list-item-label-text-color: var(--mat-sys-on-primary);--mat-list-list-item-hover-label-text-color: var(--mat-sys-on-primary);--mat-list-list-item-focus-label-text-color: var(--mat-sys-on-primary)}\n"], dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i1$2.MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "component", type: i1$2.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatTabsModule }] }); }
228
228
  }
229
229
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.4", ngImport: i0, type: NgRhombusNavListComponent, decorators: [{
230
230
  type: Component,
231
- args: [{ selector: 'ng-rhombus-nav-list', imports: [RouterModule, MatListModule, MatIconModule, MatTabsModule], template: "<mat-nav-list>\r\n @for (link of routeCollection; track link) {\r\n <a mat-list-item [routerLink]=\"link.route\" routerLinkActive=\"selected-menu-item\">\r\n <span>{{ link.label }}</span>\r\n </a>\r\n }\r\n</mat-nav-list>", styles: [".selected-menu-item{--mat-list-list-item-container-color: var(--mat-sys-primary);--mat-list-list-item-label-text-color: var(--mat-sys-on-primary);--mat-list-list-item-hover-label-text-color: var(--mat-sys-on-primary);--mat-list-list-item-focus-label-text-color: var(--mat-sys-on-primary)}\n"] }]
231
+ args: [{ selector: 'ng-rhombus-nav-list', imports: [RouterModule, MatListModule, MatIconModule, MatTabsModule], template: "<mat-nav-list>\r\n @for (link of routeCollection; track link) {\r\n <a mat-list-item [routerLink]=\"link.route\" routerLinkActive=\"selected-menu-item\">\r\n <span>{{ link.label }}</span>\r\n </a>\r\n }\r\n</mat-nav-list>", styles: [":host{display:block;flex:0 0 250px;max-width:250px;margin:12px}.selected-menu-item{--mat-list-list-item-container-color: var(--mat-sys-primary);--mat-list-list-item-label-text-color: var(--mat-sys-on-primary);--mat-list-list-item-hover-label-text-color: var(--mat-sys-on-primary);--mat-list-list-item-focus-label-text-color: var(--mat-sys-on-primary)}\n"] }]
232
232
  }], propDecorators: { routeCollection: [{
233
233
  type: Input
234
234
  }] } });
@@ -268,11 +268,11 @@ class NgRhombusWrapperComponent {
268
268
  this.logout.emit();
269
269
  }
270
270
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.4", ngImport: i0, type: NgRhombusWrapperComponent, deps: [{ token: i1$3.BreakpointObserver }, { token: WrapperService }], target: i0.ɵɵFactoryTarget.Component }); }
271
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.0.4", type: NgRhombusWrapperComponent, isStandalone: true, selector: "ng-rhombus-wrapper", inputs: { isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: false, isRequired: false, transformFunction: null }, routeCollection: { classPropertyName: "routeCollection", publicName: "routeCollection", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { clickAddNewEvent: "clickAddNewEvent", logout: "logout" }, providers: [WrapperService], ngImport: i0, template: "<ng-rhombus-header class=\"header-wrapper\" [isMobile]=\"isMobile\" [title]=\"title\" (menuToggled)=\"sidenav.toggle()\"\r\n (logOut)=\"logOut()\" [isLoading]=\"isLoading()\"></ng-rhombus-header>\r\n<mat-sidenav-container>\r\n <mat-sidenav #sidenav [opened]=\"!isMobile\" [mode]=\"isMobile ? 'over' : 'side'\">\r\n <div class=\"nav-list-wrapper\">\r\n <ng-rhombus-nav-list [routeCollection]=\"routeCollection\"></ng-rhombus-nav-list>\r\n </div>\r\n </mat-sidenav>\r\n <mat-sidenav-content class=\"main-sidenav-content\">\r\n <!-- <mat-toolbar class=\"header-theme\">\r\n <span class=\"wrapper-flex\">\r\n <ng-container *ngFor=\"let breadcrumb of breadcrumbs()\">\r\n {{ breadcrumb.label }}\r\n </ng-container>\r\n </span>\r\n <button mat-icon-button (click)=\"clickedCreateNew()\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n </mat-toolbar> -->\r\n <router-outlet #o=\"outlet\"></router-outlet>\r\n </mat-sidenav-content>\r\n</mat-sidenav-container>", styles: [":host{position:relative}.main-sidenav-content{overflow:hidden}mat-sidenav-container{height:calc(100vh - 64px)}\n"], dependencies: [{ kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i3$1.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i3$1.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "component", type: i3$1.MatSidenavContent, selector: "mat-sidenav-content" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatListModule }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "ngmodule", type: MatToolbarModule }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: NgRhombusHeaderComponent, selector: "ng-rhombus-header", inputs: ["isLoading", "isMobile", "title"], outputs: ["logOut", "menuToggled"] }, { kind: "component", type: NgRhombusNavListComponent, selector: "ng-rhombus-nav-list", inputs: ["routeCollection"] }] }); }
271
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.0.4", type: NgRhombusWrapperComponent, isStandalone: true, selector: "ng-rhombus-wrapper", inputs: { isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: false, isRequired: false, transformFunction: null }, routeCollection: { classPropertyName: "routeCollection", publicName: "routeCollection", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { clickAddNewEvent: "clickAddNewEvent", logout: "logout" }, providers: [WrapperService], ngImport: i0, template: "<ng-rhombus-header class=\"header-wrapper\" [isMobile]=\"isMobile\" [title]=\"title\" (menuToggled)=\"sidenav.toggle()\"\r\n (logOut)=\"logOut()\" [isLoading]=\"isLoading()\"></ng-rhombus-header>\r\n<mat-sidenav-container>\r\n <mat-sidenav #sidenav [opened]=\"!isMobile\" [mode]=\"isMobile ? 'over' : 'side'\">\r\n <div class=\"nav-list-wrapper\">\r\n <ng-rhombus-nav-list [routeCollection]=\"routeCollection\"></ng-rhombus-nav-list>\r\n </div>\r\n </mat-sidenav>\r\n <mat-sidenav-content class=\"main-sidenav-content\">\r\n <!-- <mat-toolbar class=\"header-theme\">\r\n <span class=\"wrapper-flex\">\r\n <ng-container *ngFor=\"let breadcrumb of breadcrumbs()\">\r\n {{ breadcrumb.label }}\r\n </ng-container>\r\n </span>\r\n <button mat-icon-button (click)=\"clickedCreateNew()\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n </mat-toolbar> -->\r\n <router-outlet #o=\"outlet\"></router-outlet>\r\n </mat-sidenav-content>\r\n</mat-sidenav-container>", styles: [":host{position:relative}.main-sidenav-content{overflow:hidden}mat-sidenav-container{height:calc(100vh - 64px)}mat-sidenav{width:250px}\n"], dependencies: [{ kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i3$1.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i3$1.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "component", type: i3$1.MatSidenavContent, selector: "mat-sidenav-content" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatListModule }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "ngmodule", type: MatToolbarModule }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: NgRhombusHeaderComponent, selector: "ng-rhombus-header", inputs: ["isLoading", "isMobile", "title"], outputs: ["logOut", "menuToggled"] }, { kind: "component", type: NgRhombusNavListComponent, selector: "ng-rhombus-nav-list", inputs: ["routeCollection"] }] }); }
272
272
  }
273
273
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.4", ngImport: i0, type: NgRhombusWrapperComponent, decorators: [{
274
274
  type: Component,
275
- args: [{ selector: 'ng-rhombus-wrapper', imports: [MatSidenavModule, MatButtonModule, MatIconModule, MatListModule, MatProgressBarModule, MatToolbarModule, RouterModule, NgRhombusHeaderComponent, NgRhombusNavListComponent], providers: [WrapperService], template: "<ng-rhombus-header class=\"header-wrapper\" [isMobile]=\"isMobile\" [title]=\"title\" (menuToggled)=\"sidenav.toggle()\"\r\n (logOut)=\"logOut()\" [isLoading]=\"isLoading()\"></ng-rhombus-header>\r\n<mat-sidenav-container>\r\n <mat-sidenav #sidenav [opened]=\"!isMobile\" [mode]=\"isMobile ? 'over' : 'side'\">\r\n <div class=\"nav-list-wrapper\">\r\n <ng-rhombus-nav-list [routeCollection]=\"routeCollection\"></ng-rhombus-nav-list>\r\n </div>\r\n </mat-sidenav>\r\n <mat-sidenav-content class=\"main-sidenav-content\">\r\n <!-- <mat-toolbar class=\"header-theme\">\r\n <span class=\"wrapper-flex\">\r\n <ng-container *ngFor=\"let breadcrumb of breadcrumbs()\">\r\n {{ breadcrumb.label }}\r\n </ng-container>\r\n </span>\r\n <button mat-icon-button (click)=\"clickedCreateNew()\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n </mat-toolbar> -->\r\n <router-outlet #o=\"outlet\"></router-outlet>\r\n </mat-sidenav-content>\r\n</mat-sidenav-container>", styles: [":host{position:relative}.main-sidenav-content{overflow:hidden}mat-sidenav-container{height:calc(100vh - 64px)}\n"] }]
275
+ args: [{ selector: 'ng-rhombus-wrapper', imports: [MatSidenavModule, MatButtonModule, MatIconModule, MatListModule, MatProgressBarModule, MatToolbarModule, RouterModule, NgRhombusHeaderComponent, NgRhombusNavListComponent], providers: [WrapperService], template: "<ng-rhombus-header class=\"header-wrapper\" [isMobile]=\"isMobile\" [title]=\"title\" (menuToggled)=\"sidenav.toggle()\"\r\n (logOut)=\"logOut()\" [isLoading]=\"isLoading()\"></ng-rhombus-header>\r\n<mat-sidenav-container>\r\n <mat-sidenav #sidenav [opened]=\"!isMobile\" [mode]=\"isMobile ? 'over' : 'side'\">\r\n <div class=\"nav-list-wrapper\">\r\n <ng-rhombus-nav-list [routeCollection]=\"routeCollection\"></ng-rhombus-nav-list>\r\n </div>\r\n </mat-sidenav>\r\n <mat-sidenav-content class=\"main-sidenav-content\">\r\n <!-- <mat-toolbar class=\"header-theme\">\r\n <span class=\"wrapper-flex\">\r\n <ng-container *ngFor=\"let breadcrumb of breadcrumbs()\">\r\n {{ breadcrumb.label }}\r\n </ng-container>\r\n </span>\r\n <button mat-icon-button (click)=\"clickedCreateNew()\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n </mat-toolbar> -->\r\n <router-outlet #o=\"outlet\"></router-outlet>\r\n </mat-sidenav-content>\r\n</mat-sidenav-container>", styles: [":host{position:relative}.main-sidenav-content{overflow:hidden}mat-sidenav-container{height:calc(100vh - 64px)}mat-sidenav{width:250px}\n"] }]
276
276
  }], ctorParameters: () => [{ type: i1$3.BreakpointObserver }, { type: WrapperService }], propDecorators: { clickAddNewEvent: [{
277
277
  type: Output
278
278
  }], isLoading: [{ type: i0.Input, args: [{ isSignal: true, alias: "isLoading", required: false }] }], logout: [{ type: i0.Output, args: ["logout"] }], title: [{
@@ -1 +1 @@
1
- {"version":3,"file":"doug-williamson-ng-rhombus.mjs","sources":["../../../../projects/ng-rhombus/src/lib/shell/services/wrapper.service.ts","../../../../projects/ng-rhombus/src/lib/shell/services/authentication.service.ts","../../../../projects/ng-rhombus/src/lib/shell/services/theme.service.ts","../../../../projects/ng-rhombus/src/lib/shell/components/header/header.component.ts","../../../../projects/ng-rhombus/src/lib/shell/components/header/header.component.html","../../../../projects/ng-rhombus/src/lib/shell/components/nav-list/nav-list.component.ts","../../../../projects/ng-rhombus/src/lib/shell/components/nav-list/nav-list.component.html","../../../../projects/ng-rhombus/src/lib/shell/components/wrapper/wrapper.component.ts","../../../../projects/ng-rhombus/src/lib/shell/components/wrapper/wrapper.component.html","../../../../projects/ng-rhombus/src/lib/shell/components/loading-container/loading-container.component.ts","../../../../projects/ng-rhombus/src/lib/shell/components/loading-container/loading-container.component.html","../../../../projects/ng-rhombus/src/lib/shell/components/login/login.component.ts","../../../../projects/ng-rhombus/src/lib/shell/components/login/login.component.html","../../../../projects/ng-rhombus/src/lib/shell/public-api.ts","../../../../projects/ng-rhombus/src/lib/blog/components/list/list.component.ts","../../../../projects/ng-rhombus/src/lib/blog/components/list/list.component.html","../../../../projects/ng-rhombus/src/lib/blog/components/latest/latest.component.ts","../../../../projects/ng-rhombus/src/lib/blog/components/latest/latest.component.html","../../../../projects/ng-rhombus/src/lib/blog/helpers/blog-post-helper.ts","../../../../projects/ng-rhombus/src/lib/blog/services/blog.service.ts","../../../../projects/ng-rhombus/src/lib/blog/services/thumbnail.service.ts","../../../../projects/ng-rhombus/src/lib/blog/components/table/table.component.ts","../../../../projects/ng-rhombus/src/lib/blog/components/table/table.component.html","../../../../projects/ng-rhombus/src/lib/blog/components/thumbnail/thumbnail.component.ts","../../../../projects/ng-rhombus/src/lib/blog/components/thumbnail/thumbnail.component.html","../../../../projects/ng-rhombus/src/lib/blog/components/dialogs/delete-thumbnail/delete-thumbnail.component.ts","../../../../projects/ng-rhombus/src/lib/blog/components/dialogs/delete-thumbnail/delete-thumbnail.component.html","../../../../projects/ng-rhombus/src/lib/blog/components/thumbnail-control/thumbnail-control.component.ts","../../../../projects/ng-rhombus/src/lib/blog/components/thumbnail-control/thumbnail-control.component.html","../../../../projects/ng-rhombus/src/lib/blog/models/blog.ts","../../../../projects/ng-rhombus/src/lib/blog/dialogs/confirmation/confirmation.component.ts","../../../../projects/ng-rhombus/src/lib/blog/dialogs/confirmation/confirmation.component.html","../../../../projects/ng-rhombus/src/lib/blog/components/form/form.component.ts","../../../../projects/ng-rhombus/src/lib/blog/components/form/form.component.html","../../../../projects/ng-rhombus/src/lib/blog/components/post/post.component.ts","../../../../projects/ng-rhombus/src/lib/blog/components/post/post.component.html","../../../../projects/ng-rhombus/src/lib/blog/components/dialogs/delete-post/delete-post.component.ts","../../../../projects/ng-rhombus/src/lib/blog/components/dialogs/delete-post/delete-post.component.html","../../../../projects/ng-rhombus/src/lib/blog/public-api.ts","../../../../projects/ng-rhombus/src/lib/home/models/home.ts","../../../../projects/ng-rhombus/src/lib/home/admin/admin.ts","../../../../projects/ng-rhombus/src/lib/home/admin/admin.html","../../../../projects/ng-rhombus/src/lib/socials/socials.service.ts","../../../../projects/ng-rhombus/src/lib/socials/list/list.component.ts","../../../../projects/ng-rhombus/src/lib/socials/list/list.component.html","../../../../projects/ng-rhombus/src/lib/socials/table/table.component.ts","../../../../projects/ng-rhombus/src/lib/socials/table/table.component.html","../../../../projects/ng-rhombus/src/public-api.ts","../../../../projects/ng-rhombus/src/doug-williamson-ng-rhombus.ts"],"sourcesContent":["\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { ActivatedRoute, NavigationEnd, Router } from '@angular/router';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { BehaviorSubject, filter } from 'rxjs';\r\n\r\nexport interface Breadcrumb {\r\n label: string;\r\n url: string;\r\n}\r\n\r\nexport enum ThemeEnum {\r\n LIGHT = 'light',\r\n DARK = 'dark'\r\n}\r\n\r\nexport type Theme = 'light' | 'dark';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class WrapperService {\r\n\r\n snackbar = inject(MatSnackBar);\r\n\r\n private _darkModeSubject = new BehaviorSubject<boolean>(false);\r\n darkMode = toSignal(this._darkModeSubject.asObservable(), { initialValue: false })\r\n\r\n private _breadcrumbs = new BehaviorSubject<Breadcrumb[]>([]);\r\n breadcrumbs = toSignal(this._breadcrumbs.asObservable(), { initialValue: undefined });\r\n\r\n private _triggerCreateNew = new BehaviorSubject<void>(undefined);\r\n triggerCreateNew = this._triggerCreateNew.asObservable();\r\n // triggerCreateNew = toSignal(this._triggerCreateNew.asObservable());\r\n\r\n constructor(private router: Router, private activatedRoute: ActivatedRoute) {\r\n this.router.events.pipe(filter(event => event instanceof NavigationEnd)).subscribe(event => {\r\n //set breadcrumbs\r\n this._breadcrumbs.next(this.getBreadcrumbs(this.activatedRoute.root));\r\n })\r\n }\r\n\r\n clickedCreateNew() {\r\n this._triggerCreateNew.next(undefined);\r\n }\r\n\r\n private getBreadcrumbs(route: ActivatedRoute, url: string = \"\", breadcrumbs: Breadcrumb[] = []): Breadcrumb[] {\r\n const ROUTE_DATA_BREADCRUMB = 'breadcrumb';\r\n\r\n //get the child routes\r\n let children: ActivatedRoute[] = route.children;\r\n\r\n if (children.length === 0) {\r\n // return breadcrumbs;\r\n }\r\n\r\n //iterate over each children\r\n for (let child of children) {\r\n //verify primary route\r\n // if (child.outlet !== PRIMARY_OUTLET || child.snapshot.url.length==0) {\r\n // continue;\r\n // }\r\n\r\n //verify the custom data property \"breadcrumb\" is specified on the route\r\n // if (!child.snapshot.data.hasOwnProperty(ROUTE_DATA_BREADCRUMB)) {\r\n // return this.getBreadcrumbs(child, url, breadcrumbs);\r\n // }\r\n\r\n //get the route's URL segment\r\n let routeURL: string = child.snapshot.url.map(segment => segment.path).join(\"/\");\r\n\r\n //append route URL to URL\r\n url += `${routeURL}`;\r\n\r\n //add breadcrumb\r\n let breadcrumb: Breadcrumb = {\r\n label: child.snapshot.data[ROUTE_DATA_BREADCRUMB],\r\n url: url\r\n };\r\n breadcrumbs.push(breadcrumb);\r\n\r\n //recursive\r\n return this.getBreadcrumbs(child, url, breadcrumbs);\r\n }\r\n return breadcrumbs;\r\n }\r\n\r\n openSnackbar(message: string) {\r\n this.snackbar.open(message, undefined, { duration: 3000 });\r\n }\r\n}","import { inject, Injectable } from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { Auth, authState, signInWithEmailAndPassword } from '@angular/fire/auth';\r\nimport { from, Observable, of } from 'rxjs';\r\nimport { switchMap } from 'rxjs/operators';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class NgRhombusAuthenticationService {\r\n\tfirebaseAuth = inject(Auth);\r\n\tcurrentUser$ = authState(this.firebaseAuth);\r\n\r\n\tlogin(email: string, password: string): Promise<void> {\r\n\t\treturn signInWithEmailAndPassword(this.firebaseAuth, email, password).then(() => { });\r\n\t}\r\n\r\n\tlogout(): Promise<any> { return this.firebaseAuth.signOut(); }\r\n\r\n\tprivate currentUserProfile$ = this.currentUser$.pipe(\r\n\t\tswitchMap((user) => {\r\n\t\t\treturn user?.uid ? of(user) : of(null);\r\n\t\t})\r\n\t);\r\n\r\n\tcurrentUserProfile = toSignal(this.currentUserProfile$);\r\n}","import { isPlatformBrowser } from '@angular/common';\r\nimport { Injectable, PLATFORM_ID, computed, effect, inject, signal } from '@angular/core';\r\n\r\nexport interface AppTheme {\r\n name: string;\r\n icon: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ThemeService {\r\n private platformId = inject(PLATFORM_ID);\r\n private appTheme = signal<string>('system');\r\n private readonly PREFERRED_THEME_COOKIE = 'preferred-theme';\r\n\r\n private themes: AppTheme[] = [\r\n { name: 'light', icon: 'light_mode' },\r\n { name: 'dark', icon: 'dark_mode' },\r\n { name: 'system', icon: 'desktop_windows' },\r\n ];\r\n\r\n selectedTheme = computed(() =>\r\n this.themes.find((t) => t.name === this.appTheme())\r\n );\r\n\r\n getThemes() {\r\n return this.themes;\r\n }\r\n\r\n setTheme(theme: string) {\r\n if (isPlatformBrowser(this.platformId)) {\r\n this.appTheme.set(theme);\r\n\r\n const colorScheme = theme === 'system' ? 'light dark' : theme;\r\n document.body.style.setProperty('color-scheme', colorScheme);\r\n\r\n this.setThemeInLocalStorage(theme);\r\n }\r\n }\r\n\r\n setThemeInLocalStorage(theme: string) {\r\n if (isPlatformBrowser(this.platformId)) {\r\n localStorage.setItem(this.PREFERRED_THEME_COOKIE, theme);\r\n }\r\n }\r\n\r\n getThemeFromLocalStorage() {\r\n if (!isPlatformBrowser(this.platformId)) return 'system';\r\n return localStorage.getItem(this.PREFERRED_THEME_COOKIE) ?? 'system';\r\n }\r\n\r\n constructor() {\r\n this.setTheme(this.getThemeFromLocalStorage());\r\n }\r\n}\r\n","import { Component, EventEmitter, inject, input, Input, output, Output } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatToolbar, MatToolbarModule } from '@angular/material/toolbar';\r\nimport { WrapperService } from '../../services/wrapper.service';\r\nimport { Router } from '@angular/router';\r\nimport { NgRhombusAuthenticationService } from '../../services/authentication.service';\r\nimport { ThemeService } from '../../services/theme.service';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\n\r\n@Component({\r\n selector: 'ng-rhombus-header',\r\n imports: [MatButtonModule, MatIconModule, MatMenuModule, MatToolbar, TitleCasePipe, MatProgressBarModule],\r\n templateUrl: './header.component.html',\r\n styleUrl: './header.component.scss'\r\n})\r\nexport class NgRhombusHeaderComponent {\r\n isLoading = input<boolean>(false);\r\n wrapperService = inject(WrapperService);\r\n authService = inject(NgRhombusAuthenticationService);\r\n protected themeService = inject(ThemeService);\r\n router = inject(Router);\r\n\r\n logOut = output<void>();\r\n\r\n darkMode = this.wrapperService.darkMode;\r\n user = this.authService.currentUserProfile;\r\n\r\n @Input()\r\n isMobile: boolean = false;\r\n\r\n @Input()\r\n title!: string;\r\n\r\n @Output() menuToggled = new EventEmitter;\r\n\r\n toggleSidebar() {\r\n this.menuToggled.emit();\r\n }\r\n\r\n logout() {\r\n this.logOut.emit();\r\n }\r\n}\r\n","<mat-toolbar class=\"header-theme relative\">\r\n @if (isMobile) {\r\n <button mat-icon-button (click)=\"toggleSidebar()\" color=\"red\">\r\n <mat-icon>menu</mat-icon>\r\n </button>\r\n }\r\n\r\n <span class=\"flex-1\">{{ title }}</span>\r\n\r\n <button class=\"mr-2\" mat-icon-button [mat-menu-trigger-for]=\"themeMenu\">\r\n <mat-icon>{{ themeService.selectedTheme()?.icon }}</mat-icon>\r\n </button>\r\n <mat-menu #themeMenu=\"matMenu\">\r\n @for (theme of themeService.getThemes(); track theme.name) {\r\n <button [class.selected-theme]=\"themeService.selectedTheme()?.name === theme.name\" mat-menu-item\r\n (click)=\"themeService.setTheme(theme.name)\">\r\n <mat-icon>{{ theme.icon }}</mat-icon>\r\n <span>{{ theme.name | titlecase }}</span>\r\n </button>\r\n }\r\n </mat-menu>\r\n\r\n @if (user()) {\r\n <button mat-raised-button color=\"primary\" class=\"logout-button\" (click)=\"logout()\">\r\n Logout\r\n </button>\r\n }\r\n</mat-toolbar>\r\n@if (isLoading()) {\r\n<mat-progress-bar class=\"!absolute top-[64px] z-10\" mode=\"indeterminate\" />\r\n}","import { Component, Input, OnInit } from '@angular/core';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { RouterModule } from '@angular/router';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport { NgRhombusNavItem } from './nav-list';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\n\r\n@Component({\r\n selector: 'ng-rhombus-nav-list',\r\n imports: [RouterModule, MatListModule, MatIconModule, MatTabsModule],\r\n templateUrl: './nav-list.component.html',\r\n styleUrl: './nav-list.component.scss'\r\n})\r\nexport class NgRhombusNavListComponent implements OnInit {\r\n activeLink?: string;\r\n\r\n @Input()\r\n routeCollection: NgRhombusNavItem[] | undefined;\r\n\r\n ngOnInit() {\r\n\r\n }\r\n}\r\n","<mat-nav-list>\r\n @for (link of routeCollection; track link) {\r\n <a mat-list-item [routerLink]=\"link.route\" routerLinkActive=\"selected-menu-item\">\r\n <span>{{ link.label }}</span>\r\n </a>\r\n }\r\n</mat-nav-list>","import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\r\nimport { Component, EventEmitter, Input, OnDestroy, OnInit, Output, output, computed, input } from '@angular/core';\r\nimport { MatSidenavModule } from '@angular/material/sidenav';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { NgRhombusHeaderComponent } from '../header/header.component';\r\nimport { NgRhombusNavListComponent } from '../nav-list/nav-list.component';\r\nimport { RouterModule } from '@angular/router';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { NgRhombusNavItem } from '../nav-list/nav-list';\r\n\r\nimport { WrapperService } from '../../services/wrapper.service';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\n\r\n@Component({\r\n selector: 'ng-rhombus-wrapper',\r\n imports: [MatSidenavModule, MatButtonModule, MatIconModule, MatListModule, MatProgressBarModule, MatToolbarModule, RouterModule, NgRhombusHeaderComponent, NgRhombusNavListComponent],\r\n providers: [WrapperService],\r\n templateUrl: './wrapper.component.html',\r\n styleUrl: './wrapper.component.scss'\r\n})\r\nexport class NgRhombusWrapperComponent implements OnInit, OnDestroy {\r\n @Output() clickAddNewEvent = new EventEmitter<void>();\r\n destroyed = new Subject<void>();\r\n isMobile: boolean = false;\r\n currentScreenSize?: string;\r\n\r\n isLoading = input<boolean>(false);\r\n logout = output<void>();\r\n\r\n breadcrumbs = computed(() => { return this.wrapperService.breadcrumbs() });\r\n\r\n fillerContent = Array.from(\r\n { length: 50 },\r\n () =>\r\n `Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut\r\n labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco\r\n laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in\r\n voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat\r\n cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.`,\r\n );\r\n\r\n @Input()\r\n title!: string;\r\n\r\n @Input()\r\n routeCollection!: NgRhombusNavItem[] | undefined;\r\n\r\n constructor(private breakpointObserver: BreakpointObserver, private wrapperService: WrapperService) {\r\n this.breakpointObserver\r\n .observe([Breakpoints.XSmall])\r\n .pipe(takeUntil(this.destroyed))\r\n .subscribe(result => {\r\n this.isMobile = result.matches;\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroyed.next();\r\n this.destroyed.complete();\r\n }\r\n\r\n clickedCreateNew() {\r\n this.clickAddNewEvent.emit();\r\n }\r\n logOut() {\r\n this.logout.emit();\r\n }\r\n}\r\n","<ng-rhombus-header class=\"header-wrapper\" [isMobile]=\"isMobile\" [title]=\"title\" (menuToggled)=\"sidenav.toggle()\"\r\n (logOut)=\"logOut()\" [isLoading]=\"isLoading()\"></ng-rhombus-header>\r\n<mat-sidenav-container>\r\n <mat-sidenav #sidenav [opened]=\"!isMobile\" [mode]=\"isMobile ? 'over' : 'side'\">\r\n <div class=\"nav-list-wrapper\">\r\n <ng-rhombus-nav-list [routeCollection]=\"routeCollection\"></ng-rhombus-nav-list>\r\n </div>\r\n </mat-sidenav>\r\n <mat-sidenav-content class=\"main-sidenav-content\">\r\n <!-- <mat-toolbar class=\"header-theme\">\r\n <span class=\"wrapper-flex\">\r\n <ng-container *ngFor=\"let breadcrumb of breadcrumbs()\">\r\n {{ breadcrumb.label }}\r\n </ng-container>\r\n </span>\r\n <button mat-icon-button (click)=\"clickedCreateNew()\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n </mat-toolbar> -->\r\n <router-outlet #o=\"outlet\"></router-outlet>\r\n </mat-sidenav-content>\r\n</mat-sidenav-container>","import { Component, input } from '@angular/core';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\n\r\n@Component({\r\n selector: 'ng-rhombus-loading-container',\r\n imports: [MatProgressSpinnerModule],\r\n templateUrl: './loading-container.component.html',\r\n styleUrl: './loading-container.component.scss'\r\n})\r\nexport class NgRhombusLoadingContainerComponent {\r\n loading = input<boolean>(false);\r\n size = input<number>(40);\r\n}\r\n","@if (loading()) {\r\n<mat-progress-spinner class=\"loading-spinner\" [diameter]=\"size()\" mode=\"indeterminate\" />\r\n} @else {\r\n<ng-content />\r\n}","import { Component, inject, input, OnInit, output, signal } from '@angular/core';\r\nimport { FormGroup, FormBuilder, Validators, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { Router } from '@angular/router';\r\nimport { NgRhombusAuthenticationService } from '../../services/authentication.service';\r\nimport { NgRhombusLoadingContainerComponent } from '../loading-container/loading-container.component';\r\nimport { MatIconModule } from '@angular/material/icon';\r\n\r\nexport interface ILoginCredentials {\r\n\temail: string;\r\n\tpassword: string;\r\n}\r\n\r\n@Component({\r\n\tselector: 'ng-rhombus-login',\r\n\timports: [ReactiveFormsModule, MatButtonModule, MatCardModule, MatFormFieldModule, MatIconModule, MatInputModule, NgRhombusLoadingContainerComponent],\r\n\ttemplateUrl: './login.component.html',\r\n\tstyleUrl: './login.component.scss'\r\n})\r\nexport class NgRhombusLoginComponent implements OnInit {\r\n\tpublic loginForm!: FormGroup;\r\n\tauthorizing: boolean = false;\r\n\r\n\ttitle = input<string>('');\r\n\tloading = input<boolean>(false);\r\n\tonSubmit = output<ILoginCredentials>();\r\n\r\n\tpublic hidePassword = signal(true);\r\n\r\n\tauthService = inject(NgRhombusAuthenticationService);\r\n\r\n\tconstructor(private fb: FormBuilder, private router: Router) { }\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.loginForm = this.fb.group({\r\n\t\t\temail: ['', [Validators.required, Validators.email]],\r\n\t\t\tpassword: ['', [Validators.required, Validators.minLength(6)]],\r\n\t\t});\r\n\t}\r\n\r\n\tonSubmitForm() {\r\n\t\tconst rawForm: ILoginCredentials = this.loginForm.getRawValue();\r\n\t\tthis.onSubmit.emit(rawForm);\r\n\t}\r\n}\r\n","<div class=\"flex min-h-screen items-center justify-center bg-background\">\r\n <mat-card class=\"w-full max-w-[400px] p-10\">\r\n <mat-card-header>\r\n <mat-card-title-group>\r\n <mat-card-title>{{ title() }}</mat-card-title>\r\n <mat-card-subtitle>Administration</mat-card-subtitle>\r\n </mat-card-title-group>\r\n\r\n </mat-card-header>\r\n <form class=\"flex flex-col\" novalidate [formGroup]=\"loginForm\" (ngSubmit)=\"onSubmitForm()\">\r\n <mat-card-content>\r\n <mat-form-field class=\"w-full flex\">\r\n <mat-label>Email Address</mat-label>\r\n <input matInput placeholder=\"Placeholder\" formControlName=\"email\" aria-label=\"Email Address\" />\r\n <mat-icon matSuffix>email</mat-icon>\r\n <mat-error align=\"start\">Email Address Required</mat-error>\r\n </mat-form-field>\r\n <mat-form-field class=\"w-full flex\">\r\n <mat-label>Password</mat-label>\r\n <input matInput [type]=\"hidePassword() ? 'password' : 'text'\" placeholder=\"Placeholder\"\r\n formControlName=\"password\" aria-label=\"Password\" />\r\n <button mat-icon-button matSuffix (click)=\"hidePassword.set(!hidePassword())\" type=\"button\"\r\n style=\"margin-right: 0.25rem;\">\r\n <mat-icon>{{ hidePassword() ? 'visibility_off' : 'visibility' }}</mat-icon>\r\n </button>\r\n <mat-error align=\"start\">Password Required</mat-error>\r\n </mat-form-field>\r\n </mat-card-content>\r\n <button mat-flat-button class=\"login-button\" type=\"submit\" [disabled]=\"loading() || loginForm.invalid\">\r\n <ng-rhombus-loading-container [loading]=\"loading()\" [size]=\"20\">\r\n Login\r\n </ng-rhombus-loading-container>\r\n </button>\r\n </form>\r\n </mat-card>\r\n</div>","/*\r\n * Public API Surface of @doug-williamson/ng-rhombus/shell\r\n */\r\n\r\nexport * from './components/wrapper/wrapper.component';\r\nexport * from './services/wrapper.service';\r\nexport * from './components/login/login.component';\r\nexport * from './components/nav-list/nav-list';\r\n","import { Component, EventEmitter, input, Output } from '@angular/core';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { IBlog } from '../../models/blog';\r\nimport { DatePipe } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'ng-rhombus-blog-list',\r\n imports: [DatePipe, MatListModule],\r\n templateUrl: './list.component.html',\r\n styleUrl: './list.component.scss'\r\n})\r\nexport class NgRhombusBlogListComponent {\r\n @Output() goToRoute = new EventEmitter<string>();\r\n\r\n dataSource = input<IBlog[]>([]);\r\n\r\n goToBlogPost(id: string) {\r\n this.goToRoute.emit(id);\r\n }\r\n}\r\n","<mat-nav-list>\r\n\t@for (blogPost of dataSource(); track blogPost.id) {\r\n\t\t<mat-list-item (click)=\"goToRoute.emit(blogPost.id)\">\r\n\t\t\t<h3 matListItemTitle>{{ blogPost.title }}</h3>\r\n\t\t\t<p matListItemLine>{{ blogPost.description }}</p>\r\n\t\t\t<p matListItemMeta>{{ blogPost.timestamp.toMillis() | date: 'MMMM d, y' }}</p>\r\n\t\t</mat-list-item>\r\n\t}\r\n</mat-nav-list>","import { Component, input } from '@angular/core';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { RouterLink } from '@angular/router';\r\nimport { IBlog } from '../../models/blog';\r\nimport { DatePipe } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'ng-rhombus-blog-post-latest',\r\n imports: [DatePipe, MatListModule, RouterLink],\r\n templateUrl: './latest.component.html',\r\n styleUrl: './latest.component.scss'\r\n})\r\nexport class NgRhombusBlogPostLatestComponent {\r\n blogPost = input<IBlog>();\r\n}\r\n","<mat-nav-list>\r\n <mat-list-item [routerLink]=\"['/blog', blogPost()?.id]\">\r\n <span matListItemTitle>{{ blogPost()?.title }}</span>\r\n <span matListItemLine>{{ blogPost()?.description }}</span>\r\n <span matListItemLine>{{ blogPost()?.timestamp?.toMillis() | date: 'MMMM d, y' }}</span>\r\n </mat-list-item>\r\n</mat-nav-list>","export class NgRhombusBlogPostHelper {\r\n static createSlug(title: string): string {\r\n const slug = title.toLowerCase().replace(/\\s+/g, '-');\r\n const randomThreeDigitNumber = Math.floor(Math.random() * 1000);\r\n return `${slug}-${randomThreeDigitNumber}`;\r\n }\r\n}","import { Injectable, inject, signal } from '@angular/core';\r\nimport {\r\n CollectionReference,\r\n Firestore,\r\n collection,\r\n deleteDoc,\r\n doc,\r\n getDoc,\r\n getDocs,\r\n limit,\r\n orderBy,\r\n query,\r\n setDoc,\r\n updateDoc\r\n} from '@angular/fire/firestore';\r\nimport { IBlog } from '../models/blog';\r\nimport { NgRhombusBlogPostHelper } from '../helpers/blog-post-helper';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class NgRhombusBlogService {\r\n\r\n private firestore = inject(Firestore);\r\n private blogCollectionRef = collection(this.firestore, 'blog') as CollectionReference<IBlog>;\r\n\r\n blogPosts = signal<IBlog[]>([]);\r\n selectedBlogPost = signal<IBlog | undefined>(undefined);\r\n\r\n async fetchBlogPosts() {\r\n const data = await getDocs(this.blogCollectionRef);\r\n const returnData = [...data.docs.map(d => ({ ...d.data(), id: d.id })) as IBlog[]];\r\n this.blogPosts.set(returnData);\r\n return returnData;\r\n }\r\n\r\n async fetchBlogPost(id: string) {\r\n const blogPostDocumentRef = doc(this.firestore, 'blog', id);\r\n // const docSnap = (await getDoc(blogPostDocumentRef)).data() as IBlog\r\n // this.selectedBlogPost.set(docSnap);\r\n // return docSnap;\r\n const docSnap = await getDoc(blogPostDocumentRef);\r\n if (docSnap.exists()) {\r\n const docData = { ...docSnap.data(), id: id } as IBlog;\r\n this.selectedBlogPost.set(docData);\r\n return docData;\r\n } else {\r\n return;\r\n }\r\n }\r\n\r\n async fetchLatestBlogPost() {\r\n const latestQuery = query(this.blogCollectionRef, orderBy('timestamp', 'desc'), limit(1));\r\n const snapshot = await getDocs(latestQuery);\r\n if (!snapshot.empty) {\r\n const doc = snapshot.docs[0];\r\n const latestPost = { ...doc.data(), id: doc.id } as IBlog;\r\n this.selectedBlogPost.set(latestPost);\r\n return latestPost;\r\n }\r\n return undefined;\r\n }\r\n\r\n async createBlogPost(blogPost: IBlog) {\r\n const blogPostDocumentRef = doc(this.firestore, 'blog', NgRhombusBlogPostHelper.createSlug(blogPost.title));\r\n setDoc(blogPostDocumentRef, {\r\n title: blogPost.title,\r\n description: blogPost.description,\r\n thumbnail: blogPost.thumbnail,\r\n content: blogPost.content,\r\n timestamp: new Date()\r\n });\r\n }\r\n\r\n async updateBlogPost(blogPost: IBlog) {\r\n const blogPostDocumentRef = doc(this.firestore, 'blog', blogPost.id);\r\n updateDoc(blogPostDocumentRef, {\r\n title: blogPost.title,\r\n description: blogPost.description,\r\n thumbnail: blogPost.thumbnail,\r\n content: blogPost.content,\r\n })\r\n }\r\n\r\n\r\n deleteBlogPost(id: string) {\r\n const blogPostDocumentRef = doc(this.firestore, 'blog', id);\r\n return deleteDoc(blogPostDocumentRef);\r\n }\r\n}","import { inject, Injectable } from \"@angular/core\";\r\nimport { ref, Storage, uploadBytesResumable, UploadTask } from \"@angular/fire/storage\";\r\nimport { deleteObject } from \"firebase/storage\";\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class NgRhombusBlogPostThumbnailService {\r\n\tfirebaseStorage = inject(Storage);\r\n\r\n\tuploadImage(imageName: string, image: File): UploadTask {\r\n\t\tconst storageRef = ref(this.firebaseStorage, `thumbnails/${imageName}`);\r\n\t\treturn uploadBytesResumable(storageRef, image);\r\n\t}\r\n\r\n\tdeleteImage(filePath?: string) {\r\n\t\tconst storageDocRef = ref(this.firebaseStorage, filePath);\r\n\r\n\t\treturn deleteObject(storageDocRef).then(() => {\r\n\r\n\t\t}).catch((error) => {\r\n\r\n\t\t});\r\n\t}\r\n}","import { Component, EventEmitter, inject, input, Output } from '@angular/core';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { IBlog } from '../../models/blog';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { NgRhombusBlogService } from '../../services/blog.service';\r\nimport { NgRhombusBlogPostThumbnailService } from '../../services/thumbnail.service';\r\n\r\n@Component({\r\n selector: 'ng-rhombus-blog-table',\r\n imports: [CommonModule, MatButtonModule, MatIconModule, MatTableModule],\r\n templateUrl: './table.component.html',\r\n styleUrl: './table.component.scss'\r\n})\r\nexport class NgRhombusBlogTableComponent {\r\n @Output() editEvent = new EventEmitter<string>();\r\n @Output() deleteEvent = new EventEmitter<IBlog>();\r\n\r\n readonly thumbnailService = inject(NgRhombusBlogPostThumbnailService);\r\n readonly blogService = inject(NgRhombusBlogService);\r\n readonly dialog = inject(MatDialog);\r\n\r\n dataSource = input<IBlog[]>([]);\r\n displayedColumns: string[] = ['timestamp', 'title', 'description', 'edit', 'delete'];\r\n\r\n goToBlogPost(id: string) {\r\n this.editEvent.emit(id);\r\n }\r\n\r\n onDeleteBlogPost(blogPost: IBlog) {\r\n this.deleteEvent.emit(blogPost);\r\n }\r\n\r\n}\r\n","@if (dataSource().length > 0) {\r\n<table mat-table [dataSource]=\"dataSource()\" class=\"w-full h-full\">\r\n\t<!-- Timestamp Column -->\r\n\t<ng-container matColumnDef=\"timestamp\">\r\n\t\t<th mat-header-cell *matHeaderCellDef>Date</th>\r\n\t\t<td mat-cell *matCellDef=\"let element\">{{ element.timestamp.toMillis() | date: 'MMMM d, y' }}</td>\r\n\t</ng-container>\r\n\r\n\t<!-- Title Column -->\r\n\t<ng-container matColumnDef=\"title\">\r\n\t\t<th mat-header-cell *matHeaderCellDef>Title</th>\r\n\t\t<td mat-cell *matCellDef=\"let element\">{{element.title}}</td>\r\n\t</ng-container>\r\n\r\n\t<!-- Description Column -->\r\n\t<ng-container matColumnDef=\"description\">\r\n\t\t<th mat-header-cell *matHeaderCellDef>Description</th>\r\n\t\t<td mat-cell *matCellDef=\"let element\">{{element.description}}</td>\r\n\t</ng-container>\r\n\r\n\t<!-- Edit Column -->\r\n\t<ng-container matColumnDef=\"edit\">\r\n\t\t<th mat-header-cell *matHeaderCellDef aria-label=\"row actions\">&nbsp;</th>\r\n\t\t<td mat-cell *matCellDef=\"let element\">\r\n\t\t\t<button mat-icon-button (click)=\"goToBlogPost(element.id)\">\r\n\t\t\t\t<mat-icon>edit</mat-icon>\r\n\t\t\t</button>\r\n\t\t</td>\r\n\t</ng-container>\r\n\r\n\t<!-- Delete Column -->\r\n\t<ng-container matColumnDef=\"delete\">\r\n\t\t<th mat-header-cell *matHeaderCellDef aria-label=\"row actions\">&nbsp;</th>\r\n\t\t<td mat-cell *matCellDef=\"let element\">\r\n\t\t\t<button mat-icon-button (click)=\"onDeleteBlogPost(element)\">\r\n\t\t\t\t<mat-icon>delete</mat-icon>\r\n\t\t\t</button>\r\n\t\t</td>\r\n\t</ng-container>\r\n\r\n\t<tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\r\n\t<tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\r\n</table>\r\n} @else {\r\n<div class=\"empty-set\">\r\n\t<span>No blog posts created yet.</span>\r\n</div>\r\n\r\n}","import { Component, computed, input, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'ng-rhombus-blog-thumbnail',\r\n imports: [],\r\n templateUrl: './thumbnail.component.html',\r\n styleUrl: './thumbnail.component.scss'\r\n})\r\nexport class NgRhombusBlogThumbnailComponent implements OnInit {\r\n width = input<number>(0);\r\n height = input<number>(0);\r\n imageSource = input<string>();\r\n\r\n placeholder = computed(() => `https://placehold.co/${this.width()}x${this.height()}`);\r\n contentSource = computed(() => { return this.imageSource() !== '' ? this.imageSource() : this.placeholder(); })\r\n\r\n ngOnInit(): void {\r\n if (this.width() === 0 && this.height() === 0) {\r\n\r\n }\r\n }\r\n}\r\n","<div class=\"image-placeholder\" [style.width]=\"width() + 'px'\" [style.height]=\"height() + 'px'\">\r\n <img [src]=\"contentSource()\" [width]=\"width()\" [height]=\"height()\" />\r\n</div>","import { Component } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'ng-rhombus-Blog-delete-thumbnail',\r\n imports: [MatButtonModule, MatDialogModule],\r\n templateUrl: './delete-thumbnail.component.html',\r\n styleUrl: './delete-thumbnail.component.scss'\r\n})\r\nexport class NgRhombusBlogDeleteThumbnailComponent {\r\n\r\n}\r\n","<h2 mat-dialog-title>Blog Post Thumbnail - Delete</h2>\r\n<mat-dialog-content>\r\n <p>Would you like to delete this thumbnail?</p>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <button mat-button [mat-dialog-close]=\"false\" cdkFocusInitial>Cancel</button>\r\n <button mat-button [mat-dialog-close]=\"true\">Confirm</button>\r\n</mat-dialog-actions>","\r\nimport { Component, computed, ElementRef, inject, input, output, signal, ViewChild } from '@angular/core';\r\nimport { MatButton, MatButtonModule } from '@angular/material/button';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { NgRhombusBlogPostThumbnailService } from '../../services/thumbnail.service';\r\nimport { getDownloadURL } from '@angular/fire/storage';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { NgRhombusBlogThumbnailComponent } from \"../thumbnail/thumbnail.component\";\r\nimport { NgRhombusBlogDeleteThumbnailComponent } from '../dialogs/delete-thumbnail/delete-thumbnail.component';\r\n\r\n@Component({\r\n selector: 'ng-rhombus-thumbnail-control',\r\n imports: [MatButtonModule, MatIconModule, NgRhombusBlogThumbnailComponent],\r\n templateUrl: './thumbnail-control.component.html',\r\n styleUrl: './thumbnail-control.component.scss'\r\n})\r\nexport class ThumbnailControlComponent {\r\n width = input<number>(0);\r\n height = input<number>(0);\r\n thumbnailSrc = input<string>('');\r\n disabled = input<boolean>(false);\r\n\r\n @ViewChild('thumbnailInput') thumbnailInput!: ElementRef;\r\n\r\n thumbnailService = inject(NgRhombusBlogPostThumbnailService);\r\n dialog = inject(MatDialog);\r\n\r\n onFileUploaded = output<string>();\r\n onFileDeleted = output<void>();\r\n\r\n uploadedFile = signal<string | undefined>(undefined);\r\n placeholder = computed(() => `https://placehold.co/${this.width()}x${this.height()}`);\r\n imageSource = computed(() => { return this.uploadedFile() ?? this.placeholder(); })\r\n\r\n onThumbnailSelected(input: HTMLInputElement) {\r\n if (!input.files || input.files.length <= 0) {\r\n return;\r\n }\r\n const file: File = input.files[0];\r\n\r\n this.thumbnailService.uploadImage(file.name, file).then((snapshot) => {\r\n getDownloadURL(snapshot.ref).then((downloadUrl) => {\r\n this.uploadedFile.set(downloadUrl);\r\n this.onFileUploaded.emit(downloadUrl);\r\n })\r\n })\r\n }\r\n\r\n onThumbnailDeleted() {\r\n const dialogRef = this.dialog.open(NgRhombusBlogDeleteThumbnailComponent);\r\n\r\n dialogRef.afterClosed().subscribe(result => {\r\n if (result) {\r\n this.thumbnailService.deleteImage(this.uploadedFile()).then(() => {\r\n this.uploadedFile.set(undefined);\r\n this.thumbnailInput.nativeElement.value = '';\r\n this.onFileDeleted.emit();\r\n });\r\n }\r\n });\r\n }\r\n}\r\n","<div class=\"thumbnail-control-wrapper\">\r\n <input #thumbnailInput hidden type=\"file\" (change)=\"onThumbnailSelected(thumbnailInput)\" />\r\n <button mat-icon-button [disabled]=\"uploadedFile() || disabled()\" (click)=\"thumbnailInput.click()\" type=\"button\">\r\n <mat-icon>upload_file</mat-icon>\r\n </button>\r\n <button class=\"delete-button\" mat-icon-button [disabled]=\"!uploadedFile()\" (click)=\"onThumbnailDeleted()\"\r\n type=\"button\">\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n <div class=\"flex\"></div>\r\n <!-- <div class=\"image-placeholder\" [style.width]=\"width() + 'px'\" [style.height]=\"height() + 'px'\">\r\n <img [src]=\"imageSource()\" [width]=\"width()\" [height]=\"height()\" />\r\n </div> -->\r\n <ng-rhombus-blog-thumbnail [imageSource]=\"thumbnailSrc()\" [width]=\"width()\" [height]=\"height()\"\r\n [imageSource]=\"imageSource()\"></ng-rhombus-blog-thumbnail>\r\n</div>","import { Timestamp } from \"@angular/fire/firestore\";\r\n\r\nexport class IBlog {\r\n\tid!: string;\r\n\ttitle!: string;\r\n\tdescription!: string;\r\n\tthumbnail!: string;\r\n\tcontent!: string;\r\n\ttimestamp!: Timestamp;\r\n}","import { Component, inject } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'ng-rhombus-blog-confirmation',\r\n imports: [MatButtonModule, MatDialogModule],\r\n templateUrl: './confirmation.component.html',\r\n styleUrl: './confirmation.component.scss'\r\n})\r\nexport class NgRhombusBlogConfirmationComponent {\r\n\r\n data = inject(MAT_DIALOG_DATA);\r\n}\r\n","<h2 mat-dialog-title>{{ data.header }}</h2>\r\n<mat-dialog-content>\r\n <p>{{ data.query }}</p>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <button mat-button [mat-dialog-close]=\"false\" cdkFocusInitial>Cancel</button>\r\n <button mat-button [mat-dialog-close]=\"true\">Confirm</button>\r\n</mat-dialog-actions>","import { Component, effect, ElementRef, inject, input, output, signal, ViewChild } from '@angular/core';\r\nimport { FormGroup, FormBuilder, Validators, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { ThumbnailControlComponent } from \"../thumbnail-control/thumbnail-control.component\";\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner'\r\n\r\nimport { CdkTextareaAutosize, TextFieldModule } from '@angular/cdk/text-field';\r\nimport { MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { IBlog } from '../../models/blog';\r\nimport { NgRhombusBlogPostThumbnailService } from '../../public-api';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { NgRhombusBlogConfirmationComponent } from '../../dialogs/confirmation/confirmation.component';\r\nimport { MarkdownComponent } from 'ngx-markdown';\r\n\r\n@Component({\r\n\tselector: 'ng-rhombus-blog-form',\r\n\timports: [MatListModule, MatDividerModule, MatButtonModule, MatCardModule, MatFormFieldModule, MatInputModule, MatProgressSpinnerModule, MatSidenavModule, ReactiveFormsModule, TextFieldModule, ThumbnailControlComponent, MatToolbarModule, MatIconModule, MarkdownComponent],\r\n\ttemplateUrl: './form.component.html',\r\n\tstyleUrl: './form.component.scss'\r\n})\r\nexport class NgRhombusBlogAddEditComponent {\r\n\tblogPost = input<IBlog | undefined>(undefined);\r\n\tcancelEvent = output<void>();\r\n\tsubmitEvent = output<IBlog>();\r\n\r\n\tcontentData = signal<string>('');\r\n\tblogPostForm!: FormGroup;\r\n\r\n\tdialog = inject(MatDialog);\r\n\tthumbnailService = inject(NgRhombusBlogPostThumbnailService);\r\n\tformBuilder = inject(FormBuilder);\r\n\r\n\t@ViewChild('autosize') autosize?: CdkTextareaAutosize;\r\n\t@ViewChild('blogPost') blogPostPreview!: ElementRef;\r\n\r\n\tmarkdown = `## Markdown __rulez__!\r\n\t---\r\n\r\n\t### Syntax highlight\r\n\t\\`\\`\\`typescript\r\n\tconst language = 'typescript';\r\n\t\\`\\`\\`\r\n\r\n\t### Lists\r\n\t1. Ordered list\r\n\t2. Another bullet point\r\n\t- Unordered list\r\n\t- Another unordered bullet\r\n\r\n\t### Blockquote\r\n\t> Blockquote to the max`;\r\n\r\n\tconstructor() {\r\n\t\teffect(() => {\r\n\t\t\tif (this.blogPost()) {\r\n\t\t\t\tthis.blogPostForm.patchValue({\r\n\t\t\t\t\ttitle: this.blogPost()?.title,\r\n\t\t\t\t\tdescription: this.blogPost()?.description,\r\n\t\t\t\t\tthumbnail: this.blogPost()?.thumbnail,\r\n\t\t\t\t\tcontent: this.blogPost()?.content,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tthis.onContentChange();\r\n\t\t})\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.blogPostForm = this.formBuilder.group({\r\n\t\t\ttitle: [this.blogPost()?.title, Validators.required],\r\n\t\t\tdescription: [this.blogPost()?.description, Validators.required],\r\n\t\t\tthumbnail: [this.blogPost()?.thumbnail, Validators.required],\r\n\t\t\tcontent: [this.blogPost()?.content, Validators.required]\r\n\t\t});\r\n\t}\r\n\r\n\tonContentChange() {\r\n\t\tthis.contentData.set(this.blogPostForm.getRawValue().content);\r\n\t}\r\n\r\n\tget thumbnailSource() {\r\n\t\treturn this.blogPostForm.getRawValue().thumbnail;\r\n\t}\r\n\r\n\tonFileUploaded(downloadUrl: string) {\r\n\t\tthis.blogPostForm.patchValue({\r\n\t\t\tthumbnail: downloadUrl\r\n\t\t});\r\n\t\tthis.blogPostForm.markAsDirty();\r\n\t}\r\n\r\n\tonFileDeleted() {\r\n\t\tthis.blogPostForm.patchValue({\r\n\t\t\tthumbnail: ''\r\n\t\t})\r\n\t}\r\n\r\n\tonCancelClick() {\r\n\t\tif (this.blogPost()) {\r\n\t\t\t// EDIT form\r\n\t\t\tif (this.blogPostForm.dirty) {\r\n\t\t\t\tconst dialogRef = this.dialog.open(NgRhombusBlogConfirmationComponent, {\r\n\t\t\t\t\tdata: {\r\n\t\t\t\t\t\theader: 'Cancel Revision',\r\n\t\t\t\t\t\tquery: 'Are you sure? You will lose your revision(s).'\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tdialogRef.afterClosed().subscribe(result => {\r\n\t\t\t\t\tif (result) {\r\n\t\t\t\t\t\tthis.cancelEvent.emit();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\tthis.cancelEvent.emit();\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t// CREATE form\r\n\t\t\tif (this.blogPostForm.dirty) {\r\n\t\t\t\tconst dialogRef = this.dialog.open(NgRhombusBlogConfirmationComponent, {\r\n\t\t\t\t\tdata: {\r\n\t\t\t\t\t\theader: 'Cancel Create',\r\n\t\t\t\t\t\tquery: 'Are you sure? You will lose your progress.'\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tdialogRef.afterClosed().subscribe(result => {\r\n\t\t\t\t\tif (result) {\r\n\t\t\t\t\t\tif (this.blogPostForm.getRawValue().thumbnail) {\r\n\t\t\t\t\t\t\tthis.thumbnailService.deleteImage(this.blogPostForm.getRawValue().thumbnail).then(() => {\r\n\t\t\t\t\t\t\t\tthis.onFileDeleted();\r\n\t\t\t\t\t\t\t\tthis.cancelEvent.emit();\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthis.cancelEvent.emit();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\tthis.cancelEvent.emit();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tonSubmit() {\r\n\t\tif (this.blogPostForm.invalid) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst rawData: IBlog = this.blogPostForm.getRawValue();\r\n\t\tlet submittedBlogPost = new IBlog();\r\n\t\tif (this.blogPost()) {\r\n\t\t\tsubmittedBlogPost.id = this.blogPost()!.id;\r\n\t\t}\r\n\r\n\t\tsubmittedBlogPost.title = rawData.title;\r\n\t\tsubmittedBlogPost.description = rawData.description;\r\n\t\tsubmittedBlogPost.thumbnail = rawData.thumbnail;\r\n\t\tsubmittedBlogPost.content = rawData.content;\r\n\r\n\t\tthis.submitEvent.emit(submittedBlogPost);\r\n\t}\r\n}\r\n","<div class=\"h-full flex flex-row\">\r\n\t<div class=\"flex flex-col w-1/2 p-4\">\r\n\t\t<form novalidate class=\"h-full flex flex-col\" [formGroup]=\"blogPostForm\">\r\n\t\t\t<mat-form-field>\r\n\t\t\t\t<mat-label>Title</mat-label>\r\n\t\t\t\t<input matInput placeholder=\"Placeholder\" formControlName=\"title\">\r\n\t\t\t</mat-form-field>\r\n\t\t\t<mat-form-field>\r\n\t\t\t\t<mat-label>Description</mat-label>\r\n\t\t\t\t<input matInput placeholder=\"Placeholder\" formControlName=\"description\">\r\n\t\t\t</mat-form-field>\r\n\t\t\t<ng-rhombus-thumbnail-control [thumbnailSrc]=\"thumbnailSource\" [width]=\"200\" [height]=\"112\"\r\n\t\t\t\t[disabled]=\"blogPost() !== undefined\" (onFileUploaded)=\"onFileUploaded($event)\"\r\n\t\t\t\t(onFileDeleted)=\"onFileDeleted()\"></ng-rhombus-thumbnail-control>\r\n\t\t\t<mat-form-field class=\"h-full\">\r\n\t\t\t\t<mat-label>Content</mat-label>\r\n\t\t\t\t<textarea matInput required cdkTextareaAutosize #autosize=\"cdkTextareaAutosize\" cdkAutosizeMinRows=\"1\"\r\n\t\t\t\t\tcdkAutosizeMaxRows=\"20\" formControlName=\"content\" (keyup)=\"onContentChange()\"></textarea>\r\n\t\t\t</mat-form-field>\r\n\t\t\t<div class=\"flex\">\r\n\t\t\t\t<button mat-raised-button class=\"\" (click)=\"onCancelClick()\" type=\"button\">Cancel</button>\r\n\t\t\t\t<div class=\"flex-1\"></div>\r\n\t\t\t\t<button mat-flat-button [disabled]=\"blogPostForm.invalid\" type=\"button\"\r\n\t\t\t\t\t(click)=\"onSubmit()\">Submit</button>\r\n\t\t\t</div>\r\n\t\t</form>\r\n\t</div>\r\n\r\n\t<div class=\"flex flex-col w-1/2 p-4 overflow-y-auto\">\r\n\t\t<mat-card>\r\n\t\t\t<mat-card-header>\r\n\t\t\t\t<mat-card-title>{{ blogPostForm.getRawValue().title }}</mat-card-title>\r\n\t\t\t\t<mat-card-subtitle>{{ blogPostForm.getRawValue().description }}</mat-card-subtitle>\r\n\t\t\t</mat-card-header>\r\n\t\t\t<img [src]=\"blogPostForm.getRawValue().thumbnail\" />\r\n\t\t\t<mat-card-content>\r\n\t\t\t\t<markdown class=\"prose\" [data]=\"contentData()\" />\r\n\t\t\t</mat-card-content>\r\n\t\t</mat-card>\r\n\t</div>\r\n</div>","import { Component, input } from '@angular/core';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { IBlog } from '../../models/blog';\r\nimport { MarkdownComponent } from 'ngx-markdown';\r\n\r\n@Component({\r\n selector: 'ng-rhombus-blog-post',\r\n imports: [MarkdownComponent, MatCardModule],\r\n templateUrl: './post.component.html',\r\n styleUrl: './post.component.scss'\r\n})\r\nexport class NgRhombusBlogPostComponent {\r\n\tdataSource = input<IBlog>();\r\n}\r\n","<<<<<<< HEAD\r\n\r\n<mat-card>\r\n\t<mat-card-header>\r\n\t\t<mat-card-title>{{ dataSource()?.title }}</mat-card-title>\r\n\t\t<mat-card-subtitle>{{ dataSource()?.description }}</mat-card-subtitle>\r\n\t</mat-card-header>\r\n\t<img [src]=\"dataSource()?.thumbnail\" />\r\n\t<mat-card-content>\r\n\t\t<markdown class=\"prose\" [data]=\"dataSource()?.content\" />\r\n\t</mat-card-content>","import { Component } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'ng-rhombus-Blog-delete-post',\r\n imports: [MatButtonModule, MatDialogModule],\r\n templateUrl: './delete-post.component.html',\r\n styleUrl: './delete-post.component.scss'\r\n})\r\nexport class NgRhombusBlogDeletePostComponent {\r\n\r\n}\r\n","<h2 mat-dialog-title>Blog Post - Delete</h2>\r\n<mat-dialog-content>\r\n <p>Would you like to delete this blog post?</p>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <button mat-button [mat-dialog-close]=\"false\" cdkFocusInitial>Cancel</button>\r\n <button mat-button [mat-dialog-close]=\"true\">Confirm</button>\r\n</mat-dialog-actions>","/*\r\n * Public API Surface of @doug-williamson/ng-rhombus/shell\r\n */\r\n\r\nexport * from './components/list/list.component';\r\nexport * from './components/latest/latest.component';\r\nexport * from './components/table/table.component';\r\nexport * from './components/form/form.component';\r\nexport * from './components/post/post.component';\r\nexport * from './components/dialogs/delete-post/delete-post.component';\r\n\r\nexport * from './services/blog.service';\r\nexport * from './services/thumbnail.service';\r\n\r\nexport * from './models/blog';","\r\nexport class IHome {\r\n id!: string;\r\n title!: string;\r\n description!: string;\r\n}","import { Component, OnInit, effect, inject, input, output } from '@angular/core';\r\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { IHome } from '../models/home';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatButtonModule } from '@angular/material/button';\r\n\r\n@Component({\r\n selector: 'ng-rhombus-home-admin',\r\n imports: [MatButtonModule, MatToolbarModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule],\r\n templateUrl: './admin.html',\r\n styleUrl: './admin.scss'\r\n})\r\nexport class NgRhombusHomeAdminComponent implements OnInit {\r\n formAdminData = input<IHome | undefined>(undefined);\r\n cancelEvent = output<void>();\r\n submitEvent = output<IHome>();\r\n\r\n homeAdminForm!: FormGroup;\r\n private fb = inject(FormBuilder);\r\n\r\n ngOnInit(): void {\r\n // build once\r\n this.homeAdminForm = this.fb.group({\r\n title: ['', Validators.required],\r\n description: ['', Validators.required],\r\n // add other fields here...\r\n });\r\n\r\n // react to input changes (runs when data arrives)\r\n effect(() => {\r\n const data = this.formAdminData();\r\n if (data) {\r\n this.homeAdminForm.patchValue(data, { emitEvent: false });\r\n }\r\n });\r\n }\r\n\r\n onSubmit() {\r\n if (this.homeAdminForm.invalid) {\r\n return;\r\n }\r\n\r\n const rawData: IHome = this.homeAdminForm.getRawValue();\r\n let submittedHomeAdmin = new IHome();\r\n if (this.formAdminData()) {\r\n submittedHomeAdmin.id = this.formAdminData()!.id;\r\n }\r\n\r\n submittedHomeAdmin.title = rawData.title;\r\n submittedHomeAdmin.description = rawData.description;\r\n\r\n this.submitEvent.emit(submittedHomeAdmin);\r\n }\r\n\r\n onCancelClick() {\r\n console.log('cancel');\r\n }\r\n}\r\n","<mat-toolbar class=\"header-theme\">\r\n\t<span>Admin Component</span>\r\n</mat-toolbar>\r\n<div class=\"h-full flex flex-row\">\r\n\t<div class=\"flex flex-col w-1/2 p-4\">\r\n\t\t<form novalidate class=\"h-full flex flex-col\" [formGroup]=\"homeAdminForm\">\r\n\t\t\t<mat-form-field>\r\n\t\t\t\t<mat-label>Title</mat-label>\r\n\t\t\t\t<input matInput placeholder=\"Placeholder\" formControlName=\"title\">\r\n\t\t\t</mat-form-field>\r\n\t\t\t<mat-form-field>\r\n\t\t\t\t<mat-label>Description</mat-label>\r\n\t\t\t\t<input matInput placeholder=\"Placeholder\" formControlName=\"description\">\r\n\t\t\t</mat-form-field>\r\n\r\n\t\t\t<div class=\"flex\">\r\n\t\t\t\t<button mat-raised-button class=\"\" (click)=\"onCancelClick()\" type=\"button\">Cancel</button>\r\n\t\t\t\t<div class=\"flex-1\"></div>\r\n\t\t\t\t<button mat-flat-button [disabled]=\"homeAdminForm.invalid\" type=\"button\"\r\n\t\t\t\t\t(click)=\"onSubmit()\">Submit</button>\r\n\t\t\t</div>\r\n\t\t</form>\r\n\t</div>\r\n</div>","// ...existing code...\r\nimport { Injectable, inject, signal } from '@angular/core';\r\nimport {\r\n Firestore, CollectionReference, DocumentReference,\r\n collection, doc, getDocs, getDoc, addDoc, setDoc, updateDoc, deleteDoc,\r\n query, orderBy, serverTimestamp\r\n} from '@angular/fire/firestore';\r\n\r\nexport enum SocialsSource {\r\n Twitch = 'Twitch',\r\n YouTube = 'YouTube',\r\n Instagram = 'Instagram',\r\n TikTok = 'TikTok',\r\n Bluesky = 'Bluesky'\r\n}\r\n\r\nexport interface ISocial {\r\n id: string;\r\n source: SocialsSource;\r\n url: string;\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class NgRhombusSocialsService {\r\n private firestore = inject(Firestore);\r\n private socialsRef = collection(this.firestore, 'socials') as CollectionReference<ISocial>;\r\n\r\n socials = signal<ISocial[]>([]);\r\n\r\n // List\r\n async fetchAll(): Promise<ISocial[]> {\r\n const q = query(this.socialsRef, orderBy('source', 'asc'));\r\n const snap = await getDocs(q);\r\n const items = snap.docs.map(d => ({ ...(d.data() as ISocial), id: d.id, }));\r\n this.socials.set(items);\r\n return items;\r\n }\r\n\r\n // Read by id\r\n async fetchById(id: string): Promise<ISocial | undefined> {\r\n const ref = doc(this.socialsRef, id) as DocumentReference<ISocial>;\r\n const d = await getDoc(ref);\r\n return d.exists() ? ({ ...(d.data() as ISocial), id: d.id, }) : undefined;\r\n }\r\n\r\n // Create (auto-id)\r\n async create(social: Omit<ISocial, 'id'>): Promise<string> {\r\n const payload = { ...social, updatedAt: serverTimestamp() } as any;\r\n const newDoc = await addDoc(this.socialsRef, payload);\r\n // Optimistic cache update\r\n this.socials.set([...this.socials(), { ...(social as ISocial), id: newDoc.id, }]);\r\n return newDoc.id;\r\n }\r\n\r\n // Update (partial)\r\n async update(id: string, patch: Partial<Omit<ISocial, 'id'>>): Promise<void> {\r\n const ref = doc(this.socialsRef, id) as DocumentReference<ISocial>;\r\n await updateDoc(ref, { ...patch, updatedAt: serverTimestamp() } as any);\r\n this.socials.set(this.socials().map(s => (s.id === id ? { ...s, ...(patch as ISocial) } : s)));\r\n }\r\n\r\n // Delete\r\n async remove(id: string): Promise<void> {\r\n const ref = doc(this.socialsRef, id) as DocumentReference<ISocial>;\r\n await deleteDoc(ref);\r\n this.socials.set(this.socials().filter(s => s.id !== id));\r\n }\r\n}\r\n// ...existing code...","import { Component, input } from '@angular/core';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { ISocial, SocialsSource } from '../socials.service';\r\n\r\n@Component({\r\n selector: 'ng-rhombus-socials-list',\r\n standalone: true,\r\n imports: [MatToolbarModule, MatIconModule],\r\n templateUrl: './list.component.html',\r\n styleUrls: ['./list.component.scss']\r\n})\r\nexport class NgRhombusSocialsListComponent {\r\n socials = input<ISocial[]>([]);\r\n\r\n // Map source to Material icon names (adjust as desired)\r\n iconFor(source?: SocialsSource): string {\r\n switch (source) {\r\n case SocialsSource.Twitch: return 'sports_esports';\r\n case SocialsSource.YouTube: return 'ondemand_video';\r\n case SocialsSource.Instagram: return 'camera_alt';\r\n case SocialsSource.TikTok: return 'music_note';\r\n case SocialsSource.Bluesky: return 'cloud';\r\n default: return 'link';\r\n }\r\n }\r\n\r\n openUrl(url?: string) {\r\n if (!url) return;\r\n window.open(url, '_blank', 'noopener');\r\n }\r\n}","@if ((socials()).length === 0) {\r\n<p>No socials found.</p>\r\n} @else {\r\n<div class=\"toolbar-list\">\r\n @for (s of socials(); track s.id) {\r\n <mat-toolbar class=\"social-toolbar actionable\" color=\"primary\" role=\"button\" tabindex=\"0\" (click)=\"openUrl(s.url)\"\r\n aria-label=\"Open {{ s.source }} link\">\r\n <mat-icon class=\"left\">{{ iconFor(s.source) }}</mat-icon>\r\n <span class=\"center\">{{ s.source }}</span>\r\n @if (s.url) {\r\n <mat-icon class=\"right\">open_in_new</mat-icon>\r\n }\r\n </mat-toolbar>\r\n }\r\n</div>\r\n}","import { Component, input, inject, signal } from '@angular/core';\r\nimport { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { ISocial, NgRhombusSocialsService, SocialsSource } from '../socials.service';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatSelectModule } from '@angular/material/select';\r\n\r\n@Component({\r\n selector: 'ng-rhombus-socials-table',\r\n standalone: true,\r\n imports: [MatTableModule, MatButtonModule, MatSelectModule, MatIconModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule],\r\n templateUrl: './table.component.html',\r\n styleUrls: ['./table.component.scss']\r\n})\r\nexport class NgRhombusSocialsTableComponent {\r\n socials = input<ISocial[]>([]);\r\n displayedColumns = ['id', 'source', 'url', 'actions'];\r\n\r\n // Dropdown options\r\n socialTypeOptions = [\r\n { label: 'Twitch', value: SocialsSource.Twitch },\r\n { label: 'YouTube', value: SocialsSource.YouTube },\r\n { label: 'Instagram', value: SocialsSource.Instagram },\r\n { label: 'TikTok', value: SocialsSource.TikTok },\r\n { label: 'Bluesky', value: SocialsSource.Bluesky }\r\n ];\r\n\r\n private fb = inject(FormBuilder);\r\n private svc = inject(NgRhombusSocialsService);\r\n\r\n // simple inline form state\r\n editingId = signal<string | null>(null);\r\n form = this.fb.group({\r\n source: this.fb.control<SocialsSource | null>(null, { validators: [Validators.required] }),\r\n url: this.fb.control<string>('', { nonNullable: true, validators: [Validators.required] })\r\n });\r\n\r\n startCreate() {\r\n this.editingId.set('');\r\n this.form.reset({ source: null, url: '' });\r\n }\r\n startEdit(row: ISocial) {\r\n this.editingId.set(row.id);\r\n this.form.reset({ source: row.source, url: row.url });\r\n }\r\n cancelEdit() {\r\n this.editingId.set(null);\r\n this.form.reset({ source: null, url: '' });\r\n }\r\n\r\n async save() {\r\n const id = this.editingId();\r\n const { source, url } = this.form.getRawValue();\r\n if (!source || !url) return;\r\n\r\n if (id === '') {\r\n await this.svc.create({ source, url });\r\n } else {\r\n await this.svc.update(id!, { source, url });\r\n }\r\n this.cancelEdit();\r\n }\r\n\r\n async delete(row: ISocial) {\r\n await this.svc.remove(row.id);\r\n }\r\n}","<div class=\"actions-bar\">\r\n <button mat-button color=\"primary\" (click)=\"startCreate()\">\r\n <mat-icon>add</mat-icon> Add Social\r\n </button>\r\n</div>\r\n\r\n<table mat-table [dataSource]=\"socials()\" class=\"mat-elevation-z1\">\r\n <ng-container matColumnDef=\"id\">\r\n <th mat-header-cell *matHeaderCellDef>ID</th>\r\n <td mat-cell *matCellDef=\"let s\">{{ s.id }}</td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"source\">\r\n <th mat-header-cell *matHeaderCellDef>Source</th>\r\n <td mat-cell *matCellDef=\"let s\">{{ s.source }}</td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"url\">\r\n <th mat-header-cell *matHeaderCellDef>URL</th>\r\n <td mat-cell *matCellDef=\"let s\">\r\n <a [href]=\"s.url\" target=\"_blank\" rel=\"noopener\">{{ s.url }}</a>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"actions\">\r\n <th mat-header-cell *matHeaderCellDef>Actions</th>\r\n <td mat-cell *matCellDef=\"let s\">\r\n <button mat-icon-button color=\"primary\" (click)=\"startEdit(s)\"><mat-icon>edit</mat-icon></button>\r\n <button mat-icon-button color=\"warn\" (click)=\"delete(s)\"><mat-icon>delete</mat-icon></button>\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\r\n</table>\r\n\r\n@if (editingId() !== null) {\r\n<form class=\"edit-form\" [formGroup]=\"form\" (ngSubmit)=\"save()\">\r\n <h3>{{ editingId() === '' ? 'Create Social' : 'Edit Social' }}</h3>\r\n\r\n <mat-form-field appearance=\"fill\" class=\"full-width\">\r\n <mat-label>Source</mat-label>\r\n <mat-select formControlName=\"source\">\r\n @for (opt of socialTypeOptions; track opt.value) {\r\n <mat-option [value]=\"opt.value\">{{ opt.label }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <div class=\"form-row\">\r\n <mat-form-field appearance=\"fill\" class=\"full-width\">\r\n <mat-label>URL</mat-label>\r\n <input matInput formControlName=\"url\" placeholder=\"https://example.com/handle\">\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"form-actions\">\r\n <button mat-button type=\"submit\" color=\"primary\">Save</button>\r\n <button mat-button type=\"button\" (click)=\"cancelEdit()\">Cancel</button>\r\n </div>\r\n</form>\r\n}\r\n\r\n@if ((socials()).length === 0) {\r\n<p>No socials found.</p>\r\n}","/*\r\n * Public API Surface of @doug-williamson/ng-rhombus\r\n */\r\n\r\nexport * from './lib/shell/public-api';\r\nexport * from './lib/blog/public-api';\r\nexport * from './lib/home/public-api';\r\nexport * from './lib/socials/public-api';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i2.WrapperService","i3","i4","i6","i5"],"mappings":"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"}
1
+ {"version":3,"file":"doug-williamson-ng-rhombus.mjs","sources":["../../../../projects/ng-rhombus/src/lib/shell/services/wrapper.service.ts","../../../../projects/ng-rhombus/src/lib/shell/services/authentication.service.ts","../../../../projects/ng-rhombus/src/lib/shell/services/theme.service.ts","../../../../projects/ng-rhombus/src/lib/shell/components/header/header.component.ts","../../../../projects/ng-rhombus/src/lib/shell/components/header/header.component.html","../../../../projects/ng-rhombus/src/lib/shell/components/nav-list/nav-list.component.ts","../../../../projects/ng-rhombus/src/lib/shell/components/nav-list/nav-list.component.html","../../../../projects/ng-rhombus/src/lib/shell/components/wrapper/wrapper.component.ts","../../../../projects/ng-rhombus/src/lib/shell/components/wrapper/wrapper.component.html","../../../../projects/ng-rhombus/src/lib/shell/components/loading-container/loading-container.component.ts","../../../../projects/ng-rhombus/src/lib/shell/components/loading-container/loading-container.component.html","../../../../projects/ng-rhombus/src/lib/shell/components/login/login.component.ts","../../../../projects/ng-rhombus/src/lib/shell/components/login/login.component.html","../../../../projects/ng-rhombus/src/lib/shell/public-api.ts","../../../../projects/ng-rhombus/src/lib/blog/components/list/list.component.ts","../../../../projects/ng-rhombus/src/lib/blog/components/list/list.component.html","../../../../projects/ng-rhombus/src/lib/blog/components/latest/latest.component.ts","../../../../projects/ng-rhombus/src/lib/blog/components/latest/latest.component.html","../../../../projects/ng-rhombus/src/lib/blog/helpers/blog-post-helper.ts","../../../../projects/ng-rhombus/src/lib/blog/services/blog.service.ts","../../../../projects/ng-rhombus/src/lib/blog/services/thumbnail.service.ts","../../../../projects/ng-rhombus/src/lib/blog/components/table/table.component.ts","../../../../projects/ng-rhombus/src/lib/blog/components/table/table.component.html","../../../../projects/ng-rhombus/src/lib/blog/components/thumbnail/thumbnail.component.ts","../../../../projects/ng-rhombus/src/lib/blog/components/thumbnail/thumbnail.component.html","../../../../projects/ng-rhombus/src/lib/blog/components/dialogs/delete-thumbnail/delete-thumbnail.component.ts","../../../../projects/ng-rhombus/src/lib/blog/components/dialogs/delete-thumbnail/delete-thumbnail.component.html","../../../../projects/ng-rhombus/src/lib/blog/components/thumbnail-control/thumbnail-control.component.ts","../../../../projects/ng-rhombus/src/lib/blog/components/thumbnail-control/thumbnail-control.component.html","../../../../projects/ng-rhombus/src/lib/blog/models/blog.ts","../../../../projects/ng-rhombus/src/lib/blog/dialogs/confirmation/confirmation.component.ts","../../../../projects/ng-rhombus/src/lib/blog/dialogs/confirmation/confirmation.component.html","../../../../projects/ng-rhombus/src/lib/blog/components/form/form.component.ts","../../../../projects/ng-rhombus/src/lib/blog/components/form/form.component.html","../../../../projects/ng-rhombus/src/lib/blog/components/post/post.component.ts","../../../../projects/ng-rhombus/src/lib/blog/components/post/post.component.html","../../../../projects/ng-rhombus/src/lib/blog/components/dialogs/delete-post/delete-post.component.ts","../../../../projects/ng-rhombus/src/lib/blog/components/dialogs/delete-post/delete-post.component.html","../../../../projects/ng-rhombus/src/lib/blog/public-api.ts","../../../../projects/ng-rhombus/src/lib/home/models/home.ts","../../../../projects/ng-rhombus/src/lib/home/admin/admin.ts","../../../../projects/ng-rhombus/src/lib/home/admin/admin.html","../../../../projects/ng-rhombus/src/lib/socials/socials.service.ts","../../../../projects/ng-rhombus/src/lib/socials/list/list.component.ts","../../../../projects/ng-rhombus/src/lib/socials/list/list.component.html","../../../../projects/ng-rhombus/src/lib/socials/table/table.component.ts","../../../../projects/ng-rhombus/src/lib/socials/table/table.component.html","../../../../projects/ng-rhombus/src/public-api.ts","../../../../projects/ng-rhombus/src/doug-williamson-ng-rhombus.ts"],"sourcesContent":["\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { ActivatedRoute, NavigationEnd, Router } from '@angular/router';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { BehaviorSubject, filter } from 'rxjs';\r\n\r\nexport interface Breadcrumb {\r\n label: string;\r\n url: string;\r\n}\r\n\r\nexport enum ThemeEnum {\r\n LIGHT = 'light',\r\n DARK = 'dark'\r\n}\r\n\r\nexport type Theme = 'light' | 'dark';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class WrapperService {\r\n\r\n snackbar = inject(MatSnackBar);\r\n\r\n private _darkModeSubject = new BehaviorSubject<boolean>(false);\r\n darkMode = toSignal(this._darkModeSubject.asObservable(), { initialValue: false })\r\n\r\n private _breadcrumbs = new BehaviorSubject<Breadcrumb[]>([]);\r\n breadcrumbs = toSignal(this._breadcrumbs.asObservable(), { initialValue: undefined });\r\n\r\n private _triggerCreateNew = new BehaviorSubject<void>(undefined);\r\n triggerCreateNew = this._triggerCreateNew.asObservable();\r\n // triggerCreateNew = toSignal(this._triggerCreateNew.asObservable());\r\n\r\n constructor(private router: Router, private activatedRoute: ActivatedRoute) {\r\n this.router.events.pipe(filter(event => event instanceof NavigationEnd)).subscribe(event => {\r\n //set breadcrumbs\r\n this._breadcrumbs.next(this.getBreadcrumbs(this.activatedRoute.root));\r\n })\r\n }\r\n\r\n clickedCreateNew() {\r\n this._triggerCreateNew.next(undefined);\r\n }\r\n\r\n private getBreadcrumbs(route: ActivatedRoute, url: string = \"\", breadcrumbs: Breadcrumb[] = []): Breadcrumb[] {\r\n const ROUTE_DATA_BREADCRUMB = 'breadcrumb';\r\n\r\n //get the child routes\r\n let children: ActivatedRoute[] = route.children;\r\n\r\n if (children.length === 0) {\r\n // return breadcrumbs;\r\n }\r\n\r\n //iterate over each children\r\n for (let child of children) {\r\n //verify primary route\r\n // if (child.outlet !== PRIMARY_OUTLET || child.snapshot.url.length==0) {\r\n // continue;\r\n // }\r\n\r\n //verify the custom data property \"breadcrumb\" is specified on the route\r\n // if (!child.snapshot.data.hasOwnProperty(ROUTE_DATA_BREADCRUMB)) {\r\n // return this.getBreadcrumbs(child, url, breadcrumbs);\r\n // }\r\n\r\n //get the route's URL segment\r\n let routeURL: string = child.snapshot.url.map(segment => segment.path).join(\"/\");\r\n\r\n //append route URL to URL\r\n url += `${routeURL}`;\r\n\r\n //add breadcrumb\r\n let breadcrumb: Breadcrumb = {\r\n label: child.snapshot.data[ROUTE_DATA_BREADCRUMB],\r\n url: url\r\n };\r\n breadcrumbs.push(breadcrumb);\r\n\r\n //recursive\r\n return this.getBreadcrumbs(child, url, breadcrumbs);\r\n }\r\n return breadcrumbs;\r\n }\r\n\r\n openSnackbar(message: string) {\r\n this.snackbar.open(message, undefined, { duration: 3000 });\r\n }\r\n}","import { inject, Injectable } from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { Auth, authState, signInWithEmailAndPassword } from '@angular/fire/auth';\r\nimport { from, Observable, of } from 'rxjs';\r\nimport { switchMap } from 'rxjs/operators';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class NgRhombusAuthenticationService {\r\n\tfirebaseAuth = inject(Auth);\r\n\tcurrentUser$ = authState(this.firebaseAuth);\r\n\r\n\tlogin(email: string, password: string): Promise<void> {\r\n\t\treturn signInWithEmailAndPassword(this.firebaseAuth, email, password).then(() => { });\r\n\t}\r\n\r\n\tlogout(): Promise<any> { return this.firebaseAuth.signOut(); }\r\n\r\n\tprivate currentUserProfile$ = this.currentUser$.pipe(\r\n\t\tswitchMap((user) => {\r\n\t\t\treturn user?.uid ? of(user) : of(null);\r\n\t\t})\r\n\t);\r\n\r\n\tcurrentUserProfile = toSignal(this.currentUserProfile$);\r\n}","import { isPlatformBrowser } from '@angular/common';\r\nimport { Injectable, PLATFORM_ID, computed, effect, inject, signal } from '@angular/core';\r\n\r\nexport interface AppTheme {\r\n name: string;\r\n icon: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ThemeService {\r\n private platformId = inject(PLATFORM_ID);\r\n private appTheme = signal<string>('system');\r\n private readonly PREFERRED_THEME_COOKIE = 'preferred-theme';\r\n\r\n private themes: AppTheme[] = [\r\n { name: 'light', icon: 'light_mode' },\r\n { name: 'dark', icon: 'dark_mode' },\r\n { name: 'system', icon: 'desktop_windows' },\r\n ];\r\n\r\n selectedTheme = computed(() =>\r\n this.themes.find((t) => t.name === this.appTheme())\r\n );\r\n\r\n getThemes() {\r\n return this.themes;\r\n }\r\n\r\n setTheme(theme: string) {\r\n if (isPlatformBrowser(this.platformId)) {\r\n this.appTheme.set(theme);\r\n\r\n const colorScheme = theme === 'system' ? 'light dark' : theme;\r\n document.body.style.setProperty('color-scheme', colorScheme);\r\n\r\n this.setThemeInLocalStorage(theme);\r\n }\r\n }\r\n\r\n setThemeInLocalStorage(theme: string) {\r\n if (isPlatformBrowser(this.platformId)) {\r\n localStorage.setItem(this.PREFERRED_THEME_COOKIE, theme);\r\n }\r\n }\r\n\r\n getThemeFromLocalStorage() {\r\n if (!isPlatformBrowser(this.platformId)) return 'system';\r\n return localStorage.getItem(this.PREFERRED_THEME_COOKIE) ?? 'system';\r\n }\r\n\r\n constructor() {\r\n this.setTheme(this.getThemeFromLocalStorage());\r\n }\r\n}\r\n","import { Component, EventEmitter, inject, input, Input, output, Output } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatToolbar, MatToolbarModule } from '@angular/material/toolbar';\r\nimport { WrapperService } from '../../services/wrapper.service';\r\nimport { Router } from '@angular/router';\r\nimport { NgRhombusAuthenticationService } from '../../services/authentication.service';\r\nimport { ThemeService } from '../../services/theme.service';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\n\r\n@Component({\r\n selector: 'ng-rhombus-header',\r\n imports: [MatButtonModule, MatIconModule, MatMenuModule, MatToolbar, TitleCasePipe, MatProgressBarModule],\r\n templateUrl: './header.component.html',\r\n styleUrl: './header.component.scss'\r\n})\r\nexport class NgRhombusHeaderComponent {\r\n isLoading = input<boolean>(false);\r\n wrapperService = inject(WrapperService);\r\n authService = inject(NgRhombusAuthenticationService);\r\n protected themeService = inject(ThemeService);\r\n router = inject(Router);\r\n\r\n logOut = output<void>();\r\n\r\n darkMode = this.wrapperService.darkMode;\r\n user = this.authService.currentUserProfile;\r\n\r\n @Input()\r\n isMobile: boolean = false;\r\n\r\n @Input()\r\n title!: string;\r\n\r\n @Output() menuToggled = new EventEmitter;\r\n\r\n toggleSidebar() {\r\n this.menuToggled.emit();\r\n }\r\n\r\n logout() {\r\n this.logOut.emit();\r\n }\r\n}\r\n","<mat-toolbar class=\"header-theme relative\">\r\n @if (isMobile) {\r\n <button mat-icon-button (click)=\"toggleSidebar()\" color=\"red\">\r\n <mat-icon>menu</mat-icon>\r\n </button>\r\n }\r\n\r\n <span class=\"title flex-1\">{{ title }}</span>\r\n\r\n <button class=\"mr-2\" mat-icon-button [mat-menu-trigger-for]=\"themeMenu\">\r\n <mat-icon>{{ themeService.selectedTheme()?.icon }}</mat-icon>\r\n </button>\r\n <mat-menu #themeMenu=\"matMenu\">\r\n @for (theme of themeService.getThemes(); track theme.name) {\r\n <button [class.selected-theme]=\"themeService.selectedTheme()?.name === theme.name\" mat-menu-item\r\n (click)=\"themeService.setTheme(theme.name)\">\r\n <mat-icon>{{ theme.icon }}</mat-icon>\r\n <span>{{ theme.name | titlecase }}</span>\r\n </button>\r\n }\r\n </mat-menu>\r\n\r\n @if (user()) {\r\n <button mat-raised-button color=\"primary\" class=\"logout-button\" (click)=\"logout()\">\r\n Logout\r\n </button>\r\n }\r\n</mat-toolbar>\r\n@if (isLoading()) {\r\n<mat-progress-bar class=\"!absolute top-[64px] z-10\" mode=\"indeterminate\" />\r\n}","import { Component, Input, OnInit } from '@angular/core';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { RouterModule } from '@angular/router';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport { NgRhombusNavItem } from './nav-list';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\n\r\n@Component({\r\n selector: 'ng-rhombus-nav-list',\r\n imports: [RouterModule, MatListModule, MatIconModule, MatTabsModule],\r\n templateUrl: './nav-list.component.html',\r\n styleUrl: './nav-list.component.scss'\r\n})\r\nexport class NgRhombusNavListComponent implements OnInit {\r\n activeLink?: string;\r\n\r\n @Input()\r\n routeCollection: NgRhombusNavItem[] | undefined;\r\n\r\n ngOnInit() {\r\n\r\n }\r\n}\r\n","<mat-nav-list>\r\n @for (link of routeCollection; track link) {\r\n <a mat-list-item [routerLink]=\"link.route\" routerLinkActive=\"selected-menu-item\">\r\n <span>{{ link.label }}</span>\r\n </a>\r\n }\r\n</mat-nav-list>","import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\r\nimport { Component, EventEmitter, Input, OnDestroy, OnInit, Output, output, computed, input } from '@angular/core';\r\nimport { MatSidenavModule } from '@angular/material/sidenav';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { NgRhombusHeaderComponent } from '../header/header.component';\r\nimport { NgRhombusNavListComponent } from '../nav-list/nav-list.component';\r\nimport { RouterModule } from '@angular/router';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { NgRhombusNavItem } from '../nav-list/nav-list';\r\n\r\nimport { WrapperService } from '../../services/wrapper.service';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\n\r\n@Component({\r\n selector: 'ng-rhombus-wrapper',\r\n imports: [MatSidenavModule, MatButtonModule, MatIconModule, MatListModule, MatProgressBarModule, MatToolbarModule, RouterModule, NgRhombusHeaderComponent, NgRhombusNavListComponent],\r\n providers: [WrapperService],\r\n templateUrl: './wrapper.component.html',\r\n styleUrl: './wrapper.component.scss'\r\n})\r\nexport class NgRhombusWrapperComponent implements OnInit, OnDestroy {\r\n @Output() clickAddNewEvent = new EventEmitter<void>();\r\n destroyed = new Subject<void>();\r\n isMobile: boolean = false;\r\n currentScreenSize?: string;\r\n\r\n isLoading = input<boolean>(false);\r\n logout = output<void>();\r\n\r\n breadcrumbs = computed(() => { return this.wrapperService.breadcrumbs() });\r\n\r\n fillerContent = Array.from(\r\n { length: 50 },\r\n () =>\r\n `Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut\r\n labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco\r\n laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in\r\n voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat\r\n cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.`,\r\n );\r\n\r\n @Input()\r\n title!: string;\r\n\r\n @Input()\r\n routeCollection!: NgRhombusNavItem[] | undefined;\r\n\r\n constructor(private breakpointObserver: BreakpointObserver, private wrapperService: WrapperService) {\r\n this.breakpointObserver\r\n .observe([Breakpoints.XSmall])\r\n .pipe(takeUntil(this.destroyed))\r\n .subscribe(result => {\r\n this.isMobile = result.matches;\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroyed.next();\r\n this.destroyed.complete();\r\n }\r\n\r\n clickedCreateNew() {\r\n this.clickAddNewEvent.emit();\r\n }\r\n logOut() {\r\n this.logout.emit();\r\n }\r\n}\r\n","<ng-rhombus-header class=\"header-wrapper\" [isMobile]=\"isMobile\" [title]=\"title\" (menuToggled)=\"sidenav.toggle()\"\r\n (logOut)=\"logOut()\" [isLoading]=\"isLoading()\"></ng-rhombus-header>\r\n<mat-sidenav-container>\r\n <mat-sidenav #sidenav [opened]=\"!isMobile\" [mode]=\"isMobile ? 'over' : 'side'\">\r\n <div class=\"nav-list-wrapper\">\r\n <ng-rhombus-nav-list [routeCollection]=\"routeCollection\"></ng-rhombus-nav-list>\r\n </div>\r\n </mat-sidenav>\r\n <mat-sidenav-content class=\"main-sidenav-content\">\r\n <!-- <mat-toolbar class=\"header-theme\">\r\n <span class=\"wrapper-flex\">\r\n <ng-container *ngFor=\"let breadcrumb of breadcrumbs()\">\r\n {{ breadcrumb.label }}\r\n </ng-container>\r\n </span>\r\n <button mat-icon-button (click)=\"clickedCreateNew()\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n </mat-toolbar> -->\r\n <router-outlet #o=\"outlet\"></router-outlet>\r\n </mat-sidenav-content>\r\n</mat-sidenav-container>","import { Component, input } from '@angular/core';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\n\r\n@Component({\r\n selector: 'ng-rhombus-loading-container',\r\n imports: [MatProgressSpinnerModule],\r\n templateUrl: './loading-container.component.html',\r\n styleUrl: './loading-container.component.scss'\r\n})\r\nexport class NgRhombusLoadingContainerComponent {\r\n loading = input<boolean>(false);\r\n size = input<number>(40);\r\n}\r\n","@if (loading()) {\r\n<mat-progress-spinner class=\"loading-spinner\" [diameter]=\"size()\" mode=\"indeterminate\" />\r\n} @else {\r\n<ng-content />\r\n}","import { Component, inject, input, OnInit, output, signal } from '@angular/core';\r\nimport { FormGroup, FormBuilder, Validators, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { Router } from '@angular/router';\r\nimport { NgRhombusAuthenticationService } from '../../services/authentication.service';\r\nimport { NgRhombusLoadingContainerComponent } from '../loading-container/loading-container.component';\r\nimport { MatIconModule } from '@angular/material/icon';\r\n\r\nexport interface ILoginCredentials {\r\n\temail: string;\r\n\tpassword: string;\r\n}\r\n\r\n@Component({\r\n\tselector: 'ng-rhombus-login',\r\n\timports: [ReactiveFormsModule, MatButtonModule, MatCardModule, MatFormFieldModule, MatIconModule, MatInputModule, NgRhombusLoadingContainerComponent],\r\n\ttemplateUrl: './login.component.html',\r\n\tstyleUrl: './login.component.scss'\r\n})\r\nexport class NgRhombusLoginComponent implements OnInit {\r\n\tpublic loginForm!: FormGroup;\r\n\tauthorizing: boolean = false;\r\n\r\n\ttitle = input<string>('');\r\n\tloading = input<boolean>(false);\r\n\tonSubmit = output<ILoginCredentials>();\r\n\r\n\tpublic hidePassword = signal(true);\r\n\r\n\tauthService = inject(NgRhombusAuthenticationService);\r\n\r\n\tconstructor(private fb: FormBuilder, private router: Router) { }\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.loginForm = this.fb.group({\r\n\t\t\temail: ['', [Validators.required, Validators.email]],\r\n\t\t\tpassword: ['', [Validators.required, Validators.minLength(6)]],\r\n\t\t});\r\n\t}\r\n\r\n\tonSubmitForm() {\r\n\t\tconst rawForm: ILoginCredentials = this.loginForm.getRawValue();\r\n\t\tthis.onSubmit.emit(rawForm);\r\n\t}\r\n}\r\n","<div class=\"flex min-h-screen items-center justify-center bg-background\">\r\n <mat-card class=\"w-full max-w-[400px] p-10\">\r\n <mat-card-header>\r\n <mat-card-title-group>\r\n <mat-card-title>{{ title() }}</mat-card-title>\r\n <mat-card-subtitle>Administration</mat-card-subtitle>\r\n </mat-card-title-group>\r\n\r\n </mat-card-header>\r\n <form class=\"flex flex-col\" novalidate [formGroup]=\"loginForm\" (ngSubmit)=\"onSubmitForm()\">\r\n <mat-card-content>\r\n <mat-form-field class=\"w-full flex\">\r\n <mat-label>Email Address</mat-label>\r\n <input matInput placeholder=\"Placeholder\" formControlName=\"email\" aria-label=\"Email Address\" />\r\n <mat-icon matSuffix>email</mat-icon>\r\n <mat-error align=\"start\">Email Address Required</mat-error>\r\n </mat-form-field>\r\n <mat-form-field class=\"w-full flex\">\r\n <mat-label>Password</mat-label>\r\n <input matInput [type]=\"hidePassword() ? 'password' : 'text'\" placeholder=\"Placeholder\"\r\n formControlName=\"password\" aria-label=\"Password\" />\r\n <button mat-icon-button matSuffix (click)=\"hidePassword.set(!hidePassword())\" type=\"button\"\r\n style=\"margin-right: 0.25rem;\">\r\n <mat-icon>{{ hidePassword() ? 'visibility_off' : 'visibility' }}</mat-icon>\r\n </button>\r\n <mat-error align=\"start\">Password Required</mat-error>\r\n </mat-form-field>\r\n </mat-card-content>\r\n <button mat-flat-button class=\"login-button\" type=\"submit\" [disabled]=\"loading() || loginForm.invalid\">\r\n <ng-rhombus-loading-container [loading]=\"loading()\" [size]=\"20\">\r\n Login\r\n </ng-rhombus-loading-container>\r\n </button>\r\n </form>\r\n </mat-card>\r\n</div>","/*\r\n * Public API Surface of @doug-williamson/ng-rhombus/shell\r\n */\r\n\r\nexport * from './components/wrapper/wrapper.component';\r\nexport * from './services/wrapper.service';\r\nexport * from './components/login/login.component';\r\nexport * from './components/nav-list/nav-list';\r\n","import { Component, EventEmitter, input, Output } from '@angular/core';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { IBlog } from '../../models/blog';\r\nimport { DatePipe } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'ng-rhombus-blog-list',\r\n imports: [DatePipe, MatListModule],\r\n templateUrl: './list.component.html',\r\n styleUrl: './list.component.scss'\r\n})\r\nexport class NgRhombusBlogListComponent {\r\n @Output() goToRoute = new EventEmitter<string>();\r\n\r\n dataSource = input<IBlog[]>([]);\r\n\r\n goToBlogPost(id: string) {\r\n this.goToRoute.emit(id);\r\n }\r\n}\r\n","<mat-nav-list>\r\n\t@for (blogPost of dataSource(); track blogPost.id) {\r\n\t\t<mat-list-item (click)=\"goToRoute.emit(blogPost.id)\">\r\n\t\t\t<h3 matListItemTitle>{{ blogPost.title }}</h3>\r\n\t\t\t<p matListItemLine>{{ blogPost.description }}</p>\r\n\t\t\t<p matListItemMeta>{{ blogPost.timestamp.toMillis() | date: 'MMMM d, y' }}</p>\r\n\t\t</mat-list-item>\r\n\t}\r\n</mat-nav-list>","import { Component, input } from '@angular/core';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { RouterLink } from '@angular/router';\r\nimport { IBlog } from '../../models/blog';\r\nimport { DatePipe } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'ng-rhombus-blog-post-latest',\r\n imports: [DatePipe, MatListModule, RouterLink],\r\n templateUrl: './latest.component.html',\r\n styleUrl: './latest.component.scss'\r\n})\r\nexport class NgRhombusBlogPostLatestComponent {\r\n blogPost = input<IBlog>();\r\n}\r\n","<mat-nav-list>\r\n <mat-list-item [routerLink]=\"['/blog', blogPost()?.id]\">\r\n <span matListItemTitle>{{ blogPost()?.title }}</span>\r\n <span matListItemLine>{{ blogPost()?.description }}</span>\r\n <span matListItemLine>{{ blogPost()?.timestamp?.toMillis() | date: 'MMMM d, y' }}</span>\r\n </mat-list-item>\r\n</mat-nav-list>","export class NgRhombusBlogPostHelper {\r\n static createSlug(title: string): string {\r\n const slug = title.toLowerCase().replace(/\\s+/g, '-');\r\n const randomThreeDigitNumber = Math.floor(Math.random() * 1000);\r\n return `${slug}-${randomThreeDigitNumber}`;\r\n }\r\n}","import { Injectable, inject, signal } from '@angular/core';\r\nimport {\r\n CollectionReference,\r\n Firestore,\r\n collection,\r\n deleteDoc,\r\n doc,\r\n getDoc,\r\n getDocs,\r\n limit,\r\n orderBy,\r\n query,\r\n setDoc,\r\n updateDoc\r\n} from '@angular/fire/firestore';\r\nimport { IBlog } from '../models/blog';\r\nimport { NgRhombusBlogPostHelper } from '../helpers/blog-post-helper';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class NgRhombusBlogService {\r\n\r\n private firestore = inject(Firestore);\r\n private blogCollectionRef = collection(this.firestore, 'blog') as CollectionReference<IBlog>;\r\n\r\n blogPosts = signal<IBlog[]>([]);\r\n selectedBlogPost = signal<IBlog | undefined>(undefined);\r\n\r\n async fetchBlogPosts() {\r\n const data = await getDocs(this.blogCollectionRef);\r\n const returnData = [...data.docs.map(d => ({ ...d.data(), id: d.id })) as IBlog[]];\r\n this.blogPosts.set(returnData);\r\n return returnData;\r\n }\r\n\r\n async fetchBlogPost(id: string) {\r\n const blogPostDocumentRef = doc(this.firestore, 'blog', id);\r\n // const docSnap = (await getDoc(blogPostDocumentRef)).data() as IBlog\r\n // this.selectedBlogPost.set(docSnap);\r\n // return docSnap;\r\n const docSnap = await getDoc(blogPostDocumentRef);\r\n if (docSnap.exists()) {\r\n const docData = { ...docSnap.data(), id: id } as IBlog;\r\n this.selectedBlogPost.set(docData);\r\n return docData;\r\n } else {\r\n return;\r\n }\r\n }\r\n\r\n async fetchLatestBlogPost() {\r\n const latestQuery = query(this.blogCollectionRef, orderBy('timestamp', 'desc'), limit(1));\r\n const snapshot = await getDocs(latestQuery);\r\n if (!snapshot.empty) {\r\n const doc = snapshot.docs[0];\r\n const latestPost = { ...doc.data(), id: doc.id } as IBlog;\r\n this.selectedBlogPost.set(latestPost);\r\n return latestPost;\r\n }\r\n return undefined;\r\n }\r\n\r\n async createBlogPost(blogPost: IBlog) {\r\n const blogPostDocumentRef = doc(this.firestore, 'blog', NgRhombusBlogPostHelper.createSlug(blogPost.title));\r\n setDoc(blogPostDocumentRef, {\r\n title: blogPost.title,\r\n description: blogPost.description,\r\n thumbnail: blogPost.thumbnail,\r\n content: blogPost.content,\r\n timestamp: new Date()\r\n });\r\n }\r\n\r\n async updateBlogPost(blogPost: IBlog) {\r\n const blogPostDocumentRef = doc(this.firestore, 'blog', blogPost.id);\r\n updateDoc(blogPostDocumentRef, {\r\n title: blogPost.title,\r\n description: blogPost.description,\r\n thumbnail: blogPost.thumbnail,\r\n content: blogPost.content,\r\n })\r\n }\r\n\r\n\r\n deleteBlogPost(id: string) {\r\n const blogPostDocumentRef = doc(this.firestore, 'blog', id);\r\n return deleteDoc(blogPostDocumentRef);\r\n }\r\n}","import { inject, Injectable } from \"@angular/core\";\r\nimport { ref, Storage, uploadBytesResumable, UploadTask } from \"@angular/fire/storage\";\r\nimport { deleteObject } from \"firebase/storage\";\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class NgRhombusBlogPostThumbnailService {\r\n\tfirebaseStorage = inject(Storage);\r\n\r\n\tuploadImage(imageName: string, image: File): UploadTask {\r\n\t\tconst storageRef = ref(this.firebaseStorage, `thumbnails/${imageName}`);\r\n\t\treturn uploadBytesResumable(storageRef, image);\r\n\t}\r\n\r\n\tdeleteImage(filePath?: string) {\r\n\t\tconst storageDocRef = ref(this.firebaseStorage, filePath);\r\n\r\n\t\treturn deleteObject(storageDocRef).then(() => {\r\n\r\n\t\t}).catch((error) => {\r\n\r\n\t\t});\r\n\t}\r\n}","import { Component, EventEmitter, inject, input, Output } from '@angular/core';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { IBlog } from '../../models/blog';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { NgRhombusBlogService } from '../../services/blog.service';\r\nimport { NgRhombusBlogPostThumbnailService } from '../../services/thumbnail.service';\r\n\r\n@Component({\r\n selector: 'ng-rhombus-blog-table',\r\n imports: [CommonModule, MatButtonModule, MatIconModule, MatTableModule],\r\n templateUrl: './table.component.html',\r\n styleUrl: './table.component.scss'\r\n})\r\nexport class NgRhombusBlogTableComponent {\r\n @Output() editEvent = new EventEmitter<string>();\r\n @Output() deleteEvent = new EventEmitter<IBlog>();\r\n\r\n readonly thumbnailService = inject(NgRhombusBlogPostThumbnailService);\r\n readonly blogService = inject(NgRhombusBlogService);\r\n readonly dialog = inject(MatDialog);\r\n\r\n dataSource = input<IBlog[]>([]);\r\n displayedColumns: string[] = ['timestamp', 'title', 'description', 'edit', 'delete'];\r\n\r\n goToBlogPost(id: string) {\r\n this.editEvent.emit(id);\r\n }\r\n\r\n onDeleteBlogPost(blogPost: IBlog) {\r\n this.deleteEvent.emit(blogPost);\r\n }\r\n\r\n}\r\n","@if (dataSource().length > 0) {\r\n<table mat-table [dataSource]=\"dataSource()\" class=\"w-full h-full\">\r\n\t<!-- Timestamp Column -->\r\n\t<ng-container matColumnDef=\"timestamp\">\r\n\t\t<th mat-header-cell *matHeaderCellDef>Date</th>\r\n\t\t<td mat-cell *matCellDef=\"let element\">{{ element.timestamp.toMillis() | date: 'MMMM d, y' }}</td>\r\n\t</ng-container>\r\n\r\n\t<!-- Title Column -->\r\n\t<ng-container matColumnDef=\"title\">\r\n\t\t<th mat-header-cell *matHeaderCellDef>Title</th>\r\n\t\t<td mat-cell *matCellDef=\"let element\">{{element.title}}</td>\r\n\t</ng-container>\r\n\r\n\t<!-- Description Column -->\r\n\t<ng-container matColumnDef=\"description\">\r\n\t\t<th mat-header-cell *matHeaderCellDef>Description</th>\r\n\t\t<td mat-cell *matCellDef=\"let element\">{{element.description}}</td>\r\n\t</ng-container>\r\n\r\n\t<!-- Edit Column -->\r\n\t<ng-container matColumnDef=\"edit\">\r\n\t\t<th mat-header-cell *matHeaderCellDef aria-label=\"row actions\">&nbsp;</th>\r\n\t\t<td mat-cell *matCellDef=\"let element\">\r\n\t\t\t<button mat-icon-button (click)=\"goToBlogPost(element.id)\">\r\n\t\t\t\t<mat-icon>edit</mat-icon>\r\n\t\t\t</button>\r\n\t\t</td>\r\n\t</ng-container>\r\n\r\n\t<!-- Delete Column -->\r\n\t<ng-container matColumnDef=\"delete\">\r\n\t\t<th mat-header-cell *matHeaderCellDef aria-label=\"row actions\">&nbsp;</th>\r\n\t\t<td mat-cell *matCellDef=\"let element\">\r\n\t\t\t<button mat-icon-button (click)=\"onDeleteBlogPost(element)\">\r\n\t\t\t\t<mat-icon>delete</mat-icon>\r\n\t\t\t</button>\r\n\t\t</td>\r\n\t</ng-container>\r\n\r\n\t<tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\r\n\t<tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\r\n</table>\r\n} @else {\r\n<div class=\"empty-set\">\r\n\t<span>No blog posts created yet.</span>\r\n</div>\r\n\r\n}","import { Component, computed, input, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'ng-rhombus-blog-thumbnail',\r\n imports: [],\r\n templateUrl: './thumbnail.component.html',\r\n styleUrl: './thumbnail.component.scss'\r\n})\r\nexport class NgRhombusBlogThumbnailComponent implements OnInit {\r\n width = input<number>(0);\r\n height = input<number>(0);\r\n imageSource = input<string>();\r\n\r\n placeholder = computed(() => `https://placehold.co/${this.width()}x${this.height()}`);\r\n contentSource = computed(() => { return this.imageSource() !== '' ? this.imageSource() : this.placeholder(); })\r\n\r\n ngOnInit(): void {\r\n if (this.width() === 0 && this.height() === 0) {\r\n\r\n }\r\n }\r\n}\r\n","<div class=\"image-placeholder\" [style.width]=\"width() + 'px'\" [style.height]=\"height() + 'px'\">\r\n <img [src]=\"contentSource()\" [width]=\"width()\" [height]=\"height()\" />\r\n</div>","import { Component } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'ng-rhombus-Blog-delete-thumbnail',\r\n imports: [MatButtonModule, MatDialogModule],\r\n templateUrl: './delete-thumbnail.component.html',\r\n styleUrl: './delete-thumbnail.component.scss'\r\n})\r\nexport class NgRhombusBlogDeleteThumbnailComponent {\r\n\r\n}\r\n","<h2 mat-dialog-title>Blog Post Thumbnail - Delete</h2>\r\n<mat-dialog-content>\r\n <p>Would you like to delete this thumbnail?</p>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <button mat-button [mat-dialog-close]=\"false\" cdkFocusInitial>Cancel</button>\r\n <button mat-button [mat-dialog-close]=\"true\">Confirm</button>\r\n</mat-dialog-actions>","\r\nimport { Component, computed, ElementRef, inject, input, output, signal, ViewChild } from '@angular/core';\r\nimport { MatButton, MatButtonModule } from '@angular/material/button';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { NgRhombusBlogPostThumbnailService } from '../../services/thumbnail.service';\r\nimport { getDownloadURL } from '@angular/fire/storage';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { NgRhombusBlogThumbnailComponent } from \"../thumbnail/thumbnail.component\";\r\nimport { NgRhombusBlogDeleteThumbnailComponent } from '../dialogs/delete-thumbnail/delete-thumbnail.component';\r\n\r\n@Component({\r\n selector: 'ng-rhombus-thumbnail-control',\r\n imports: [MatButtonModule, MatIconModule, NgRhombusBlogThumbnailComponent],\r\n templateUrl: './thumbnail-control.component.html',\r\n styleUrl: './thumbnail-control.component.scss'\r\n})\r\nexport class ThumbnailControlComponent {\r\n width = input<number>(0);\r\n height = input<number>(0);\r\n thumbnailSrc = input<string>('');\r\n disabled = input<boolean>(false);\r\n\r\n @ViewChild('thumbnailInput') thumbnailInput!: ElementRef;\r\n\r\n thumbnailService = inject(NgRhombusBlogPostThumbnailService);\r\n dialog = inject(MatDialog);\r\n\r\n onFileUploaded = output<string>();\r\n onFileDeleted = output<void>();\r\n\r\n uploadedFile = signal<string | undefined>(undefined);\r\n placeholder = computed(() => `https://placehold.co/${this.width()}x${this.height()}`);\r\n imageSource = computed(() => { return this.uploadedFile() ?? this.placeholder(); })\r\n\r\n onThumbnailSelected(input: HTMLInputElement) {\r\n if (!input.files || input.files.length <= 0) {\r\n return;\r\n }\r\n const file: File = input.files[0];\r\n\r\n this.thumbnailService.uploadImage(file.name, file).then((snapshot) => {\r\n getDownloadURL(snapshot.ref).then((downloadUrl) => {\r\n this.uploadedFile.set(downloadUrl);\r\n this.onFileUploaded.emit(downloadUrl);\r\n })\r\n })\r\n }\r\n\r\n onThumbnailDeleted() {\r\n const dialogRef = this.dialog.open(NgRhombusBlogDeleteThumbnailComponent);\r\n\r\n dialogRef.afterClosed().subscribe(result => {\r\n if (result) {\r\n this.thumbnailService.deleteImage(this.uploadedFile()).then(() => {\r\n this.uploadedFile.set(undefined);\r\n this.thumbnailInput.nativeElement.value = '';\r\n this.onFileDeleted.emit();\r\n });\r\n }\r\n });\r\n }\r\n}\r\n","<div class=\"thumbnail-control-wrapper\">\r\n <input #thumbnailInput hidden type=\"file\" (change)=\"onThumbnailSelected(thumbnailInput)\" />\r\n <button mat-icon-button [disabled]=\"uploadedFile() || disabled()\" (click)=\"thumbnailInput.click()\" type=\"button\">\r\n <mat-icon>upload_file</mat-icon>\r\n </button>\r\n <button class=\"delete-button\" mat-icon-button [disabled]=\"!uploadedFile()\" (click)=\"onThumbnailDeleted()\"\r\n type=\"button\">\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n <div class=\"flex\"></div>\r\n <!-- <div class=\"image-placeholder\" [style.width]=\"width() + 'px'\" [style.height]=\"height() + 'px'\">\r\n <img [src]=\"imageSource()\" [width]=\"width()\" [height]=\"height()\" />\r\n </div> -->\r\n <ng-rhombus-blog-thumbnail [imageSource]=\"thumbnailSrc()\" [width]=\"width()\" [height]=\"height()\"\r\n [imageSource]=\"imageSource()\"></ng-rhombus-blog-thumbnail>\r\n</div>","import { Timestamp } from \"@angular/fire/firestore\";\r\n\r\nexport class IBlog {\r\n\tid!: string;\r\n\ttitle!: string;\r\n\tdescription!: string;\r\n\tthumbnail!: string;\r\n\tcontent!: string;\r\n\ttimestamp!: Timestamp;\r\n}","import { Component, inject } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'ng-rhombus-blog-confirmation',\r\n imports: [MatButtonModule, MatDialogModule],\r\n templateUrl: './confirmation.component.html',\r\n styleUrl: './confirmation.component.scss'\r\n})\r\nexport class NgRhombusBlogConfirmationComponent {\r\n\r\n data = inject(MAT_DIALOG_DATA);\r\n}\r\n","<h2 mat-dialog-title>{{ data.header }}</h2>\r\n<mat-dialog-content>\r\n <p>{{ data.query }}</p>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <button mat-button [mat-dialog-close]=\"false\" cdkFocusInitial>Cancel</button>\r\n <button mat-button [mat-dialog-close]=\"true\">Confirm</button>\r\n</mat-dialog-actions>","import { Component, effect, ElementRef, inject, input, output, signal, ViewChild } from '@angular/core';\r\nimport { FormGroup, FormBuilder, Validators, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { ThumbnailControlComponent } from \"../thumbnail-control/thumbnail-control.component\";\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner'\r\n\r\nimport { CdkTextareaAutosize, TextFieldModule } from '@angular/cdk/text-field';\r\nimport { MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { IBlog } from '../../models/blog';\r\nimport { NgRhombusBlogPostThumbnailService } from '../../public-api';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { NgRhombusBlogConfirmationComponent } from '../../dialogs/confirmation/confirmation.component';\r\nimport { MarkdownComponent } from 'ngx-markdown';\r\n\r\n@Component({\r\n\tselector: 'ng-rhombus-blog-form',\r\n\timports: [MatListModule, MatDividerModule, MatButtonModule, MatCardModule, MatFormFieldModule, MatInputModule, MatProgressSpinnerModule, MatSidenavModule, ReactiveFormsModule, TextFieldModule, ThumbnailControlComponent, MatToolbarModule, MatIconModule, MarkdownComponent],\r\n\ttemplateUrl: './form.component.html',\r\n\tstyleUrl: './form.component.scss'\r\n})\r\nexport class NgRhombusBlogAddEditComponent {\r\n\tblogPost = input<IBlog | undefined>(undefined);\r\n\tcancelEvent = output<void>();\r\n\tsubmitEvent = output<IBlog>();\r\n\r\n\tcontentData = signal<string>('');\r\n\tblogPostForm!: FormGroup;\r\n\r\n\tdialog = inject(MatDialog);\r\n\tthumbnailService = inject(NgRhombusBlogPostThumbnailService);\r\n\tformBuilder = inject(FormBuilder);\r\n\r\n\t@ViewChild('autosize') autosize?: CdkTextareaAutosize;\r\n\t@ViewChild('blogPost') blogPostPreview!: ElementRef;\r\n\r\n\tmarkdown = `## Markdown __rulez__!\r\n\t---\r\n\r\n\t### Syntax highlight\r\n\t\\`\\`\\`typescript\r\n\tconst language = 'typescript';\r\n\t\\`\\`\\`\r\n\r\n\t### Lists\r\n\t1. Ordered list\r\n\t2. Another bullet point\r\n\t- Unordered list\r\n\t- Another unordered bullet\r\n\r\n\t### Blockquote\r\n\t> Blockquote to the max`;\r\n\r\n\tconstructor() {\r\n\t\teffect(() => {\r\n\t\t\tif (this.blogPost()) {\r\n\t\t\t\tthis.blogPostForm.patchValue({\r\n\t\t\t\t\ttitle: this.blogPost()?.title,\r\n\t\t\t\t\tdescription: this.blogPost()?.description,\r\n\t\t\t\t\tthumbnail: this.blogPost()?.thumbnail,\r\n\t\t\t\t\tcontent: this.blogPost()?.content,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tthis.onContentChange();\r\n\t\t})\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.blogPostForm = this.formBuilder.group({\r\n\t\t\ttitle: [this.blogPost()?.title, Validators.required],\r\n\t\t\tdescription: [this.blogPost()?.description, Validators.required],\r\n\t\t\tthumbnail: [this.blogPost()?.thumbnail, Validators.required],\r\n\t\t\tcontent: [this.blogPost()?.content, Validators.required]\r\n\t\t});\r\n\t}\r\n\r\n\tonContentChange() {\r\n\t\tthis.contentData.set(this.blogPostForm.getRawValue().content);\r\n\t}\r\n\r\n\tget thumbnailSource() {\r\n\t\treturn this.blogPostForm.getRawValue().thumbnail;\r\n\t}\r\n\r\n\tonFileUploaded(downloadUrl: string) {\r\n\t\tthis.blogPostForm.patchValue({\r\n\t\t\tthumbnail: downloadUrl\r\n\t\t});\r\n\t\tthis.blogPostForm.markAsDirty();\r\n\t}\r\n\r\n\tonFileDeleted() {\r\n\t\tthis.blogPostForm.patchValue({\r\n\t\t\tthumbnail: ''\r\n\t\t})\r\n\t}\r\n\r\n\tonCancelClick() {\r\n\t\tif (this.blogPost()) {\r\n\t\t\t// EDIT form\r\n\t\t\tif (this.blogPostForm.dirty) {\r\n\t\t\t\tconst dialogRef = this.dialog.open(NgRhombusBlogConfirmationComponent, {\r\n\t\t\t\t\tdata: {\r\n\t\t\t\t\t\theader: 'Cancel Revision',\r\n\t\t\t\t\t\tquery: 'Are you sure? You will lose your revision(s).'\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tdialogRef.afterClosed().subscribe(result => {\r\n\t\t\t\t\tif (result) {\r\n\t\t\t\t\t\tthis.cancelEvent.emit();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\tthis.cancelEvent.emit();\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t// CREATE form\r\n\t\t\tif (this.blogPostForm.dirty) {\r\n\t\t\t\tconst dialogRef = this.dialog.open(NgRhombusBlogConfirmationComponent, {\r\n\t\t\t\t\tdata: {\r\n\t\t\t\t\t\theader: 'Cancel Create',\r\n\t\t\t\t\t\tquery: 'Are you sure? You will lose your progress.'\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tdialogRef.afterClosed().subscribe(result => {\r\n\t\t\t\t\tif (result) {\r\n\t\t\t\t\t\tif (this.blogPostForm.getRawValue().thumbnail) {\r\n\t\t\t\t\t\t\tthis.thumbnailService.deleteImage(this.blogPostForm.getRawValue().thumbnail).then(() => {\r\n\t\t\t\t\t\t\t\tthis.onFileDeleted();\r\n\t\t\t\t\t\t\t\tthis.cancelEvent.emit();\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthis.cancelEvent.emit();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\tthis.cancelEvent.emit();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tonSubmit() {\r\n\t\tif (this.blogPostForm.invalid) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst rawData: IBlog = this.blogPostForm.getRawValue();\r\n\t\tlet submittedBlogPost = new IBlog();\r\n\t\tif (this.blogPost()) {\r\n\t\t\tsubmittedBlogPost.id = this.blogPost()!.id;\r\n\t\t}\r\n\r\n\t\tsubmittedBlogPost.title = rawData.title;\r\n\t\tsubmittedBlogPost.description = rawData.description;\r\n\t\tsubmittedBlogPost.thumbnail = rawData.thumbnail;\r\n\t\tsubmittedBlogPost.content = rawData.content;\r\n\r\n\t\tthis.submitEvent.emit(submittedBlogPost);\r\n\t}\r\n}\r\n","<div class=\"h-full flex flex-row\">\r\n\t<div class=\"flex flex-col w-1/2 p-4\">\r\n\t\t<form novalidate class=\"h-full flex flex-col\" [formGroup]=\"blogPostForm\">\r\n\t\t\t<mat-form-field>\r\n\t\t\t\t<mat-label>Title</mat-label>\r\n\t\t\t\t<input matInput placeholder=\"Placeholder\" formControlName=\"title\">\r\n\t\t\t</mat-form-field>\r\n\t\t\t<mat-form-field>\r\n\t\t\t\t<mat-label>Description</mat-label>\r\n\t\t\t\t<input matInput placeholder=\"Placeholder\" formControlName=\"description\">\r\n\t\t\t</mat-form-field>\r\n\t\t\t<ng-rhombus-thumbnail-control [thumbnailSrc]=\"thumbnailSource\" [width]=\"200\" [height]=\"112\"\r\n\t\t\t\t[disabled]=\"blogPost() !== undefined\" (onFileUploaded)=\"onFileUploaded($event)\"\r\n\t\t\t\t(onFileDeleted)=\"onFileDeleted()\"></ng-rhombus-thumbnail-control>\r\n\t\t\t<mat-form-field class=\"h-full\">\r\n\t\t\t\t<mat-label>Content</mat-label>\r\n\t\t\t\t<textarea matInput required cdkTextareaAutosize #autosize=\"cdkTextareaAutosize\" cdkAutosizeMinRows=\"1\"\r\n\t\t\t\t\tcdkAutosizeMaxRows=\"20\" formControlName=\"content\" (keyup)=\"onContentChange()\"></textarea>\r\n\t\t\t</mat-form-field>\r\n\t\t\t<div class=\"flex\">\r\n\t\t\t\t<button mat-raised-button class=\"\" (click)=\"onCancelClick()\" type=\"button\">Cancel</button>\r\n\t\t\t\t<div class=\"flex-1\"></div>\r\n\t\t\t\t<button mat-flat-button [disabled]=\"blogPostForm.invalid\" type=\"button\"\r\n\t\t\t\t\t(click)=\"onSubmit()\">Submit</button>\r\n\t\t\t</div>\r\n\t\t</form>\r\n\t</div>\r\n\r\n\t<div class=\"flex flex-col w-1/2 p-4 overflow-y-auto\">\r\n\t\t<mat-card>\r\n\t\t\t<mat-card-header>\r\n\t\t\t\t<mat-card-title>{{ blogPostForm.getRawValue().title }}</mat-card-title>\r\n\t\t\t\t<mat-card-subtitle>{{ blogPostForm.getRawValue().description }}</mat-card-subtitle>\r\n\t\t\t</mat-card-header>\r\n\t\t\t<img [src]=\"blogPostForm.getRawValue().thumbnail\" />\r\n\t\t\t<mat-card-content>\r\n\t\t\t\t<markdown class=\"prose\" [data]=\"contentData()\" />\r\n\t\t\t</mat-card-content>\r\n\t\t</mat-card>\r\n\t</div>\r\n</div>","import { Component, input } from '@angular/core';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { IBlog } from '../../models/blog';\r\nimport { MarkdownComponent } from 'ngx-markdown';\r\n\r\n@Component({\r\n selector: 'ng-rhombus-blog-post',\r\n imports: [MarkdownComponent, MatCardModule],\r\n templateUrl: './post.component.html',\r\n styleUrl: './post.component.scss'\r\n})\r\nexport class NgRhombusBlogPostComponent {\r\n\tdataSource = input<IBlog>();\r\n}\r\n","<<<<<<< HEAD\r\n\r\n<mat-card>\r\n\t<mat-card-header>\r\n\t\t<mat-card-title>{{ dataSource()?.title }}</mat-card-title>\r\n\t\t<mat-card-subtitle>{{ dataSource()?.description }}</mat-card-subtitle>\r\n\t</mat-card-header>\r\n\t<img [src]=\"dataSource()?.thumbnail\" />\r\n\t<mat-card-content>\r\n\t\t<markdown class=\"prose\" [data]=\"dataSource()?.content\" />\r\n\t</mat-card-content>","import { Component } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'ng-rhombus-Blog-delete-post',\r\n imports: [MatButtonModule, MatDialogModule],\r\n templateUrl: './delete-post.component.html',\r\n styleUrl: './delete-post.component.scss'\r\n})\r\nexport class NgRhombusBlogDeletePostComponent {\r\n\r\n}\r\n","<h2 mat-dialog-title>Blog Post - Delete</h2>\r\n<mat-dialog-content>\r\n <p>Would you like to delete this blog post?</p>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <button mat-button [mat-dialog-close]=\"false\" cdkFocusInitial>Cancel</button>\r\n <button mat-button [mat-dialog-close]=\"true\">Confirm</button>\r\n</mat-dialog-actions>","/*\r\n * Public API Surface of @doug-williamson/ng-rhombus/shell\r\n */\r\n\r\nexport * from './components/list/list.component';\r\nexport * from './components/latest/latest.component';\r\nexport * from './components/table/table.component';\r\nexport * from './components/form/form.component';\r\nexport * from './components/post/post.component';\r\nexport * from './components/dialogs/delete-post/delete-post.component';\r\n\r\nexport * from './services/blog.service';\r\nexport * from './services/thumbnail.service';\r\n\r\nexport * from './models/blog';","\r\nexport class IHome {\r\n id!: string;\r\n title!: string;\r\n description!: string;\r\n}","import { Component, OnInit, effect, inject, input, output } from '@angular/core';\r\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { IHome } from '../models/home';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatButtonModule } from '@angular/material/button';\r\n\r\n@Component({\r\n selector: 'ng-rhombus-home-admin',\r\n imports: [MatButtonModule, MatToolbarModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule],\r\n templateUrl: './admin.html',\r\n styleUrl: './admin.scss'\r\n})\r\nexport class NgRhombusHomeAdminComponent implements OnInit {\r\n formAdminData = input<IHome | undefined>(undefined);\r\n cancelEvent = output<void>();\r\n submitEvent = output<IHome>();\r\n\r\n homeAdminForm!: FormGroup;\r\n private fb = inject(FormBuilder);\r\n\r\n ngOnInit(): void {\r\n // build once\r\n this.homeAdminForm = this.fb.group({\r\n title: ['', Validators.required],\r\n description: ['', Validators.required],\r\n // add other fields here...\r\n });\r\n\r\n // react to input changes (runs when data arrives)\r\n effect(() => {\r\n const data = this.formAdminData();\r\n if (data) {\r\n this.homeAdminForm.patchValue(data, { emitEvent: false });\r\n }\r\n });\r\n }\r\n\r\n onSubmit() {\r\n if (this.homeAdminForm.invalid) {\r\n return;\r\n }\r\n\r\n const rawData: IHome = this.homeAdminForm.getRawValue();\r\n let submittedHomeAdmin = new IHome();\r\n if (this.formAdminData()) {\r\n submittedHomeAdmin.id = this.formAdminData()!.id;\r\n }\r\n\r\n submittedHomeAdmin.title = rawData.title;\r\n submittedHomeAdmin.description = rawData.description;\r\n\r\n this.submitEvent.emit(submittedHomeAdmin);\r\n }\r\n\r\n onCancelClick() {\r\n console.log('cancel');\r\n }\r\n}\r\n","<mat-toolbar class=\"header-theme\">\r\n\t<span>Admin Component</span>\r\n</mat-toolbar>\r\n<div class=\"h-full flex flex-row\">\r\n\t<div class=\"flex flex-col w-1/2 p-4\">\r\n\t\t<form novalidate class=\"h-full flex flex-col\" [formGroup]=\"homeAdminForm\">\r\n\t\t\t<mat-form-field>\r\n\t\t\t\t<mat-label>Title</mat-label>\r\n\t\t\t\t<input matInput placeholder=\"Placeholder\" formControlName=\"title\">\r\n\t\t\t</mat-form-field>\r\n\t\t\t<mat-form-field>\r\n\t\t\t\t<mat-label>Description</mat-label>\r\n\t\t\t\t<input matInput placeholder=\"Placeholder\" formControlName=\"description\">\r\n\t\t\t</mat-form-field>\r\n\r\n\t\t\t<div class=\"flex\">\r\n\t\t\t\t<button mat-raised-button class=\"\" (click)=\"onCancelClick()\" type=\"button\">Cancel</button>\r\n\t\t\t\t<div class=\"flex-1\"></div>\r\n\t\t\t\t<button mat-flat-button [disabled]=\"homeAdminForm.invalid\" type=\"button\"\r\n\t\t\t\t\t(click)=\"onSubmit()\">Submit</button>\r\n\t\t\t</div>\r\n\t\t</form>\r\n\t</div>\r\n</div>","// ...existing code...\r\nimport { Injectable, inject, signal } from '@angular/core';\r\nimport {\r\n Firestore, CollectionReference, DocumentReference,\r\n collection, doc, getDocs, getDoc, addDoc, setDoc, updateDoc, deleteDoc,\r\n query, orderBy, serverTimestamp\r\n} from '@angular/fire/firestore';\r\n\r\nexport enum SocialsSource {\r\n Twitch = 'Twitch',\r\n YouTube = 'YouTube',\r\n Instagram = 'Instagram',\r\n TikTok = 'TikTok',\r\n Bluesky = 'Bluesky'\r\n}\r\n\r\nexport interface ISocial {\r\n id: string;\r\n source: SocialsSource;\r\n url: string;\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class NgRhombusSocialsService {\r\n private firestore = inject(Firestore);\r\n private socialsRef = collection(this.firestore, 'socials') as CollectionReference<ISocial>;\r\n\r\n socials = signal<ISocial[]>([]);\r\n\r\n // List\r\n async fetchAll(): Promise<ISocial[]> {\r\n const q = query(this.socialsRef, orderBy('source', 'asc'));\r\n const snap = await getDocs(q);\r\n const items = snap.docs.map(d => ({ ...(d.data() as ISocial), id: d.id, }));\r\n this.socials.set(items);\r\n return items;\r\n }\r\n\r\n // Read by id\r\n async fetchById(id: string): Promise<ISocial | undefined> {\r\n const ref = doc(this.socialsRef, id) as DocumentReference<ISocial>;\r\n const d = await getDoc(ref);\r\n return d.exists() ? ({ ...(d.data() as ISocial), id: d.id, }) : undefined;\r\n }\r\n\r\n // Create (auto-id)\r\n async create(social: Omit<ISocial, 'id'>): Promise<string> {\r\n const payload = { ...social, updatedAt: serverTimestamp() } as any;\r\n const newDoc = await addDoc(this.socialsRef, payload);\r\n // Optimistic cache update\r\n this.socials.set([...this.socials(), { ...(social as ISocial), id: newDoc.id, }]);\r\n return newDoc.id;\r\n }\r\n\r\n // Update (partial)\r\n async update(id: string, patch: Partial<Omit<ISocial, 'id'>>): Promise<void> {\r\n const ref = doc(this.socialsRef, id) as DocumentReference<ISocial>;\r\n await updateDoc(ref, { ...patch, updatedAt: serverTimestamp() } as any);\r\n this.socials.set(this.socials().map(s => (s.id === id ? { ...s, ...(patch as ISocial) } : s)));\r\n }\r\n\r\n // Delete\r\n async remove(id: string): Promise<void> {\r\n const ref = doc(this.socialsRef, id) as DocumentReference<ISocial>;\r\n await deleteDoc(ref);\r\n this.socials.set(this.socials().filter(s => s.id !== id));\r\n }\r\n}\r\n// ...existing code...","import { Component, input } from '@angular/core';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { ISocial, SocialsSource } from '../socials.service';\r\n\r\n@Component({\r\n selector: 'ng-rhombus-socials-list',\r\n standalone: true,\r\n imports: [MatToolbarModule, MatIconModule],\r\n templateUrl: './list.component.html',\r\n styleUrls: ['./list.component.scss']\r\n})\r\nexport class NgRhombusSocialsListComponent {\r\n socials = input<ISocial[]>([]);\r\n\r\n // Map source to Material icon names (adjust as desired)\r\n iconFor(source?: SocialsSource): string {\r\n switch (source) {\r\n case SocialsSource.Twitch: return 'sports_esports';\r\n case SocialsSource.YouTube: return 'ondemand_video';\r\n case SocialsSource.Instagram: return 'camera_alt';\r\n case SocialsSource.TikTok: return 'music_note';\r\n case SocialsSource.Bluesky: return 'cloud';\r\n default: return 'link';\r\n }\r\n }\r\n\r\n openUrl(url?: string) {\r\n if (!url) return;\r\n window.open(url, '_blank', 'noopener');\r\n }\r\n}","@if ((socials()).length === 0) {\r\n<p>No socials found.</p>\r\n} @else {\r\n<div class=\"toolbar-list\">\r\n @for (s of socials(); track s.id) {\r\n <mat-toolbar class=\"social-toolbar actionable\" color=\"primary\" role=\"button\" tabindex=\"0\" (click)=\"openUrl(s.url)\"\r\n aria-label=\"Open {{ s.source }} link\">\r\n <mat-icon class=\"left\">{{ iconFor(s.source) }}</mat-icon>\r\n <span class=\"center\">{{ s.source }}</span>\r\n @if (s.url) {\r\n <mat-icon class=\"right\">open_in_new</mat-icon>\r\n }\r\n </mat-toolbar>\r\n }\r\n</div>\r\n}","import { Component, input, inject, signal } from '@angular/core';\r\nimport { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { ISocial, NgRhombusSocialsService, SocialsSource } from '../socials.service';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatSelectModule } from '@angular/material/select';\r\n\r\n@Component({\r\n selector: 'ng-rhombus-socials-table',\r\n standalone: true,\r\n imports: [MatTableModule, MatButtonModule, MatSelectModule, MatIconModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule],\r\n templateUrl: './table.component.html',\r\n styleUrls: ['./table.component.scss']\r\n})\r\nexport class NgRhombusSocialsTableComponent {\r\n socials = input<ISocial[]>([]);\r\n displayedColumns = ['id', 'source', 'url', 'actions'];\r\n\r\n // Dropdown options\r\n socialTypeOptions = [\r\n { label: 'Twitch', value: SocialsSource.Twitch },\r\n { label: 'YouTube', value: SocialsSource.YouTube },\r\n { label: 'Instagram', value: SocialsSource.Instagram },\r\n { label: 'TikTok', value: SocialsSource.TikTok },\r\n { label: 'Bluesky', value: SocialsSource.Bluesky }\r\n ];\r\n\r\n private fb = inject(FormBuilder);\r\n private svc = inject(NgRhombusSocialsService);\r\n\r\n // simple inline form state\r\n editingId = signal<string | null>(null);\r\n form = this.fb.group({\r\n source: this.fb.control<SocialsSource | null>(null, { validators: [Validators.required] }),\r\n url: this.fb.control<string>('', { nonNullable: true, validators: [Validators.required] })\r\n });\r\n\r\n startCreate() {\r\n this.editingId.set('');\r\n this.form.reset({ source: null, url: '' });\r\n }\r\n startEdit(row: ISocial) {\r\n this.editingId.set(row.id);\r\n this.form.reset({ source: row.source, url: row.url });\r\n }\r\n cancelEdit() {\r\n this.editingId.set(null);\r\n this.form.reset({ source: null, url: '' });\r\n }\r\n\r\n async save() {\r\n const id = this.editingId();\r\n const { source, url } = this.form.getRawValue();\r\n if (!source || !url) return;\r\n\r\n if (id === '') {\r\n await this.svc.create({ source, url });\r\n } else {\r\n await this.svc.update(id!, { source, url });\r\n }\r\n this.cancelEdit();\r\n }\r\n\r\n async delete(row: ISocial) {\r\n await this.svc.remove(row.id);\r\n }\r\n}","<div class=\"actions-bar\">\r\n <button mat-button color=\"primary\" (click)=\"startCreate()\">\r\n <mat-icon>add</mat-icon> Add Social\r\n </button>\r\n</div>\r\n\r\n<table mat-table [dataSource]=\"socials()\" class=\"mat-elevation-z1\">\r\n <ng-container matColumnDef=\"id\">\r\n <th mat-header-cell *matHeaderCellDef>ID</th>\r\n <td mat-cell *matCellDef=\"let s\">{{ s.id }}</td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"source\">\r\n <th mat-header-cell *matHeaderCellDef>Source</th>\r\n <td mat-cell *matCellDef=\"let s\">{{ s.source }}</td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"url\">\r\n <th mat-header-cell *matHeaderCellDef>URL</th>\r\n <td mat-cell *matCellDef=\"let s\">\r\n <a [href]=\"s.url\" target=\"_blank\" rel=\"noopener\">{{ s.url }}</a>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"actions\">\r\n <th mat-header-cell *matHeaderCellDef>Actions</th>\r\n <td mat-cell *matCellDef=\"let s\">\r\n <button mat-icon-button color=\"primary\" (click)=\"startEdit(s)\"><mat-icon>edit</mat-icon></button>\r\n <button mat-icon-button color=\"warn\" (click)=\"delete(s)\"><mat-icon>delete</mat-icon></button>\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\r\n</table>\r\n\r\n@if (editingId() !== null) {\r\n<form class=\"edit-form\" [formGroup]=\"form\" (ngSubmit)=\"save()\">\r\n <h3>{{ editingId() === '' ? 'Create Social' : 'Edit Social' }}</h3>\r\n\r\n <mat-form-field appearance=\"fill\" class=\"full-width\">\r\n <mat-label>Source</mat-label>\r\n <mat-select formControlName=\"source\">\r\n @for (opt of socialTypeOptions; track opt.value) {\r\n <mat-option [value]=\"opt.value\">{{ opt.label }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <div class=\"form-row\">\r\n <mat-form-field appearance=\"fill\" class=\"full-width\">\r\n <mat-label>URL</mat-label>\r\n <input matInput formControlName=\"url\" placeholder=\"https://example.com/handle\">\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"form-actions\">\r\n <button mat-button type=\"submit\" color=\"primary\">Save</button>\r\n <button mat-button type=\"button\" (click)=\"cancelEdit()\">Cancel</button>\r\n </div>\r\n</form>\r\n}\r\n\r\n@if ((socials()).length === 0) {\r\n<p>No socials found.</p>\r\n}","/*\r\n * Public API Surface of @doug-williamson/ng-rhombus\r\n */\r\n\r\nexport * from './lib/shell/public-api';\r\nexport * from './lib/blog/public-api';\r\nexport * from './lib/home/public-api';\r\nexport * from './lib/socials/public-api';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i2.WrapperService","i3","i4","i6","i5"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@doug-williamson/ng-rhombus",
3
- "version": "0.0.19",
3
+ "version": "0.0.20",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^21.0.0",
6
6
  "@angular/core": "^21.0.0",