@vaadin/grid 22.0.0-alpha7

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 (104) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +79 -0
  3. package/all-imports.js +1 -0
  4. package/package.json +58 -0
  5. package/src/all-imports.js +14 -0
  6. package/src/array-data-provider.js +145 -0
  7. package/src/interfaces.d.ts +75 -0
  8. package/src/vaadin-grid-a11y-mixin.js +158 -0
  9. package/src/vaadin-grid-active-item-mixin.d.ts +19 -0
  10. package/src/vaadin-grid-active-item-mixin.js +117 -0
  11. package/src/vaadin-grid-array-data-provider-mixin.d.ts +16 -0
  12. package/src/vaadin-grid-array-data-provider-mixin.js +75 -0
  13. package/src/vaadin-grid-column-group.d.ts +54 -0
  14. package/src/vaadin-grid-column-group.js +320 -0
  15. package/src/vaadin-grid-column-reordering-mixin.d.ts +19 -0
  16. package/src/vaadin-grid-column-reordering-mixin.js +387 -0
  17. package/src/vaadin-grid-column-resizing-mixin.js +111 -0
  18. package/src/vaadin-grid-column.d.ts +133 -0
  19. package/src/vaadin-grid-column.js +745 -0
  20. package/src/vaadin-grid-data-provider-mixin.d.ts +108 -0
  21. package/src/vaadin-grid-data-provider-mixin.js +520 -0
  22. package/src/vaadin-grid-drag-and-drop-mixin.d.ts +69 -0
  23. package/src/vaadin-grid-drag-and-drop-mixin.js +433 -0
  24. package/src/vaadin-grid-dynamic-columns-mixin.js +180 -0
  25. package/src/vaadin-grid-event-context-mixin.d.ts +33 -0
  26. package/src/vaadin-grid-event-context-mixin.js +57 -0
  27. package/src/vaadin-grid-filter-column.d.ts +35 -0
  28. package/src/vaadin-grid-filter-column.js +120 -0
  29. package/src/vaadin-grid-filter-mixin.js +76 -0
  30. package/src/vaadin-grid-filter.d.ts +67 -0
  31. package/src/vaadin-grid-filter.js +125 -0
  32. package/src/vaadin-grid-helpers.js +23 -0
  33. package/src/vaadin-grid-keyboard-navigation-mixin.js +891 -0
  34. package/src/vaadin-grid-row-details-mixin.d.ts +44 -0
  35. package/src/vaadin-grid-row-details-mixin.js +200 -0
  36. package/src/vaadin-grid-scroll-mixin.d.ts +18 -0
  37. package/src/vaadin-grid-scroll-mixin.js +202 -0
  38. package/src/vaadin-grid-selection-column.d.ts +71 -0
  39. package/src/vaadin-grid-selection-column.js +285 -0
  40. package/src/vaadin-grid-selection-mixin.d.ts +30 -0
  41. package/src/vaadin-grid-selection-mixin.js +93 -0
  42. package/src/vaadin-grid-sort-column.d.ts +63 -0
  43. package/src/vaadin-grid-sort-column.js +118 -0
  44. package/src/vaadin-grid-sort-mixin.d.ts +15 -0
  45. package/src/vaadin-grid-sort-mixin.js +139 -0
  46. package/src/vaadin-grid-sorter.d.ts +94 -0
  47. package/src/vaadin-grid-sorter.js +230 -0
  48. package/src/vaadin-grid-styles.js +297 -0
  49. package/src/vaadin-grid-styling-mixin.d.ts +37 -0
  50. package/src/vaadin-grid-styling-mixin.js +71 -0
  51. package/src/vaadin-grid-tree-column.d.ts +36 -0
  52. package/src/vaadin-grid-tree-column.js +119 -0
  53. package/src/vaadin-grid-tree-toggle.d.ts +104 -0
  54. package/src/vaadin-grid-tree-toggle.js +205 -0
  55. package/src/vaadin-grid.d.ts +397 -0
  56. package/src/vaadin-grid.js +1004 -0
  57. package/theme/lumo/all-imports.js +11 -0
  58. package/theme/lumo/vaadin-grid-column-group.js +1 -0
  59. package/theme/lumo/vaadin-grid-column.js +1 -0
  60. package/theme/lumo/vaadin-grid-filter-column.js +2 -0
  61. package/theme/lumo/vaadin-grid-filter.js +2 -0
  62. package/theme/lumo/vaadin-grid-selection-column.js +2 -0
  63. package/theme/lumo/vaadin-grid-sort-column.js +2 -0
  64. package/theme/lumo/vaadin-grid-sorter-styles.js +53 -0
  65. package/theme/lumo/vaadin-grid-sorter.js +2 -0
  66. package/theme/lumo/vaadin-grid-styles.js +378 -0
  67. package/theme/lumo/vaadin-grid-tree-column.js +2 -0
  68. package/theme/lumo/vaadin-grid-tree-toggle-styles.js +112 -0
  69. package/theme/lumo/vaadin-grid-tree-toggle.js +2 -0
  70. package/theme/lumo/vaadin-grid.js +9 -0
  71. package/theme/material/all-imports.js +11 -0
  72. package/theme/material/vaadin-grid-column-group.js +1 -0
  73. package/theme/material/vaadin-grid-column.js +1 -0
  74. package/theme/material/vaadin-grid-filter-column.js +2 -0
  75. package/theme/material/vaadin-grid-filter.js +2 -0
  76. package/theme/material/vaadin-grid-selection-column.js +2 -0
  77. package/theme/material/vaadin-grid-sort-column.js +2 -0
  78. package/theme/material/vaadin-grid-sorter-styles.js +72 -0
  79. package/theme/material/vaadin-grid-sorter.js +2 -0
  80. package/theme/material/vaadin-grid-styles.js +252 -0
  81. package/theme/material/vaadin-grid-tree-column.js +2 -0
  82. package/theme/material/vaadin-grid-tree-toggle-styles.js +42 -0
  83. package/theme/material/vaadin-grid-tree-toggle.js +2 -0
  84. package/theme/material/vaadin-grid.js +2 -0
  85. package/vaadin-grid-column-group.d.ts +1 -0
  86. package/vaadin-grid-column-group.js +3 -0
  87. package/vaadin-grid-column.d.ts +1 -0
  88. package/vaadin-grid-column.js +3 -0
  89. package/vaadin-grid-filter-column.d.ts +1 -0
  90. package/vaadin-grid-filter-column.js +3 -0
  91. package/vaadin-grid-filter.d.ts +1 -0
  92. package/vaadin-grid-filter.js +3 -0
  93. package/vaadin-grid-selection-column.d.ts +1 -0
  94. package/vaadin-grid-selection-column.js +3 -0
  95. package/vaadin-grid-sort-column.d.ts +1 -0
  96. package/vaadin-grid-sort-column.js +3 -0
  97. package/vaadin-grid-sorter.d.ts +1 -0
  98. package/vaadin-grid-sorter.js +3 -0
  99. package/vaadin-grid-tree-column.d.ts +1 -0
  100. package/vaadin-grid-tree-column.js +3 -0
  101. package/vaadin-grid-tree-toggle.d.ts +1 -0
  102. package/vaadin-grid-tree-toggle.js +3 -0
  103. package/vaadin-grid.d.ts +3 -0
  104. package/vaadin-grid.js +4 -0
