@rivet-health/design-system 28.2.2 → 28.2.4

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.
@@ -7,8 +7,9 @@ import * as i3 from "../../../visualization/highlight/highlight.component";
7
7
  import * as i4 from "../../../icon/icon.component";
8
8
  import * as i5 from "../../../input/search/search.component";
9
9
  import * as i6 from "../../../overlay/modal/side-sheet/side-sheet.component";
10
- import * as i7 from "../../../format/truncate/truncate.component";
11
- import * as i8 from "../view-menu/view-menu.component";
10
+ import * as i7 from "../../../overlay/callout/tooltip/tooltip.directive";
11
+ import * as i8 from "../../../format/truncate/truncate.component";
12
+ import * as i9 from "../view-menu/view-menu.component";
12
13
  export class AllViewsModalComponent {
13
14
  constructor() {
14
15
  this.topOffset = 0;
@@ -28,10 +29,10 @@ export class AllViewsModalComponent {
28
29
  }
29
30
  }
30
31
  AllViewsModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AllViewsModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
31
- AllViewsModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: AllViewsModalComponent, selector: "riv-all-views-modal", inputs: { manager: "manager", topOffset: "topOffset" }, outputs: { close: "close" }, ngImport: i0, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <riv-side-sheet [topOffset]=\"topOffset\" (close)=\"close.emit()\">\n <div class=\"content\">\n <header>\n <span class=\"title\">All views</span>\n <button\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'X'\"\n (click)=\"close.emit()\"\n ></button>\n </header>\n\n <riv-search\n (valueChange)=\"\n manager?.actions?.next({\n type: 'setAllViewsSearchQuery',\n query: $event\n })\n \"\n [value]=\"s.all.search\"\n placeholder=\"Search\"\n ></riv-search>\n\n <div class=\"views\">\n <!-- View sections by permission type -->\n <ng-container\n *ngIf=\"s.all.privateViews.length > 0\"\n [ngTemplateOutlet]=\"permissionSection\"\n [ngTemplateOutletContext]=\"{\n permission: 'private',\n open: s.all.privateOpen,\n openChange: getOpenChange('private'),\n views: s.all.privateViews,\n title: getPermissionTitle('private'),\n description: getPermissionDescription('private')\n }\"\n ></ng-container>\n <ng-container\n *ngIf=\"s.all.sharedViews.length > 0\"\n [ngTemplateOutlet]=\"permissionSection\"\n [ngTemplateOutletContext]=\"{\n permission: 'shared',\n open: s.all.sharedOpen,\n openChange: getOpenChange('shared'),\n views: s.all.sharedViews,\n title: getPermissionTitle('shared'),\n description: getPermissionDescription('shared')\n }\"\n ></ng-container>\n <ng-container\n *ngIf=\"s.all.publicViews.length > 0\"\n [ngTemplateOutlet]=\"permissionSection\"\n [ngTemplateOutletContext]=\"{\n permission: 'public',\n open: s.all.publicOpen,\n openChange: getOpenChange('public'),\n views: s.all.publicViews,\n title: getPermissionTitle('public'),\n description: getPermissionDescription('public')\n }\"\n ></ng-container>\n\n <!-- Permission section -->\n <ng-template\n #permissionSection\n let-permission=\"permission\"\n let-open=\"open\"\n let-openChange=\"openChange\"\n let-views=\"views\"\n let-title=\"title\"\n let-description=\"description\"\n >\n <div class=\"permission-section\">\n <button\n class=\"permission-header\"\n (click)=\"openChange(!open)\"\n [disabled]=\"!!s.all.search\"\n >\n <div class=\"permission-header-content\">\n <h3 class=\"permission-title\">{{ title }}</h3>\n <span class=\"permission-description\">{{ description }}</span>\n </div>\n <riv-icon\n [name]=\"open ? 'ChevronUp' : 'ChevronDown'\"\n [size]=\"20\"\n ></riv-icon>\n </button>\n\n <div class=\"permission-content\" *ngIf=\"open\">\n <div class=\"views-list\" *ngIf=\"views.length > 0\">\n <button\n *ngFor=\"let view of views; trackBy: trackById\"\n class=\"view-item\"\n (click)=\"\n manager?.actions?.next({\n type: 'setActiveView',\n id: view.id\n });\n close.emit()\n \"\n >\n <div class=\"view-title\" rivTruncate>\n <riv-highlight\n [text]=\"view.title\"\n [indices]=\"view.titleHighlightIndices ?? []\"\n >\n </riv-highlight>\n </div>\n <riv-view-menu\n [manager]=\"manager\"\n [view]=\"view\"\n [menuContext]=\"'all-views'\"\n ></riv-view-menu>\n <button\n class=\"enable-view\"\n [class.enabled]=\"view.enabled\"\n (click)=\"\n $event.stopPropagation();\n manager?.actions?.next({\n type: 'setEnabled',\n id: view.id,\n enabled: !view.enabled\n })\n \"\n [disabled]=\"view.system\"\n >\n <riv-icon\n [name]=\"\n view.system ? 'Lock' : view.enabled ? 'Eye' : 'EyeOff'\n \"\n [size]=\"20\"\n ></riv-icon>\n </button>\n </button>\n </div>\n </div>\n </div>\n </ng-template>\n </div>\n </div>\n </riv-side-sheet>\n</ng-container>\n", styles: [".content{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-medium);height:100%}header{display:flex;justify-content:space-between;align-items:center}.title{font:var(--title-02)}.views{flex-grow:1;overflow-y:auto;display:flex;flex-direction:column;gap:var(--size-xlarge)}.permission-section{display:flex;flex-direction:column}.permission-header{display:flex;justify-content:space-between;align-items:center;width:100%;padding:var(--size-xsmall);border:none;background:none;cursor:pointer;gap:var(--size-small);border-radius:var(--border-radius-medium);transition:background-color var(--short-transition)}.permission-header:disabled{cursor:default;color:var(--type-light-disabled)}.permission-header:hover:not(:disabled){background-color:var(--surface-light-1)}.permission-header:active:not(:disabled){background-color:var(--surface-light-2)}.permission-header-content{display:flex;flex-direction:column;align-items:flex-start;text-align:left}.permission-title{font:var(--title-02)}.permission-description{font:var(--body-medium);color:var(--type-light-low-contrast)}.permission-content{padding-left:var(--size-small);padding-top:var(--size-small)}.views-list{display:flex;flex-direction:column;gap:var(--size-small)}.view-item{display:flex;align-items:center;padding:var(--size-xsmall) var(--size-small);border-radius:var(--border-radius-small);cursor:pointer;background-color:var(--surface-light-0);transition:background-color var(--short-transition)}.view-item:hover{background-color:var(--surface-light-1)}.view-item:active{background-color:var(--surface-light-2)}.view-title{text-align:left;flex-grow:1;font:var(--input-medium)}.view-item riv-view-menu{align-self:flex-end;opacity:0;transition:opacity var(--short-transition)}.view-item:hover riv-view-menu{opacity:1}.enable-view{cursor:pointer;display:inline-flex;justify-content:center;align-items:center;padding:0 var(--size-xsmall);transition:color var(--medium-transition);color:var(--type-light-low-contrast)}.enable-view.enabled{color:var(--type-light-link)}.enable-view.enabled:hover{color:var(--type-light-link-hover)}.enable-view.enabled:active{color:var(--type-light-link-active)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition", "active"] }, { kind: "component", type: i3.HighlightComponent, selector: "riv-highlight", inputs: ["text", "indices"] }, { kind: "component", type: i4.IconComponent, selector: "riv-icon", inputs: ["name", "size", "customSize", "strokeWidth"] }, { kind: "component", type: i5.SearchComponent, selector: "riv-search", inputs: ["placeholder", "name", "labelTemplate"] }, { kind: "component", type: i6.SideSheetComponent, selector: "riv-side-sheet", inputs: ["topOffset", "width", "obscure"], outputs: ["close"] }, { kind: "component", type: i7.TruncateComponent, selector: "[rivTruncate]", inputs: ["maxTooltipWidth"] }, { kind: "component", type: i8.ViewMenuComponent, selector: "riv-view-menu", inputs: ["manager", "view", "menuContext"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
32
+ AllViewsModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: AllViewsModalComponent, selector: "riv-all-views-modal", inputs: { manager: "manager", topOffset: "topOffset" }, outputs: { close: "close" }, ngImport: i0, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <riv-side-sheet [topOffset]=\"topOffset\" (close)=\"close.emit()\">\n <div class=\"content\">\n <header>\n <span class=\"title\">All views</span>\n <button\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'X'\"\n (click)=\"close.emit()\"\n ></button>\n </header>\n\n <riv-search\n (valueChange)=\"\n manager?.actions?.next({\n type: 'setAllViewsSearchQuery',\n query: $event\n })\n \"\n [value]=\"s.all.search\"\n placeholder=\"Search\"\n ></riv-search>\n\n <div class=\"views\">\n <!-- View sections by permission type -->\n <ng-container\n *ngIf=\"s.all.privateViews.length > 0\"\n [ngTemplateOutlet]=\"permissionSection\"\n [ngTemplateOutletContext]=\"{\n permission: 'private',\n open: s.all.privateOpen,\n openChange: getOpenChange('private'),\n views: s.all.privateViews,\n title: getPermissionTitle('private'),\n description: getPermissionDescription('private')\n }\"\n ></ng-container>\n <ng-container\n *ngIf=\"s.all.sharedViews.length > 0\"\n [ngTemplateOutlet]=\"permissionSection\"\n [ngTemplateOutletContext]=\"{\n permission: 'shared',\n open: s.all.sharedOpen,\n openChange: getOpenChange('shared'),\n views: s.all.sharedViews,\n title: getPermissionTitle('shared'),\n description: getPermissionDescription('shared')\n }\"\n ></ng-container>\n <ng-container\n *ngIf=\"s.all.publicViews.length > 0\"\n [ngTemplateOutlet]=\"permissionSection\"\n [ngTemplateOutletContext]=\"{\n permission: 'public',\n open: s.all.publicOpen,\n openChange: getOpenChange('public'),\n views: s.all.publicViews,\n title: getPermissionTitle('public'),\n description: getPermissionDescription('public')\n }\"\n ></ng-container>\n\n <!-- Permission section -->\n <ng-template\n #permissionSection\n let-permission=\"permission\"\n let-open=\"open\"\n let-openChange=\"openChange\"\n let-views=\"views\"\n let-title=\"title\"\n let-description=\"description\"\n >\n <div class=\"permission-section\">\n <button\n class=\"permission-header\"\n (click)=\"openChange(!open)\"\n [disabled]=\"!!s.all.search\"\n >\n <div class=\"permission-header-content\">\n <h3 class=\"permission-title\">{{ title }}</h3>\n <span class=\"permission-description\">{{ description }}</span>\n </div>\n <riv-icon\n [name]=\"open ? 'ChevronUp' : 'ChevronDown'\"\n [size]=\"20\"\n ></riv-icon>\n </button>\n\n <div class=\"permission-content\" *ngIf=\"open\">\n <div class=\"views-list\" *ngIf=\"views.length > 0\">\n <button\n *ngFor=\"let view of views; trackBy: trackById\"\n class=\"view-item\"\n (click)=\"\n manager?.actions?.next({\n type: 'setActiveView',\n id: view.id\n });\n close.emit()\n \"\n >\n <div class=\"view-title\" rivTruncate>\n <riv-highlight\n [text]=\"view.title\"\n [indices]=\"view.titleHighlightIndices ?? []\"\n >\n </riv-highlight>\n </div>\n <riv-view-menu\n [manager]=\"manager\"\n [view]=\"view\"\n [menuContext]=\"'all-views'\"\n ></riv-view-menu>\n <button\n class=\"enable-view\"\n [class.enabled]=\"view.enabled && !view.system\"\n (click)=\"\n $event.stopPropagation();\n manager?.actions?.next({\n type: 'setEnabled',\n id: view.id,\n enabled: !view.enabled\n })\n \"\n [disabled]=\"view.system\"\n >\n <riv-icon\n *ngIf=\"view.enabled\"\n [name]=\"view.system ? 'Lock' : 'Eye'\"\n [rivTooltip]=\"view.system ? '' : 'Hide tab'\"\n [size]=\"20\"\n ></riv-icon>\n <riv-icon\n *ngIf=\"!view.enabled\"\n [name]=\"'EyeOff'\"\n [rivTooltip]=\"'Show tab'\"\n [size]=\"20\"\n ></riv-icon>\n </button>\n </button>\n </div>\n </div>\n </div>\n </ng-template>\n </div>\n </div>\n </riv-side-sheet>\n</ng-container>\n", styles: [".content{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-medium);height:100%}header{display:flex;justify-content:space-between;align-items:center}.title{font:var(--title-02)}.views{flex-grow:1;overflow-y:auto;display:flex;flex-direction:column;gap:var(--size-xlarge)}.permission-section{display:flex;flex-direction:column}.permission-header{display:flex;justify-content:space-between;align-items:center;width:100%;padding:var(--size-xsmall);border:none;background:none;cursor:pointer;gap:var(--size-small);border-radius:var(--border-radius-medium);transition:background-color var(--short-transition)}.permission-header:disabled{cursor:default;color:var(--type-light-disabled)}.permission-header:hover:not(:disabled){background-color:var(--surface-light-1)}.permission-header:active:not(:disabled){background-color:var(--surface-light-2)}.permission-header-content{display:flex;flex-direction:column;align-items:flex-start;text-align:left}.permission-title{font:var(--title-02)}.permission-description{font:var(--body-medium);color:var(--type-light-low-contrast)}.permission-content{padding-left:var(--size-small);padding-top:var(--size-small)}.views-list{display:flex;flex-direction:column;gap:var(--size-small)}.view-item{display:flex;align-items:center;padding:var(--size-xsmall) var(--size-small);border-radius:var(--border-radius-small);cursor:pointer;background-color:var(--surface-light-0);transition:background-color var(--short-transition)}.view-item:hover{background-color:var(--surface-light-1)}.view-item:active{background-color:var(--surface-light-2)}.view-title{text-align:left;flex-grow:1;font:var(--input-medium)}.view-item riv-view-menu{align-self:flex-end;opacity:0;transition:opacity var(--short-transition)}.view-item:hover riv-view-menu{opacity:1}.enable-view{cursor:pointer;display:inline-flex;justify-content:center;align-items:center;padding:0 var(--size-xsmall);transition:color var(--medium-transition);color:var(--type-light-low-contrast)}.enable-view.enabled{color:var(--type-light-link)}.enable-view.enabled:hover{color:var(--type-light-link-hover)}.enable-view.enabled:active{color:var(--type-light-link-active)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition", "active"] }, { kind: "component", type: i3.HighlightComponent, selector: "riv-highlight", inputs: ["text", "indices"] }, { kind: "component", type: i4.IconComponent, selector: "riv-icon", inputs: ["name", "size", "customSize", "strokeWidth"] }, { kind: "component", type: i5.SearchComponent, selector: "riv-search", inputs: ["placeholder", "name", "labelTemplate"] }, { kind: "component", type: i6.SideSheetComponent, selector: "riv-side-sheet", inputs: ["topOffset", "width", "obscure"], outputs: ["close"] }, { kind: "directive", type: i7.TooltipDirective, selector: "[rivTooltip]", inputs: ["rivTooltip", "rivTooltipTheme", "rivTooltipMaxWidth", "rivTooltipPreferredPosition", "rivTooltipCloseDelay"] }, { kind: "component", type: i8.TruncateComponent, selector: "[rivTruncate]", inputs: ["maxTooltipWidth"] }, { kind: "component", type: i9.ViewMenuComponent, selector: "riv-view-menu", inputs: ["manager", "view", "menuContext"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
32
33
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AllViewsModalComponent, decorators: [{
33
34
  type: Component,
34
- args: [{ selector: 'riv-all-views-modal', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <riv-side-sheet [topOffset]=\"topOffset\" (close)=\"close.emit()\">\n <div class=\"content\">\n <header>\n <span class=\"title\">All views</span>\n <button\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'X'\"\n (click)=\"close.emit()\"\n ></button>\n </header>\n\n <riv-search\n (valueChange)=\"\n manager?.actions?.next({\n type: 'setAllViewsSearchQuery',\n query: $event\n })\n \"\n [value]=\"s.all.search\"\n placeholder=\"Search\"\n ></riv-search>\n\n <div class=\"views\">\n <!-- View sections by permission type -->\n <ng-container\n *ngIf=\"s.all.privateViews.length > 0\"\n [ngTemplateOutlet]=\"permissionSection\"\n [ngTemplateOutletContext]=\"{\n permission: 'private',\n open: s.all.privateOpen,\n openChange: getOpenChange('private'),\n views: s.all.privateViews,\n title: getPermissionTitle('private'),\n description: getPermissionDescription('private')\n }\"\n ></ng-container>\n <ng-container\n *ngIf=\"s.all.sharedViews.length > 0\"\n [ngTemplateOutlet]=\"permissionSection\"\n [ngTemplateOutletContext]=\"{\n permission: 'shared',\n open: s.all.sharedOpen,\n openChange: getOpenChange('shared'),\n views: s.all.sharedViews,\n title: getPermissionTitle('shared'),\n description: getPermissionDescription('shared')\n }\"\n ></ng-container>\n <ng-container\n *ngIf=\"s.all.publicViews.length > 0\"\n [ngTemplateOutlet]=\"permissionSection\"\n [ngTemplateOutletContext]=\"{\n permission: 'public',\n open: s.all.publicOpen,\n openChange: getOpenChange('public'),\n views: s.all.publicViews,\n title: getPermissionTitle('public'),\n description: getPermissionDescription('public')\n }\"\n ></ng-container>\n\n <!-- Permission section -->\n <ng-template\n #permissionSection\n let-permission=\"permission\"\n let-open=\"open\"\n let-openChange=\"openChange\"\n let-views=\"views\"\n let-title=\"title\"\n let-description=\"description\"\n >\n <div class=\"permission-section\">\n <button\n class=\"permission-header\"\n (click)=\"openChange(!open)\"\n [disabled]=\"!!s.all.search\"\n >\n <div class=\"permission-header-content\">\n <h3 class=\"permission-title\">{{ title }}</h3>\n <span class=\"permission-description\">{{ description }}</span>\n </div>\n <riv-icon\n [name]=\"open ? 'ChevronUp' : 'ChevronDown'\"\n [size]=\"20\"\n ></riv-icon>\n </button>\n\n <div class=\"permission-content\" *ngIf=\"open\">\n <div class=\"views-list\" *ngIf=\"views.length > 0\">\n <button\n *ngFor=\"let view of views; trackBy: trackById\"\n class=\"view-item\"\n (click)=\"\n manager?.actions?.next({\n type: 'setActiveView',\n id: view.id\n });\n close.emit()\n \"\n >\n <div class=\"view-title\" rivTruncate>\n <riv-highlight\n [text]=\"view.title\"\n [indices]=\"view.titleHighlightIndices ?? []\"\n >\n </riv-highlight>\n </div>\n <riv-view-menu\n [manager]=\"manager\"\n [view]=\"view\"\n [menuContext]=\"'all-views'\"\n ></riv-view-menu>\n <button\n class=\"enable-view\"\n [class.enabled]=\"view.enabled\"\n (click)=\"\n $event.stopPropagation();\n manager?.actions?.next({\n type: 'setEnabled',\n id: view.id,\n enabled: !view.enabled\n })\n \"\n [disabled]=\"view.system\"\n >\n <riv-icon\n [name]=\"\n view.system ? 'Lock' : view.enabled ? 'Eye' : 'EyeOff'\n \"\n [size]=\"20\"\n ></riv-icon>\n </button>\n </button>\n </div>\n </div>\n </div>\n </ng-template>\n </div>\n </div>\n </riv-side-sheet>\n</ng-container>\n", styles: [".content{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-medium);height:100%}header{display:flex;justify-content:space-between;align-items:center}.title{font:var(--title-02)}.views{flex-grow:1;overflow-y:auto;display:flex;flex-direction:column;gap:var(--size-xlarge)}.permission-section{display:flex;flex-direction:column}.permission-header{display:flex;justify-content:space-between;align-items:center;width:100%;padding:var(--size-xsmall);border:none;background:none;cursor:pointer;gap:var(--size-small);border-radius:var(--border-radius-medium);transition:background-color var(--short-transition)}.permission-header:disabled{cursor:default;color:var(--type-light-disabled)}.permission-header:hover:not(:disabled){background-color:var(--surface-light-1)}.permission-header:active:not(:disabled){background-color:var(--surface-light-2)}.permission-header-content{display:flex;flex-direction:column;align-items:flex-start;text-align:left}.permission-title{font:var(--title-02)}.permission-description{font:var(--body-medium);color:var(--type-light-low-contrast)}.permission-content{padding-left:var(--size-small);padding-top:var(--size-small)}.views-list{display:flex;flex-direction:column;gap:var(--size-small)}.view-item{display:flex;align-items:center;padding:var(--size-xsmall) var(--size-small);border-radius:var(--border-radius-small);cursor:pointer;background-color:var(--surface-light-0);transition:background-color var(--short-transition)}.view-item:hover{background-color:var(--surface-light-1)}.view-item:active{background-color:var(--surface-light-2)}.view-title{text-align:left;flex-grow:1;font:var(--input-medium)}.view-item riv-view-menu{align-self:flex-end;opacity:0;transition:opacity var(--short-transition)}.view-item:hover riv-view-menu{opacity:1}.enable-view{cursor:pointer;display:inline-flex;justify-content:center;align-items:center;padding:0 var(--size-xsmall);transition:color var(--medium-transition);color:var(--type-light-low-contrast)}.enable-view.enabled{color:var(--type-light-link)}.enable-view.enabled:hover{color:var(--type-light-link-hover)}.enable-view.enabled:active{color:var(--type-light-link-active)}\n"] }]
35
+ args: [{ selector: 'riv-all-views-modal', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <riv-side-sheet [topOffset]=\"topOffset\" (close)=\"close.emit()\">\n <div class=\"content\">\n <header>\n <span class=\"title\">All views</span>\n <button\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'X'\"\n (click)=\"close.emit()\"\n ></button>\n </header>\n\n <riv-search\n (valueChange)=\"\n manager?.actions?.next({\n type: 'setAllViewsSearchQuery',\n query: $event\n })\n \"\n [value]=\"s.all.search\"\n placeholder=\"Search\"\n ></riv-search>\n\n <div class=\"views\">\n <!-- View sections by permission type -->\n <ng-container\n *ngIf=\"s.all.privateViews.length > 0\"\n [ngTemplateOutlet]=\"permissionSection\"\n [ngTemplateOutletContext]=\"{\n permission: 'private',\n open: s.all.privateOpen,\n openChange: getOpenChange('private'),\n views: s.all.privateViews,\n title: getPermissionTitle('private'),\n description: getPermissionDescription('private')\n }\"\n ></ng-container>\n <ng-container\n *ngIf=\"s.all.sharedViews.length > 0\"\n [ngTemplateOutlet]=\"permissionSection\"\n [ngTemplateOutletContext]=\"{\n permission: 'shared',\n open: s.all.sharedOpen,\n openChange: getOpenChange('shared'),\n views: s.all.sharedViews,\n title: getPermissionTitle('shared'),\n description: getPermissionDescription('shared')\n }\"\n ></ng-container>\n <ng-container\n *ngIf=\"s.all.publicViews.length > 0\"\n [ngTemplateOutlet]=\"permissionSection\"\n [ngTemplateOutletContext]=\"{\n permission: 'public',\n open: s.all.publicOpen,\n openChange: getOpenChange('public'),\n views: s.all.publicViews,\n title: getPermissionTitle('public'),\n description: getPermissionDescription('public')\n }\"\n ></ng-container>\n\n <!-- Permission section -->\n <ng-template\n #permissionSection\n let-permission=\"permission\"\n let-open=\"open\"\n let-openChange=\"openChange\"\n let-views=\"views\"\n let-title=\"title\"\n let-description=\"description\"\n >\n <div class=\"permission-section\">\n <button\n class=\"permission-header\"\n (click)=\"openChange(!open)\"\n [disabled]=\"!!s.all.search\"\n >\n <div class=\"permission-header-content\">\n <h3 class=\"permission-title\">{{ title }}</h3>\n <span class=\"permission-description\">{{ description }}</span>\n </div>\n <riv-icon\n [name]=\"open ? 'ChevronUp' : 'ChevronDown'\"\n [size]=\"20\"\n ></riv-icon>\n </button>\n\n <div class=\"permission-content\" *ngIf=\"open\">\n <div class=\"views-list\" *ngIf=\"views.length > 0\">\n <button\n *ngFor=\"let view of views; trackBy: trackById\"\n class=\"view-item\"\n (click)=\"\n manager?.actions?.next({\n type: 'setActiveView',\n id: view.id\n });\n close.emit()\n \"\n >\n <div class=\"view-title\" rivTruncate>\n <riv-highlight\n [text]=\"view.title\"\n [indices]=\"view.titleHighlightIndices ?? []\"\n >\n </riv-highlight>\n </div>\n <riv-view-menu\n [manager]=\"manager\"\n [view]=\"view\"\n [menuContext]=\"'all-views'\"\n ></riv-view-menu>\n <button\n class=\"enable-view\"\n [class.enabled]=\"view.enabled && !view.system\"\n (click)=\"\n $event.stopPropagation();\n manager?.actions?.next({\n type: 'setEnabled',\n id: view.id,\n enabled: !view.enabled\n })\n \"\n [disabled]=\"view.system\"\n >\n <riv-icon\n *ngIf=\"view.enabled\"\n [name]=\"view.system ? 'Lock' : 'Eye'\"\n [rivTooltip]=\"view.system ? '' : 'Hide tab'\"\n [size]=\"20\"\n ></riv-icon>\n <riv-icon\n *ngIf=\"!view.enabled\"\n [name]=\"'EyeOff'\"\n [rivTooltip]=\"'Show tab'\"\n [size]=\"20\"\n ></riv-icon>\n </button>\n </button>\n </div>\n </div>\n </div>\n </ng-template>\n </div>\n </div>\n </riv-side-sheet>\n</ng-container>\n", styles: [".content{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-medium);height:100%}header{display:flex;justify-content:space-between;align-items:center}.title{font:var(--title-02)}.views{flex-grow:1;overflow-y:auto;display:flex;flex-direction:column;gap:var(--size-xlarge)}.permission-section{display:flex;flex-direction:column}.permission-header{display:flex;justify-content:space-between;align-items:center;width:100%;padding:var(--size-xsmall);border:none;background:none;cursor:pointer;gap:var(--size-small);border-radius:var(--border-radius-medium);transition:background-color var(--short-transition)}.permission-header:disabled{cursor:default;color:var(--type-light-disabled)}.permission-header:hover:not(:disabled){background-color:var(--surface-light-1)}.permission-header:active:not(:disabled){background-color:var(--surface-light-2)}.permission-header-content{display:flex;flex-direction:column;align-items:flex-start;text-align:left}.permission-title{font:var(--title-02)}.permission-description{font:var(--body-medium);color:var(--type-light-low-contrast)}.permission-content{padding-left:var(--size-small);padding-top:var(--size-small)}.views-list{display:flex;flex-direction:column;gap:var(--size-small)}.view-item{display:flex;align-items:center;padding:var(--size-xsmall) var(--size-small);border-radius:var(--border-radius-small);cursor:pointer;background-color:var(--surface-light-0);transition:background-color var(--short-transition)}.view-item:hover{background-color:var(--surface-light-1)}.view-item:active{background-color:var(--surface-light-2)}.view-title{text-align:left;flex-grow:1;font:var(--input-medium)}.view-item riv-view-menu{align-self:flex-end;opacity:0;transition:opacity var(--short-transition)}.view-item:hover riv-view-menu{opacity:1}.enable-view{cursor:pointer;display:inline-flex;justify-content:center;align-items:center;padding:0 var(--size-xsmall);transition:color var(--medium-transition);color:var(--type-light-low-contrast)}.enable-view.enabled{color:var(--type-light-link)}.enable-view.enabled:hover{color:var(--type-light-link-hover)}.enable-view.enabled:active{color:var(--type-light-link-active)}\n"] }]
35
36
  }], propDecorators: { manager: [{
36
37
  type: Input
37
38
  }], topOffset: [{
@@ -39,4 +40,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
39
40
  }], close: [{
40
41
  type: Output
41
42
  }] } });
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsLXZpZXdzLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL25hdmlnYXRpb24vdmlld3MvYWxsLXZpZXdzLW1vZGFsL2FsbC12aWV3cy1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi9uYXZpZ2F0aW9uL3ZpZXdzL2FsbC12aWV3cy1tb2RhbC9hbGwtdmlld3MtbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7Ozs7Ozs7OztBQVFwQyxNQUFNLE9BQU8sc0JBQXNCO0lBTm5DO1FBY0UsY0FBUyxHQUFXLENBQUMsQ0FBQztRQUd0QixVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQVdqQyx1QkFBa0IsR0FBRyxRQUFRLENBQUMsa0JBQWtCLENBQUM7UUFDakQsNkJBQXdCLEdBQUcsUUFBUSxDQUFDLHdCQUF3QixDQUFDO0tBSzlEO0lBZkMsYUFBYSxDQUFDLFVBQW1DO1FBQy9DLE9BQU8sQ0FBQyxJQUFhLEVBQUUsRUFBRSxDQUN2QixJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUM7WUFDMUIsSUFBSSxFQUFFLG1CQUFtQjtZQUN6QixVQUFVO1lBQ1YsSUFBSTtTQUNMLENBQUMsQ0FBQztJQUNQLENBQUM7SUFLRCxTQUFTLENBQUMsQ0FBUyxFQUFFLElBQTZCO1FBQ2hELE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNqQixDQUFDOzttSEEzQlUsc0JBQXNCO3VHQUF0QixzQkFBc0IsZ0pDZm5DLDQ5SkErSUE7MkZEaElhLHNCQUFzQjtrQkFObEMsU0FBUzsrQkFDRSxxQkFBcUIsbUJBR2QsdUJBQXVCLENBQUMsTUFBTTs4QkFPL0MsT0FBTztzQkFETixLQUFLO2dCQUlOLFNBQVM7c0JBRFIsS0FBSztnQkFJTixLQUFLO3NCQURKLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUml2Vmlld3MgfSBmcm9tICcuLi9zdGF0ZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3Jpdi1hbGwtdmlld3MtbW9kYWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vYWxsLXZpZXdzLW1vZGFsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYWxsLXZpZXdzLW1vZGFsLmNvbXBvbmVudC5jc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEFsbFZpZXdzTW9kYWxDb21wb25lbnQ8XG4gIFUgZXh0ZW5kcyBSaXZWaWV3cy5Vc2VyLFxuICBWIGV4dGVuZHMgUml2Vmlld3MuVmlldzxVPixcbj4ge1xuICBASW5wdXQoKVxuICBtYW5hZ2VyPzogUml2Vmlld3MuTWFuYWdlcjxVLCBWPjtcblxuICBASW5wdXQoKVxuICB0b3BPZmZzZXQ6IG51bWJlciA9IDA7XG5cbiAgQE91dHB1dCgpXG4gIGNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIGdldE9wZW5DaGFuZ2UocGVybWlzc2lvbjogUml2Vmlld3MuVmlld1Blcm1pc3Npb24pOiAob3BlbjogYm9vbGVhbikgPT4gdm9pZCB7XG4gICAgcmV0dXJuIChvcGVuOiBib29sZWFuKSA9PlxuICAgICAgdGhpcy5tYW5hZ2VyPy5hY3Rpb25zPy5uZXh0KHtcbiAgICAgICAgdHlwZTogJ3NldEFsbFZpZXdzVG9nZ2xlJyxcbiAgICAgICAgcGVybWlzc2lvbixcbiAgICAgICAgb3BlbixcbiAgICAgIH0pO1xuICB9XG5cbiAgZ2V0UGVybWlzc2lvblRpdGxlID0gUml2Vmlld3MuZ2V0UGVybWlzc2lvblRpdGxlO1xuICBnZXRQZXJtaXNzaW9uRGVzY3JpcHRpb24gPSBSaXZWaWV3cy5nZXRQZXJtaXNzaW9uRGVzY3JpcHRpb247XG5cbiAgdHJhY2tCeUlkKF86IG51bWJlciwgdmlldzogUml2Vmlld3MuRnVsbFZpZXc8VSwgVj4pOiBWWydpZCddIHtcbiAgICByZXR1cm4gdmlldy5pZDtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1hbmFnZXI/LnN0YXRlIHwgYXN5bmM7IGxldCBzXCI+XG4gIDxyaXYtc2lkZS1zaGVldCBbdG9wT2Zmc2V0XT1cInRvcE9mZnNldFwiIChjbG9zZSk9XCJjbG9zZS5lbWl0KClcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxuICAgICAgPGhlYWRlcj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXRsZVwiPkFsbCB2aWV3czwvc3Bhbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHJpdkJ1dHRvblxuICAgICAgICAgIFt2YXJpYW50XT1cIidnaG9zdCdcIlxuICAgICAgICAgIFtpY29uXT1cIidYJ1wiXG4gICAgICAgICAgKGNsaWNrKT1cImNsb3NlLmVtaXQoKVwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICAgIDwvaGVhZGVyPlxuXG4gICAgICA8cml2LXNlYXJjaFxuICAgICAgICAodmFsdWVDaGFuZ2UpPVwiXG4gICAgICAgICAgbWFuYWdlcj8uYWN0aW9ucz8ubmV4dCh7XG4gICAgICAgICAgICB0eXBlOiAnc2V0QWxsVmlld3NTZWFyY2hRdWVyeScsXG4gICAgICAgICAgICBxdWVyeTogJGV2ZW50XG4gICAgICAgICAgfSlcbiAgICAgICAgXCJcbiAgICAgICAgW3ZhbHVlXT1cInMuYWxsLnNlYXJjaFwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoXCJcbiAgICAgID48L3Jpdi1zZWFyY2g+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJ2aWV3c1wiPlxuICAgICAgICA8IS0tIFZpZXcgc2VjdGlvbnMgYnkgcGVybWlzc2lvbiB0eXBlIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nSWY9XCJzLmFsbC5wcml2YXRlVmlld3MubGVuZ3RoID4gMFwiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwicGVybWlzc2lvblNlY3Rpb25cIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICBwZXJtaXNzaW9uOiAncHJpdmF0ZScsXG4gICAgICAgICAgICBvcGVuOiBzLmFsbC5wcml2YXRlT3BlbixcbiAgICAgICAgICAgIG9wZW5DaGFuZ2U6IGdldE9wZW5DaGFuZ2UoJ3ByaXZhdGUnKSxcbiAgICAgICAgICAgIHZpZXdzOiBzLmFsbC5wcml2YXRlVmlld3MsXG4gICAgICAgICAgICB0aXRsZTogZ2V0UGVybWlzc2lvblRpdGxlKCdwcml2YXRlJyksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogZ2V0UGVybWlzc2lvbkRlc2NyaXB0aW9uKCdwcml2YXRlJylcbiAgICAgICAgICB9XCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nSWY9XCJzLmFsbC5zaGFyZWRWaWV3cy5sZW5ndGggPiAwXCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJwZXJtaXNzaW9uU2VjdGlvblwiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgIHBlcm1pc3Npb246ICdzaGFyZWQnLFxuICAgICAgICAgICAgb3Blbjogcy5hbGwuc2hhcmVkT3BlbixcbiAgICAgICAgICAgIG9wZW5DaGFuZ2U6IGdldE9wZW5DaGFuZ2UoJ3NoYXJlZCcpLFxuICAgICAgICAgICAgdmlld3M6IHMuYWxsLnNoYXJlZFZpZXdzLFxuICAgICAgICAgICAgdGl0bGU6IGdldFBlcm1pc3Npb25UaXRsZSgnc2hhcmVkJyksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogZ2V0UGVybWlzc2lvbkRlc2NyaXB0aW9uKCdzaGFyZWQnKVxuICAgICAgICAgIH1cIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdJZj1cInMuYWxsLnB1YmxpY1ZpZXdzLmxlbmd0aCA+IDBcIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInBlcm1pc3Npb25TZWN0aW9uXCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgcGVybWlzc2lvbjogJ3B1YmxpYycsXG4gICAgICAgICAgICBvcGVuOiBzLmFsbC5wdWJsaWNPcGVuLFxuICAgICAgICAgICAgb3BlbkNoYW5nZTogZ2V0T3BlbkNoYW5nZSgncHVibGljJyksXG4gICAgICAgICAgICB2aWV3czogcy5hbGwucHVibGljVmlld3MsXG4gICAgICAgICAgICB0aXRsZTogZ2V0UGVybWlzc2lvblRpdGxlKCdwdWJsaWMnKSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBnZXRQZXJtaXNzaW9uRGVzY3JpcHRpb24oJ3B1YmxpYycpXG4gICAgICAgICAgfVwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIFBlcm1pc3Npb24gc2VjdGlvbiAtLT5cbiAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgI3Blcm1pc3Npb25TZWN0aW9uXG4gICAgICAgICAgbGV0LXBlcm1pc3Npb249XCJwZXJtaXNzaW9uXCJcbiAgICAgICAgICBsZXQtb3Blbj1cIm9wZW5cIlxuICAgICAgICAgIGxldC1vcGVuQ2hhbmdlPVwib3BlbkNoYW5nZVwiXG4gICAgICAgICAgbGV0LXZpZXdzPVwidmlld3NcIlxuICAgICAgICAgIGxldC10aXRsZT1cInRpdGxlXCJcbiAgICAgICAgICBsZXQtZGVzY3JpcHRpb249XCJkZXNjcmlwdGlvblwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicGVybWlzc2lvbi1zZWN0aW9uXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwicGVybWlzc2lvbi1oZWFkZXJcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkNoYW5nZSghb3BlbilcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiISFzLmFsbC5zZWFyY2hcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGVybWlzc2lvbi1oZWFkZXItY29udGVudFwiPlxuICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cInBlcm1pc3Npb24tdGl0bGVcIj57eyB0aXRsZSB9fTwvaDM+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwZXJtaXNzaW9uLWRlc2NyaXB0aW9uXCI+e3sgZGVzY3JpcHRpb24gfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8cml2LWljb25cbiAgICAgICAgICAgICAgICBbbmFtZV09XCJvcGVuID8gJ0NoZXZyb25VcCcgOiAnQ2hldnJvbkRvd24nXCJcbiAgICAgICAgICAgICAgICBbc2l6ZV09XCIyMFwiXG4gICAgICAgICAgICAgID48L3Jpdi1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwZXJtaXNzaW9uLWNvbnRlbnRcIiAqbmdJZj1cIm9wZW5cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZpZXdzLWxpc3RcIiAqbmdJZj1cInZpZXdzLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgdmlldyBvZiB2aWV3czsgdHJhY2tCeTogdHJhY2tCeUlkXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidmlldy1pdGVtXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgbWFuYWdlcj8uYWN0aW9ucz8ubmV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3NldEFjdGl2ZVZpZXcnLFxuICAgICAgICAgICAgICAgICAgICAgIGlkOiB2aWV3LmlkXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjbG9zZS5lbWl0KClcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZpZXctdGl0bGVcIiByaXZUcnVuY2F0ZT5cbiAgICAgICAgICAgICAgICAgICAgPHJpdi1oaWdobGlnaHRcbiAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCJ2aWV3LnRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbaW5kaWNlc109XCJ2aWV3LnRpdGxlSGlnaGxpZ2h0SW5kaWNlcyA/PyBbXVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPC9yaXYtaGlnaGxpZ2h0PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8cml2LXZpZXctbWVudVxuICAgICAgICAgICAgICAgICAgICBbbWFuYWdlcl09XCJtYW5hZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgW3ZpZXddPVwidmlld1wiXG4gICAgICAgICAgICAgICAgICAgIFttZW51Q29udGV4dF09XCInYWxsLXZpZXdzJ1wiXG4gICAgICAgICAgICAgICAgICA+PC9yaXYtdmlldy1tZW51PlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImVuYWJsZS12aWV3XCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmVuYWJsZWRdPVwidmlldy5lbmFibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICBtYW5hZ2VyPy5hY3Rpb25zPy5uZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzZXRFbmFibGVkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB2aWV3LmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZDogIXZpZXcuZW5hYmxlZFxuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ2aWV3LnN5c3RlbVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxyaXYtaWNvblxuICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdmlldy5zeXN0ZW0gPyAnTG9jaycgOiB2aWV3LmVuYWJsZWQgPyAnRXllJyA6ICdFeWVPZmYnXG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc2l6ZV09XCIyMFwiXG4gICAgICAgICAgICAgICAgICAgID48L3Jpdi1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9yaXYtc2lkZS1zaGVldD5cbjwvbmctY29udGFpbmVyPlxuIl19
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsLXZpZXdzLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL25hdmlnYXRpb24vdmlld3MvYWxsLXZpZXdzLW1vZGFsL2FsbC12aWV3cy1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi9uYXZpZ2F0aW9uL3ZpZXdzL2FsbC12aWV3cy1tb2RhbC9hbGwtdmlld3MtbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7Ozs7Ozs7Ozs7QUFRcEMsTUFBTSxPQUFPLHNCQUFzQjtJQU5uQztRQWNFLGNBQVMsR0FBVyxDQUFDLENBQUM7UUFHdEIsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFXakMsdUJBQWtCLEdBQUcsUUFBUSxDQUFDLGtCQUFrQixDQUFDO1FBQ2pELDZCQUF3QixHQUFHLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQztLQUs5RDtJQWZDLGFBQWEsQ0FBQyxVQUFtQztRQUMvQyxPQUFPLENBQUMsSUFBYSxFQUFFLEVBQUUsQ0FDdkIsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDO1lBQzFCLElBQUksRUFBRSxtQkFBbUI7WUFDekIsVUFBVTtZQUNWLElBQUk7U0FDTCxDQUFDLENBQUM7SUFDUCxDQUFDO0lBS0QsU0FBUyxDQUFDLENBQVMsRUFBRSxJQUE2QjtRQUNoRCxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDakIsQ0FBQzs7bUhBM0JVLHNCQUFzQjt1R0FBdEIsc0JBQXNCLGdKQ2ZuQyx1d0tBcUpBOzJGRHRJYSxzQkFBc0I7a0JBTmxDLFNBQVM7K0JBQ0UscUJBQXFCLG1CQUdkLHVCQUF1QixDQUFDLE1BQU07OEJBTy9DLE9BQU87c0JBRE4sS0FBSztnQkFJTixTQUFTO3NCQURSLEtBQUs7Z0JBSU4sS0FBSztzQkFESixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJpdlZpZXdzIH0gZnJvbSAnLi4vc3RhdGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyaXYtYWxsLXZpZXdzLW1vZGFsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FsbC12aWV3cy1tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2FsbC12aWV3cy1tb2RhbC5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBBbGxWaWV3c01vZGFsQ29tcG9uZW50PFxuICBVIGV4dGVuZHMgUml2Vmlld3MuVXNlcixcbiAgViBleHRlbmRzIFJpdlZpZXdzLlZpZXc8VT4sXG4+IHtcbiAgQElucHV0KClcbiAgbWFuYWdlcj86IFJpdlZpZXdzLk1hbmFnZXI8VSwgVj47XG5cbiAgQElucHV0KClcbiAgdG9wT2Zmc2V0OiBudW1iZXIgPSAwO1xuXG4gIEBPdXRwdXQoKVxuICBjbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBnZXRPcGVuQ2hhbmdlKHBlcm1pc3Npb246IFJpdlZpZXdzLlZpZXdQZXJtaXNzaW9uKTogKG9wZW46IGJvb2xlYW4pID0+IHZvaWQge1xuICAgIHJldHVybiAob3BlbjogYm9vbGVhbikgPT5cbiAgICAgIHRoaXMubWFuYWdlcj8uYWN0aW9ucz8ubmV4dCh7XG4gICAgICAgIHR5cGU6ICdzZXRBbGxWaWV3c1RvZ2dsZScsXG4gICAgICAgIHBlcm1pc3Npb24sXG4gICAgICAgIG9wZW4sXG4gICAgICB9KTtcbiAgfVxuXG4gIGdldFBlcm1pc3Npb25UaXRsZSA9IFJpdlZpZXdzLmdldFBlcm1pc3Npb25UaXRsZTtcbiAgZ2V0UGVybWlzc2lvbkRlc2NyaXB0aW9uID0gUml2Vmlld3MuZ2V0UGVybWlzc2lvbkRlc2NyaXB0aW9uO1xuXG4gIHRyYWNrQnlJZChfOiBudW1iZXIsIHZpZXc6IFJpdlZpZXdzLkZ1bGxWaWV3PFUsIFY+KTogVlsnaWQnXSB7XG4gICAgcmV0dXJuIHZpZXcuaWQ7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJtYW5hZ2VyPy5zdGF0ZSB8IGFzeW5jOyBsZXQgc1wiPlxuICA8cml2LXNpZGUtc2hlZXQgW3RvcE9mZnNldF09XCJ0b3BPZmZzZXRcIiAoY2xvc2UpPVwiY2xvc2UuZW1pdCgpXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cbiAgICAgIDxoZWFkZXI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGl0bGVcIj5BbGwgdmlld3M8L3NwYW4+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICByaXZCdXR0b25cbiAgICAgICAgICBbdmFyaWFudF09XCInZ2hvc3QnXCJcbiAgICAgICAgICBbaWNvbl09XCInWCdcIlxuICAgICAgICAgIChjbGljayk9XCJjbG9zZS5lbWl0KClcIlxuICAgICAgICA+PC9idXR0b24+XG4gICAgICA8L2hlYWRlcj5cblxuICAgICAgPHJpdi1zZWFyY2hcbiAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIlxuICAgICAgICAgIG1hbmFnZXI/LmFjdGlvbnM/Lm5leHQoe1xuICAgICAgICAgICAgdHlwZTogJ3NldEFsbFZpZXdzU2VhcmNoUXVlcnknLFxuICAgICAgICAgICAgcXVlcnk6ICRldmVudFxuICAgICAgICAgIH0pXG4gICAgICAgIFwiXG4gICAgICAgIFt2YWx1ZV09XCJzLmFsbC5zZWFyY2hcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaFwiXG4gICAgICA+PC9yaXYtc2VhcmNoPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwidmlld3NcIj5cbiAgICAgICAgPCEtLSBWaWV3IHNlY3Rpb25zIGJ5IHBlcm1pc3Npb24gdHlwZSAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0lmPVwicy5hbGwucHJpdmF0ZVZpZXdzLmxlbmd0aCA+IDBcIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInBlcm1pc3Npb25TZWN0aW9uXCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgcGVybWlzc2lvbjogJ3ByaXZhdGUnLFxuICAgICAgICAgICAgb3Blbjogcy5hbGwucHJpdmF0ZU9wZW4sXG4gICAgICAgICAgICBvcGVuQ2hhbmdlOiBnZXRPcGVuQ2hhbmdlKCdwcml2YXRlJyksXG4gICAgICAgICAgICB2aWV3czogcy5hbGwucHJpdmF0ZVZpZXdzLFxuICAgICAgICAgICAgdGl0bGU6IGdldFBlcm1pc3Npb25UaXRsZSgncHJpdmF0ZScpLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGdldFBlcm1pc3Npb25EZXNjcmlwdGlvbigncHJpdmF0ZScpXG4gICAgICAgICAgfVwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0lmPVwicy5hbGwuc2hhcmVkVmlld3MubGVuZ3RoID4gMFwiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwicGVybWlzc2lvblNlY3Rpb25cIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICBwZXJtaXNzaW9uOiAnc2hhcmVkJyxcbiAgICAgICAgICAgIG9wZW46IHMuYWxsLnNoYXJlZE9wZW4sXG4gICAgICAgICAgICBvcGVuQ2hhbmdlOiBnZXRPcGVuQ2hhbmdlKCdzaGFyZWQnKSxcbiAgICAgICAgICAgIHZpZXdzOiBzLmFsbC5zaGFyZWRWaWV3cyxcbiAgICAgICAgICAgIHRpdGxlOiBnZXRQZXJtaXNzaW9uVGl0bGUoJ3NoYXJlZCcpLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGdldFBlcm1pc3Npb25EZXNjcmlwdGlvbignc2hhcmVkJylcbiAgICAgICAgICB9XCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nSWY9XCJzLmFsbC5wdWJsaWNWaWV3cy5sZW5ndGggPiAwXCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJwZXJtaXNzaW9uU2VjdGlvblwiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgIHBlcm1pc3Npb246ICdwdWJsaWMnLFxuICAgICAgICAgICAgb3Blbjogcy5hbGwucHVibGljT3BlbixcbiAgICAgICAgICAgIG9wZW5DaGFuZ2U6IGdldE9wZW5DaGFuZ2UoJ3B1YmxpYycpLFxuICAgICAgICAgICAgdmlld3M6IHMuYWxsLnB1YmxpY1ZpZXdzLFxuICAgICAgICAgICAgdGl0bGU6IGdldFBlcm1pc3Npb25UaXRsZSgncHVibGljJyksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogZ2V0UGVybWlzc2lvbkRlc2NyaXB0aW9uKCdwdWJsaWMnKVxuICAgICAgICAgIH1cIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPCEtLSBQZXJtaXNzaW9uIHNlY3Rpb24gLS0+XG4gICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICNwZXJtaXNzaW9uU2VjdGlvblxuICAgICAgICAgIGxldC1wZXJtaXNzaW9uPVwicGVybWlzc2lvblwiXG4gICAgICAgICAgbGV0LW9wZW49XCJvcGVuXCJcbiAgICAgICAgICBsZXQtb3BlbkNoYW5nZT1cIm9wZW5DaGFuZ2VcIlxuICAgICAgICAgIGxldC12aWV3cz1cInZpZXdzXCJcbiAgICAgICAgICBsZXQtdGl0bGU9XCJ0aXRsZVwiXG4gICAgICAgICAgbGV0LWRlc2NyaXB0aW9uPVwiZGVzY3JpcHRpb25cIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInBlcm1pc3Npb24tc2VjdGlvblwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cInBlcm1pc3Npb24taGVhZGVyXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5DaGFuZ2UoIW9wZW4pXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiEhcy5hbGwuc2VhcmNoXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBlcm1pc3Npb24taGVhZGVyLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJwZXJtaXNzaW9uLXRpdGxlXCI+e3sgdGl0bGUgfX08L2gzPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGVybWlzc2lvbi1kZXNjcmlwdGlvblwiPnt7IGRlc2NyaXB0aW9uIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPHJpdi1pY29uXG4gICAgICAgICAgICAgICAgW25hbWVdPVwib3BlbiA/ICdDaGV2cm9uVXAnIDogJ0NoZXZyb25Eb3duJ1wiXG4gICAgICAgICAgICAgICAgW3NpemVdPVwiMjBcIlxuICAgICAgICAgICAgICA+PC9yaXYtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGVybWlzc2lvbi1jb250ZW50XCIgKm5nSWY9XCJvcGVuXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2aWV3cy1saXN0XCIgKm5nSWY9XCJ2aWV3cy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHZpZXcgb2Ygdmlld3M7IHRyYWNrQnk6IHRyYWNrQnlJZFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInZpZXctaXRlbVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgIG1hbmFnZXI/LmFjdGlvbnM/Lm5leHQoe1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzZXRBY3RpdmVWaWV3JyxcbiAgICAgICAgICAgICAgICAgICAgICBpZDogdmlldy5pZFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY2xvc2UuZW1pdCgpXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2aWV3LXRpdGxlXCIgcml2VHJ1bmNhdGU+XG4gICAgICAgICAgICAgICAgICAgIDxyaXYtaGlnaGxpZ2h0XG4gICAgICAgICAgICAgICAgICAgICAgW3RleHRdPVwidmlldy50aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2luZGljZXNdPVwidmlldy50aXRsZUhpZ2hsaWdodEluZGljZXMgPz8gW11cIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDwvcml2LWhpZ2hsaWdodD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPHJpdi12aWV3LW1lbnVcbiAgICAgICAgICAgICAgICAgICAgW21hbmFnZXJdPVwibWFuYWdlclwiXG4gICAgICAgICAgICAgICAgICAgIFt2aWV3XT1cInZpZXdcIlxuICAgICAgICAgICAgICAgICAgICBbbWVudUNvbnRleHRdPVwiJ2FsbC12aWV3cydcIlxuICAgICAgICAgICAgICAgICAgPjwvcml2LXZpZXctbWVudT5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJlbmFibGUtdmlld1wiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5lbmFibGVkXT1cInZpZXcuZW5hYmxlZCAmJiAhdmlldy5zeXN0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgIG1hbmFnZXI/LmFjdGlvbnM/Lm5leHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3NldEVuYWJsZWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHZpZXcuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiAhdmlldy5lbmFibGVkXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInZpZXcuc3lzdGVtXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHJpdi1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ2aWV3LmVuYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cInZpZXcuc3lzdGVtID8gJ0xvY2snIDogJ0V5ZSdcIlxuICAgICAgICAgICAgICAgICAgICAgIFtyaXZUb29sdGlwXT1cInZpZXcuc3lzdGVtID8gJycgOiAnSGlkZSB0YWInXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc2l6ZV09XCIyMFwiXG4gICAgICAgICAgICAgICAgICAgID48L3Jpdi1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8cml2LWljb25cbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiF2aWV3LmVuYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIidFeWVPZmYnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbcml2VG9vbHRpcF09XCInU2hvdyB0YWInXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc2l6ZV09XCIyMFwiXG4gICAgICAgICAgICAgICAgICAgID48L3Jpdi1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9yaXYtc2lkZS1zaGVldD5cbjwvbmctY29udGFpbmVyPlxuIl19
@@ -10,10 +10,10 @@ export class DialogComponent {
10
10
  }
11
11
  }
