kempo-ui 0.0.3 → 0.0.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.
- package/.github/workflows/publish-major.yml +39 -0
- package/.github/workflows/publish-minor.yml +39 -0
- package/.github/workflows/{publish-npm.yml → publish-patch.yml} +1 -1
- package/.vscode/settings.json +2 -0
- package/dist/kempo-hljs.css +1 -0
- package/dist/src/components/Accordion.js +36 -0
- package/dist/src/components/Card.js +37 -0
- package/dist/src/components/Collapsible.js +41 -0
- package/dist/src/components/ContentSlider.js +44 -0
- package/dist/src/components/Dialog.js +113 -0
- package/dist/src/components/Icon.js +2 -2
- package/dist/src/components/PersistantCollapsible.js +1 -0
- package/dist/src/components/PhotoViewer.js +135 -0
- package/dist/src/components/Resize.js +96 -0
- package/dist/src/components/ShowMore.js +42 -0
- package/dist/src/components/SideMenu.js +1 -1
- package/dist/src/components/Split.js +84 -0
- package/dist/src/components/Tabs.js +155 -0
- package/dist/src/components/Tags.js +69 -0
- package/dist/src/components/ThemeSwitcher.js +23 -0
- package/dist/src/components/Timestamp.js +1 -0
- package/dist/src/utils/debounce.js +1 -0
- package/dist/src/utils/drag.js +1 -0
- package/dist/src/utils/formatTimestamp.js +1 -0
- package/dist/src/utils/propConverters.js +1 -0
- package/dist/src/utils/watchWindowSize.js +1 -0
- package/docs/components/accordion.html +69 -25
- package/docs/components/card.html +6 -5
- package/docs/components/collapsible.html +198 -0
- package/docs/components/content-slider.html +56 -26
- package/docs/components/dialog.html +54 -48
- package/docs/components/focus-capture.html +2 -3
- package/docs/components/icon.html +5 -8
- package/docs/components/import.html +1 -6
- package/docs/components/persistant-collapsible.html +123 -0
- package/docs/components/photo-viewer.html +226 -0
- package/docs/components/resize.html +44 -18
- package/docs/components/show-more.html +12 -6
- package/docs/components/side-menu.html +3 -12
- package/docs/components/split.html +26 -5
- package/docs/components/tablePagination.html +4 -4
- package/docs/components/tableRecordFiltering.html +16 -3
- package/docs/components/tableRecordSelection.html +2 -2
- package/docs/components/tabs.html +24 -7
- package/docs/components/tags.html +24 -8
- package/docs/components/theme-switcher.html +3 -6
- package/docs/components/timestamp.html +20 -24
- package/docs/components/toast.html +23 -32
- package/docs/components/toggle.html +4 -3
- package/docs/kempo-hljs.css +1 -0
- package/docs/media/civic.jpg +0 -0
- package/docs/media/corvette.jpg +0 -0
- package/docs/media/evo.jpg +0 -0
- package/docs/media/gtr.jpg +0 -0
- package/docs/media/nsx.jpg +0 -0
- package/docs/nav.inc.html +11 -17
- package/docs/src/components/Accordion.js +36 -0
- package/docs/src/components/Card.js +37 -0
- package/docs/src/components/Collapsible.js +41 -0
- package/docs/src/components/ContentSlider.js +44 -0
- package/docs/src/components/Dialog.js +113 -0
- package/docs/src/components/Icon.js +2 -2
- package/docs/src/components/PersistantCollapsible.js +1 -0
- package/docs/src/components/PhotoViewer.js +135 -0
- package/docs/src/components/Resize.js +96 -0
- package/docs/src/components/ShowMore.js +42 -0
- package/docs/src/components/SideMenu.js +1 -1
- package/docs/src/components/Split.js +84 -0
- package/docs/src/components/Tabs.js +155 -0
- package/docs/src/components/Tags.js +69 -0
- package/docs/src/components/ThemeSwitcher.js +23 -0
- package/docs/src/components/Timestamp.js +1 -0
- package/docs/src/utils/debounce.js +1 -0
- package/docs/src/utils/drag.js +1 -0
- package/docs/src/utils/formatTimestamp.js +1 -0
- package/docs/src/utils/propConverters.js +1 -0
- package/docs/src/utils/watchWindowSize.js +1 -0
- package/docs/utils/debounce.html +78 -0
- package/docs/utils/drag.html +104 -0
- package/docs/utils/formatTimestamp.html +114 -0
- package/docs/utils/propConverters.html +132 -0
- package/docs/utils/watchWindowSize.html +166 -0
- package/icons/error.svg +1 -1
- package/icons/warning.svg +1 -1
- package/package.json +1 -1
- package/scripts/build.js +1 -1
- package/scripts/docs.js +4 -2
- package/src/components/Accordion.js +229 -0
- package/src/components/Collapsible.js +109 -0
- package/src/components/ContentSlider.js +205 -0
- package/src/components/Dialog.js +368 -0
- package/src/components/PersistantCollapsible.js +69 -0
- package/src/components/PhotoViewer.js +368 -0
- package/src/components/Resize.js +210 -0
- package/src/components/ShadowComponent.js +3 -1
- package/src/components/ShowMore.js +109 -0
- package/src/components/Sortable.js +193 -0
- package/src/components/Split.js +192 -0
- package/src/components/Table.js +1202 -0
- package/src/components/Tabs.js +428 -0
- package/src/components/Tags.js +253 -0
- package/src/components/Timestamp.js +31 -0
- package/src/components/Toast.js +454 -0
- package/src/components/Toggle.js +173 -0
- package/src/components/tableControls/DeleteRecord.js +29 -0
- package/src/components/tableControls/Edit.js +88 -0
- package/src/components/tableControls/ExportCSV.js +71 -0
- package/src/components/tableControls/ExportJson.js +55 -0
- package/src/components/tableControls/FieldSortHide.js +76 -0
- package/src/components/tableControls/Filters.js +114 -0
- package/src/components/tableControls/FirstPage.js +65 -0
- package/src/components/tableControls/HiddenCount.js +45 -0
- package/src/components/tableControls/Hide.js +34 -0
- package/src/components/tableControls/LastPage.js +65 -0
- package/src/components/tableControls/NextPage.js +65 -0
- package/src/components/tableControls/PageSelect.js +109 -0
- package/src/components/tableControls/PageSize.js +68 -0
- package/src/components/tableControls/PrevPage.js +65 -0
- package/src/components/tableControls/Search.js +58 -0
- package/src/components/tableControls/ShowAll.js +34 -0
- package/src/components/tableControls/TableControl.js +105 -0
- package/src/utils/debounce.js +9 -0
- package/src/utils/drag.js +80 -0
- package/src/utils/formatTimestamp.js +27 -0
- package/src/utils/toTitleCase.js +9 -0
- package/src/utils/watchWindowSize.js +16 -0
- package/dist/src/utils/cli.js +0 -1
- package/dist/src/utils/fs-utils.js +0 -1
- package/docs/components/component.html +0 -90
- package/docs/components/directory-viewer.html +0 -90
- package/docs/components/lazy-component.html +0 -84
- package/docs/components/reactive-component.html +0 -69
- package/docs/components/reactive-lazy-component.html +0 -69
- package/docs/components/search.html +0 -102
- package/docs/components/sortable.html +0 -96
- package/src/utils/cli.js +0 -43
- package/src/utils/fs-utils.js +0 -41
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import TableControl from './TableControl.js';
|
|
2
|
+
import { html, css } from '../../lit-all.min.js';
|
|
3
|
+
import '../Icon.js';
|
|
4
|
+
|
|
5
|
+
export default class Edit extends TableControl {
|
|
6
|
+
/*
|
|
7
|
+
Properties
|
|
8
|
+
*/
|
|
9
|
+
static properties = {
|
|
10
|
+
isEditing: { type: Boolean }
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
/*
|
|
14
|
+
Styles
|
|
15
|
+
*/
|
|
16
|
+
static styles = [
|
|
17
|
+
TableControl.styles,
|
|
18
|
+
css`
|
|
19
|
+
:host {
|
|
20
|
+
display: inline-flex;
|
|
21
|
+
width: max-content;
|
|
22
|
+
align-items: baseline;
|
|
23
|
+
}
|
|
24
|
+
`
|
|
25
|
+
];
|
|
26
|
+
|
|
27
|
+
/*
|
|
28
|
+
Constructor
|
|
29
|
+
*/
|
|
30
|
+
constructor() {
|
|
31
|
+
super({ maxWidth: 80 });
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/*
|
|
35
|
+
Lifecycle Callbacks
|
|
36
|
+
*/
|
|
37
|
+
connectedCallback() {
|
|
38
|
+
super.connectedCallback();
|
|
39
|
+
this.onTableEvent('editingChange', this.handleEditingChange);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/*
|
|
43
|
+
Event Handlers
|
|
44
|
+
*/
|
|
45
|
+
handleEditingChange = (e) => {
|
|
46
|
+
if(e.detail.record === this.record){
|
|
47
|
+
this.isEditing = e.detail.editing;
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
handleEdit = () => {
|
|
52
|
+
if(this.record){
|
|
53
|
+
this.table.editRecord(this.record);
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
handleSave = () => {
|
|
58
|
+
if(this.record){
|
|
59
|
+
this.table.saveEditedRecord(this.record);
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
handleCancel = () => {
|
|
64
|
+
if(this.record){
|
|
65
|
+
this.table.cancelEditedRecord(this.record);
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
/*
|
|
70
|
+
Rendering
|
|
71
|
+
*/
|
|
72
|
+
render() {
|
|
73
|
+
return this.isEditing ? html`
|
|
74
|
+
<button class="no-btn icon-btn bg-success" @click="${this.handleSave}">
|
|
75
|
+
<k-icon name="check"></k-icon>
|
|
76
|
+
</button>
|
|
77
|
+
<button class="no-btn icon-btn bg-danger" @click="${this.handleCancel}">
|
|
78
|
+
<k-icon name="close"></k-icon>
|
|
79
|
+
</button>
|
|
80
|
+
` : html`
|
|
81
|
+
<button class="no-btn icon-btn" @click="${this.handleEdit}">
|
|
82
|
+
<k-icon name="edit"></k-icon>
|
|
83
|
+
</button>
|
|
84
|
+
`;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
customElements.define('k-tc-edit', Edit);
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import TableControl from './TableControl.js';
|
|
2
|
+
import { html } from '../../lit-all.min.js';
|
|
3
|
+
import '../Icon.js';
|
|
4
|
+
|
|
5
|
+
export default class ExportCSV extends TableControl {
|
|
6
|
+
/*
|
|
7
|
+
Constructor
|
|
8
|
+
*/
|
|
9
|
+
constructor() {
|
|
10
|
+
super();
|
|
11
|
+
this.maxWidth = 136;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/*
|
|
15
|
+
Public Methods
|
|
16
|
+
*/
|
|
17
|
+
getCSV() {
|
|
18
|
+
const table = this.table;
|
|
19
|
+
if(!table) return '';
|
|
20
|
+
|
|
21
|
+
let csv = '';
|
|
22
|
+
const fields = [];
|
|
23
|
+
|
|
24
|
+
table.fields.forEach(({ name, calculator }) => {
|
|
25
|
+
if(!calculator) {
|
|
26
|
+
fields.push(name);
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
csv += fields.join(',') + '\n';
|
|
31
|
+
|
|
32
|
+
if(this.record) {
|
|
33
|
+
const row = fields.map(field => this.record[field] || '');
|
|
34
|
+
csv += row.join(',') + '\n';
|
|
35
|
+
} else {
|
|
36
|
+
table.records.forEach(record => {
|
|
37
|
+
const row = fields.map(field => record[field] || '');
|
|
38
|
+
csv += row.join(',') + '\n';
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return csv;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export = () => {
|
|
46
|
+
const data = this.getCSV();
|
|
47
|
+
const blob = new Blob([data], { type: 'text/csv' });
|
|
48
|
+
const url = URL.createObjectURL(blob);
|
|
49
|
+
const a = document.createElement('a');
|
|
50
|
+
a.href = url;
|
|
51
|
+
a.download = 'data.csv';
|
|
52
|
+
a.click();
|
|
53
|
+
URL.revokeObjectURL(url);
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
/*
|
|
57
|
+
Rendering
|
|
58
|
+
*/
|
|
59
|
+
render() {
|
|
60
|
+
return html`
|
|
61
|
+
<button class="no-btn ph" @click="${this.export}">
|
|
62
|
+
<slot>
|
|
63
|
+
<k-icon name="export-file"></k-icon>
|
|
64
|
+
Export CSV
|
|
65
|
+
</slot>
|
|
66
|
+
</button>
|
|
67
|
+
`;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
customElements.define('k-tc-export-csv', ExportCSV);
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import TableControl from './TableControl.js';
|
|
2
|
+
import { html } from '../../lit-all.min.js';
|
|
3
|
+
import '../Icon.js';
|
|
4
|
+
|
|
5
|
+
export default class ExportJson extends TableControl {
|
|
6
|
+
/*
|
|
7
|
+
Constructor
|
|
8
|
+
*/
|
|
9
|
+
constructor() {
|
|
10
|
+
super();
|
|
11
|
+
this.maxWidth = 136;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/*
|
|
15
|
+
Public Methods
|
|
16
|
+
*/
|
|
17
|
+
export = () => {
|
|
18
|
+
const record = this.record;
|
|
19
|
+
if(record) {
|
|
20
|
+
const data = JSON.stringify(record);
|
|
21
|
+
const blob = new Blob([data], { type: 'application/json' });
|
|
22
|
+
const url = URL.createObjectURL(blob);
|
|
23
|
+
const a = document.createElement('a');
|
|
24
|
+
a.href = url;
|
|
25
|
+
a.download = 'data.json';
|
|
26
|
+
a.click();
|
|
27
|
+
URL.revokeObjectURL(url);
|
|
28
|
+
} else {
|
|
29
|
+
const data = JSON.stringify(this.table.records);
|
|
30
|
+
const blob = new Blob([data], { type: 'application/json' });
|
|
31
|
+
const url = URL.createObjectURL(blob);
|
|
32
|
+
const a = document.createElement('a');
|
|
33
|
+
a.href = url;
|
|
34
|
+
a.download = 'data.json';
|
|
35
|
+
a.click();
|
|
36
|
+
URL.revokeObjectURL(url);
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
/*
|
|
41
|
+
Rendering
|
|
42
|
+
*/
|
|
43
|
+
render() {
|
|
44
|
+
return html`
|
|
45
|
+
<button class="no-btn ph" @click="${this.export}">
|
|
46
|
+
<slot>
|
|
47
|
+
<k-icon name="export-file"></k-icon>
|
|
48
|
+
Export JSON
|
|
49
|
+
</slot>
|
|
50
|
+
</button>
|
|
51
|
+
`;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
customElements.define('k-tc-export-json', ExportJson);
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import TableControl from './TableControl.js';
|
|
2
|
+
import { html, render } from '../../lit-all.min.js';
|
|
3
|
+
import '../Icon.js';
|
|
4
|
+
import Dialog from '../Dialog.js';
|
|
5
|
+
|
|
6
|
+
export default class FieldSortHide extends TableControl {
|
|
7
|
+
/*
|
|
8
|
+
Constructor
|
|
9
|
+
*/
|
|
10
|
+
constructor() {
|
|
11
|
+
super({ maxWidth: 40 });
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/*
|
|
15
|
+
Event Handlers
|
|
16
|
+
*/
|
|
17
|
+
handleClick = () => {
|
|
18
|
+
this.openDialog();
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
/*
|
|
22
|
+
Methods
|
|
23
|
+
*/
|
|
24
|
+
openDialog = () => {
|
|
25
|
+
import('../Sortable.js');
|
|
26
|
+
|
|
27
|
+
const dialogContent = document.createElement('div');
|
|
28
|
+
|
|
29
|
+
render(html`
|
|
30
|
+
<h3 class="m0 ph" slot="title">Show / Hide Fields</h3>
|
|
31
|
+
<div class="m">
|
|
32
|
+
<k-sortable id="sorting" @sort="${(e) => {
|
|
33
|
+
const newOrder = Array.from(e.target.querySelectorAll('k-sortable-item'))
|
|
34
|
+
.map(item => item.getAttribute('data-field'));
|
|
35
|
+
this.table.reorderFields(newOrder);
|
|
36
|
+
}}">
|
|
37
|
+
${this.table.fields.map(field => html`
|
|
38
|
+
<k-sortable-item data-field="${field.name}">
|
|
39
|
+
<label class="field pb0">
|
|
40
|
+
<input
|
|
41
|
+
class="field-visibility"
|
|
42
|
+
data-field="${field.name}"
|
|
43
|
+
type="checkbox"
|
|
44
|
+
.checked="${!field.hidden}"
|
|
45
|
+
@change="${(e) => {
|
|
46
|
+
this.table.setFieldHiddenState(field.name, !e.target.checked);
|
|
47
|
+
}}"
|
|
48
|
+
style="height: 1.25rem; width: 1.25rem"
|
|
49
|
+
/>
|
|
50
|
+
${field.label}
|
|
51
|
+
</label>
|
|
52
|
+
</k-sortable-item>
|
|
53
|
+
`)}
|
|
54
|
+
</k-sortable>
|
|
55
|
+
</div>
|
|
56
|
+
`, dialogContent);
|
|
57
|
+
|
|
58
|
+
Dialog.create(dialogContent, {
|
|
59
|
+
width: '400px',
|
|
60
|
+
cancelText: 'Close'
|
|
61
|
+
});
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
/*
|
|
65
|
+
Rendering
|
|
66
|
+
*/
|
|
67
|
+
render() {
|
|
68
|
+
return html`
|
|
69
|
+
<button class="no-btn icon-btn" @click="${this.handleClick}">
|
|
70
|
+
<k-icon name="table-visibility"></k-icon>
|
|
71
|
+
</button>
|
|
72
|
+
`;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
customElements.define('k-tc-field-sort-hide', FieldSortHide);
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import TableControl from './TableControl.js';
|
|
2
|
+
import { html, render } from '../../lit-all.min.js';
|
|
3
|
+
import '../Icon.js';
|
|
4
|
+
import Dialog from '../Dialog.js';
|
|
5
|
+
|
|
6
|
+
export default class Filters extends TableControl {
|
|
7
|
+
/*
|
|
8
|
+
Constructor
|
|
9
|
+
*/
|
|
10
|
+
constructor() {
|
|
11
|
+
super({ maxWidth: 40 });
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/*
|
|
15
|
+
Event Handlers
|
|
16
|
+
*/
|
|
17
|
+
handleFilter = () => {
|
|
18
|
+
this.openDialog();
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
/*
|
|
22
|
+
Methods
|
|
23
|
+
*/
|
|
24
|
+
openDialog = () => {
|
|
25
|
+
const conditionOptions = {
|
|
26
|
+
'equals': 'equals',
|
|
27
|
+
'not-equals': 'does not equal',
|
|
28
|
+
'contains': 'contains',
|
|
29
|
+
'not-contains': 'does not contain',
|
|
30
|
+
'greater-than': 'is greater than',
|
|
31
|
+
'greater-than-or-equal': 'is greater than or equal to',
|
|
32
|
+
'less-than': 'is less than',
|
|
33
|
+
'less-than-or-equal': 'is less than or equal to'
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const dialogContent = document.createElement('div');
|
|
37
|
+
|
|
38
|
+
render(html`
|
|
39
|
+
<h3 slot="title" class="m0 pyh px">Filters</h3>
|
|
40
|
+
<div class="p">
|
|
41
|
+
${this.table.filters.length === 0 ? html`
|
|
42
|
+
<p>No Current Filters.</p>
|
|
43
|
+
` : html`
|
|
44
|
+
<h5>Current Filters</h5>
|
|
45
|
+
<ul id="currentFilters">
|
|
46
|
+
${this.table.filters.map(({field, condition, value}) => html`
|
|
47
|
+
<li
|
|
48
|
+
data-field="${field}"
|
|
49
|
+
data-condition="${condition}"
|
|
50
|
+
data-value="${value}"
|
|
51
|
+
>
|
|
52
|
+
${field} ${conditionOptions[condition]} ${value}
|
|
53
|
+
<button class="remove-filter no-btn pq" @click="${(e) => {
|
|
54
|
+
this.table.removeFilter(field, condition, value);
|
|
55
|
+
dialog.close();
|
|
56
|
+
this.openDialog();
|
|
57
|
+
}}">
|
|
58
|
+
<k-icon name="close"></k-icon>
|
|
59
|
+
</button>
|
|
60
|
+
</li>
|
|
61
|
+
`)}
|
|
62
|
+
</ul>
|
|
63
|
+
`}
|
|
64
|
+
<hr />
|
|
65
|
+
<h5>Add A Filter</h5>
|
|
66
|
+
<form id="addFilter" @submit="${(e) => {
|
|
67
|
+
e.preventDefault();
|
|
68
|
+
const form = e.target;
|
|
69
|
+
this.table.addFilter(
|
|
70
|
+
form.filterField.value,
|
|
71
|
+
form.filterCondition.value,
|
|
72
|
+
form.filterValue.value
|
|
73
|
+
);
|
|
74
|
+
dialog.close();
|
|
75
|
+
this.openDialog();
|
|
76
|
+
}}">
|
|
77
|
+
<select id="filterField" class="mb">
|
|
78
|
+
${this.table.fields.map(({name, label}) => html`
|
|
79
|
+
<option value="${name}">${label}</option>
|
|
80
|
+
`)}
|
|
81
|
+
</select>
|
|
82
|
+
<select id="filterCondition" class="mb">
|
|
83
|
+
${Object.entries(conditionOptions).map(([key, value]) => html`
|
|
84
|
+
<option value="${key}" ?selected="${key === 'contains'}">${value}</option>
|
|
85
|
+
`)}
|
|
86
|
+
</select>
|
|
87
|
+
<input id="filterValue" type="text" class="mb" />
|
|
88
|
+
<button type="submit" class="btn primary mb mr">Add Filter</button>
|
|
89
|
+
${this.table.filters.length === 0 ? '' : html`
|
|
90
|
+
<button type="button" class="btn danger mb mr" @click="${() => {
|
|
91
|
+
this.table.removeAllFilters();
|
|
92
|
+
dialog.close();
|
|
93
|
+
}}">Clear All Filters</button>
|
|
94
|
+
`}
|
|
95
|
+
</form>
|
|
96
|
+
</div>
|
|
97
|
+
`, dialogContent);
|
|
98
|
+
|
|
99
|
+
const dialog = Dialog.create(dialogContent, { width: '600px' });
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
/*
|
|
103
|
+
Rendering
|
|
104
|
+
*/
|
|
105
|
+
render() {
|
|
106
|
+
return html`
|
|
107
|
+
<button class="no-btn icon-btn" @click="${this.handleFilter}">
|
|
108
|
+
<k-icon name="filter"></k-icon>
|
|
109
|
+
</button>
|
|
110
|
+
`;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
customElements.define('k-tc-filters', Filters);
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import TableControl from './TableControl.js';
|
|
2
|
+
import { html } from '../../lit-all.min.js';
|
|
3
|
+
import '../Icon.js';
|
|
4
|
+
|
|
5
|
+
export default class FirstPage extends TableControl {
|
|
6
|
+
constructor() {
|
|
7
|
+
super();
|
|
8
|
+
this.pageChangeHandler = () => this.requestUpdate();
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/*
|
|
12
|
+
Lifecycle Callbacks
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
connectedCallback() {
|
|
16
|
+
super.connectedCallback();
|
|
17
|
+
if(this.table){
|
|
18
|
+
this.table.addEventListener('pageChange', this.pageChangeHandler);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
disconnectedCallback() {
|
|
23
|
+
super.disconnectedCallback();
|
|
24
|
+
if(this.table){
|
|
25
|
+
this.table.removeEventListener('pageChange', this.pageChangeHandler);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/*
|
|
30
|
+
Event Handlers
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
handleClick = () => {
|
|
34
|
+
if(this.table){
|
|
35
|
+
this.table.firstPage();
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
/*
|
|
40
|
+
Utility Functions
|
|
41
|
+
*/
|
|
42
|
+
|
|
43
|
+
get isDisabled() {
|
|
44
|
+
if(!this.table) return true;
|
|
45
|
+
return this.table.getCurrentPage() === 1;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/*
|
|
49
|
+
Rendering Logic
|
|
50
|
+
*/
|
|
51
|
+
|
|
52
|
+
render() {
|
|
53
|
+
return html`
|
|
54
|
+
<button
|
|
55
|
+
class="no-btn icon-btn"
|
|
56
|
+
?disabled="${this.isDisabled}"
|
|
57
|
+
@click="${this.handleClick}"
|
|
58
|
+
>
|
|
59
|
+
<k-icon name="first"></k-icon>
|
|
60
|
+
</button>
|
|
61
|
+
`;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
customElements.define('k-tc-first-page', FirstPage);
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import TableControl from './TableControl.js';
|
|
2
|
+
import { html } from '../../lit-all.min.js';
|
|
3
|
+
|
|
4
|
+
export default class HiddenCount extends TableControl {
|
|
5
|
+
/*
|
|
6
|
+
Properties
|
|
7
|
+
*/
|
|
8
|
+
static properties = {
|
|
9
|
+
hiddenCount: { type: Number }
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
/*
|
|
13
|
+
Lifecycle Callbacks
|
|
14
|
+
*/
|
|
15
|
+
connectedCallback() {
|
|
16
|
+
super.connectedCallback();
|
|
17
|
+
this.updateHiddenCount();
|
|
18
|
+
this.onTableEvent('recordHidden recordShown', this.handleHiddenChange);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/*
|
|
22
|
+
Event Handlers
|
|
23
|
+
*/
|
|
24
|
+
handleHiddenChange = () => {
|
|
25
|
+
this.updateHiddenCount();
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
/*
|
|
29
|
+
Methods
|
|
30
|
+
*/
|
|
31
|
+
updateHiddenCount = () => {
|
|
32
|
+
this.hiddenCount = this.table?.getHiddenRecords().length || 0;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
/*
|
|
36
|
+
Rendering
|
|
37
|
+
*/
|
|
38
|
+
render() {
|
|
39
|
+
return html`
|
|
40
|
+
<div class="pyq pxh"><span>${this.hiddenCount}</span> Hidden Records</div>
|
|
41
|
+
`;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
customElements.define('k-tc-hidden-count', HiddenCount);
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import TableControl from './TableControl.js';
|
|
2
|
+
import { html } from '../../lit-all.min.js';
|
|
3
|
+
import '../Icon.js';
|
|
4
|
+
|
|
5
|
+
export default class Hide extends TableControl {
|
|
6
|
+
/*
|
|
7
|
+
Constructor
|
|
8
|
+
*/
|
|
9
|
+
constructor() {
|
|
10
|
+
super({ maxWidth: 40 });
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/*
|
|
14
|
+
Event Handlers
|
|
15
|
+
*/
|
|
16
|
+
handleHide = () => {
|
|
17
|
+
if(this.record){
|
|
18
|
+
this.table.hideRecord(this.record);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
/*
|
|
23
|
+
Rendering
|
|
24
|
+
*/
|
|
25
|
+
render() {
|
|
26
|
+
return html`
|
|
27
|
+
<button class="no-btn icon-btn" @click="${this.handleHide}">
|
|
28
|
+
<k-icon name="hide"></k-icon>
|
|
29
|
+
</button>
|
|
30
|
+
`;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
customElements.define('k-tc-hide', Hide);
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import TableControl from './TableControl.js';
|
|
2
|
+
import { html } from '../../lit-all.min.js';
|
|
3
|
+
import '../Icon.js';
|
|
4
|
+
|
|
5
|
+
export default class LastPage extends TableControl {
|
|
6
|
+
constructor() {
|
|
7
|
+
super();
|
|
8
|
+
this.pageChangeHandler = () => this.requestUpdate();
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/*
|
|
12
|
+
Lifecycle Callbacks
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
connectedCallback() {
|
|
16
|
+
super.connectedCallback();
|
|
17
|
+
if(this.table){
|
|
18
|
+
this.table.addEventListener('pageChange', this.pageChangeHandler);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
disconnectedCallback() {
|
|
23
|
+
super.disconnectedCallback();
|
|
24
|
+
if(this.table){
|
|
25
|
+
this.table.removeEventListener('pageChange', this.pageChangeHandler);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/*
|
|
30
|
+
Event Handlers
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
handleClick = () => {
|
|
34
|
+
if(this.table){
|
|
35
|
+
this.table.lastPage();
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
/*
|
|
40
|
+
Utility Functions
|
|
41
|
+
*/
|
|
42
|
+
|
|
43
|
+
get isDisabled() {
|
|
44
|
+
if(!this.table) return true;
|
|
45
|
+
return this.table.getCurrentPage() === this.table.getTotalPages();
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/*
|
|
49
|
+
Rendering Logic
|
|
50
|
+
*/
|
|
51
|
+
|
|
52
|
+
render() {
|
|
53
|
+
return html`
|
|
54
|
+
<button
|
|
55
|
+
class="no-btn icon-btn"
|
|
56
|
+
?disabled="${this.isDisabled}"
|
|
57
|
+
@click="${this.handleClick}"
|
|
58
|
+
>
|
|
59
|
+
<k-icon name="last"></k-icon>
|
|
60
|
+
</button>
|
|
61
|
+
`;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
customElements.define('k-tc-last-page', LastPage);
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import TableControl from './TableControl.js';
|
|
2
|
+
import { html } from '../../lit-all.min.js';
|
|
3
|
+
import '../Icon.js';
|
|
4
|
+
|
|
5
|
+
export default class NextPage extends TableControl {
|
|
6
|
+
constructor() {
|
|
7
|
+
super();
|
|
8
|
+
this.pageChangeHandler = () => this.requestUpdate();
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/*
|
|
12
|
+
Lifecycle Callbacks
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
connectedCallback() {
|
|
16
|
+
super.connectedCallback();
|
|
17
|
+
if(this.table){
|
|
18
|
+
this.table.addEventListener('pageChange', this.pageChangeHandler);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
disconnectedCallback() {
|
|
23
|
+
super.disconnectedCallback();
|
|
24
|
+
if(this.table){
|
|
25
|
+
this.table.removeEventListener('pageChange', this.pageChangeHandler);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/*
|
|
30
|
+
Event Handlers
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
handleClick = () => {
|
|
34
|
+
if(this.table){
|
|
35
|
+
this.table.nextPage();
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
/*
|
|
40
|
+
Utility Functions
|
|
41
|
+
*/
|
|
42
|
+
|
|
43
|
+
get isDisabled() {
|
|
44
|
+
if(!this.table) return true;
|
|
45
|
+
return this.table.getCurrentPage() === this.table.getTotalPages();
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/*
|
|
49
|
+
Rendering Logic
|
|
50
|
+
*/
|
|
51
|
+
|
|
52
|
+
render() {
|
|
53
|
+
return html`
|
|
54
|
+
<button
|
|
55
|
+
class="no-btn icon-btn"
|
|
56
|
+
?disabled="${this.isDisabled}"
|
|
57
|
+
@click="${this.handleClick}"
|
|
58
|
+
>
|
|
59
|
+
<k-icon name="chevron-right"></k-icon>
|
|
60
|
+
</button>
|
|
61
|
+
`;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
customElements.define('k-tc-next-page', NextPage);
|