@digital-realty/ix-grid 1.3.2 → 1.4.1-alpha.2

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.
Files changed (71) hide show
  1. package/dist/IxGrid.js +1 -1
  2. package/dist/IxGrid.js.map +1 -1
  3. package/dist/components/IxGridRowFilter.js +1 -1
  4. package/dist/components/IxGridRowFilter.js.map +1 -1
  5. package/dist/ix-grid.min.js +1 -1
  6. package/package.json +6 -6
  7. package/rollup.config.mjs +36 -2
  8. package/src/IxGrid.d.ts +148 -0
  9. package/src/IxGrid.js +784 -0
  10. package/src/IxGrid.js.map +1 -0
  11. package/src/IxGrid.ts +1 -1
  12. package/src/IxGridNav.d.ts +2 -0
  13. package/src/IxGridNav.js +8 -0
  14. package/src/IxGridNav.js.map +1 -0
  15. package/src/components/IxGridColumnFilter.d.ts +35 -0
  16. package/src/components/IxGridColumnFilter.js +249 -0
  17. package/src/components/IxGridColumnFilter.js.map +1 -0
  18. package/src/components/IxGridDownloadMenu.d.ts +17 -0
  19. package/src/components/IxGridDownloadMenu.js +98 -0
  20. package/src/components/IxGridDownloadMenu.js.map +1 -0
  21. package/src/components/IxGridNav.d.ts +16 -0
  22. package/src/components/IxGridNav.js +103 -0
  23. package/src/components/IxGridNav.js.map +1 -0
  24. package/src/components/IxGridNoRows.d.ts +10 -0
  25. package/src/components/IxGridNoRows.js +74 -0
  26. package/src/components/IxGridNoRows.js.map +1 -0
  27. package/src/components/IxGridRowFilter.d.ts +55 -0
  28. package/src/components/IxGridRowFilter.js +441 -0
  29. package/src/components/IxGridRowFilter.js.map +1 -0
  30. package/src/components/IxGridRowFilter.ts +1 -1
  31. package/src/components/IxPagination.d.ts +14 -0
  32. package/src/components/IxPagination.js +107 -0
  33. package/src/components/IxPagination.js.map +1 -0
  34. package/src/components/grid-column-filter-styles.d.ts +1 -0
  35. package/src/components/grid-column-filter-styles.js +89 -0
  36. package/src/components/grid-column-filter-styles.js.map +1 -0
  37. package/src/components/grid-row-filter-styles.d.ts +1 -0
  38. package/src/components/grid-row-filter-styles.js +311 -0
  39. package/src/components/grid-row-filter-styles.js.map +1 -0
  40. package/src/components/ix-grid-no-rows.d.ts +1 -0
  41. package/src/components/ix-grid-no-rows.js +2 -0
  42. package/src/components/ix-grid-no-rows.js.map +1 -0
  43. package/src/components/pagination-styles.d.ts +1 -0
  44. package/src/components/pagination-styles.js +84 -0
  45. package/src/components/pagination-styles.js.map +1 -0
  46. package/src/grid-view-styles.d.ts +1 -0
  47. package/src/grid-view-styles.js +283 -0
  48. package/src/grid-view-styles.js.map +1 -0
  49. package/src/index.d.ts +3 -0
  50. package/src/index.js +3 -0
  51. package/src/index.js.map +1 -0
  52. package/src/ix-grid-copy.d.ts +12 -0
  53. package/src/ix-grid-copy.js +12 -0
  54. package/src/ix-grid-copy.js.map +1 -0
  55. package/src/ix-grid-nav.d.ts +1 -0
  56. package/src/ix-grid-nav.js +2 -0
  57. package/src/ix-grid-nav.js.map +1 -0
  58. package/src/ix-grid-no-rows.d.ts +1 -0
  59. package/src/ix-grid-no-rows.js +2 -0
  60. package/src/ix-grid-no-rows.js.map +1 -0
  61. package/src/ix-grid.d.ts +1 -0
  62. package/src/ix-grid.js +2 -0
  63. package/src/ix-grid.js.map +1 -0
  64. package/src/models/IxGridDownloadMenuItemModel.d.ts +7 -0
  65. package/src/models/IxGridDownloadMenuItemModel.js +1 -0
  66. package/src/models/IxGridDownloadMenuItemModel.js.map +1 -0
  67. package/src/test/ix-grid-column-filter.test.js +41 -0
  68. package/src/test/ix-grid-row-filter.test.js +281 -0
  69. package/src/test/ix-grid.test.js +391 -0
  70. package/src/test/ix-pagination.test.js +58 -0
  71. package/web-test-runner.config.mjs +1 -1