12
12
  DialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
13
- DialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: DialogComponent, selector: "riv-dialog", inputs: { title: "title" }, outputs: { close: "close" }, ngImport: i0, template: "<riv-modal (close)=\"close.emit()\" [obscure]=\"true\">\n <div [attr.data-animation-hook]=\"hook\" class=\"wrapper\">\n <div class=\"dialog\">\n <header>\n <span class=\"title\">\n {{ title }}\n </span>\n <button\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'X'\"\n (click)=\"close.emit()\"\n ></button>\n </header>\n <div class=\"body\">\n <ng-content></ng-content>\n </div>\n <div class=\"footer\">\n <ng-content select=\"footer\"></ng-content>\n </div>\n </div>\n </div>\n</riv-modal>\n", styles: [".wrapper{position:absolute;top:50%;left:50%}.dialog{transform:translate(-50%,-50%);background-color:var(--surface-light-0);border-radius:var(--border-radius-medium);border:var(--border-width) solid var(--border-light);display:flex;flex-direction:column;max-width:100%}header{display:flex;justify-content:space-between;align-items:center;padding:0 var(--size-medium);gap:var(--size-medium);border-bottom:var(--border-width) solid var(--border-light)}.title{font:var(--title-04);padding:var(--size-large) 0}.body{background-color:var(--surface-light-1)}.footer{border-top:var(--border-width) solid var(--border-light)}\n"], dependencies: [{ kind: "component", type: i1.ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition", "active"] }, { kind: "component", type: i2.ModalComponent, selector: "riv-modal", inputs: ["obscure"], outputs: ["close"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
13
+ DialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: DialogComponent, selector: "riv-dialog", inputs: { title: "title" }, outputs: { close: "close" }, ngImport: i0, template: "<riv-modal (close)=\"close.emit()\" [obscure]=\"true\">\n <div [attr.data-animation-hook]=\"hook\" class=\"wrapper\">\n <div class=\"dialog\">\n <header>\n <span class=\"title\">\n {{ title }}\n </span>\n <button\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'X'\"\n (click)=\"close.emit()\"\n ></button>\n </header>\n <div class=\"body\">\n <ng-content></ng-content>\n </div>\n <div class=\"footer\">\n <ng-content select=\"footer\"></ng-content>\n </div>\n </div>\n </div>\n</riv-modal>\n", styles: [".wrapper{position:absolute;top:50%;left:50%}.dialog{transform:translate(-50%,-50%);border-radius:var(--border-radius-medium);border:var(--border-width) solid var(--border-light);display:flex;flex-direction:column;max-width:100%}header{display:flex;justify-content:space-between;align-items:center;padding:0 var(--size-medium);gap:var(--size-medium);border-bottom:var(--border-width) solid var(--border-light);background-color:var(--surface-light-1)}.title{font:var(--title-04);padding:var(--size-large) 0}.body{background-color:var(--surface-light-0)}.footer{border-top:var(--border-width) solid var(--border-light);background-color:var(--surface-light-1)}\n"], dependencies: [{ kind: "component", type: i1.ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition", "active"] }, { kind: "component", type: i2.ModalComponent, selector: "riv-modal", inputs: ["obscure"], outputs: ["close"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
14
14
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DialogComponent, decorators: [{
15
15
  type: Component,
16
- args: [{ selector: 'riv-dialog', changeDetection: ChangeDetectionStrategy.OnPush, template: "<riv-modal (close)=\"close.emit()\" [obscure]=\"true\">\n <div [attr.data-animation-hook]=\"hook\" class=\"wrapper\">\n <div class=\"dialog\">\n <header>\n <span class=\"title\">\n {{ title }}\n </span>\n <button\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'X'\"\n (click)=\"close.emit()\"\n ></button>\n </header>\n <div class=\"body\">\n <ng-content></ng-content>\n </div>\n <div class=\"footer\">\n <ng-content select=\"footer\"></ng-content>\n </div>\n </div>\n </div>\n</riv-modal>\n", styles: [".wrapper{position:absolute;top:50%;left:50%}.dialog{transform:translate(-50%,-50%);background-color:var(--surface-light-0);border-radius:var(--border-radius-medium);border:var(--border-width) solid var(--border-light);display:flex;flex-direction:column;max-width:100%}header{display:flex;justify-content:space-between;align-items:center;padding:0 var(--size-medium);gap:var(--size-medium);border-bottom:var(--border-width) solid var(--border-light)}.title{font:var(--title-04);padding:var(--size-large) 0}.body{background-color:var(--surface-light-1)}.footer{border-top:var(--border-width) solid var(--border-light)}\n"] }]
16
+ args: [{ selector: 'riv-dialog', changeDetection: ChangeDetectionStrategy.OnPush, template: "<riv-modal (close)=\"close.emit()\" [obscure]=\"true\">\n <div [attr.data-animation-hook]=\"hook\" class=\"wrapper\">\n <div class=\"dialog\">\n <header>\n <span class=\"title\">\n {{ title }}\n </span>\n <button\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'X'\"\n (click)=\"close.emit()\"\n ></button>\n </header>\n <div class=\"body\">\n <ng-content></ng-content>\n </div>\n <div class=\"footer\">\n <ng-content select=\"footer\"></ng-content>\n </div>\n </div>\n </div>\n</riv-modal>\n", styles: [".wrapper{position:absolute;top:50%;left:50%}.dialog{transform:translate(-50%,-50%);border-radius:var(--border-radius-medium);border:var(--border-width) solid var(--border-light);display:flex;flex-direction:column;max-width:100%}header{display:flex;justify-content:space-between;align-items:center;padding:0 var(--size-medium);gap:var(--size-medium);border-bottom:var(--border-width) solid var(--border-light);background-color:var(--surface-light-1)}.title{font:var(--title-04);padding:var(--size-large) 0}.body{background-color:var(--surface-light-0)}.footer{border-top:var(--border-width) solid var(--border-light);background-color:var(--surface-light-1)}\n"] }]
17
17
  }], propDecorators: { title: [{
18
18
  type: Input
19
19
  }], close: [{
@@ -3954,10 +3954,10 @@ class DialogComponent {
3954
3954
  }
3955
3955
  }
3956
3956
  DialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3957
- DialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: DialogComponent, selector: "riv-dialog", inputs: { title: "title" }, outputs: { close: "close" }, ngImport: i0, template: "<riv-modal (close)=\"close.emit()\" [obscure]=\"true\">\n <div [attr.data-animation-hook]=\"hook\" class=\"wrapper\">\n <div class=\"dialog\">\n <header>\n <span class=\"title\">\n {{ title }}\n </span>\n <button\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'X'\"\n (click)=\"close.emit()\"\n ></button>\n </header>\n <div class=\"body\">\n <ng-content></ng-content>\n </div>\n <div class=\"footer\">\n <ng-content select=\"footer\"></ng-content>\n </div>\n </div>\n </div>\n</riv-modal>\n", styles: [".wrapper{position:absolute;top:50%;left:50%}.dialog{transform:translate(-50%,-50%);background-color:var(--surface-light-0);border-radius:var(--border-radius-medium);border:var(--border-width) solid var(--border-light);display:flex;flex-direction:column;max-width:100%}header{display:flex;justify-content:space-between;align-items:center;padding:0 var(--size-medium);gap:var(--size-medium);border-bottom:var(--border-width) solid var(--border-light)}.title{font:var(--title-04);padding:var(--size-large) 0}.body{background-color:var(--surface-light-1)}.footer{border-top:var(--border-width) solid var(--border-light)}\n"], dependencies: [{ kind: "component", type: ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition", "active"] }, { kind: "component", type: ModalComponent, selector: "riv-modal", inputs: ["obscure"], outputs: ["close"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3957
+ DialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: DialogComponent, selector: "riv-dialog", inputs: { title: "title" }, outputs: { close: "close" }, ngImport: i0, template: "<riv-modal (close)=\"close.emit()\" [obscure]=\"true\">\n <div [attr.data-animation-hook]=\"hook\" class=\"wrapper\">\n <div class=\"dialog\">\n <header>\n <span class=\"title\">\n {{ title }}\n </span>\n <button\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'X'\"\n (click)=\"close.emit()\"\n ></button>\n </header>\n <div class=\"body\">\n <ng-content></ng-content>\n </div>\n <div class=\"footer\">\n <ng-content select=\"footer\"></ng-content>\n </div>\n </div>\n </div>\n</riv-modal>\n", styles: [".wrapper{position:absolute;top:50%;left:50%}.dialog{transform:translate(-50%,-50%);border-radius:var(--border-radius-medium);border:var(--border-width) solid var(--border-light);display:flex;flex-direction:column;max-width:100%}header{display:flex;justify-content:space-between;align-items:center;padding:0 var(--size-medium);gap:var(--size-medium);border-bottom:var(--border-width) solid var(--border-light);background-color:var(--surface-light-1)}.title{font:var(--title-04);padding:var(--size-large) 0}.body{background-color:var(--surface-light-0)}.footer{border-top:var(--border-width) solid var(--border-light);background-color:var(--surface-light-1)}\n"], dependencies: [{ kind: "component", type: ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition", "active"] }, { kind: "component", type: ModalComponent, selector: "riv-modal", inputs: ["obscure"], outputs: ["close"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3958
3958
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DialogComponent, decorators: [{
3959
3959
  type: Component,
3960
- args: [{ selector: 'riv-dialog', changeDetection: ChangeDetectionStrategy.OnPush, template: "<riv-modal (close)=\"close.emit()\" [obscure]=\"true\">\n <div [attr.data-animation-hook]=\"hook\" class=\"wrapper\">\n <div class=\"dialog\">\n <header>\n <span class=\"title\">\n {{ title }}\n </span>\n <button\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'X'\"\n (click)=\"close.emit()\"\n ></button>\n </header>\n <div class=\"body\">\n <ng-content></ng-content>\n </div>\n <div class=\"footer\">\n <ng-content select=\"footer\"></ng-content>\n </div>\n </div>\n </div>\n</riv-modal>\n", styles: [".wrapper{position:absolute;top:50%;left:50%}.dialog{transform:translate(-50%,-50%);background-color:var(--surface-light-0);border-radius:var(--border-radius-medium);border:var(--border-width) solid var(--border-light);display:flex;flex-direction:column;max-width:100%}header{display:flex;justify-content:space-between;align-items:center;padding:0 var(--size-medium);gap:var(--size-medium);border-bottom:var(--border-width) solid var(--border-light)}.title{font:var(--title-04);padding:var(--size-large) 0}.body{background-color:var(--surface-light-1)}.footer{border-top:var(--border-width) solid var(--border-light)}\n"] }]
3960
+ args: [{ selector: 'riv-dialog', changeDetection: ChangeDetectionStrategy.OnPush, template: "<riv-modal (close)=\"close.emit()\" [obscure]=\"true\">\n <div [attr.data-animation-hook]=\"hook\" class=\"wrapper\">\n <div class=\"dialog\">\n <header>\n <span class=\"title\">\n {{ title }}\n </span>\n <button\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'X'\"\n (click)=\"close.emit()\"\n ></button>\n </header>\n <div class=\"body\">\n <ng-content></ng-content>\n </div>\n <div class=\"footer\">\n <ng-content select=\"footer\"></ng-content>\n </div>\n </div>\n </div>\n</riv-modal>\n", styles: [".wrapper{position:absolute;top:50%;left:50%}.dialog{transform:translate(-50%,-50%);border-radius:var(--border-radius-medium);border:var(--border-width) solid var(--border-light);display:flex;flex-direction:column;max-width:100%}header{display:flex;justify-content:space-between;align-items:center;padding:0 var(--size-medium);gap:var(--size-medium);border-bottom:var(--border-width) solid var(--border-light);background-color:var(--surface-light-1)}.title{font:var(--title-04);padding:var(--size-large) 0}.body{background-color:var(--surface-light-0)}.footer{border-top:var(--border-width) solid var(--border-light);background-color:var(--surface-light-1)}\n"] }]
3961
3961
  }], propDecorators: { title: [{
3962
3962
  type: Input
3963
3963
  }], close: [{
@@ -4217,10 +4217,10 @@ class AllViewsModalComponent {
4217
4217
  }
4218
4218
  }
4219
4219
  AllViewsModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AllViewsModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4220
- AllViewsModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: AllViewsModalComponent, selector: "riv-all-views-modal", inputs: { manager: "manager", topOffset: "topOffset" }, outputs: { close: "close" }, ngImport: i0, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <riv-side-sheet [topOffset]=\"topOffset\" (close)=\"close.emit()\">\n <div class=\"content\">\n <header>\n <span class=\"title\">All views</span>\n <button\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'X'\"\n (click)=\"close.emit()\"\n ></button>\n </header>\n\n <riv-search\n (valueChange)=\"\n manager?.actions?.next({\n type: 'setAllViewsSearchQuery',\n query: $event\n })\n \"\n [value]=\"s.all.search\"\n placeholder=\"Search\"\n ></riv-search>\n\n <div class=\"views\">\n <!-- View sections by permission type -->\n <ng-container\n *ngIf=\"s.all.privateViews.length > 0\"\n [ngTemplateOutlet]=\"permissionSection\"\n [ngTemplateOutletContext]=\"{\n permission: 'private',\n open: s.all.privateOpen,\n openChange: getOpenChange('private'),\n views: s.all.privateViews,\n title: getPermissionTitle('private'),\n description: getPermissionDescription('private')\n }\"\n ></ng-container>\n <ng-container\n *ngIf=\"s.all.sharedViews.length > 0\"\n [ngTemplateOutlet]=\"permissionSection\"\n [ngTemplateOutletContext]=\"{\n permission: 'shared',\n open: s.all.sharedOpen,\n openChange: getOpenChange('shared'),\n views: s.all.sharedViews,\n title: getPermissionTitle('shared'),\n description: getPermissionDescription('shared')\n }\"\n ></ng-container>\n <ng-container\n *ngIf=\"s.all.publicViews.length > 0\"\n [ngTemplateOutlet]=\"permissionSection\"\n [ngTemplateOutletContext]=\"{\n permission: 'public',\n open: s.all.publicOpen,\n openChange: getOpenChange('public'),\n views: s.all.publicViews,\n title: getPermissionTitle('public'),\n description: getPermissionDescription('public')\n }\"\n ></ng-container>\n\n <!-- Permission section -->\n <ng-template\n #permissionSection\n let-permission=\"permission\"\n let-open=\"open\"\n let-openChange=\"openChange\"\n let-views=\"views\"\n let-title=\"title\"\n let-description=\"description\"\n >\n <div class=\"permission-section\">\n <button\n class=\"permission-header\"\n (click)=\"openChange(!open)\"\n [disabled]=\"!!s.all.search\"\n >\n <div class=\"permission-header-content\">\n <h3 class=\"permission-title\">{{ title }}</h3>\n <span class=\"permission-description\">{{ description }}</span>\n </div>\n <riv-icon\n [name]=\"open ? 'ChevronUp' : 'ChevronDown'\"\n [size]=\"20\"\n ></riv-icon>\n </button>\n\n <div class=\"permission-content\" *ngIf=\"open\">\n <div class=\"views-list\" *ngIf=\"views.length > 0\">\n <button\n *ngFor=\"let view of views; trackBy: trackById\"\n class=\"view-item\"\n (click)=\"\n manager?.actions?.next({\n type: 'setActiveView',\n id: view.id\n });\n close.emit()\n \"\n >\n <div class=\"view-title\" rivTruncate>\n <riv-highlight\n [text]=\"view.title\"\n [indices]=\"view.titleHighlightIndices ?? []\"\n >\n </riv-highlight>\n </div>\n <riv-view-menu\n [manager]=\"manager\"\n [view]=\"view\"\n [menuContext]=\"'all-views'\"\n ></riv-view-menu>\n <button\n class=\"enable-view\"\n [class.enabled]=\"view.enabled\"\n (click)=\"\n $event.stopPropagation();\n manager?.actions?.next({\n type: 'setEnabled',\n id: view.id,\n enabled: !view.enabled\n })\n \"\n [disabled]=\"view.system\"\n >\n <riv-icon\n [name]=\"\n view.system ? 'Lock' : view.enabled ? 'Eye' : 'EyeOff'\n \"\n [size]=\"20\"\n ></riv-icon>\n </button>\n </button>\n </div>\n </div>\n </div>\n </ng-template>\n </div>\n </div>\n </riv-side-sheet>\n</ng-container>\n", styles: [".content{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-medium);height:100%}header{display:flex;justify-content:space-between;align-items:center}.title{font:var(--title-02)}.views{flex-grow:1;overflow-y:auto;display:flex;flex-direction:column;gap:var(--size-xlarge)}.permission-section{display:flex;flex-direction:column}.permission-header{display:flex;justify-content:space-between;align-items:center;width:100%;padding:var(--size-xsmall);border:none;background:none;cursor:pointer;gap:var(--size-small);border-radius:var(--border-radius-medium);transition:background-color var(--short-transition)}.permission-header:disabled{cursor:default;color:var(--type-light-disabled)}.permission-header:hover:not(:disabled){background-color:var(--surface-light-1)}.permission-header:active:not(:disabled){background-color:var(--surface-light-2)}.permission-header-content{display:flex;flex-direction:column;align-items:flex-start;text-align:left}.permission-title{font:var(--title-02)}.permission-description{font:var(--body-medium);color:var(--type-light-low-contrast)}.permission-content{padding-left:var(--size-small);padding-top:var(--size-small)}.views-list{display:flex;flex-direction:column;gap:var(--size-small)}.view-item{display:flex;align-items:center;padding:var(--size-xsmall) var(--size-small);border-radius:var(--border-radius-small);cursor:pointer;background-color:var(--surface-light-0);transition:background-color var(--short-transition)}.view-item:hover{background-color:var(--surface-light-1)}.view-item:active{background-color:var(--surface-light-2)}.view-title{text-align:left;flex-grow:1;font:var(--input-medium)}.view-item riv-view-menu{align-self:flex-end;opacity:0;transition:opacity var(--short-transition)}.view-item:hover riv-view-menu{opacity:1}.enable-view{cursor:pointer;display:inline-flex;justify-content:center;align-items:center;padding:0 var(--size-xsmall);transition:color var(--medium-transition);color:var(--type-light-low-contrast)}.enable-view.enabled{color:var(--type-light-link)}.enable-view.enabled:hover{color:var(--type-light-link-hover)}.enable-view.enabled:active{color:var(--type-light-link-active)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition", "active"] }, { kind: "component", type: HighlightComponent, selector: "riv-highlight", inputs: ["text", "indices"] }, { kind: "component", type: IconComponent, selector: "riv-icon", inputs: ["name", "size", "customSize", "strokeWidth"] }, { kind: "component", type: SearchComponent, selector: "riv-search", inputs: ["placeholder", "name", "labelTemplate"] }, { kind: "component", type: SideSheetComponent, selector: "riv-side-sheet", inputs: ["topOffset", "width", "obscure"], outputs: ["close"] }, { kind: "component", type: TruncateComponent, selector: "[rivTruncate]", inputs: ["maxTooltipWidth"] }, { kind: "component", type: ViewMenuComponent, selector: "riv-view-menu", inputs: ["manager", "view", "menuContext"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4220
+ AllViewsModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: AllViewsModalComponent, selector: "riv-all-views-modal", inputs: { manager: "manager", topOffset: "topOffset" }, outputs: { close: "close" }, ngImport: i0, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <riv-side-sheet [topOffset]=\"topOffset\" (close)=\"close.emit()\">\n <div class=\"content\">\n <header>\n <span class=\"title\">All views</span>\n <button\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'X'\"\n (click)=\"close.emit()\"\n ></button>\n </header>\n\n <riv-search\n (valueChange)=\"\n manager?.actions?.next({\n type: 'setAllViewsSearchQuery',\n query: $event\n })\n \"\n [value]=\"s.all.search\"\n placeholder=\"Search\"\n ></riv-search>\n\n <div class=\"views\">\n <!-- View sections by permission type -->\n <ng-container\n *ngIf=\"s.all.privateViews.length > 0\"\n [ngTemplateOutlet]=\"permissionSection\"\n [ngTemplateOutletContext]=\"{\n permission: 'private',\n open: s.all.privateOpen,\n openChange: getOpenChange('private'),\n views: s.all.privateViews,\n title: getPermissionTitle('private'),\n description: getPermissionDescription('private')\n }\"\n ></ng-container>\n <ng-container\n *ngIf=\"s.all.sharedViews.length > 0\"\n [ngTemplateOutlet]=\"permissionSection\"\n [ngTemplateOutletContext]=\"{\n permission: 'shared',\n open: s.all.sharedOpen,\n openChange: getOpenChange('shared'),\n views: s.all.sharedViews,\n title: getPermissionTitle('shared'),\n description: getPermissionDescription('shared')\n }\"\n ></ng-container>\n <ng-container\n *ngIf=\"s.all.publicViews.length > 0\"\n [ngTemplateOutlet]=\"permissionSection\"\n [ngTemplateOutletContext]=\"{\n permission: 'public',\n open: s.all.publicOpen,\n openChange: getOpenChange('public'),\n views: s.all.publicViews,\n title: getPermissionTitle('public'),\n description: getPermissionDescription('public')\n }\"\n ></ng-container>\n\n <!-- Permission section -->\n <ng-template\n #permissionSection\n let-permission=\"permission\"\n let-open=\"open\"\n let-openChange=\"openChange\"\n let-views=\"views\"\n let-title=\"title\"\n let-description=\"description\"\n >\n <div class=\"permission-section\">\n <button\n class=\"permission-header\"\n (click)=\"openChange(!open)\"\n [disabled]=\"!!s.all.search\"\n >\n <div class=\"permission-header-content\">\n <h3 class=\"permission-title\">{{ title }}</h3>\n <span class=\"permission-description\">{{ description }}</span>\n </div>\n <riv-icon\n [name]=\"open ? 'ChevronUp' : 'ChevronDown'\"\n [size]=\"20\"\n ></riv-icon>\n </button>\n\n <div class=\"permission-content\" *ngIf=\"open\">\n <div class=\"views-list\" *ngIf=\"views.length > 0\">\n <button\n *ngFor=\"let view of views; trackBy: trackById\"\n class=\"view-item\"\n (click)=\"\n manager?.actions?.next({\n type: 'setActiveView',\n id: view.id\n });\n close.emit()\n \"\n >\n <div class=\"view-title\" rivTruncate>\n <riv-highlight\n [text]=\"view.title\"\n [indices]=\"view.titleHighlightIndices ?? []\"\n >\n </riv-highlight>\n </div>\n <riv-view-menu\n [manager]=\"manager\"\n [view]=\"view\"\n [menuContext]=\"'all-views'\"\n ></riv-view-menu>\n <button\n class=\"enable-view\"\n [class.enabled]=\"view.enabled && !view.system\"\n (click)=\"\n $event.stopPropagation();\n manager?.actions?.next({\n type: 'setEnabled',\n id: view.id,\n enabled: !view.enabled\n })\n \"\n [disabled]=\"view.system\"\n >\n <riv-icon\n *ngIf=\"view.enabled\"\n [name]=\"view.system ? 'Lock' : 'Eye'\"\n [rivTooltip]=\"view.system ? '' : 'Hide tab'\"\n [size]=\"20\"\n ></riv-icon>\n <riv-icon\n *ngIf=\"!view.enabled\"\n [name]=\"'EyeOff'\"\n [rivTooltip]=\"'Show tab'\"\n [size]=\"20\"\n ></riv-icon>\n </button>\n </button>\n </div>\n </div>\n </div>\n </ng-template>\n </div>\n </div>\n </riv-side-sheet>\n</ng-container>\n", styles: [".content{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-medium);height:100%}header{display:flex;justify-content:space-between;align-items:center}.title{font:var(--title-02)}.views{flex-grow:1;overflow-y:auto;display:flex;flex-direction:column;gap:var(--size-xlarge)}.permission-section{display:flex;flex-direction:column}.permission-header{display:flex;justify-content:space-between;align-items:center;width:100%;padding:var(--size-xsmall);border:none;background:none;cursor:pointer;gap:var(--size-small);border-radius:var(--border-radius-medium);transition:background-color var(--short-transition)}.permission-header:disabled{cursor:default;color:var(--type-light-disabled)}.permission-header:hover:not(:disabled){background-color:var(--surface-light-1)}.permission-header:active:not(:disabled){background-color:var(--surface-light-2)}.permission-header-content{display:flex;flex-direction:column;align-items:flex-start;text-align:left}.permission-title{font:var(--title-02)}.permission-description{font:var(--body-medium);color:var(--type-light-low-contrast)}.permission-content{padding-left:var(--size-small);padding-top:var(--size-small)}.views-list{display:flex;flex-direction:column;gap:var(--size-small)}.view-item{display:flex;align-items:center;padding:var(--size-xsmall) var(--size-small);border-radius:var(--border-radius-small);cursor:pointer;background-color:var(--surface-light-0);transition:background-color var(--short-transition)}.view-item:hover{background-color:var(--surface-light-1)}.view-item:active{background-color:var(--surface-light-2)}.view-title{text-align:left;flex-grow:1;font:var(--input-medium)}.view-item riv-view-menu{align-self:flex-end;opacity:0;transition:opacity var(--short-transition)}.view-item:hover riv-view-menu{opacity:1}.enable-view{cursor:pointer;display:inline-flex;justify-content:center;align-items:center;padding:0 var(--size-xsmall);transition:color var(--medium-transition);color:var(--type-light-low-contrast)}.enable-view.enabled{color:var(--type-light-link)}.enable-view.enabled:hover{color:var(--type-light-link-hover)}.enable-view.enabled:active{color:var(--type-light-link-active)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition", "active"] }, { kind: "component", type: HighlightComponent, selector: "riv-highlight", inputs: ["text", "indices"] }, { kind: "component", type: IconComponent, selector: "riv-icon", inputs: ["name", "size", "customSize", "strokeWidth"] }, { kind: "component", type: SearchComponent, selector: "riv-search", inputs: ["placeholder", "name", "labelTemplate"] }, { kind: "component", type: SideSheetComponent, selector: "riv-side-sheet", inputs: ["topOffset", "width", "obscure"], outputs: ["close"] }, { kind: "directive", type: TooltipDirective, selector: "[rivTooltip]", inputs: ["rivTooltip", "rivTooltipTheme", "rivTooltipMaxWidth", "rivTooltipPreferredPosition", "rivTooltipCloseDelay"] }, { kind: "component", type: TruncateComponent, selector: "[rivTruncate]", inputs: ["maxTooltipWidth"] }, { kind: "component", type: ViewMenuComponent, selector: "riv-view-menu", inputs: ["manager", "view", "menuContext"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4221
4221
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AllViewsModalComponent, decorators: [{
4222
4222
  type: Component,
4223
- args: [{ selector: 'riv-all-views-modal', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <riv-side-sheet [topOffset]=\"topOffset\" (close)=\"close.emit()\">\n <div class=\"content\">\n <header>\n <span class=\"title\">All views</span>\n <button\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'X'\"\n (click)=\"close.emit()\"\n ></button>\n </header>\n\n <riv-search\n (valueChange)=\"\n manager?.actions?.next({\n type: 'setAllViewsSearchQuery',\n query: $event\n })\n \"\n [value]=\"s.all.search\"\n placeholder=\"Search\"\n ></riv-search>\n\n <div class=\"views\">\n <!-- View sections by permission type -->\n <ng-container\n *ngIf=\"s.all.privateViews.length > 0\"\n [ngTemplateOutlet]=\"permissionSection\"\n [ngTemplateOutletContext]=\"{\n permission: 'private',\n open: s.all.privateOpen,\n openChange: getOpenChange('private'),\n views: s.all.privateViews,\n title: getPermissionTitle('private'),\n description: getPermissionDescription('private')\n }\"\n ></ng-container>\n <ng-container\n *ngIf=\"s.all.sharedViews.length > 0\"\n [ngTemplateOutlet]=\"permissionSection\"\n [ngTemplateOutletContext]=\"{\n permission: 'shared',\n open: s.all.sharedOpen,\n openChange: getOpenChange('shared'),\n views: s.all.sharedViews,\n title: getPermissionTitle('shared'),\n description: getPermissionDescription('shared')\n }\"\n ></ng-container>\n <ng-container\n *ngIf=\"s.all.publicViews.length > 0\"\n [ngTemplateOutlet]=\"permissionSection\"\n [ngTemplateOutletContext]=\"{\n permission: 'public',\n open: s.all.publicOpen,\n openChange: getOpenChange('public'),\n views: s.all.publicViews,\n title: getPermissionTitle('public'),\n description: getPermissionDescription('public')\n }\"\n ></ng-container>\n\n <!-- Permission section -->\n <ng-template\n #permissionSection\n let-permission=\"permission\"\n let-open=\"open\"\n let-openChange=\"openChange\"\n let-views=\"views\"\n let-title=\"title\"\n let-description=\"description\"\n >\n <div class=\"permission-section\">\n <button\n class=\"permission-header\"\n (click)=\"openChange(!open)\"\n [disabled]=\"!!s.all.search\"\n >\n <div class=\"permission-header-content\">\n <h3 class=\"permission-title\">{{ title }}</h3>\n <span class=\"permission-description\">{{ description }}</span>\n </div>\n <riv-icon\n [name]=\"open ? 'ChevronUp' : 'ChevronDown'\"\n [size]=\"20\"\n ></riv-icon>\n </button>\n\n <div class=\"permission-content\" *ngIf=\"open\">\n <div class=\"views-list\" *ngIf=\"views.length > 0\">\n <button\n *ngFor=\"let view of views; trackBy: trackById\"\n class=\"view-item\"\n (click)=\"\n manager?.actions?.next({\n type: 'setActiveView',\n id: view.id\n });\n close.emit()\n \"\n >\n <div class=\"view-title\" rivTruncate>\n <riv-highlight\n [text]=\"view.title\"\n [indices]=\"view.titleHighlightIndices ?? []\"\n >\n </riv-highlight>\n </div>\n <riv-view-menu\n [manager]=\"manager\"\n [view]=\"view\"\n [menuContext]=\"'all-views'\"\n ></riv-view-menu>\n <button\n class=\"enable-view\"\n [class.enabled]=\"view.enabled\"\n (click)=\"\n $event.stopPropagation();\n manager?.actions?.next({\n type: 'setEnabled',\n id: view.id,\n enabled: !view.enabled\n })\n \"\n [disabled]=\"view.system\"\n >\n <riv-icon\n [name]=\"\n view.system ? 'Lock' : view.enabled ? 'Eye' : 'EyeOff'\n \"\n [size]=\"20\"\n ></riv-icon>\n </button>\n </button>\n </div>\n </div>\n </div>\n </ng-template>\n </div>\n </div>\n </riv-side-sheet>\n</ng-container>\n", styles: [".content{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-medium);height:100%}header{display:flex;justify-content:space-between;align-items:center}.title{font:var(--title-02)}.views{flex-grow:1;overflow-y:auto;display:flex;flex-direction:column;gap:var(--size-xlarge)}.permission-section{display:flex;flex-direction:column}.permission-header{display:flex;justify-content:space-between;align-items:center;width:100%;padding:var(--size-xsmall);border:none;background:none;cursor:pointer;gap:var(--size-small);border-radius:var(--border-radius-medium);transition:background-color var(--short-transition)}.permission-header:disabled{cursor:default;color:var(--type-light-disabled)}.permission-header:hover:not(:disabled){background-color:var(--surface-light-1)}.permission-header:active:not(:disabled){background-color:var(--surface-light-2)}.permission-header-content{display:flex;flex-direction:column;align-items:flex-start;text-align:left}.permission-title{font:var(--title-02)}.permission-description{font:var(--body-medium);color:var(--type-light-low-contrast)}.permission-content{padding-left:var(--size-small);padding-top:var(--size-small)}.views-list{display:flex;flex-direction:column;gap:var(--size-small)}.view-item{display:flex;align-items:center;padding:var(--size-xsmall) var(--size-small);border-radius:var(--border-radius-small);cursor:pointer;background-color:var(--surface-light-0);transition:background-color var(--short-transition)}.view-item:hover{background-color:var(--surface-light-1)}.view-item:active{background-color:var(--surface-light-2)}.view-title{text-align:left;flex-grow:1;font:var(--input-medium)}.view-item riv-view-menu{align-self:flex-end;opacity:0;transition:opacity var(--short-transition)}.view-item:hover riv-view-menu{opacity:1}.enable-view{cursor:pointer;display:inline-flex;justify-content:center;align-items:center;padding:0 var(--size-xsmall);transition:color var(--medium-transition);color:var(--type-light-low-contrast)}.enable-view.enabled{color:var(--type-light-link)}.enable-view.enabled:hover{color:var(--type-light-link-hover)}.enable-view.enabled:active{color:var(--type-light-link-active)}\n"] }]
4223
+ args: [{ selector: 'riv-all-views-modal', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <riv-side-sheet [topOffset]=\"topOffset\" (close)=\"close.emit()\">\n <div class=\"content\">\n <header>\n <span class=\"title\">All views</span>\n <button\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'X'\"\n (click)=\"close.emit()\"\n ></button>\n </header>\n\n <riv-search\n (valueChange)=\"\n manager?.actions?.next({\n type: 'setAllViewsSearchQuery',\n query: $event\n })\n \"\n [value]=\"s.all.search\"\n placeholder=\"Search\"\n ></riv-search>\n\n <div class=\"views\">\n <!-- View sections by permission type -->\n <ng-container\n *ngIf=\"s.all.privateViews.length > 0\"\n [ngTemplateOutlet]=\"permissionSection\"\n [ngTemplateOutletContext]=\"{\n permission: 'private',\n open: s.all.privateOpen,\n openChange: getOpenChange('private'),\n views: s.all.privateViews,\n title: getPermissionTitle('private'),\n description: getPermissionDescription('private')\n }\"\n ></ng-container>\n <ng-container\n *ngIf=\"s.all.sharedViews.length > 0\"\n [ngTemplateOutlet]=\"permissionSection\"\n [ngTemplateOutletContext]=\"{\n permission: 'shared',\n open: s.all.sharedOpen,\n openChange: getOpenChange('shared'),\n views: s.all.sharedViews,\n title: getPermissionTitle('shared'),\n description: getPermissionDescription('shared')\n }\"\n ></ng-container>\n <ng-container\n *ngIf=\"s.all.publicViews.length > 0\"\n [ngTemplateOutlet]=\"permissionSection\"\n [ngTemplateOutletContext]=\"{\n permission: 'public',\n open: s.all.publicOpen,\n openChange: getOpenChange('public'),\n views: s.all.publicViews,\n title: getPermissionTitle('public'),\n description: getPermissionDescription('public')\n }\"\n ></ng-container>\n\n <!-- Permission section -->\n <ng-template\n #permissionSection\n let-permission=\"permission\"\n let-open=\"open\"\n let-openChange=\"openChange\"\n let-views=\"views\"\n let-title=\"title\"\n let-description=\"description\"\n >\n <div class=\"permission-section\">\n <button\n class=\"permission-header\"\n (click)=\"openChange(!open)\"\n [disabled]=\"!!s.all.search\"\n >\n <div class=\"permission-header-content\">\n <h3 class=\"permission-title\">{{ title }}</h3>\n <span class=\"permission-description\">{{ description }}</span>\n </div>\n <riv-icon\n [name]=\"open ? 'ChevronUp' : 'ChevronDown'\"\n [size]=\"20\"\n ></riv-icon>\n </button>\n\n <div class=\"permission-content\" *ngIf=\"open\">\n <div class=\"views-list\" *ngIf=\"views.length > 0\">\n <button\n *ngFor=\"let view of views; trackBy: trackById\"\n class=\"view-item\"\n (click)=\"\n manager?.actions?.next({\n type: 'setActiveView',\n id: view.id\n });\n close.emit()\n \"\n >\n <div class=\"view-title\" rivTruncate>\n <riv-highlight\n [text]=\"view.title\"\n [indices]=\"view.titleHighlightIndices ?? []\"\n >\n </riv-highlight>\n </div>\n <riv-view-menu\n [manager]=\"manager\"\n [view]=\"view\"\n [menuContext]=\"'all-views'\"\n ></riv-view-menu>\n <button\n class=\"enable-view\"\n [class.enabled]=\"view.enabled && !view.system\"\n (click)=\"\n $event.stopPropagation();\n manager?.actions?.next({\n type: 'setEnabled',\n id: view.id,\n enabled: !view.enabled\n })\n \"\n [disabled]=\"view.system\"\n >\n <riv-icon\n *ngIf=\"view.enabled\"\n [name]=\"view.system ? 'Lock' : 'Eye'\"\n [rivTooltip]=\"view.system ? '' : 'Hide tab'\"\n [size]=\"20\"\n ></riv-icon>\n <riv-icon\n *ngIf=\"!view.enabled\"\n [name]=\"'EyeOff'\"\n [rivTooltip]=\"'Show tab'\"\n [size]=\"20\"\n ></riv-icon>\n </button>\n </button>\n </div>\n </div>\n </div>\n </ng-template>\n </div>\n </div>\n </riv-side-sheet>\n</ng-container>\n", styles: [".content{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-medium);height:100%}header{display:flex;justify-content:space-between;align-items:center}.title{font:var(--title-02)}.views{flex-grow:1;overflow-y:auto;display:flex;flex-direction:column;gap:var(--size-xlarge)}.permission-section{display:flex;flex-direction:column}.permission-header{display:flex;justify-content:space-between;align-items:center;width:100%;padding:var(--size-xsmall);border:none;background:none;cursor:pointer;gap:var(--size-small);border-radius:var(--border-radius-medium);transition:background-color var(--short-transition)}.permission-header:disabled{cursor:default;color:var(--type-light-disabled)}.permission-header:hover:not(:disabled){background-color:var(--surface-light-1)}.permission-header:active:not(:disabled){background-color:var(--surface-light-2)}.permission-header-content{display:flex;flex-direction:column;align-items:flex-start;text-align:left}.permission-title{font:var(--title-02)}.permission-description{font:var(--body-medium);color:var(--type-light-low-contrast)}.permission-content{padding-left:var(--size-small);padding-top:var(--size-small)}.views-list{display:flex;flex-direction:column;gap:var(--size-small)}.view-item{display:flex;align-items:center;padding:var(--size-xsmall) var(--size-small);border-radius:var(--border-radius-small);cursor:pointer;background-color:var(--surface-light-0);transition:background-color var(--short-transition)}.view-item:hover{background-color:var(--surface-light-1)}.view-item:active{background-color:var(--surface-light-2)}.view-title{text-align:left;flex-grow:1;font:var(--input-medium)}.view-item riv-view-menu{align-self:flex-end;opacity:0;transition:opacity var(--short-transition)}.view-item:hover riv-view-menu{opacity:1}.enable-view{cursor:pointer;display:inline-flex;justify-content:center;align-items:center;padding:0 var(--size-xsmall);transition:color var(--medium-transition);color:var(--type-light-low-contrast)}.enable-view.enabled{color:var(--type-light-link)}.enable-view.enabled:hover{color:var(--type-light-link-hover)}.enable-view.enabled:active{color:var(--type-light-link-active)}\n"] }]
4224
4224
  }], propDecorators: { manager: [{
4225
4225
  type: Input
4226
4226
  }], topOffset: [{