@@ -0,0 +1,35 @@
1
+ import { GridDefaultItem } from './interfaces';
2
+ import { GridColumn } from './vaadin-grid-column.js';
3
+
4
+ /**
5
+ * `<vaadin-grid-filter-column>` is a helper element for the `<vaadin-grid>`
6
+ * that provides default header renderer and functionality for filtering.
7
+ *
8
+ * #### Example:
9
+ * ```html
10
+ * <vaadin-grid items="[[items]]">
11
+ * <vaadin-grid-filter-column path="name.first"></vaadin-grid-filter-column>
12
+ *
13
+ * <vaadin-grid-column>
14
+ * ...
15
+ * ```
16
+ */
17
+ declare class GridFilterColumn<TItem = GridDefaultItem> extends GridColumn<TItem> {
18
+ /**
19
+ * Text to display as the label of the column filter text-field.
20
+ */
21
+ header: string | null | undefined;
22
+
23
+ /**
24
+ * JS Path of the property in the item used for filtering the data.
25
+ */
26
+ path: string | null | undefined;
27
+ }
28
+
29
+ declare global {
30
+ interface HTMLElementTagNameMap {
31
+ 'vaadin-grid-filter-column': GridFilterColumn<GridDefaultItem>;
32
+ }
33
+ }
34
+
35
+ export { GridFilterColumn };
@@ -0,0 +1,120 @@
1
+ /**
2
+ * @license
3
+ * Copyright (c) 2021 Vaadin Ltd.
4
+ * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
+ */
6
+ import { GridColumn } from './vaadin-grid-column.js';
7
+ import './vaadin-grid-filter.js';
8
+
9
+ /**
10
+ * `<vaadin-grid-filter-column>` is a helper element for the `<vaadin-grid>`
11
+ * that provides default header renderer and functionality for filtering.
12
+ *
13
+ * #### Example:
14
+ * ```html
15
+ * <vaadin-grid items="[[items]]">
16
+ * <vaadin-grid-filter-column path="name.first"></vaadin-grid-filter-column>
17
+ *
18
+ * <vaadin-grid-column>
19
+ * ...
20
+ * ```
21
+ */
22
+ class GridFilterColumn extends GridColumn {
23
+ static get is() {
24
+ return 'vaadin-grid-filter-column';
25
+ }
26
+
27
+ static get properties() {
28
+ return {
29
+ /**
30
+ * JS Path of the property in the item used for filtering the data.
31
+ */
32
+ path: String,
33
+
34
+ /**
35
+ * Text to display as the label of the column filter text-field.
36
+ */
37
+ header: String
38
+ };
39
+ }
40
+
41
+ static get observers() {
42
+ return ['_onHeaderRendererOrBindingChanged(_headerRenderer, _headerCell, path, header, _filterValue)'];
43
+ }
44
+
45
+ constructor() {
46
+ super();
47
+
48
+ this.__boundOnFilterValueChanged = this.__onFilterValueChanged.bind(this);
49
+ }
50
+
51
+ /**
52
+ * Renders the grid filter with the custom text field to the header cell.
53
+ *
54
+ * @override
55
+ */
56
+ _defaultHeaderRenderer(root, _column) {
57
+ let filter = root.firstElementChild;
58
+ let textField = filter ? filter.firstElementChild : undefined;
59
+
60
+ if (!filter) {
61
+ filter = document.createElement('vaadin-grid-filter');
62
+ textField = document.createElement('vaadin-text-field');
63
+ textField.setAttribute('slot', 'filter');
64
+ textField.setAttribute('theme', 'small');
65
+ textField.setAttribute('style', 'max-width: 100%;');
66
+ textField.setAttribute('focus-target', '');
67
+ textField.addEventListener('value-changed', this.__boundOnFilterValueChanged);
68
+ filter.appendChild(textField);
69
+ root.appendChild(filter);
70
+ }
71
+
72
+ filter.path = this.path;
73
+ filter.value = this._filterValue;
74
+
75
+ textField.__rendererValue = this._filterValue;
76
+ textField.value = this._filterValue;
77
+ textField.label = this.__getHeader(this.header, this.path);
78
+ }
79
+
80
+ /**
81
+ * The filter column doesn't allow to use a custom header renderer
82
+ * to override the header cell content.
83
+ * It always renders the grid filter to the header cell.
84
+ *
85
+ * @override
86
+ */
87
+ _computeHeaderRenderer() {
88
+ return this._defaultHeaderRenderer;
89
+ }
90
+
91
+ /**
92
+ * Updates the internal filter value once the filter text field is changed.
93
+ * The listener handles only user-fired events.
94
+ *
95
+ * @private
96
+ */
97
+ __onFilterValueChanged(e) {
98
+ // Skip if the value is changed by the renderer.
99
+ if (e.detail.value === e.target.__rendererValue) {
100
+ return;
101
+ }
102
+
103
+ this._filterValue = e.detail.value;
104
+ }
105
+
106
+ /** @private */
107
+ __getHeader(header, path) {
108
+ if (header) {
109
+ return header;
110
+ }
111
+
112
+ if (path) {
113
+ return this._generateHeader(path);
114
+ }
115
+ }
116
+ }
117
+
118
+ customElements.define(GridFilterColumn.is, GridFilterColumn);
119
+
120
+ export { GridFilterColumn };
@@ -0,0 +1,76 @@
1
+ /**
2
+ * @license
3
+ * Copyright (c) 2021 Vaadin Ltd.
4
+ * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
+ */
6
+
7
+ /**
8
+ * @polymerMixin
9
+ */
10
+ export const FilterMixin = (superClass) =>
11
+ class FilterMixin extends superClass {
12
+ static get properties() {
13
+ return {
14
+ /** @private */
15
+ _filters: {
16
+ type: Array,
17
+ value: function () {
18
+ return [];
19
+ }
20
+ }
21
+ };
22
+ }
23
+
24
+ /** @protected */
25
+ ready() {
26
+ super.ready();
27
+ this.addEventListener('filter-changed', this._filterChanged.bind(this));
28
+ }
29
+
30
+ /** @private */
31
+ _filterChanged(e) {
32
+ e.stopPropagation();
33
+
34
+ this.__addFilter(e.target);
35
+ this.__applyFilters();
36
+ }
37
+
38
+ /** @private */
39
+ __removeFilters(filtersToRemove) {
40
+ if (filtersToRemove.length == 0) {
41
+ return;
42
+ }
43
+
44
+ this._filters = this._filters.filter((filter) => filtersToRemove.indexOf(filter) < 0);
45
+ this.__applyFilters();
46
+ }
47
+
48
+ /** @private */
49
+ __addFilter(filter) {
50
+ const filterIndex = this._filters.indexOf(filter);
51
+
52
+ if (filterIndex === -1) {
53
+ this._filters.push(filter);
54
+ }
55
+ }
56
+
57
+ /** @private */
58
+ __applyFilters() {
59
+ if (this.dataProvider && this.isAttached) {
60
+ this.clearCache();
61
+ }
62
+ }
63
+
64
+ /**
65
+ * @return {!Array<!GridFilterDefinition>}
66
+ * @protected
67
+ */
68
+ _mapFilters() {
69
+ return this._filters.map((filter) => {
70
+ return {
71
+ path: filter.path,
72
+ value: filter.value
73
+ };
74
+ });
75
+ }
76
+ };
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Fired when the `value` property changes.
3
+ */
4
+ export type GridFilterValueChangedEvent = CustomEvent<{ value: string }>;
5
+
6
+ export interface GridFilterCustomEventMap {
7
+ 'value-changed': GridFilterValueChangedEvent;
8
+ }
9
+
10
+ export interface GridFilterEventMap extends HTMLElementEventMap, GridFilterCustomEventMap {}
11
+
12
+ /**
13
+ * `<vaadin-grid-filter>` is a helper element for the `<vaadin-grid>` that provides out-of-the-box UI controls,
14
+ * and handlers for filtering the grid data.
15
+ *
16
+ * #### Example:
17
+ * ```html
18
+ * <vaadin-grid-column id="column"></vaadin-grid-column>
19
+ * ```
20
+ * ```js
21
+ * const column = document.querySelector('#column');
22
+ * column.headerRenderer = (root, column) => {
23
+ * let filter = root.firstElementChild;
24
+ * if (!filter) {
25
+ * filter = document.createElement('vaadin-grid-filter');
26
+ * root.appendChild(filter);
27
+ * }
28
+ * filter.path = 'name.first';
29
+ * };
30
+ * column.renderer = (root, column, model) => {
31
+ * root.textContent = model.item.name.first;
32
+ * };
33
+ * ```
34
+ *
35
+ * @fires {CustomEvent} value-changed - Fired when the `value` property changes.
36
+ */
37
+ declare class GridFilter extends HTMLElement {
38
+ /**
39
+ * JS Path of the property in the item used for filtering the data.
40
+ */
41
+ path: string | null | undefined;
42
+
43
+ /**
44
+ * Current filter value.
45
+ */
46
+ value: string | null | undefined;
47
+
48
+ addEventListener<K extends keyof GridFilterEventMap>(
49
+ type: K,
50
+ listener: (this: GridFilter, ev: GridFilterEventMap[K]) => void,
51
+ options?: boolean | AddEventListenerOptions
52
+ ): void;
53
+
54
+ removeEventListener<K extends keyof GridFilterEventMap>(
55
+ type: K,
56
+ listener: (this: GridFilter, ev: GridFilterEventMap[K]) => void,
57
+ options?: boolean | EventListenerOptions
58
+ ): void;
59
+ }
60
+
61
+ declare global {
62
+ interface HTMLElementTagNameMap {
63
+ 'vaadin-grid-filter': GridFilter;
64
+ }
65
+ }
66
+
67
+ export { GridFilter };
@@ -0,0 +1,125 @@
1
+ /**
2
+ * @license
3
+ * Copyright (c) 2021 Vaadin Ltd.
4
+ * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
+ */
6
+ import { PolymerElement, html } from '@polymer/polymer/polymer-element.js';
7
+ import { Debouncer } from '@vaadin/component-base/src/debounce.js';
8
+ import { timeOut } from '@vaadin/component-base/src/async.js';
9
+ import '@vaadin/text-field/src/vaadin-text-field.js';
10
+
11
+ /**
12
+ * `<vaadin-grid-filter>` is a helper element for the `<vaadin-grid>` that provides out-of-the-box UI controls,
13
+ * and handlers for filtering the grid data.
14
+ *
15
+ * #### Example:
16
+ * ```html
17
+ * <vaadin-grid-column id="column"></vaadin-grid-column>
18
+ * ```
19
+ * ```js
20
+ * const column = document.querySelector('#column');
21
+ * column.headerRenderer = (root, column) => {
22
+ * let filter = root.firstElementChild;
23
+ * if (!filter) {
24
+ * filter = document.createElement('vaadin-grid-filter');
25
+ * root.appendChild(filter);
26
+ * }
27
+ * filter.path = 'name.first';
28
+ * };
29
+ * column.renderer = (root, column, model) => {
30
+ * root.textContent = model.item.name.first;
31
+ * };
32
+ * ```
33
+ *
34
+ * @fires {CustomEvent} value-changed - Fired when the `value` property changes.
35
+ *
36
+ * @extends HTMLElement
37
+ */
38
+ class GridFilter extends class extends PolymerElement {} {
39
+ static get template() {
40
+ return html`
41
+ <style>
42
+ :host {
43
+ display: inline-flex;
44
+ max-width: 100%;
45
+ }
46
+
47
+ #filter {
48
+ width: 100%;
49
+ box-sizing: border-box;
50
+ }
51
+ </style>
52
+ <slot name="filter">
53
+ <vaadin-text-field id="filter" value="{{value}}"></vaadin-text-field>
54
+ </slot>
55
+ `;
56
+ }
57
+
58
+ static get is() {
59
+ return 'vaadin-grid-filter';
60
+ }
61
+
62
+ static get properties() {
63
+ return {
64
+ /**
65
+ * JS Path of the property in the item used for filtering the data.
66
+ */
67
+ path: String,
68
+
69
+ /**
70
+ * Current filter value.
71
+ */
72
+ value: {
73
+ type: String,
74
+ notify: true
75
+ },
76
+
77
+ /** @private */
78
+ _connected: Boolean
79
+ };
80
+ }
81
+
82
+ /** @protected */
83
+ connectedCallback() {
84
+ super.connectedCallback();
85
+ this._connected = true;
86
+ }
87
+
88
+ static get observers() {
89
+ return ['_filterChanged(path, value, _connected)'];
90
+ }
91
+
92
+ /** @protected */
93
+ ready() {
94
+ super.ready();
95
+
96
+ const child = this.firstElementChild;
97
+ if (child && child.getAttribute('slot') !== 'filter') {
98
+ console.warn('Make sure you have assigned slot="filter" to the child elements of <vaadin-grid-filter>');
99
+ child.setAttribute('slot', 'filter');
100
+ }
101
+ }
102
+
103
+ /** @private */
104
+ _filterChanged(path, value, connected) {
105
+ if (path === undefined || value === undefined || !connected) {
106
+ return;
107
+ }
108
+ if (this._previousValue === undefined && value === '') {
109
+ return;
110
+ }
111
+ this._previousValue = value;
112
+
113
+ this._debouncerFilterChanged = Debouncer.debounce(this._debouncerFilterChanged, timeOut.after(200), () => {
114
+ this.dispatchEvent(new CustomEvent('filter-changed', { bubbles: true }));
115
+ });
116
+ }
117
+
118
+ focus() {
119
+ this.$.filter.focus();
120
+ }
121
+ }
122
+
123
+ customElements.define(GridFilter.is, GridFilter);
124
+
125
+ export { GridFilter };
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @license
3
+ * Copyright (c) 2021 Vaadin Ltd.
4
+ * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
+ */
6
+
7
+ /**
8
+ * @param {Array<Object>} columns array of columns to be modified
9
+ * @param {number} scope multiplier added to base order for each column
10
+ * @param {number} baseOrder base number used for order
11
+ */
12
+ export function updateColumnOrders(columns, scope, baseOrder) {
13
+ let c = 1;
14
+ columns.forEach((column) => {
15
+ // avoid multiples of 10 because they introduce and extra zero and
16
+ // causes the underlying calculations for child order goes wrong
17
+ if (c % 10 === 0) {
18
+ c++;
19
+ }
20
+ column._order = baseOrder + c * scope;
21
+ c++;
22
+ });
23
+ }