@@ -0,0 +1,103 @@
1
+ import { __decorate } from "tslib";
2
+ import { LitElement, html, css } from 'lit';
3
+ import { property } from 'lit/decorators.js';
4
+ import { ifDefined } from 'lit/directives/if-defined.js';
5
+ import '@digital-realty/ix-button';
6
+ export class IxGridNavigation extends LitElement {
7
+ constructor() {
8
+ super(...arguments);
9
+ this.buttons = [];
10
+ // eslint-disable-next-line class-methods-use-this
11
+ this.renderButton = ({ path, text, onClick, testId, disabled, selected, }) => html `
12
+ <ix-button
13
+ ?disabled=${disabled}
14
+ data-testid=${ifDefined(testId)}
15
+ appearance=${selected ? 'filled' : 'text'}
16
+ href=${ifDefined(selected ? undefined : path)}
17
+ @click=${onClick}
18
+ class="button"
19
+ style=${selected ? 'pointer-events: none' : ''}
20
+ ><div class="button-text">${text}</div></ix-button
21
+ >
22
+ `;
23
+ }
24
+ render() {
25
+ return html `
26
+ <div class="container">
27
+ ${this.buttons.map(button => this.renderButton(button))}
28
+ </div>
29
+ `;
30
+ }
31
+ }
32
+ IxGridNavigation.styles = css `
33
+ :host {
34
+ --md-filled-button-container-color: var(
35
+ --grid-nav-button-container-color,
36
+ var(--clr-on-surface, #092241)
37
+ );
38
+ --md-filled-button-container-height: var(
39
+ --grid-nav-button-container-height,
40
+ 2.5rem
41
+ );
42
+ --md-text-button-container-height: var(
43
+ --grid-nav-button-container-height,
44
+ 2.5rem
45
+ );
46
+ --md-text-button-label-text-color: var(--clr-on-surface, #092241);
47
+ --md-text-button-hover-label-text-color: var(--clr-on-surface, #092241);
48
+ --md-text-button-pressed-label-text-color: var(--clr-on-surface, #092241);
49
+ --md-text-button-focus-label-text-color: var(--clr-on-surface, #092241);
50
+ }
51
+
52
+ [disabled] {
53
+ --md-filled-button-disabled-container-color: var(
54
+ --grid-nav-button-disabled-container-color,
55
+ transparent
56
+ );
57
+ --md-filled-button-disabled-label-text-color: var(
58
+ --grid-nav-button-disabled-container-color,
59
+ var(--clr-on-surface, #000)
60
+ );
61
+ }
62
+
63
+ .container {
64
+ display: var(--grid-nav-button-group-display, flex);
65
+ gap: var(--grid-nav-button-group-gap, 0.5rem);
66
+ }
67
+
68
+ .button {
69
+ margin: var(--grid-nav-button-margin, 0);
70
+ }
71
+
72
+ .button-text {
73
+ text-transform: var(--grid-nav-button-text-transform, none);
74
+ font-size: var(--grid-nav-button-font-size, 14px);
75
+ font-family: var(--root-primary-font, 'sans-serif');
76
+ line-height: 1.5rem;
77
+ }
78
+
79
+ @media only screen and (max-width: 840px) {
80
+ .container {
81
+ overflow-x: auto;
82
+ white-space: nowrap;
83
+ }
84
+
85
+ .button {
86
+ flex: 0 0 auto;
87
+ }
88
+ }
89
+
90
+ @media only screen and (max-width: 600px) {
91
+ .grid-header {
92
+ align-items: flex-end;
93
+ flex-direction: row;
94
+ }
95
+ .container {
96
+ overflow-x: auto;
97
+ max-width: calc(100vw - 2rem);
98
+ }
99
+ }
100
+ `;
101
+ __decorate([
102
+ property({ type: Array, attribute: false })
103
+ ], IxGridNavigation.prototype, "buttons", void 0);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IxGridNav.js","sourceRoot":"","sources":["IxGridNav.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,2BAA2B,CAAC;AAWnC,MAAM,OAAO,gBAAiB,SAAQ,UAAU;IAAhD;;QAC+C,YAAO,GAAqB,EAAE,CAAC;QAwE5E,kDAAkD;QAClD,iBAAY,GAAG,CAAC,EACd,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,MAAM,EACN,QAAQ,EACR,QAAQ,GACO,EAAE,EAAE,CACnB,IAAI,CAAA;;oBAEY,QAAQ;sBACN,SAAS,CAAC,MAAM,CAAC;qBAClB,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM;eAClC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;iBACpC,OAAO;;gBAER,QAAQ,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE;oCAClB,IAAI;;KAEnC,CAAC;IASN,CAAC;IAPC,MAAM;QACJ,OAAO,IAAI,CAAA;;UAEL,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;;KAE1D,CAAC;IACJ,CAAC;;AAlGM,uBAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoElB,CAAC;AAtE2C;IAA5C,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;iDAAgC","sourcesContent":["import { LitElement, html, css } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport '@digital-realty/ix-button';\n\nexport interface IGridNavButton {\n testId?: string;\n path?: string;\n selected?: boolean;\n disabled?: boolean;\n onClick?: () => void;\n text: string;\n}\n\nexport class IxGridNavigation extends LitElement {\n @property({ type: Array, attribute: false }) buttons: IGridNavButton[] = [];\n\n static styles = css`\n :host {\n --md-filled-button-container-color: var(\n --grid-nav-button-container-color,\n var(--clr-on-surface, #092241)\n );\n --md-filled-button-container-height: var(\n --grid-nav-button-container-height,\n 2.5rem\n );\n --md-text-button-container-height: var(\n --grid-nav-button-container-height,\n 2.5rem\n );\n --md-text-button-label-text-color: var(--clr-on-surface, #092241);\n --md-text-button-hover-label-text-color: var(--clr-on-surface, #092241);\n --md-text-button-pressed-label-text-color: var(--clr-on-surface, #092241);\n --md-text-button-focus-label-text-color: var(--clr-on-surface, #092241);\n }\n\n [disabled] {\n --md-filled-button-disabled-container-color: var(\n --grid-nav-button-disabled-container-color,\n transparent\n );\n --md-filled-button-disabled-label-text-color: var(\n --grid-nav-button-disabled-container-color,\n var(--clr-on-surface, #000)\n );\n }\n\n .container {\n display: var(--grid-nav-button-group-display, flex);\n gap: var(--grid-nav-button-group-gap, 0.5rem);\n }\n\n .button {\n margin: var(--grid-nav-button-margin, 0);\n }\n\n .button-text {\n text-transform: var(--grid-nav-button-text-transform, none);\n font-size: var(--grid-nav-button-font-size, 14px);\n font-family: var(--root-primary-font, 'sans-serif');\n line-height: 1.5rem;\n }\n\n @media only screen and (max-width: 840px) {\n .container {\n overflow-x: auto;\n white-space: nowrap;\n }\n\n .button {\n flex: 0 0 auto;\n }\n }\n\n @media only screen and (max-width: 600px) {\n .grid-header {\n align-items: flex-end;\n flex-direction: row;\n }\n .container {\n overflow-x: auto;\n max-width: calc(100vw - 2rem);\n }\n }\n `;\n\n // eslint-disable-next-line class-methods-use-this\n renderButton = ({\n path,\n text,\n onClick,\n testId,\n disabled,\n selected,\n }: IGridNavButton) =>\n html`\n <ix-button\n ?disabled=${disabled}\n data-testid=${ifDefined(testId)}\n appearance=${selected ? 'filled' : 'text'}\n href=${ifDefined(selected ? undefined : path)}\n @click=${onClick}\n class=\"button\"\n style=${selected ? 'pointer-events: none' : ''}\n ><div class=\"button-text\">${text}</div></ix-button\n >\n `;\n\n render() {\n return html`\n <div class=\"container\">\n ${this.buttons.map(button => this.renderButton(button))}\n </div>\n `;\n }\n}\n"]}
@@ -0,0 +1,10 @@
1
+ import { LitElement } from 'lit';
2
+ import '@digital-realty/ix-icon/ix-icon.js';
3
+ export declare class IxGridNoRows extends LitElement {
4
+ static styles: import("lit").CSSResult;
5
+ type: 'warning' | 'info' | 'error';
6
+ icon: string;
7
+ message: string;
8
+ iconFontSize: string;
9
+ render(): import("lit-html").TemplateResult<1>;
10
+ }
@@ -0,0 +1,74 @@
1
+ import { __decorate } from "tslib";
2
+ import { LitElement, html, css } from 'lit';
3
+ import { property } from 'lit/decorators.js';
4
+ import '@digital-realty/ix-icon/ix-icon.js';
5
+ export class IxGridNoRows extends LitElement {
6
+ constructor() {
7
+ super(...arguments);
8
+ this.type = 'error';
9
+ this.icon = 'error';
10
+ this.message = 'No data to display';
11
+ this.iconFontSize = '3rem';
12
+ }
13
+ render() {
14
+ return html `
15
+ <div class="container" style="--ix-icon-font-size: ${this.iconFontSize};">
16
+ <ix-icon class="icon ${this.type}">${this.icon}</ix-icon>
17
+ <h2 class="dlr-text-heading">${this.message}</h2>
18
+ </div>
19
+ `;
20
+ }
21
+ }
22
+ IxGridNoRows.styles = css `
23
+ .container {
24
+ display: flex;
25
+ justify-content: center;
26
+ align-items: center;
27
+ flex-direction: column;
28
+ text-align: center;
29
+ padding: 2.5rem 0;
30
+ }
31
+ .icon {
32
+ user-select: none;
33
+ display: inline-block;
34
+ fill: currentcolor;
35
+ flex-shrink: 0;
36
+ font-size: 1.5rem;
37
+ color: rgb(255, 152, 0);
38
+ transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1);
39
+ }
40
+ .warning,
41
+ .error {
42
+ user-select: none;
43
+ color: var(--clr-warning, #ff9800);
44
+ }
45
+ .critical {
46
+ color: var(--clr-critical, #db0028);
47
+ }
48
+ h2 {
49
+ font-family: var(--ix-font-family, 'Red Hat Display');
50
+ }
51
+ h2.dlr-text-heading {
52
+ margin: 0.5rem 0 0;
53
+ font-family: 'Red Hat Display', sans-serif;
54
+ font-style: normal;
55
+ font-size: 1.5rem;
56
+ line-height: 2rem;
57
+ letter-spacing: 0em;
58
+ color: rgb(9, 34, 65);
59
+ text-align: center;
60
+ font-weight: 700;
61
+ }
62
+ `;
63
+ __decorate([
64
+ property({ type: String })
65
+ ], IxGridNoRows.prototype, "type", void 0);
66
+ __decorate([
67
+ property({ type: String })
68
+ ], IxGridNoRows.prototype, "icon", void 0);
69
+ __decorate([
70
+ property({ type: String })
71
+ ], IxGridNoRows.prototype, "message", void 0);
72
+ __decorate([
73
+ property({ type: String })
74
+ ], IxGridNoRows.prototype, "iconFontSize", void 0);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IxGridNoRows.js","sourceRoot":"","sources":["IxGridNoRows.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,oCAAoC,CAAC;AAE5C,MAAM,OAAO,YAAa,SAAQ,UAAU;IAA5C;;QA2C8B,SAAI,GAAiC,OAAO,CAAC;QAE7C,SAAI,GAAW,OAAO,CAAC;QAEvB,YAAO,GAAW,oBAAoB,CAAC;QAEvC,iBAAY,GAAW,MAAM,CAAC;IAU5D,CAAC;IARC,MAAM;QACJ,OAAO,IAAI,CAAA;2DAC4C,IAAI,CAAC,YAAY;+BAC7C,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;uCACf,IAAI,CAAC,OAAO;;KAE9C,CAAC;IACJ,CAAC;;AAzDM,mBAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwClB,CAAC;AAE0B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;0CAA8C;AAE7C;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;0CAAwB;AAEvB;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;6CAAwC;AAEvC;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;kDAA+B","sourcesContent":["import { LitElement, html, css } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport '@digital-realty/ix-icon/ix-icon.js';\n\nexport class IxGridNoRows extends LitElement {\n static styles = css`\n .container {\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n text-align: center;\n padding: 2.5rem 0;\n }\n .icon {\n user-select: none;\n display: inline-block;\n fill: currentcolor;\n flex-shrink: 0;\n font-size: 1.5rem;\n color: rgb(255, 152, 0);\n transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1);\n }\n .warning,\n .error {\n user-select: none;\n color: var(--clr-warning, #ff9800);\n }\n .critical {\n color: var(--clr-critical, #db0028);\n }\n h2 {\n font-family: var(--ix-font-family, 'Red Hat Display');\n }\n h2.dlr-text-heading {\n margin: 0.5rem 0 0;\n font-family: 'Red Hat Display', sans-serif;\n font-style: normal;\n font-size: 1.5rem;\n line-height: 2rem;\n letter-spacing: 0em;\n color: rgb(9, 34, 65);\n text-align: center;\n font-weight: 700;\n }\n `;\n\n @property({ type: String }) type: 'warning' | 'info' | 'error' = 'error';\n\n @property({ type: String }) icon: string = 'error';\n\n @property({ type: String }) message: string = 'No data to display';\n\n @property({ type: String }) iconFontSize: string = '3rem';\n\n render() {\n return html`\n <div class=\"container\" style=\"--ix-icon-font-size: ${this.iconFontSize};\">\n <ix-icon class=\"icon ${this.type}\">${this.icon}</ix-icon>\n <h2 class=\"dlr-text-heading\">${this.message}</h2>\n </div>\n `;\n }\n}\n"]}
@@ -0,0 +1,55 @@
1
+ import '@digital-realty/ix-button/ix-button.js';
2
+ import '@digital-realty/ix-date/ix-date.js';
3
+ import '@digital-realty/ix-icon-button/ix-icon-button.js';
4
+ import '@digital-realty/ix-icon/ix-icon.js';
5
+ import '@digital-realty/ix-select/ix-select.js';
6
+ import { LitElement } from 'lit';
7
+ import type { Column, DataType } from '../IxGrid.js';
8
+ export interface Filter {
9
+ columnField: string;
10
+ operatorValue: string;
11
+ dataType?: DataType;
12
+ value: string;
13
+ }
14
+ export declare class IxGridRowFilter extends LitElement {
15
+ static readonly styles: import("lit").CSSResult[];
16
+ columns: Column[];
17
+ filterValueChangeDebounceTime: number;
18
+ readParamsFromURL: boolean;
19
+ maxDate: string;
20
+ private isDropdownVisible;
21
+ private filters;
22
+ private filterableColumns;
23
+ private filterColumns;
24
+ private activeFilters;
25
+ private mapSelect;
26
+ private fromDateErrorText?;
27
+ private oldValueLength;
28
+ private debounceEvent;
29
+ private debouncedOnFilterValueChange;
30
+ updateActiveFilters(): void;
31
+ connectedCallback(): void;
32
+ disconnectedCallback(): void;
33
+ firstUpdated(): void;
34
+ get filterNames(): string[];
35
+ get unselectedFilters(): string[];
36
+ closeOnOuterClick: (e: Event) => void;
37
+ parseFilterQueryString(): Filter[];
38
+ dispatchUpdate(resetPage?: boolean): void;
39
+ addFilter(): void;
40
+ clearFilters(): void;
41
+ removeFilter(index: number): void;
42
+ private handlePopState;
43
+ private onfilterColumnChange;
44
+ private onfilterOperatorChange;
45
+ private onDatefilterValueChange;
46
+ private onfilterValueChange;
47
+ formatCamelCaseToEnglish(text: string): string;
48
+ renderToolTip(): string | import("lit-html").TemplateResult<1>;
49
+ private renderStringInput;
50
+ private renderDateInput;
51
+ private renderFilterInputControl;
52
+ renderFilterInput(value: Filter, index: number): import("lit-html").TemplateResult<1>;
53
+ renderDropdown(): import("lit-html").TemplateResult<1>;
54
+ render(): import("lit-html").TemplateResult<1>;
55
+ }