@coolon/angular-ui-powerups 3.11.1 → 3.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,21 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ## [3.12.0](https://bitbucket.org/coolon/angular-ui-powerups/compare/v3.11.2...v3.12.0) (2021-02-22)
6
+
7
+
8
+ ### Features
9
+
10
+ * added visible row count model to tables to support paging ([e33e8c3](https://bitbucket.org/coolon/angular-ui-powerups/commit/e33e8c328bb43481f638db42bdee8852d843ca1c))
11
+
12
+ ### [3.11.2](https://bitbucket.org/coolon/angular-ui-powerups/compare/v3.11.1...v3.11.2) (2021-02-11)
13
+
14
+
15
+ ### Bug Fixes
16
+
17
+ * added row selection backgound ([f6d6a2d](https://bitbucket.org/coolon/angular-ui-powerups/commit/f6d6a2d3bfbd7374470f5f21f805bfe4c167a5c8))
18
+ * fixed broken schematic default for new places ([6dd720b](https://bitbucket.org/coolon/angular-ui-powerups/commit/6dd720b0e7ccc1da9d04ffa016ce9ab9d47ae4e7))
19
+
5
20
  ### [3.11.1](https://bitbucket.org/coolon/angular-ui-powerups/compare/v3.11.0...v3.11.1) (2021-02-10)
6
21
 
7
22
 
package/assets/table.scss CHANGED
@@ -1,5 +1,6 @@
1
1
  aup-table {
2
2
  --default-column-gap: var(--column-gap, 24px); // material design table column padding
3
+ --resolved-row-selected-background-color: var(--row-selected-background-color, rgba(0, 0, 255, 0.04));
3
4
  --resolved-row-hover-background-color: var(--row-hover-background-color, rgba(0, 0, 0, 0.05));
4
5
 
5
6
  .mat-table {
@@ -8,8 +9,14 @@ aup-table {
8
9
  padding-left: 0;
9
10
  }
10
11
 
11
- tr.enable-hover:hover {
12
- background-color: var(--resolved-row-hover-background-color);
12
+ tr {
13
+ &.enable-hover:hover {
14
+ background-color: var(--resolved-row-hover-background-color);
15
+ }
16
+
17
+ &.aup-row-selected, &.aup-row-selected.enable-hover:hover {
18
+ background-color: var(--resolved-row-selected-background-color);
19
+ }
13
20
  }
14
21
 
15
22
  td.enable-cursor {
@@ -21,18 +28,12 @@ aup-table {
21
28
  // - columns with an explicit with will try to remain that width, but will expand to fit thier content.
22
29
  // - extra space will be allocated to columns that have the same width... e.g. setting all columns to 1px results
23
30
  // in the same scenario as not specifying the width.
24
- //
25
- // The following setup keeps all cells to the min width except for the last which will expand to take up
26
- // the remaining space. The downside is it'll wrap text by default. Which I could disable... but I need
27
- // to think about it more.
28
- //
29
- //.mat-cell:not(.flex) {
30
- // width: 1px;
31
- //}
32
- //.mat-cell:last-of-type {
33
- // width: 0;
34
- //}
35
-
31
+ .mat-cell, .mat-header-cell {
32
+ &:not(.flex) {
33
+ width: 1px;
34
+ white-space: nowrap;
35
+ }
36
+ }
36
37
  }
37
38
 
38
39
  aup-table-cell-renderer, aup-table-header-cell-renderer {
@@ -1,14 +1,14 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/common'), require('@angular/core'), require('@angular/forms'), require('@angular/material/form-field'), require('@angular/material/input'), require('@angular/material/select'), require('@angular/material/tabs'), require('@angular/platform-browser/animations'), require('@angular/cdk/portal'), require('@angular/cdk/scrolling'), require('@angular/material/autocomplete'), require('@angular/material/button'), require('@angular/material/checkbox'), require('@angular/material/divider'), require('@angular/material/icon'), require('@angular/material/menu'), require('@angular/material/progress-spinner'), require('@angular/material/table'), require('@angular/material/tooltip'), require('@fortawesome/angular-fontawesome'), require('@fortawesome/free-solid-svg-icons'), require('@coolon/pectin'), require('@typescript-plus/fast-memoize-decorator/dist/src'), require('lodash'), require('typescript-string-enums'), require('@coolon/typescript-utilities'), require('immer'), require('@angular/flex-layout'), require('@angular/material/dialog'), require('@angular/router'), require('@angular/cdk/overlay'), require('resize-observer-polyfill'), require('@angular/material/list'), require('@typescript-plus/fast-memoize-decorator'), require('reflect-metadata'), require('@angular/animations')) :
3
- typeof define === 'function' && define.amd ? define('@coolon/angular-ui-powerups', ['exports', '@angular/common', '@angular/core', '@angular/forms', '@angular/material/form-field', '@angular/material/input', '@angular/material/select', '@angular/material/tabs', '@angular/platform-browser/animations', '@angular/cdk/portal', '@angular/cdk/scrolling', '@angular/material/autocomplete', '@angular/material/button', '@angular/material/checkbox', '@angular/material/divider', '@angular/material/icon', '@angular/material/menu', '@angular/material/progress-spinner', '@angular/material/table', '@angular/material/tooltip', '@fortawesome/angular-fontawesome', '@fortawesome/free-solid-svg-icons', '@coolon/pectin', '@typescript-plus/fast-memoize-decorator/dist/src', 'lodash', 'typescript-string-enums', '@coolon/typescript-utilities', 'immer', '@angular/flex-layout', '@angular/material/dialog', '@angular/router', '@angular/cdk/overlay', 'resize-observer-polyfill', '@angular/material/list', '@typescript-plus/fast-memoize-decorator', 'reflect-metadata', '@angular/animations'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.coolon = global.coolon || {}, global.coolon['angular-ui-powerups'] = {}), global.ng.common, global.ng.core, global.ng.forms, global.ng.material.formField, global.ng.material.input, global.ng.material.select, global.ng.material.tabs, global.ng.platformBrowser.animations, global.ng.cdk.portal, global.ng.cdk.scrolling, global.ng.material.autocomplete, global.ng.material.button, global.ng.material.checkbox, global.ng.material.divider, global.ng.material.icon, global.ng.material.menu, global.ng.material.progressSpinner, global.ng.material.table, global.ng.material.tooltip, global.angularFontawesome, global.freeSolidSvgIcons, global.pectin, global.src, global._, global.typescriptStringEnums, global.typescriptUtilities, global.produce, global.ng.flexLayout, global.ng.material.dialog, global.ng.router, global.ng.cdk.overlay, global.ResizeObserver, global.ng.material.list, global.fastMemoizeDecorator, null, global.ng.animations));
5
- }(this, (function (exports, i2, i0, forms, formField, input, select, tabs, animations, portal, scrolling, autocomplete, button, checkbox, divider, icon, menu, progressSpinner, table, tooltip, angularFontawesome, freeSolidSvgIcons, pectin, src, _, typescriptStringEnums, typescriptUtilities, produce, flexLayout, i1, i1$1, overlay, ResizeObserver, list, fastMemoizeDecorator, reflectMetadata, animations$1) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/common'), require('@angular/core'), require('@angular/forms'), require('@angular/material/form-field'), require('@angular/material/input'), require('@angular/material/select'), require('@angular/material/tabs'), require('@angular/platform-browser/animations'), require('@angular/cdk/portal'), require('@angular/cdk/scrolling'), require('@angular/material/autocomplete'), require('@angular/material/button'), require('@angular/material/checkbox'), require('@angular/material/divider'), require('@angular/material/icon'), require('@angular/material/menu'), require('@angular/material/progress-spinner'), require('@angular/material/table'), require('@angular/material/tooltip'), require('@fortawesome/angular-fontawesome'), require('@fortawesome/free-solid-svg-icons'), require('@coolon/pectin'), require('@typescript-plus/fast-memoize-decorator/dist/src'), require('lodash'), require('typescript-string-enums'), require('resize-observer-polyfill'), require('@coolon/typescript-utilities'), require('immer'), require('@angular/flex-layout'), require('@angular/material/dialog'), require('@angular/router'), require('@angular/cdk/overlay'), require('@angular/material/list'), require('@typescript-plus/fast-memoize-decorator'), require('reflect-metadata'), require('@angular/animations')) :
3
+ typeof define === 'function' && define.amd ? define('@coolon/angular-ui-powerups', ['exports', '@angular/common', '@angular/core', '@angular/forms', '@angular/material/form-field', '@angular/material/input', '@angular/material/select', '@angular/material/tabs', '@angular/platform-browser/animations', '@angular/cdk/portal', '@angular/cdk/scrolling', '@angular/material/autocomplete', '@angular/material/button', '@angular/material/checkbox', '@angular/material/divider', '@angular/material/icon', '@angular/material/menu', '@angular/material/progress-spinner', '@angular/material/table', '@angular/material/tooltip', '@fortawesome/angular-fontawesome', '@fortawesome/free-solid-svg-icons', '@coolon/pectin', '@typescript-plus/fast-memoize-decorator/dist/src', 'lodash', 'typescript-string-enums', 'resize-observer-polyfill', '@coolon/typescript-utilities', 'immer', '@angular/flex-layout', '@angular/material/dialog', '@angular/router', '@angular/cdk/overlay', '@angular/material/list', '@typescript-plus/fast-memoize-decorator', 'reflect-metadata', '@angular/animations'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.coolon = global.coolon || {}, global.coolon['angular-ui-powerups'] = {}), global.ng.common, global.ng.core, global.ng.forms, global.ng.material.formField, global.ng.material.input, global.ng.material.select, global.ng.material.tabs, global.ng.platformBrowser.animations, global.ng.cdk.portal, global.ng.cdk.scrolling, global.ng.material.autocomplete, global.ng.material.button, global.ng.material.checkbox, global.ng.material.divider, global.ng.material.icon, global.ng.material.menu, global.ng.material.progressSpinner, global.ng.material.table, global.ng.material.tooltip, global.angularFontawesome, global.freeSolidSvgIcons, global.pectin, global.src, global._, global.typescriptStringEnums, global.ResizeObserver, global.typescriptUtilities, global.produce, global.ng.flexLayout, global.ng.material.dialog, global.ng.router, global.ng.cdk.overlay, global.ng.material.list, global.fastMemoizeDecorator, null, global.ng.animations));
5
+ }(this, (function (exports, i2, i0, forms, formField, input, select, tabs, animations, portal, scrolling, autocomplete, button, checkbox, divider, icon, menu, progressSpinner, table, tooltip, angularFontawesome, freeSolidSvgIcons, pectin, src, _, typescriptStringEnums, ResizeObserver, typescriptUtilities, produce, flexLayout, i1, i1$1, overlay, list, fastMemoizeDecorator, reflectMetadata, animations$1) { 'use strict';
6
6
 
7
7
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
8
 
9
9
  var ___default = /*#__PURE__*/_interopDefaultLegacy(_);
10
- var produce__default = /*#__PURE__*/_interopDefaultLegacy(produce);
11
10
  var ResizeObserver__default = /*#__PURE__*/_interopDefaultLegacy(ResizeObserver);
11
+ var produce__default = /*#__PURE__*/_interopDefaultLegacy(produce);
12
12
 
13
13
  /*! *****************************************************************************
14
14
  Copyright (c) Microsoft Corporation.
@@ -729,7 +729,7 @@
729
729
  { type: i0.Component, args: [{
730
730
  selector: 'aup-card-container',
731
731
  template: "<div class=\"card-container\">\n <ng-content></ng-content>\n\n <div class=\"add-card-container\" *ngIf=\"addCardCommand.enabled.value\" [pectinCommand]=\"addCardCommand\">\n <aup-command-face *ngIf=\"addCardFace\" [faces]=\"[addCardFace]\"></aup-command-face>\n <aup-icon *ngIf=\"!addCardFace\" icon=\"mat:add\"></aup-icon>\n </div>\n\n <div class=\"add-card-template\" *ngIf=\"addCardTemplate\">\n <ng-container [ngTemplateOutlet]=\"addCardTemplate\"></ng-container>\n </div>\n\n</div>\n",
732
- styles: [":root{--aup-default-background:#fff;--aup-default-padding:var(--default-padding,18px)}aup-activity-title{font-family:Roboto,Helvetica Neue,sans-serif;font-size:20px;letter-spacing:normal;line-height:32px;margin-bottom:var(--default-padding)}.router-outlet-container>*{bottom:0;left:0;position:absolute;right:0;top:0}[no-tab-header]>mat-tab-header{display:none}[full-height-tabs] .mat-tab-body-wrapper,mat-tab-group.full-height-tabs .mat-tab-body-wrapper{flex:1}[full-height-tabs] .mat-tab-body-wrapper .mat-tab-body-content,[full-height-tabs] .mat-tab-body-wrapper mat-tab-body,mat-tab-group.full-height-tabs .mat-tab-body-wrapper .mat-tab-body-content,mat-tab-group.full-height-tabs .mat-tab-body-wrapper mat-tab-body{display:flex;flex-direction:column;justify-content:stretch}.dialog-interaction-context,.dialog-interaction-context mat-dialog-container{max-height:95vh!important;max-width:95vw!important}.dialog-interaction-context mat-dialog-container{padding:0}.activity-outlet-wrapper{align-items:stretch;display:flex;flex-direction:column}.aup-popup-interaction-panel{background:var(--aup-default-background,#fff);box-shadow:0 2px 1px -1px rgba(0,0,0,.2),0 1px 1px 0 rgba(0,0,0,.14),0 1px 3px 0 rgba(0,0,0,.12);transition:box-shadow .28s cubic-bezier(.4,0,.2,1)}.aup-input-activity{padding:calc(var(--aup-default-padding)/2)}.aup-input-component{display:block}.aup-input-component input,.aup-input-component mat-form-field{width:100%}.aup-input-component input mat-hint.faux-error,.aup-input-component mat-form-field mat-hint.faux-error{color:#f44336}.aup-input-component.dense mat-form-field .mat-form-field-infix{border-top:none}.aup-input-component.dense mat-form-field .mat-form-field-flex{padding-top:0}.aup-input-component.dense mat-form-field .mat-form-field-wrapper{border-bottom:0;padding-bottom:0}.aup-input-component.dense mat-form-field .mat-form-field-underline{bottom:0}.aup-input-component.dense mat-form-field.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label-wrapper{display:none}.aup-input-component.dense mat-form-field.mat-form-field-appearance-standard.mat-form-field-has-label .mat-select:not(.mat-select-empty) .mat-select-arrow-wrapper{transform:translateY(0)}aup-table-cell-renderer>.aup-input-component .mat-form-field-flex{padding-top:0}aup-table-cell-renderer>.aup-input-component .mat-form-field-infix{width:0}aup-table-cell-renderer>.aup-input-component .mat-form-field-label-wrapper{display:none}aup-table{--default-column-gap:var(--column-gap,24px);--resolved-row-hover-background-color:var(--row-hover-background-color,rgba(0,0,0,0.05))}aup-table .mat-table td.mat-cell:first-of-type,aup-table .mat-table td.mat-footer-cell:first-of-type,aup-table .mat-table th.mat-header-cell:first-of-type{padding-left:0}aup-table .mat-table tr.enable-hover:hover{background-color:var(--resolved-row-hover-background-color)}aup-table .mat-table td.enable-cursor{cursor:pointer}aup-table aup-table-cell-renderer,aup-table aup-table-header-cell-renderer{align-items:stretch;display:flex;flex-direction:column;height:100%;justify-content:center;min-height:47px}aup-table aup-table-cell-renderer.first-column,aup-table aup-table-cell-renderer:not(.first-column),aup-table aup-table-header-cell-renderer.first-column,aup-table aup-table-header-cell-renderer:not(.first-column){padding-left:var(--default-column-gap)}aup-table aup-table-cell-renderer.fillCell{justify-content:stretch;padding-left:0!important}aup-table aup-table-cell-renderer.padChild>:first-child{flex:1;padding-left:var(--default-column-gap)}:root{--aup-command-face-icon-gap:8px;--aup-fa-icon-width:18px;--aup-icon-width:24px}aup-icon{--fa-icon-offset:calc((var(--aup-icon-width) - var(--aup-fa-icon-width))/2);position:relative}aup-icon fa-icon .svg-inline--fa{height:var(--aup-fa-icon-width)!important;left:var(--fa-icon-offset);position:absolute;top:var(--fa-icon-offset);width:var(--aup-fa-icon-width)!important}.mat-menu-panel aup-icon .svg-inline--fa{opacity:.54}:host{--resolved-card-background:var(--card-background,#fcfcfb);--resolved-card-gap:var(--card-gap,16px);--resolved-card-height:var(--card-height,auto);--resolved-card-min-height:var(--card-min-height,auto);--resolved-card-width:var(--card-width,300px);background:var(--resolved-card-background);display:block;flex:1}.card-container{box-sizing:border-box;display:-ms-grid;display:grid;grid-gap:var(--resolved-card-gap);grid-template-columns:repeat(auto-fill,var(--resolved-card-width));grid-template-rows:repeat(auto-fit,minmax(var(--resolved-card-min-height),var(--resolved-card-height)));max-width:100%;min-height:calc(var(--resolved-card-height) + 2*var(--resolved-card-gap));min-width:calc(var(--resolved-card-width) + 2*var(--resolved-card-gap));padding:var(--resolved-card-gap);width:calc((var(--resolved-card-width) + var(--resolved-card-gap))*2 + var(--grid-gap))}.add-card-container{align-items:center;background-color:hsla(0,0%,100%,.8);border:2px dashed rgba(0,0,0,.1);border-radius:6px;box-sizing:border-box;color:rgba(0,0,0,.54);cursor:pointer;display:flex;flex-direction:column;font-weight:300;height:var(--resolved-card-height);justify-content:center;min-height:var(--resolved-card-min-height);transition:all .28s cubic-bezier(.4,0,.2,1);width:var(--resolved-card-width)}.add-card-container mat-icon{font-size:200%}.add-card-container:hover{background-color:#fff;border-color:transparent;color:rgba(0,0,0,.54);transition:box-shadow .28s cubic-bezier(.4,0,.2,1);transition:all .28s cubic-bezier(.4,0,.2,1)}.add-card-container:hover:hover{box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.add-card-template-container{align-items:stretch;display:flex;flex-direction:column;height:var(--resolved-card-height);justify-content:stretch;width:var(--resolved-card-width)}"]
732
+ styles: [":root{--aup-default-background:#fff;--aup-default-padding:var(--default-padding,18px)}aup-activity-title{font-family:Roboto,Helvetica Neue,sans-serif;font-size:20px;letter-spacing:normal;line-height:32px;margin-bottom:var(--default-padding)}.router-outlet-container>*{bottom:0;left:0;position:absolute;right:0;top:0}[no-tab-header]>mat-tab-header{display:none}[full-height-tabs] .mat-tab-body-wrapper,mat-tab-group.full-height-tabs .mat-tab-body-wrapper{flex:1}[full-height-tabs] .mat-tab-body-wrapper .mat-tab-body-content,[full-height-tabs] .mat-tab-body-wrapper mat-tab-body,mat-tab-group.full-height-tabs .mat-tab-body-wrapper .mat-tab-body-content,mat-tab-group.full-height-tabs .mat-tab-body-wrapper mat-tab-body{display:flex;flex-direction:column;justify-content:stretch}.dialog-interaction-context,.dialog-interaction-context mat-dialog-container{max-height:95vh!important;max-width:95vw!important}.dialog-interaction-context mat-dialog-container{padding:0}.activity-outlet-wrapper{align-items:stretch;display:flex;flex-direction:column}.aup-popup-interaction-panel{background:var(--aup-default-background,#fff);box-shadow:0 2px 1px -1px rgba(0,0,0,.2),0 1px 1px 0 rgba(0,0,0,.14),0 1px 3px 0 rgba(0,0,0,.12);transition:box-shadow .28s cubic-bezier(.4,0,.2,1)}.aup-input-activity{padding:calc(var(--aup-default-padding)/2)}.aup-input-component{display:block}.aup-input-component input,.aup-input-component mat-form-field{width:100%}.aup-input-component input mat-hint.faux-error,.aup-input-component mat-form-field mat-hint.faux-error{color:#f44336}.aup-input-component.dense mat-form-field .mat-form-field-infix{border-top:none}.aup-input-component.dense mat-form-field .mat-form-field-flex{padding-top:0}.aup-input-component.dense mat-form-field .mat-form-field-wrapper{border-bottom:0;padding-bottom:0}.aup-input-component.dense mat-form-field .mat-form-field-underline{bottom:0}.aup-input-component.dense mat-form-field.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label-wrapper{display:none}.aup-input-component.dense mat-form-field.mat-form-field-appearance-standard.mat-form-field-has-label .mat-select:not(.mat-select-empty) .mat-select-arrow-wrapper{transform:translateY(0)}aup-table-cell-renderer>.aup-input-component .mat-form-field-flex{padding-top:0}aup-table-cell-renderer>.aup-input-component .mat-form-field-infix{width:0}aup-table-cell-renderer>.aup-input-component .mat-form-field-label-wrapper{display:none}aup-table{--default-column-gap:var(--column-gap,24px);--resolved-row-hover-background-color:var(--row-hover-background-color,rgba(0,0,0,0.05));--resolved-row-selected-background-color:var(--row-selected-background-color,rgba(0,0,255,0.04))}aup-table .mat-table td.mat-cell:first-of-type,aup-table .mat-table td.mat-footer-cell:first-of-type,aup-table .mat-table th.mat-header-cell:first-of-type{padding-left:0}aup-table .mat-table tr.enable-hover:hover{background-color:var(--resolved-row-hover-background-color)}aup-table .mat-table tr.aup-row-selected,aup-table .mat-table tr.aup-row-selected.enable-hover:hover{background-color:var(--resolved-row-selected-background-color)}aup-table .mat-table td.enable-cursor{cursor:pointer}aup-table .mat-table .mat-cell:not(.flex),aup-table .mat-table .mat-header-cell:not(.flex){white-space:nowrap;width:1px}aup-table aup-table-cell-renderer,aup-table aup-table-header-cell-renderer{align-items:stretch;display:flex;flex-direction:column;height:100%;justify-content:center;min-height:47px}aup-table aup-table-cell-renderer.first-column,aup-table aup-table-cell-renderer:not(.first-column),aup-table aup-table-header-cell-renderer.first-column,aup-table aup-table-header-cell-renderer:not(.first-column){padding-left:var(--default-column-gap)}aup-table aup-table-cell-renderer.fillCell{justify-content:stretch;padding-left:0!important}aup-table aup-table-cell-renderer.padChild>:first-child{flex:1;padding-left:var(--default-column-gap)}:root{--aup-command-face-icon-gap:8px;--aup-fa-icon-width:18px;--aup-icon-width:24px}aup-icon{--fa-icon-offset:calc((var(--aup-icon-width) - var(--aup-fa-icon-width))/2);position:relative}aup-icon fa-icon .svg-inline--fa{height:var(--aup-fa-icon-width)!important;left:var(--fa-icon-offset);position:absolute;top:var(--fa-icon-offset);width:var(--aup-fa-icon-width)!important}.mat-menu-panel aup-icon .svg-inline--fa{opacity:.54}:host{--resolved-card-background:var(--card-background,#fcfcfb);--resolved-card-gap:var(--card-gap,16px);--resolved-card-height:var(--card-height,auto);--resolved-card-min-height:var(--card-min-height,auto);--resolved-card-width:var(--card-width,300px);background:var(--resolved-card-background);display:block;flex:1}.card-container{box-sizing:border-box;display:-ms-grid;display:grid;grid-gap:var(--resolved-card-gap);grid-template-columns:repeat(auto-fill,var(--resolved-card-width));grid-template-rows:repeat(auto-fit,minmax(var(--resolved-card-min-height),var(--resolved-card-height)));max-width:100%;min-height:calc(var(--resolved-card-height) + 2*var(--resolved-card-gap));min-width:calc(var(--resolved-card-width) + 2*var(--resolved-card-gap));padding:var(--resolved-card-gap);width:calc((var(--resolved-card-width) + var(--resolved-card-gap))*2 + var(--grid-gap))}.add-card-container{align-items:center;background-color:hsla(0,0%,100%,.8);border:2px dashed rgba(0,0,0,.1);border-radius:6px;box-sizing:border-box;color:rgba(0,0,0,.54);cursor:pointer;display:flex;flex-direction:column;font-weight:300;height:var(--resolved-card-height);justify-content:center;min-height:var(--resolved-card-min-height);transition:all .28s cubic-bezier(.4,0,.2,1);width:var(--resolved-card-width)}.add-card-container mat-icon{font-size:200%}.add-card-container:hover{background-color:#fff;border-color:transparent;color:rgba(0,0,0,.54);transition:box-shadow .28s cubic-bezier(.4,0,.2,1);transition:all .28s cubic-bezier(.4,0,.2,1)}.add-card-container:hover:hover{box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.add-card-template-container{align-items:stretch;display:flex;flex-direction:column;height:var(--resolved-card-height);justify-content:stretch;width:var(--resolved-card-width)}"]
733
733
  },] }
734
734
  ];
735
735
  CardContainerComponent.ctorParameters = function () { return []; };
@@ -2328,6 +2328,113 @@
2328
2328
  __metadata("design:type", Object)
2329
2329
  ], SwitchCaseComponent.prototype, "switch", void 0);
2330
2330
 
2331
+ var Dimension = /** @class */ (function () {
2332
+ function Dimension(width, height) {
2333
+ this.width = width;
2334
+ this.height = height;
2335
+ }
2336
+ return Dimension;
2337
+ }());
2338
+
2339
+ var Point = /** @class */ (function () {
2340
+ function Point(x, y) {
2341
+ this.x = x;
2342
+ this.y = y;
2343
+ }
2344
+ Point.from = function (data) {
2345
+ return new Point(data.x, data.y);
2346
+ };
2347
+ Point.prototype.translate = function (x, y) {
2348
+ return new Point(this.x + x, this.y + y);
2349
+ };
2350
+ return Point;
2351
+ }());
2352
+
2353
+ exports.Bounds = /** @class */ (function (_super) {
2354
+ __extends(Bounds, _super);
2355
+ function Bounds(top, left, width, height) {
2356
+ var _this = _super.call(this, width, height) || this;
2357
+ _this.top = top;
2358
+ _this.left = left;
2359
+ _this.width = width;
2360
+ _this.height = height;
2361
+ return _this;
2362
+ }
2363
+ Bounds.prototype.relativePositionOf = function (point) {
2364
+ if (point instanceof MouseEvent) {
2365
+ return new Point(point.clientX - this.left, point.clientY - this.top);
2366
+ }
2367
+ else {
2368
+ return new Point(point.x - this.left, point.y - this.top);
2369
+ }
2370
+ };
2371
+ return Bounds;
2372
+ }(Dimension));
2373
+ (function (Bounds) {
2374
+ function ofElement(element) {
2375
+ var rect = element.getBoundingClientRect();
2376
+ return new Bounds(rect.top, rect.left, rect.width, rect.height);
2377
+ }
2378
+ Bounds.ofElement = ofElement;
2379
+ })(exports.Bounds || (exports.Bounds = {}));
2380
+
2381
+ var ResizeAwareComponent = /** @class */ (function (_super) {
2382
+ __extends(ResizeAwareComponent, _super);
2383
+ function ResizeAwareComponent(elementRef, ngZone) {
2384
+ var _this = _super.call(this) || this;
2385
+ _this.elementRef = elementRef;
2386
+ _this.ngZone = ngZone;
2387
+ _this._boundsModel = new pectin.MutableValueModel(new exports.Bounds(0, 0, 0, 0));
2388
+ return _this;
2389
+ }
2390
+ ResizeAwareComponent.prototype.ngAfterViewInit = function () {
2391
+ var _this = this;
2392
+ this.updateBounds();
2393
+ var element = this.elementRef.nativeElement;
2394
+ var ro = new ResizeObserver__default['default'](function (entries, observer) {
2395
+ _this.ngZone.run(function () { return _this.updateBounds(); });
2396
+ });
2397
+ ro.observe(element);
2398
+ this.onDispose(function () { return ro.disconnect(); });
2399
+ };
2400
+ Object.defineProperty(ResizeAwareComponent.prototype, "boundsModel", {
2401
+ get: function () {
2402
+ return this._boundsModel.readonly;
2403
+ },
2404
+ enumerable: false,
2405
+ configurable: true
2406
+ });
2407
+ Object.defineProperty(ResizeAwareComponent.prototype, "nativeElement", {
2408
+ get: function () {
2409
+ return this.elementRef.nativeElement;
2410
+ },
2411
+ enumerable: false,
2412
+ configurable: true
2413
+ });
2414
+ // TODO: Make this handle body scroll
2415
+ ResizeAwareComponent.prototype.relativePositionOf = function (point) {
2416
+ return this.bounds.relativePositionOf(point);
2417
+ };
2418
+ Object.defineProperty(ResizeAwareComponent.prototype, "bounds", {
2419
+ get: function () {
2420
+ return this._boundsModel.value;
2421
+ },
2422
+ enumerable: false,
2423
+ configurable: true
2424
+ });
2425
+ ResizeAwareComponent.prototype.updateBounds = function () {
2426
+ this._boundsModel.value = exports.Bounds.ofElement(this.nativeElement);
2427
+ };
2428
+ return ResizeAwareComponent;
2429
+ }(DisposableComponent));
2430
+ ResizeAwareComponent.decorators = [
2431
+ { type: i0.Directive }
2432
+ ];
2433
+ ResizeAwareComponent.ctorParameters = function () { return [
2434
+ { type: i0.ElementRef },
2435
+ { type: i0.NgZone }
2436
+ ]; };
2437
+
2331
2438
  var HEADER_CELL_RENDERER_PORTAL = Symbol('aup-cell-header-renderer-component-ref');
2332
2439
  var CELL_RENDERER_PORTAL = Symbol('aup-cell-renderer-component-ref');
2333
2440
  var CELL_EDITOR_PORTAL = Symbol('aup-cell-editor-component-ref');
@@ -3015,6 +3122,7 @@
3015
3122
  pectin.assert.isNil(this.selectionColumnModel);
3016
3123
  var columnId = 'selection-column';
3017
3124
  this.selectionColumnModel = new SelectionColumnModel(columnId, function () { return _this.getColumnTextProperties(columnId); }, selectionModel);
3125
+ this.addRowClass("aup-row-selected", function (row) { return selectionModel.isSelected(row); });
3018
3126
  return this.addColumn(this.selectionColumnModel);
3019
3127
  };
3020
3128
  AbstractTableModel.prototype.addEditControls = function (saveCommand) {
@@ -3161,6 +3269,8 @@
3161
3269
  * @example
3162
3270
  * aup-table {
3163
3271
  * --column-gap: 10px; // defaults to 24px
3272
+ * --row-hover-background-color, rgba(0, 0, 0, 0.05)
3273
+ * --row-selected-background-color: rebeccapurple; // defaults to transparent
3164
3274
  * aup-table-cell-renderer {
3165
3275
  * &:first-column {
3166
3276
  * // do stuff
@@ -3173,8 +3283,21 @@
3173
3283
  */
3174
3284
  var TableComponent = /** @class */ (function (_super) {
3175
3285
  __extends(TableComponent, _super);
3176
- function TableComponent() {
3177
- return _super.call(this) || this;
3286
+ function TableComponent(elementRef, ngZone) {
3287
+ var _this = _super.call(this, elementRef, ngZone) || this;
3288
+ // TODO: support user defined header and row heights via css vars.
3289
+ _this.headerHeight = new pectin.MutableValueModel(56);
3290
+ _this.rowHeight = new pectin.MutableValueModel(48);
3291
+ var chain = pectin.Dsl.disposeWith(_this).chain;
3292
+ _this.visibleRowCount = chain(_this.boundsModel).map(function (bounds) {
3293
+ // TODO: this doesn't take into account any css styling adjustments etc. Will invistigate if it's an issue.
3294
+ var rawRowCount = (bounds.height - _this.headerHeight.value) / _this.rowHeight.value;
3295
+ return rawRowCount < 1 ? 0 : Math.floor(rawRowCount);
3296
+ }, {
3297
+ dependsOn: [_this.headerHeight, _this.rowHeight],
3298
+ postponeWhile: chain(_this.boundsModel).pluckNumeric('height').isLessThan(1)
3299
+ });
3300
+ return _this;
3178
3301
  }
3179
3302
  TableComponent.prototype.ngOnInit = function () {
3180
3303
  var _a = pectin.Dsl.disposeWith(this), chain = _a.chain, valueOf = _a.valueOf, before = _a.before, when = _a.when, after = _a.after, observe = _a.observe, switchOn = _a.switchOn;
@@ -3195,15 +3318,18 @@
3195
3318
  this.tableModel._notifyCellClicked(columnModel, row);
3196
3319
  };
3197
3320
  return TableComponent;
3198
- }(DisposableComponent));
3321
+ }(ResizeAwareComponent));
3199
3322
  TableComponent.decorators = [
3200
3323
  { type: i0.Component, args: [{
3201
3324
  selector: 'aup-table',
3202
3325
  template: "<table mat-table [dataSource]=\"tableModel.dataSource.value\" [trackBy]=\"tableModel.trackBy\">\n\n <ng-container *ngFor=\"let column of columns.value; index as index; first as first; last as last\"\n matColumnDef=\"{{column.columnId}}\">\n <th mat-header-cell *matHeaderCellDef [class.flex]=\"column.isFlex()\">\n <aup-table-header-cell-renderer [column]=\"column\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class.first-column]=\"first\"\n [class.last-column]=\"last\"\n ></aup-table-header-cell-renderer>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"notifyCellClicked(column, row)\"\n [class.enable-cursor]=\"tableModel.isCursorEnabled(column)\"\n [class.flex]=\"column.isFlex()\"\n >\n <aup-table-cell-renderer [column]=\"column\"\n [row]=\"row\"\n [tableModel]=\"tableModel\"\n [editSession]=\"tableModel.getEditSessionFor(row)\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class.first-column]=\"first\"\n [class.last-column]=\"last\"\n ></aup-table-cell-renderer>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"columnIds.value\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: columnIds.value; let i = index\"\n [ngClass]=\"tableModel.getRowClasses(row)\" [class.enable-hover]=\"tableModel.isHoverEnabled()\"\n [attr.trackBy]=\"tableModel.trackBy(i, row)\"\n ></tr>\n\n</table>\n",
3203
- styles: [":host{align-items:stretch;display:flex;flex-direction:column}:host table{flex:1;width:100%}.mat-column-selection-column{width:1px!important}.mat-cell:not(.flex),.mat-header-cell:not(.flex){white-space:nowrap;width:1px}"]
3326
+ styles: [":host{align-items:stretch;display:flex;flex-direction:column}:host table{flex:1;width:100%}"]
3204
3327
  },] }
3205
3328
  ];
3206
- TableComponent.ctorParameters = function () { return []; };
3329
+ TableComponent.ctorParameters = function () { return [
3330
+ { type: i0.ElementRef },
3331
+ { type: i0.NgZone }
3332
+ ]; };
3207
3333
  TableComponent.propDecorators = {
3208
3334
  tableModel: [{ type: i0.Input }]
3209
3335
  };
@@ -5504,113 +5630,6 @@
5504
5630
  },] }
5505
5631
  ];
5506
5632
 
5507
- var Dimension = /** @class */ (function () {
5508
- function Dimension(width, height) {
5509
- this.width = width;
5510
- this.height = height;
5511
- }
5512
- return Dimension;
5513
- }());
5514
-
5515
- var Point = /** @class */ (function () {
5516
- function Point(x, y) {
5517
- this.x = x;
5518
- this.y = y;
5519
- }
5520
- Point.from = function (data) {
5521
- return new Point(data.x, data.y);
5522
- };
5523
- Point.prototype.translate = function (x, y) {
5524
- return new Point(this.x + x, this.y + y);
5525
- };
5526
- return Point;
5527
- }());
5528
-
5529
- exports.Bounds = /** @class */ (function (_super) {
5530
- __extends(Bounds, _super);
5531
- function Bounds(top, left, width, height) {
5532
- var _this = _super.call(this, width, height) || this;
5533
- _this.top = top;
5534
- _this.left = left;
5535
- _this.width = width;
5536
- _this.height = height;
5537
- return _this;
5538
- }
5539
- Bounds.prototype.relativePositionOf = function (point) {
5540
- if (point instanceof MouseEvent) {
5541
- return new Point(point.clientX - this.left, point.clientY - this.top);
5542
- }
5543
- else {
5544
- return new Point(point.x - this.left, point.y - this.top);
5545
- }
5546
- };
5547
- return Bounds;
5548
- }(Dimension));
5549
- (function (Bounds) {
5550
- function ofElement(element) {
5551
- var rect = element.getBoundingClientRect();
5552
- return new Bounds(rect.top, rect.left, rect.width, rect.height);
5553
- }
5554
- Bounds.ofElement = ofElement;
5555
- })(exports.Bounds || (exports.Bounds = {}));
5556
-
5557
- var ResizeAwareComponent = /** @class */ (function (_super) {
5558
- __extends(ResizeAwareComponent, _super);
5559
- function ResizeAwareComponent(elementRef, ngZone) {
5560
- var _this = _super.call(this) || this;
5561
- _this.elementRef = elementRef;
5562
- _this.ngZone = ngZone;
5563
- _this._boundsModel = new pectin.MutableValueModel(new exports.Bounds(0, 0, 0, 0));
5564
- return _this;
5565
- }
5566
- ResizeAwareComponent.prototype.ngAfterViewInit = function () {
5567
- var _this = this;
5568
- this.updateBounds();
5569
- var element = this.elementRef.nativeElement;
5570
- var ro = new ResizeObserver__default['default'](function (entries, observer) {
5571
- _this.ngZone.run(function () { return _this.updateBounds(); });
5572
- });
5573
- ro.observe(element);
5574
- this.onDispose(function () { return ro.disconnect(); });
5575
- };
5576
- Object.defineProperty(ResizeAwareComponent.prototype, "boundsModel", {
5577
- get: function () {
5578
- return this._boundsModel.readonly;
5579
- },
5580
- enumerable: false,
5581
- configurable: true
5582
- });
5583
- Object.defineProperty(ResizeAwareComponent.prototype, "nativeElement", {
5584
- get: function () {
5585
- return this.elementRef.nativeElement;
5586
- },
5587
- enumerable: false,
5588
- configurable: true
5589
- });
5590
- // TODO: Make this handle body scroll
5591
- ResizeAwareComponent.prototype.relativePositionOf = function (point) {
5592
- return this.bounds.relativePositionOf(point);
5593
- };
5594
- Object.defineProperty(ResizeAwareComponent.prototype, "bounds", {
5595
- get: function () {
5596
- return this._boundsModel.value;
5597
- },
5598
- enumerable: false,
5599
- configurable: true
5600
- });
5601
- ResizeAwareComponent.prototype.updateBounds = function () {
5602
- this._boundsModel.value = exports.Bounds.ofElement(this.nativeElement);
5603
- };
5604
- return ResizeAwareComponent;
5605
- }(DisposableComponent));
5606
- ResizeAwareComponent.decorators = [
5607
- { type: i0.Directive }
5608
- ];
5609
- ResizeAwareComponent.ctorParameters = function () { return [
5610
- { type: i0.ElementRef },
5611
- { type: i0.NgZone }
5612
- ]; };
5613
-
5614
5633
  /**
5615
5634
  * Example:
5616
5635
  * @example