@aquera/nile-elements 0.1.70-beta-1.2 → 0.1.72-beta-1.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/README.md +3 -0
- package/demo/index.html +201 -237
- package/dist/aquera-nile-elements-0.1.57-beta-2.0.tgz +0 -0
- package/dist/axe.min-2b379f29.cjs.js +12 -0
- package/dist/axe.min-2b379f29.cjs.js.map +1 -0
- package/dist/axe.min-c2cd8733.esm.js +12 -0
- package/dist/{fixture-5b79f853.cjs.js → fixture-28d63bc4.cjs.js} +2 -2
- package/dist/{fixture-5b79f853.cjs.js.map → fixture-28d63bc4.cjs.js.map} +1 -1
- package/dist/{fixture-dbd66009.cjs.js → fixture-324a7ef9.cjs.js} +2 -2
- package/dist/{fixture-dbd66009.cjs.js.map → fixture-324a7ef9.cjs.js.map} +1 -1
- package/dist/{fixture-cf7bfcf5.esm.js → fixture-78a015b8.esm.js} +1 -1
- package/dist/fixture-add72f26.esm.js +569 -0
- package/dist/{fixture-90b199c4.esm.js → fixture-ba65eb22.esm.js} +1 -1
- package/dist/fixture-c1bd203f.cjs.js +395 -0
- package/dist/fixture-c1bd203f.cjs.js.map +1 -0
- package/dist/fixture-cb376a7f.cjs.js +395 -0
- package/dist/fixture-cb376a7f.cjs.js.map +1 -0
- package/dist/fixture-f2693d97.esm.js +569 -0
- package/dist/index.js +101 -11
- package/dist/nile-accordion/nile-accordian.test.cjs.js +1 -1
- package/dist/nile-accordion/nile-accordian.test.esm.js +1 -1
- package/dist/nile-auto-complete/nile-auto-complete.test.cjs.js +1 -1
- package/dist/nile-auto-complete/nile-auto-complete.test.esm.js +1 -1
- package/dist/nile-avatar/nile-avatar.test.cjs.js +1 -1
- package/dist/nile-avatar/nile-avatar.test.esm.js +1 -1
- package/dist/nile-badge/nile-badge.test.cjs.js +1 -1
- package/dist/nile-badge/nile-badge.test.esm.js +1 -1
- package/dist/nile-button/nile-button.test.cjs.js +1 -1
- package/dist/nile-button/nile-button.test.esm.js +1 -1
- package/dist/nile-button-toggle-group/nile-button-toggle-group.test.cjs.js +1 -1
- package/dist/nile-button-toggle-group/nile-button-toggle-group.test.esm.js +1 -1
- package/dist/nile-calendar/nile-calendar.test.cjs.js +1 -1
- package/dist/nile-calendar/nile-calendar.test.esm.js +1 -1
- package/dist/nile-card/nile-card.test.cjs.js +1 -1
- package/dist/nile-card/nile-card.test.esm.js +1 -1
- package/dist/nile-checkbox/nile-checkbox.test.cjs.js +1 -1
- package/dist/nile-checkbox/nile-checkbox.test.esm.js +1 -1
- package/dist/nile-chip/nile-chip.test.cjs.js +1 -1
- package/dist/nile-chip/nile-chip.test.esm.js +1 -1
- package/dist/nile-dialog/nile-dialog.test.cjs.js +1 -1
- package/dist/nile-dialog/nile-dialog.test.esm.js +1 -1
- package/dist/nile-drawer/nile-drawer.test.cjs.js +1 -1
- package/dist/nile-drawer/nile-drawer.test.esm.js +1 -1
- package/dist/nile-dropdown/nile-dropdown.test.cjs.js +1 -1
- package/dist/nile-dropdown/nile-dropdown.test.esm.js +1 -1
- package/dist/nile-empty-state/nile-empty-state.test.cjs.js +1 -1
- package/dist/nile-empty-state/nile-empty-state.test.esm.js +1 -1
- package/dist/nile-error-message/nile-error-message.test.cjs.js +1 -1
- package/dist/nile-error-message/nile-error-message.test.esm.js +1 -1
- package/dist/nile-file-preview/nile-file-preview.test.cjs.js +1 -1
- package/dist/nile-file-preview/nile-file-preview.test.esm.js +1 -1
- package/dist/nile-file-upload/nile-file-upload.test.cjs.js +1 -1
- package/dist/nile-file-upload/nile-file-upload.test.esm.js +1 -1
- package/dist/nile-filter-chip/nile-filter-chip.test.cjs.js +1 -1
- package/dist/nile-filter-chip/nile-filter-chip.test.esm.js +1 -1
- package/dist/nile-form-group/nile-form-group.test.cjs.js +1 -1
- package/dist/nile-form-group/nile-form-group.test.esm.js +1 -1
- package/dist/nile-form-help-text/nile-form-help-text.test.cjs.js +1 -1
- package/dist/nile-form-help-text/nile-form-help-text.test.esm.js +1 -1
- package/dist/nile-hero/nile-hero.test.cjs.js +1 -1
- package/dist/nile-hero/nile-hero.test.esm.js +1 -1
- package/dist/nile-icon/nile-icon.test.cjs.js +1 -1
- package/dist/nile-icon/nile-icon.test.esm.js +1 -1
- package/dist/nile-input/nile-input.test.cjs.js +1 -1
- package/dist/nile-input/nile-input.test.esm.js +1 -1
- package/dist/nile-link/nile-link.test.cjs.js +1 -1
- package/dist/nile-link/nile-link.test.esm.js +1 -1
- package/dist/nile-loader/nile-loader.test.cjs.js +1 -1
- package/dist/nile-loader/nile-loader.test.esm.js +1 -1
- package/dist/nile-popover/nile-popover.test.cjs.js +1 -1
- package/dist/nile-popover/nile-popover.test.esm.js +1 -1
- package/dist/nile-popup/nile-popup.test.cjs.js +1 -1
- package/dist/nile-popup/nile-popup.test.esm.js +1 -1
- package/dist/nile-progress-bar/nile-progress-bar.test.cjs.js +1 -1
- package/dist/nile-progress-bar/nile-progress-bar.test.esm.js +1 -1
- package/dist/nile-radio/nile-radio.test.cjs.js +1 -1
- package/dist/nile-radio/nile-radio.test.esm.js +1 -1
- package/dist/nile-radio-group/nile-radio-group.test.cjs.js +1 -1
- package/dist/nile-radio-group/nile-radio-group.test.esm.js +1 -1
- package/dist/nile-select/nile-select.test.cjs.js +1 -1
- package/dist/nile-select/nile-select.test.esm.js +1 -1
- package/dist/nile-slide-toggle/nile-slide-toggle.test.cjs.js +1 -1
- package/dist/nile-slide-toggle/nile-slide-toggle.test.esm.js +1 -1
- package/dist/nile-tab-group/nile-tab-group.test.cjs.js +1 -1
- package/dist/nile-tab-group/nile-tab-group.test.esm.js +1 -1
- package/dist/nile-table-body/nile-table-body.cjs.js +1 -1
- package/dist/nile-table-body/nile-table-body.cjs.js.map +1 -1
- package/dist/nile-table-body/nile-table-body.esm.js +2 -2
- package/dist/nile-table-cell-item/nile-table-cell-item.cjs.js +1 -1
- package/dist/nile-table-cell-item/nile-table-cell-item.cjs.js.map +1 -1
- package/dist/nile-table-cell-item/nile-table-cell-item.css.cjs.js +1 -1
- package/dist/nile-table-cell-item/nile-table-cell-item.css.cjs.js.map +1 -1
- package/dist/nile-table-cell-item/nile-table-cell-item.css.esm.js +8 -3
- package/dist/nile-table-cell-item/nile-table-cell-item.esm.js +11 -5
- package/dist/nile-table-row/nile-table-row.cjs.js +1 -1
- package/dist/nile-table-row/nile-table-row.cjs.js.map +1 -1
- package/dist/nile-table-row/nile-table-row.css.cjs.js +1 -1
- package/dist/nile-table-row/nile-table-row.css.cjs.js.map +1 -1
- package/dist/nile-table-row/nile-table-row.css.esm.js +52 -0
- package/dist/nile-table-row/nile-table-row.esm.js +33 -6
- package/dist/nile-textarea/nile-textarea.test.cjs.js +1 -1
- package/dist/nile-textarea/nile-textarea.test.esm.js +1 -1
- package/dist/nile-virtual-select/nile-virtual-select.test.cjs.js +1 -1
- package/dist/nile-virtual-select/nile-virtual-select.test.esm.js +1 -1
- package/dist/src/internal/expandable-row-helper.d.ts +13 -0
- package/dist/src/internal/expandable-row-helper.js +37 -0
- package/dist/src/internal/expandable-row-helper.js.map +1 -0
- package/dist/src/internal/expandable-row-styles.d.ts +11 -0
- package/dist/src/internal/expandable-row-styles.js +27 -0
- package/dist/src/internal/expandable-row-styles.js.map +1 -0
- package/dist/src/internal/table-expandable-helper.d.ts +0 -0
- package/dist/src/internal/table-expandable-helper.js +2 -0
- package/dist/src/internal/table-expandable-helper.js.map +1 -0
- package/dist/src/internal/table-row-expandable-helper.d.ts +12 -0
- package/dist/src/internal/table-row-expandable-helper.js +32 -0
- package/dist/src/internal/table-row-expandable-helper.js.map +1 -0
- package/dist/src/internal/table-row-expandable-styles.d.ts +11 -0
- package/dist/src/internal/table-row-expandable-styles.js +12 -0
- package/dist/src/internal/table-row-expandable-styles.js.map +1 -0
- package/dist/src/nile-group-header/index.d.ts +1 -0
- package/dist/src/nile-group-header/index.js +2 -0
- package/dist/src/nile-group-header/index.js.map +1 -0
- package/dist/src/nile-group-header/nile-group-header.css.d.ts +12 -0
- package/dist/src/nile-group-header/nile-group-header.css.js +30 -0
- package/dist/src/nile-group-header/nile-group-header.css.js.map +1 -0
- package/dist/src/nile-group-header/nile-group-header.d.ts +19 -0
- package/dist/src/nile-group-header/nile-group-header.js +36 -0
- package/dist/src/nile-group-header/nile-group-header.js.map +1 -0
- package/dist/src/nile-group-header/nile-option-header.css.d.ts +12 -0
- package/dist/src/nile-group-header/nile-option-header.css.js +30 -0
- package/dist/src/nile-group-header/nile-option-header.css.js.map +1 -0
- package/dist/src/nile-group-header/nile-option-header.d.ts +33 -0
- package/dist/src/nile-group-header/nile-option-header.js +51 -0
- package/dist/src/nile-group-header/nile-option-header.js.map +1 -0
- package/dist/src/nile-option-header/index.d.ts +1 -0
- package/dist/src/nile-option-header/index.js +2 -0
- package/dist/src/nile-option-header/index.js.map +1 -0
- package/dist/src/nile-option-header/nile-option-header.css.d.ts +12 -0
- package/dist/src/nile-option-header/nile-option-header.css.js +30 -0
- package/dist/src/nile-option-header/nile-option-header.css.js.map +1 -0
- package/dist/src/nile-option-header/nile-option-header.d.ts +33 -0
- package/dist/src/nile-option-header/nile-option-header.js +51 -0
- package/dist/src/nile-option-header/nile-option-header.js.map +1 -0
- package/dist/src/nile-table-body/nile-table-body.d.ts +3 -0
- package/dist/src/nile-table-body/nile-table-body.js +32 -0
- package/dist/src/nile-table-body/nile-table-body.js.map +1 -1
- package/dist/src/nile-table-cell-item/nile-table-cell-item.css.js +5 -0
- package/dist/src/nile-table-cell-item/nile-table-cell-item.css.js.map +1 -1
- package/dist/src/nile-table-cell-item/nile-table-cell-item.d.ts +1 -0
- package/dist/src/nile-table-cell-item/nile-table-cell-item.js +14 -2
- package/dist/src/nile-table-cell-item/nile-table-cell-item.js.map +1 -1
- package/dist/src/nile-table-row/TableRowExpandableHelper.d.ts +9 -0
- package/dist/src/nile-table-row/TableRowExpandableHelper.js +26 -0
- package/dist/src/nile-table-row/TableRowExpandableHelper.js.map +1 -0
- package/dist/src/nile-table-row/helper.ts.d.ts +37 -0
- package/dist/src/nile-table-row/helper.ts.js +105 -0
- package/dist/src/nile-table-row/helper.ts.js.map +1 -0
- package/dist/src/nile-table-row/nile-table-row-expandable.d.ts +37 -0
- package/dist/src/nile-table-row/nile-table-row-expandable.js +105 -0
- package/dist/src/nile-table-row/nile-table-row-expandable.js.map +1 -0
- package/dist/src/nile-table-row/nile-table-row.css.js +52 -0
- package/dist/src/nile-table-row/nile-table-row.css.js.map +1 -1
- package/dist/src/nile-table-row/nile-table-row.d.ts +12 -1
- package/dist/src/nile-table-row/nile-table-row.js +113 -9
- package/dist/src/nile-table-row/nile-table-row.js.map +1 -1
- package/dist/src/nile-table-row-expandable/index.d.ts +1 -0
- package/dist/src/nile-table-row-expandable/index.js +2 -0
- package/dist/src/nile-table-row-expandable/index.js.map +1 -0
- package/dist/src/nile-table-row-expandable/nile-table-row-expandable.css.d.ts +12 -0
- package/dist/src/nile-table-row-expandable/nile-table-row-expandable.css.js +17 -0
- package/dist/src/nile-table-row-expandable/nile-table-row-expandable.css.js.map +1 -0
- package/dist/src/nile-table-row-expandable/nile-table-row-expandable.d.ts +37 -0
- package/dist/src/nile-table-row-expandable/nile-table-row-expandable.js +103 -0
- package/dist/src/nile-table-row-expandable/nile-table-row-expandable.js.map +1 -0
- package/dist/src/nile-tooltip/nile-tooltip-utils.d.ts +18 -0
- package/dist/src/nile-tooltip/nile-tooltip-utils.js +216 -0
- package/dist/src/nile-tooltip/nile-tooltip-utils.js.map +1 -0
- package/dist/src/nile-tooltip/nile-tooltip.test.d.ts +1 -0
- package/dist/src/nile-tooltip/nile-tooltip.test.js +148 -0
- package/dist/src/nile-tooltip/nile-tooltip.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/nile-table-body/nile-table-body.ts +27 -1
- package/src/nile-table-cell-item/nile-table-cell-item.css.ts +5 -0
- package/src/nile-table-cell-item/nile-table-cell-item.ts +15 -2
- package/src/nile-table-row/nile-table-row.css.ts +52 -0
- package/src/nile-table-row/nile-table-row.ts +108 -5
- package/vscode-html-custom-data.json +43 -4
- package/dist/src/internal/resizable-helper.d.ts +0 -59
- package/dist/src/internal/resizable-helper.js +0 -115
- package/dist/src/internal/resizable-helper.js.map +0 -1
- package/dist/src/internal/resizable-styles.d.ts +0 -16
- package/dist/src/internal/resizable-styles.js +0 -144
- package/dist/src/internal/resizable-styles.js.map +0 -1
- package/dist/src/nile-badge/__snapshots__/nile-badge.test.snap.js +0 -17
- package/dist/src/nile-calendar/__snapshots__/nile-calendar.test.snap.js +0 -310
- package/dist/src/nile-card/__snapshots__/nile-card.test.snap.js +0 -34
- package/dist/src/nile-checkbox/__snapshots__/nile-checkbox.test.snap.js +0 -31
- package/dist/src/nile-grid/data-processor.d.ts +0 -37
- package/dist/src/nile-grid/data-processor.js +0 -122
- package/dist/src/nile-grid/data-processor.js.map +0 -1
- package/dist/src/nile-grid/event-handlers.d.ts +0 -35
- package/dist/src/nile-grid/event-handlers.js +0 -158
- package/dist/src/nile-grid/event-handlers.js.map +0 -1
- package/dist/src/nile-grid/index.d.ts +0 -5
- package/dist/src/nile-grid/index.js +0 -6
- package/dist/src/nile-grid/index.js.map +0 -1
- package/dist/src/nile-grid/nile-grid.css.d.ts +0 -1
- package/dist/src/nile-grid/nile-grid.css.js +0 -120
- package/dist/src/nile-grid/nile-grid.css.js.map +0 -1
- package/dist/src/nile-grid/nile-grid.d.ts +0 -39
- package/dist/src/nile-grid/nile-grid.js +0 -182
- package/dist/src/nile-grid/nile-grid.js.map +0 -1
- package/dist/src/nile-grid/renderer.d.ts +0 -8
- package/dist/src/nile-grid/renderer.js +0 -78
- package/dist/src/nile-grid/renderer.js.map +0 -1
- package/dist/src/nile-grid/resize-handler.d.ts +0 -4
- package/dist/src/nile-grid/resize-handler.js +0 -36
- package/dist/src/nile-grid/resize-handler.js.map +0 -1
- package/dist/src/nile-grid/types.d.ts +0 -32
- package/dist/src/nile-grid/types.js +0 -2
- package/dist/src/nile-grid/types.js.map +0 -1
- package/dist/src/nile-grid/utils.d.ts +0 -4
- package/dist/src/nile-grid/utils.js +0 -32
- package/dist/src/nile-grid/utils.js.map +0 -1
- package/dist/src/nile-hero/__snapshots__/nile-hero.test.snap.js +0 -47
- package/dist/src/nile-icon/__snapshots__/nile-icon.test.snap.js +0 -16
- package/dist/src/nile-input/__snapshots__/nile-input.test.snap.js +0 -75
- package/dist/src/nile-popover/__snapshots__/nile-popover.test.snap.js +0 -22
- package/dist/src/nile-table-body/virtual-scroll-helper.d.ts +0 -9
- package/dist/src/nile-table-body/virtual-scroll-helper.js +0 -24
- package/dist/src/nile-table-body/virtual-scroll-helper.js.map +0 -1
- package/dist/src/nile-virtual-table-body/index.d.ts +0 -2
- package/dist/src/nile-virtual-table-body/index.js +0 -3
- package/dist/src/nile-virtual-table-body/index.js.map +0 -1
- package/dist/src/nile-virtual-table-body/nile-virtual-table-body.css.d.ts +0 -1
- package/dist/src/nile-virtual-table-body/nile-virtual-table-body.css.js +0 -44
- package/dist/src/nile-virtual-table-body/nile-virtual-table-body.css.js.map +0 -1
- package/dist/src/nile-virtual-table-body/nile-virtual-table-body.d.ts +0 -50
- package/dist/src/nile-virtual-table-body/nile-virtual-table-body.js +0 -135
- package/dist/src/nile-virtual-table-body/nile-virtual-table-body.js.map +0 -1
- package/dist/src/nile-virtual-table-body/renderer.d.ts +0 -16
- package/dist/src/nile-virtual-table-body/renderer.js +0 -49
- package/dist/src/nile-virtual-table-body/renderer.js.map +0 -1
package/package.json
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
"description": "Webcomponent nile-elements following open-wc recommendations",
|
4
4
|
"license": "MIT",
|
5
5
|
"author": "nile-elements",
|
6
|
-
"version": "0.1.
|
6
|
+
"version": "0.1.72-beta-1.0",
|
7
7
|
"main": "dist/src/index.js",
|
8
8
|
"type": "module",
|
9
9
|
"module": "dist/src/index.js",
|
@@ -43,19 +43,37 @@ export class NileTableBody extends NileElement {
|
|
43
43
|
@queryAssignedNodes({ flatten: true }) _childNodes!: Array<HTMLElement>;
|
44
44
|
@property() type: 'primary' | 'secondary' = 'primary';
|
45
45
|
@property() bodyStyle: string;
|
46
|
+
@property({ type: Boolean, reflect: true, attribute: true }) expandableRows = false;
|
47
|
+
@property({ type: Boolean, reflect: true, attribute: true }) collapsible = false;
|
46
48
|
|
47
49
|
@state() private rows_data: any[] = [];
|
48
50
|
@state() private header_rows_data: any[] = [];
|
49
51
|
@state() private sort__index: number;
|
50
52
|
@state() private search__index: number;
|
51
53
|
@state() private hasResizableColumns = false;
|
54
|
+
private expandedRow: HTMLElement | null = null;
|
52
55
|
|
53
56
|
public static get styles(): CSSResultArray {
|
54
57
|
return [styles];
|
55
58
|
}
|
56
59
|
|
57
60
|
protected firstUpdated(_changedProperties: PropertyValues): void {
|
58
|
-
this.emit('nile-body-load', { value: this.type, comp:this },true,false)
|
61
|
+
this.emit('nile-body-load', { value: this.type, comp: this }, true, false)
|
62
|
+
|
63
|
+
if (this.collapsible) {
|
64
|
+
this.addEventListener('nile-change', (e: any) => {
|
65
|
+
const targetRow = e.target as HTMLElement;
|
66
|
+
|
67
|
+
if (e.detail.expanded) {
|
68
|
+
if (this.expandedRow && this.expandedRow !== targetRow) {
|
69
|
+
(this.expandedRow as any).expanded = false;
|
70
|
+
}
|
71
|
+
this.expandedRow = targetRow;
|
72
|
+
} else if (this.expandedRow === targetRow) {
|
73
|
+
this.expandedRow = null;
|
74
|
+
}
|
75
|
+
});
|
76
|
+
}
|
59
77
|
}
|
60
78
|
|
61
79
|
/* #endregion */
|
@@ -78,6 +96,14 @@ export class NileTableBody extends NileElement {
|
|
78
96
|
let row_data: any = [];
|
79
97
|
this._childNodes.forEach((child: any) => {
|
80
98
|
if (child.tagName && child?.tagName?.toLowerCase() === 'nile-table-row') {
|
99
|
+
if (this.expandableRows) {
|
100
|
+
const expandable = child.getAttribute('expandable');
|
101
|
+
if (expandable) {
|
102
|
+
(child as any).expandable = expandable === 'false' || expandable === false ? false : true;
|
103
|
+
} else {
|
104
|
+
(child as any).expandable = true;
|
105
|
+
}
|
106
|
+
}
|
81
107
|
let nilerows = this.getChildren(child, 'nile-table-cell-item');
|
82
108
|
if (nilerows.length > 0) {
|
83
109
|
nilerows.forEach((element: { innerHTML: any }) => {
|
@@ -57,6 +57,13 @@ export class NileTableCellItem extends NileElement {
|
|
57
57
|
}
|
58
58
|
}
|
59
59
|
|
60
|
+
private handleClick(e: MouseEvent): void {
|
61
|
+
this.dispatchEvent(new CustomEvent('nile-expand-click', {
|
62
|
+
bubbles: true,
|
63
|
+
composed: true,
|
64
|
+
}));
|
65
|
+
}
|
66
|
+
|
60
67
|
/**
|
61
68
|
* Render method
|
62
69
|
* @slot This is a slot test
|
@@ -66,7 +73,11 @@ export class NileTableCellItem extends NileElement {
|
|
66
73
|
return html`
|
67
74
|
<div class="cell__wrapper" part="nile__table-cell">
|
68
75
|
${this.hasSlotController.test('[default]')
|
69
|
-
|
76
|
+
? html`
|
77
|
+
<div class="column" part="nile__table-cell">
|
78
|
+
<slot name="expansionTrigger" @click=${this.handleClick} part="expansionTrigger"></slot>
|
79
|
+
<slot></slot>
|
80
|
+
</div>`
|
70
81
|
: ''}
|
71
82
|
<div class="resizer" @mousedown=${this.handleResizeStart}></div>
|
72
83
|
</div>
|
@@ -74,7 +85,9 @@ export class NileTableCellItem extends NileElement {
|
|
74
85
|
} else {
|
75
86
|
return html`
|
76
87
|
${this.hasSlotController.test('[default]')
|
77
|
-
|
88
|
+
? html`
|
89
|
+
<slot name="expansionTrigger" @click=${this.handleClick} part="expansionTrigger"></slot>
|
90
|
+
<slot class="column" part="nile__table-cell"> </slot>`
|
78
91
|
: ''}
|
79
92
|
`;
|
80
93
|
}
|
@@ -27,6 +27,58 @@ export const styles = css`
|
|
27
27
|
nile-table-row > slot::slotted(nile-table-cell-item:first-child) {
|
28
28
|
color: red;
|
29
29
|
}
|
30
|
+
|
31
|
+
.row-container {
|
32
|
+
/* display: flex; */
|
33
|
+
/* flex-direction: column; */
|
34
|
+
/* overflow: hidden; */
|
35
|
+
/* contain: layout style; */
|
36
|
+
}
|
37
|
+
|
38
|
+
.row {
|
39
|
+
cursor: default;
|
40
|
+
position: relative;
|
41
|
+
display: flex;
|
42
|
+
align-items: center;
|
43
|
+
}
|
44
|
+
|
45
|
+
.row.expandable {
|
46
|
+
border-bottom: 1px solid var(--nile-table-row-border-color);
|
47
|
+
/* overflow: hidden; */
|
48
|
+
/* contain: layout style; */
|
49
|
+
}
|
50
|
+
|
51
|
+
.expanded-content {
|
52
|
+
transition: max-height 0.3s ease;
|
53
|
+
}
|
54
|
+
|
55
|
+
.row.expandable {
|
56
|
+
margin-right: 4px;
|
57
|
+
}
|
58
|
+
|
59
|
+
.row ::slotted(nile-table-cell-item),
|
60
|
+
.row ::slotted(nile-table-header-item) {
|
61
|
+
width: 100%;
|
62
|
+
box-sizing: border-box;
|
63
|
+
}
|
64
|
+
|
65
|
+
.row ::slotted([slot="expandable-icon"]), slot[name="expandable-icon"] > nile-icon {
|
66
|
+
cursor: pointer;
|
67
|
+
position: absolute;
|
68
|
+
left: 0.40em;
|
69
|
+
top: 50%;
|
70
|
+
transform: translateY(-50%);
|
71
|
+
cursor: pointer;
|
72
|
+
font-size: 1em;
|
73
|
+
line-height: 1;
|
74
|
+
user-select: none;
|
75
|
+
z-index: 2;
|
76
|
+
}
|
77
|
+
|
78
|
+
:host([expandIconRight]) .row ::slotted([slot="expandable-icon"]), :host([expandIconRight]) slot[name="expandable-icon"] > nile-icon {
|
79
|
+
right: 0.40em;
|
80
|
+
left: auto;
|
81
|
+
}
|
30
82
|
`;
|
31
83
|
|
32
84
|
export default [styles];
|
@@ -10,6 +10,7 @@ import {
|
|
10
10
|
html,
|
11
11
|
CSSResultArray,
|
12
12
|
TemplateResult,
|
13
|
+
PropertyValues,
|
13
14
|
} from 'lit';
|
14
15
|
import { customElement, query, property } from 'lit/decorators.js';
|
15
16
|
import { styles } from './nile-table-row.css';
|
@@ -31,6 +32,33 @@ export class NileTableRow extends NileElement {
|
|
31
32
|
public static get styles(): CSSResultArray {
|
32
33
|
return [styles];
|
33
34
|
}
|
35
|
+
@property({ type: Boolean, reflect: true, attribute: true }) expandable = false;
|
36
|
+
|
37
|
+
@property({ type: Boolean, reflect: true, attribute: true }) expanded = false;
|
38
|
+
|
39
|
+
@property({ type: Boolean, reflect: true, attribute: true }) expansionTriggerMode = false;
|
40
|
+
|
41
|
+
@property({ type: Boolean, reflect: true, attribute: true }) expandIconRight = false;
|
42
|
+
|
43
|
+
@query('slot[name="expanded"]')
|
44
|
+
private _expandedSlot!: HTMLSlotElement;
|
45
|
+
|
46
|
+
@query('slot[name="expandable-icon"]')
|
47
|
+
private _iconSlot!: HTMLSlotElement;
|
48
|
+
|
49
|
+
private tableBodyHasExpandable: any;
|
50
|
+
|
51
|
+
private _fallbackIcon?: HTMLElement | null;
|
52
|
+
|
53
|
+
private toggleExpand(e: MouseEvent): void {
|
54
|
+
this.expanded = !this.expanded;
|
55
|
+
this.dispatchEvent(new CustomEvent('nile-change', {
|
56
|
+
detail: { expanded: this.expanded },
|
57
|
+
bubbles: true,
|
58
|
+
composed: true,
|
59
|
+
}));
|
60
|
+
}
|
61
|
+
|
34
62
|
|
35
63
|
/* #endregion */
|
36
64
|
|
@@ -41,6 +69,18 @@ export class NileTableRow extends NileElement {
|
|
41
69
|
* @slot This is a slot test
|
42
70
|
*/
|
43
71
|
|
72
|
+
protected firstUpdated(_changedProperties: PropertyValues): void {
|
73
|
+
super.firstUpdated(_changedProperties);
|
74
|
+
this.tableBodyHasExpandable = this.closest('nile-table-body');
|
75
|
+
|
76
|
+
if (this.expansionTriggerMode) {
|
77
|
+
this.addEventListener('nile-expand-click', (e: MouseEvent) => {
|
78
|
+
e.stopPropagation();
|
79
|
+
this.toggleExpand(e);
|
80
|
+
});
|
81
|
+
}
|
82
|
+
}
|
83
|
+
|
44
84
|
private handleSortingAlter(event: CustomEvent) {
|
45
85
|
const header_items: any = [
|
46
86
|
...this.querySelectorAll('nile-table-header-item'),
|
@@ -54,15 +94,78 @@ export class NileTableRow extends NileElement {
|
|
54
94
|
}
|
55
95
|
}
|
56
96
|
|
97
|
+
protected updated(changedProperties: PropertyValues): void {
|
98
|
+
if (!changedProperties.has('expandable') || !this._iconSlot) return;
|
99
|
+
|
100
|
+
if (!this._fallbackIcon) {
|
101
|
+
this._fallbackIcon = this.shadowRoot?.querySelector('nile-icon') ?? null;
|
102
|
+
}
|
103
|
+
|
104
|
+
const assigned = this._iconSlot.assignedElements();
|
105
|
+
const hasAssigned = assigned.length > 0;
|
106
|
+
const displayValue = this.expandable ? '' : 'none';
|
107
|
+
|
108
|
+
if (hasAssigned) {
|
109
|
+
for (const el of assigned) {
|
110
|
+
(el as HTMLElement).style.display = displayValue;
|
111
|
+
}
|
112
|
+
} else if (this._fallbackIcon) {
|
113
|
+
this._fallbackIcon.style.display = displayValue;
|
114
|
+
}
|
115
|
+
|
116
|
+
if (this.expansionTriggerMode) {
|
117
|
+
if (hasAssigned) {
|
118
|
+
for (const el of assigned) {
|
119
|
+
(el as HTMLElement).style.display = 'none';
|
120
|
+
}
|
121
|
+
} else if (this._fallbackIcon) {
|
122
|
+
this._fallbackIcon.style.display = 'none';
|
123
|
+
}
|
124
|
+
}
|
125
|
+
}
|
126
|
+
|
57
127
|
public render(): TemplateResult {
|
128
|
+
if (!this.expandable && !this.tableBodyHasExpandable?.expandableRows) {
|
129
|
+
return html`
|
130
|
+
<slot
|
131
|
+
part="nile-row"
|
132
|
+
@nile-click-sort="${this.handleSortingAlter}"
|
133
|
+
></slot>
|
134
|
+
`;
|
135
|
+
}
|
136
|
+
|
137
|
+
|
58
138
|
return html`
|
59
|
-
<
|
60
|
-
|
61
|
-
|
62
|
-
|
139
|
+
<div part="row-container" class="row-container">
|
140
|
+
<div
|
141
|
+
part="nile-row"
|
142
|
+
class="row expandable ${this.expanded ? 'expanded' : ''}"
|
143
|
+
@nile-click-sort="${this.handleSortingAlter}"
|
144
|
+
>
|
145
|
+
<slot
|
146
|
+
name="expandable-icon"
|
147
|
+
@click=${this.toggleExpand}
|
148
|
+
part="expandable-icon"
|
149
|
+
>
|
150
|
+
<nile-icon
|
151
|
+
name="${this.expanded ? 'arrowup' : 'arrowdown'}"
|
152
|
+
role="button"
|
153
|
+
size="10"
|
154
|
+
aria-label="${this.expanded ? 'Collapse row' : 'Expand row'}">
|
155
|
+
</nile-icon>
|
156
|
+
</slot>
|
157
|
+
<slot></slot>
|
158
|
+
</div>
|
159
|
+
|
160
|
+
${this.expanded && this.expandable
|
161
|
+
? html`
|
162
|
+
<div class="expanded-content" part="expanded-content">
|
163
|
+
<slot name="expanded"></slot>
|
164
|
+
</div>`
|
165
|
+
: null}
|
166
|
+
</div>
|
63
167
|
`;
|
64
168
|
}
|
65
|
-
|
66
169
|
/* #endregion */
|
67
170
|
}
|
68
171
|
|
@@ -3681,7 +3681,7 @@
|
|
3681
3681
|
},
|
3682
3682
|
{
|
3683
3683
|
"name": "nile-table-body",
|
3684
|
-
"description": "nile-table-body component.\n\nAttributes:\n\n * `type` {`\"primary\" | \"secondary\"`} - \n\n * `bodyStyle` {`string`} - \n\nProperties:\n\n * `defaultSlot` {`HTMLSlotElement`} - The styles for TableBody\n\n * `_childNodes` {`HTMLElement[]`} - \n\n * `type` {`\"primary\" | \"secondary\"`} - \n\n * `bodyStyle` {`string`} - \n\n * `rows_data` {`any[]`} - \n\n * `header_rows_data` {`any[]`} - \n\n * `sort__index` {`number`} - \n\n * `search__index` {`number`} - \n\n * `hasResizableColumns` {`boolean`} - \n\n * `BUBBLES` {`boolean`} - \n\n * `COMPOSED` {`boolean`} - \n\n * `CANCELABLE` {`boolean`} - ",
|
3684
|
+
"description": "nile-table-body component.\n\nAttributes:\n\n * `type` {`\"primary\" | \"secondary\"`} - \n\n * `bodyStyle` {`string`} - \n\n * `expandableRows` {`boolean`} - \n\n * `collapsible` {`boolean`} - \n\nProperties:\n\n * `defaultSlot` {`HTMLSlotElement`} - The styles for TableBody\n\n * `_childNodes` {`HTMLElement[]`} - \n\n * `type` {`\"primary\" | \"secondary\"`} - \n\n * `bodyStyle` {`string`} - \n\n * `expandableRows` {`boolean`} - \n\n * `collapsible` {`boolean`} - \n\n * `rows_data` {`any[]`} - \n\n * `header_rows_data` {`any[]`} - \n\n * `sort__index` {`number`} - \n\n * `search__index` {`number`} - \n\n * `hasResizableColumns` {`boolean`} - \n\n * `expandedRow` {`HTMLElement | null`} - \n\n * `BUBBLES` {`boolean`} - \n\n * `COMPOSED` {`boolean`} - \n\n * `CANCELABLE` {`boolean`} - ",
|
3685
3685
|
"attributes": [
|
3686
3686
|
{
|
3687
3687
|
"name": "type",
|
@@ -3698,17 +3698,31 @@
|
|
3698
3698
|
{
|
3699
3699
|
"name": "bodyStyle",
|
3700
3700
|
"description": "`bodyStyle` {`string`} - \n\nProperty: bodyStyle"
|
3701
|
+
},
|
3702
|
+
{
|
3703
|
+
"name": "expandableRows",
|
3704
|
+
"description": "`expandableRows` {`boolean`} - \n\nProperty: expandableRows\n\nDefault: false",
|
3705
|
+
"valueSet": "v"
|
3706
|
+
},
|
3707
|
+
{
|
3708
|
+
"name": "collapsible",
|
3709
|
+
"description": "`collapsible` {`boolean`} - \n\nProperty: collapsible\n\nDefault: false",
|
3710
|
+
"valueSet": "v"
|
3701
3711
|
}
|
3702
3712
|
]
|
3703
3713
|
},
|
3704
3714
|
{
|
3705
3715
|
"name": "nile-table-cell-item",
|
3706
|
-
"description": "Nile table Cell Item component.\n\nAttributes:\n\n * `resizable` {`boolean`} - Enables the resize functionality.\n\nProperties:\n\n * `hasSlotController` - \n\n * `resizable` {`boolean`} - Enables the resize functionality.\n\n * `handleResizeStart` - \n\n * `BUBBLES` {`boolean`} - \n\n * `COMPOSED` {`boolean`} - \n\n * `CANCELABLE` {`boolean`} - ",
|
3716
|
+
"description": "Nile table Cell Item component.\n\nEvents:\n\n * `nile-expand-click` {`CustomEvent<unknown>`} - \n\nAttributes:\n\n * `resizable` {`boolean`} - Enables the resize functionality.\n\nProperties:\n\n * `hasSlotController` - \n\n * `resizable` {`boolean`} - Enables the resize functionality.\n\n * `handleResizeStart` - \n\n * `BUBBLES` {`boolean`} - \n\n * `COMPOSED` {`boolean`} - \n\n * `CANCELABLE` {`boolean`} - ",
|
3707
3717
|
"attributes": [
|
3708
3718
|
{
|
3709
3719
|
"name": "resizable",
|
3710
3720
|
"description": "`resizable` {`boolean`} - Enables the resize functionality.\n\nProperty: resizable\n\nDefault: false",
|
3711
3721
|
"valueSet": "v"
|
3722
|
+
},
|
3723
|
+
{
|
3724
|
+
"name": "onnile-expand-click",
|
3725
|
+
"description": "`nile-expand-click` {`CustomEvent<unknown>`} - "
|
3712
3726
|
}
|
3713
3727
|
]
|
3714
3728
|
},
|
@@ -3739,8 +3753,33 @@
|
|
3739
3753
|
},
|
3740
3754
|
{
|
3741
3755
|
"name": "nile-table-row",
|
3742
|
-
"description": "nile-table-row component.\n\nProperties:\n\n * `BUBBLES` {`boolean`} - \n\n * `COMPOSED` {`boolean`} - \n\n * `CANCELABLE` {`boolean`} - ",
|
3743
|
-
"attributes": [
|
3756
|
+
"description": "nile-table-row component.\n\nEvents:\n\n * `nile-change` {`CustomEvent<{ expanded: boolean; }>`} - \n\nAttributes:\n\n * `expandable` {`boolean`} - \n\n * `expanded` {`boolean`} - \n\n * `expansionTriggerMode` {`boolean`} - \n\n * `expandIconRight` {`boolean`} - \n\nProperties:\n\n * `expandable` {`boolean`} - \n\n * `expanded` {`boolean`} - \n\n * `expansionTriggerMode` {`boolean`} - \n\n * `expandIconRight` {`boolean`} - \n\n * `_expandedSlot` {`HTMLSlotElement`} - \n\n * `_iconSlot` {`HTMLSlotElement`} - \n\n * `tableBodyHasExpandable` - \n\n * `_fallbackIcon` {`HTMLElement | null | undefined`} - \n\n * `BUBBLES` {`boolean`} - \n\n * `COMPOSED` {`boolean`} - \n\n * `CANCELABLE` {`boolean`} - ",
|
3757
|
+
"attributes": [
|
3758
|
+
{
|
3759
|
+
"name": "expandable",
|
3760
|
+
"description": "`expandable` {`boolean`} - \n\nProperty: expandable\n\nDefault: false",
|
3761
|
+
"valueSet": "v"
|
3762
|
+
},
|
3763
|
+
{
|
3764
|
+
"name": "expanded",
|
3765
|
+
"description": "`expanded` {`boolean`} - \n\nProperty: expanded\n\nDefault: false",
|
3766
|
+
"valueSet": "v"
|
3767
|
+
},
|
3768
|
+
{
|
3769
|
+
"name": "expansionTriggerMode",
|
3770
|
+
"description": "`expansionTriggerMode` {`boolean`} - \n\nProperty: expansionTriggerMode\n\nDefault: false",
|
3771
|
+
"valueSet": "v"
|
3772
|
+
},
|
3773
|
+
{
|
3774
|
+
"name": "expandIconRight",
|
3775
|
+
"description": "`expandIconRight` {`boolean`} - \n\nProperty: expandIconRight\n\nDefault: false",
|
3776
|
+
"valueSet": "v"
|
3777
|
+
},
|
3778
|
+
{
|
3779
|
+
"name": "onnile-change",
|
3780
|
+
"description": "`nile-change` {`CustomEvent<{ expanded: boolean; }>`} - "
|
3781
|
+
}
|
3782
|
+
]
|
3744
3783
|
},
|
3745
3784
|
{
|
3746
3785
|
"name": "nile-table",
|
@@ -1,59 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* Copyright Aquera Inc 2023
|
3
|
-
*
|
4
|
-
* This source code is licensed under the BSD-3-Clause license found in the
|
5
|
-
* LICENSE file in the root directory of this source tree.
|
6
|
-
*/
|
7
|
-
/**
|
8
|
-
* Resizable Helper Utility
|
9
|
-
* Provides common functionality for resizable table columns
|
10
|
-
*/
|
11
|
-
export interface ResizeOptions {
|
12
|
-
minWidth?: number;
|
13
|
-
startX: number;
|
14
|
-
startWidth: number;
|
15
|
-
element: HTMLElement;
|
16
|
-
}
|
17
|
-
export interface ColumnResizeData {
|
18
|
-
columnIndex: number;
|
19
|
-
newWidth: number;
|
20
|
-
}
|
21
|
-
/**
|
22
|
-
* Handles the start of a resize operation
|
23
|
-
* @param e Mouse event
|
24
|
-
* @param options Resize configuration options
|
25
|
-
* @returns Cleanup function to remove event listeners
|
26
|
-
*/
|
27
|
-
export declare function handleResizeStart(e: MouseEvent, options: ResizeOptions): () => void;
|
28
|
-
/**
|
29
|
-
* Gets the column index of an element within its table row
|
30
|
-
* @param element The table cell or header element
|
31
|
-
* @param selector The CSS selector for the column elements
|
32
|
-
* @returns Column index (0-based)
|
33
|
-
*/
|
34
|
-
export declare function getColumnIndex(element: HTMLElement, selector: string): number;
|
35
|
-
/**
|
36
|
-
* Synchronizes the width of all cells in the same column
|
37
|
-
* @param sourceElement The element that was resized
|
38
|
-
* @param newWidth The new width to apply
|
39
|
-
*/
|
40
|
-
export declare function synchronizeColumnWidth(sourceElement: HTMLElement, newWidth: number): void;
|
41
|
-
/**
|
42
|
-
* Checks if an element has the resizable attribute
|
43
|
-
* @param element The element to check
|
44
|
-
* @returns True if the element is resizable
|
45
|
-
*/
|
46
|
-
export declare function isResizable(element: HTMLElement): boolean;
|
47
|
-
/**
|
48
|
-
* Creates a resize handler function for use in component event listeners
|
49
|
-
* @param element The element to make resizable
|
50
|
-
* @param minWidth Minimum width constraint
|
51
|
-
* @returns Event handler function
|
52
|
-
*/
|
53
|
-
export declare function createResizeHandler(element: HTMLElement, minWidth?: number): (e: MouseEvent) => void;
|
54
|
-
/**
|
55
|
-
* Detects if any columns in a table are resizable
|
56
|
-
* @param tableBody The table body element
|
57
|
-
* @returns True if any columns have resizable attribute
|
58
|
-
*/
|
59
|
-
export declare function hasResizableColumns(tableBody: HTMLElement): boolean;
|
@@ -1,115 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* Copyright Aquera Inc 2023
|
3
|
-
*
|
4
|
-
* This source code is licensed under the BSD-3-Clause license found in the
|
5
|
-
* LICENSE file in the root directory of this source tree.
|
6
|
-
*/
|
7
|
-
/**
|
8
|
-
* Handles the start of a resize operation
|
9
|
-
* @param e Mouse event
|
10
|
-
* @param options Resize configuration options
|
11
|
-
* @returns Cleanup function to remove event listeners
|
12
|
-
*/
|
13
|
-
export function handleResizeStart(e, options) {
|
14
|
-
e.preventDefault();
|
15
|
-
e.stopPropagation();
|
16
|
-
const { minWidth = 50, startX, startWidth, element } = options;
|
17
|
-
const resizer = e.target;
|
18
|
-
// Add resizing class for visual feedback
|
19
|
-
resizer.classList.add('resizing');
|
20
|
-
const onMouseMove = (e) => {
|
21
|
-
e.preventDefault();
|
22
|
-
e.stopPropagation();
|
23
|
-
const delta = e.pageX - startX;
|
24
|
-
const newWidth = Math.max(minWidth, startWidth + delta);
|
25
|
-
// Apply width to the current element
|
26
|
-
element.style.width = newWidth + 'px';
|
27
|
-
// Synchronize width across all cells in the same column
|
28
|
-
synchronizeColumnWidth(element, newWidth);
|
29
|
-
};
|
30
|
-
const onMouseUp = () => {
|
31
|
-
resizer.classList.remove('resizing');
|
32
|
-
document.removeEventListener('mousemove', onMouseMove);
|
33
|
-
document.removeEventListener('mouseup', onMouseUp);
|
34
|
-
};
|
35
|
-
document.addEventListener('mousemove', onMouseMove);
|
36
|
-
document.addEventListener('mouseup', onMouseUp);
|
37
|
-
// Return cleanup function
|
38
|
-
return () => {
|
39
|
-
document.removeEventListener('mousemove', onMouseMove);
|
40
|
-
document.removeEventListener('mouseup', onMouseUp);
|
41
|
-
};
|
42
|
-
}
|
43
|
-
/**
|
44
|
-
* Gets the column index of an element within its table row
|
45
|
-
* @param element The table cell or header element
|
46
|
-
* @param selector The CSS selector for the column elements
|
47
|
-
* @returns Column index (0-based)
|
48
|
-
*/
|
49
|
-
export function getColumnIndex(element, selector) {
|
50
|
-
const tableRow = element.closest('nile-table-row');
|
51
|
-
if (tableRow) {
|
52
|
-
const columns = tableRow.querySelectorAll(selector);
|
53
|
-
return Array.from(columns).indexOf(element);
|
54
|
-
}
|
55
|
-
return 0;
|
56
|
-
}
|
57
|
-
/**
|
58
|
-
* Synchronizes the width of all cells in the same column
|
59
|
-
* @param sourceElement The element that was resized
|
60
|
-
* @param newWidth The new width to apply
|
61
|
-
*/
|
62
|
-
export function synchronizeColumnWidth(sourceElement, newWidth) {
|
63
|
-
const tableBody = sourceElement.closest('nile-table-body');
|
64
|
-
if (!tableBody)
|
65
|
-
return;
|
66
|
-
const isHeader = sourceElement.tagName.toLowerCase() === 'nile-table-header-item';
|
67
|
-
const selector = isHeader ? 'nile-table-header-item' : 'nile-table-cell-item';
|
68
|
-
const targetSelector = isHeader ? 'nile-table-cell-item' : 'nile-table-cell-item';
|
69
|
-
const columnIndex = getColumnIndex(sourceElement, selector);
|
70
|
-
const rows = tableBody.querySelectorAll('nile-table-row');
|
71
|
-
rows.forEach(row => {
|
72
|
-
const cells = row.querySelectorAll(targetSelector);
|
73
|
-
if (cells[columnIndex]) {
|
74
|
-
cells[columnIndex].style.width = newWidth + 'px';
|
75
|
-
}
|
76
|
-
});
|
77
|
-
}
|
78
|
-
/**
|
79
|
-
* Checks if an element has the resizable attribute
|
80
|
-
* @param element The element to check
|
81
|
-
* @returns True if the element is resizable
|
82
|
-
*/
|
83
|
-
export function isResizable(element) {
|
84
|
-
return element.hasAttribute('resizable');
|
85
|
-
}
|
86
|
-
/**
|
87
|
-
* Creates a resize handler function for use in component event listeners
|
88
|
-
* @param element The element to make resizable
|
89
|
-
* @param minWidth Minimum width constraint
|
90
|
-
* @returns Event handler function
|
91
|
-
*/
|
92
|
-
export function createResizeHandler(element, minWidth = 50) {
|
93
|
-
return (e) => {
|
94
|
-
const options = {
|
95
|
-
minWidth,
|
96
|
-
startX: e.pageX,
|
97
|
-
startWidth: element.offsetWidth,
|
98
|
-
element
|
99
|
-
};
|
100
|
-
handleResizeStart(e, options);
|
101
|
-
};
|
102
|
-
}
|
103
|
-
/**
|
104
|
-
* Detects if any columns in a table are resizable
|
105
|
-
* @param tableBody The table body element
|
106
|
-
* @returns True if any columns have resizable attribute
|
107
|
-
*/
|
108
|
-
export function hasResizableColumns(tableBody) {
|
109
|
-
const headerItems = tableBody.querySelectorAll('nile-table-header-item');
|
110
|
-
const cellItems = tableBody.querySelectorAll('nile-table-cell-item');
|
111
|
-
const hasResizableHeaders = Array.from(headerItems).some(item => isResizable(item));
|
112
|
-
const hasResizableCells = Array.from(cellItems).some(item => isResizable(item));
|
113
|
-
return hasResizableHeaders || hasResizableCells;
|
114
|
-
}
|
115
|
-
//# sourceMappingURL=resizable-helper.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"resizable-helper.js","sourceRoot":"","sources":["../../../src/internal/resizable-helper.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAmBH;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,CAAa,EAAE,OAAsB;IACrE,CAAC,CAAC,cAAc,EAAE,CAAC;IACnB,CAAC,CAAC,eAAe,EAAE,CAAC;IAEpB,MAAM,EAAE,QAAQ,GAAG,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAC/D,MAAM,OAAO,GAAG,CAAC,CAAC,MAAqB,CAAC;IAExC,yCAAyC;IACzC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAElC,MAAM,WAAW,GAAG,CAAC,CAAa,EAAE,EAAE;QACpC,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,CAAC,CAAC,eAAe,EAAE,CAAC;QAEpB,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,GAAG,KAAK,CAAC,CAAC;QAExD,qCAAqC;QACrC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,QAAQ,GAAG,IAAI,CAAC;QAEtC,wDAAwD;QACxD,sBAAsB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC5C,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,GAAG,EAAE;QACrB,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACrC,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACvD,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACrD,CAAC,CAAC;IAEF,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IACpD,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAEhD,0BAA0B;IAC1B,OAAO,GAAG,EAAE;QACV,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACvD,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACrD,CAAC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,OAAoB,EAAE,QAAgB;IACnE,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACnD,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QACpD,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,aAA0B,EAAE,QAAgB;IACjF,MAAM,SAAS,GAAG,aAAa,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC3D,IAAI,CAAC,SAAS;QAAE,OAAO;IAEvB,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,wBAAwB,CAAC;IAClF,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,sBAAsB,CAAC;IAC9E,MAAM,cAAc,GAAG,QAAQ,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,sBAAsB,CAAC;IAElF,MAAM,WAAW,GAAG,cAAc,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAG,SAAS,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IAE1D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACjB,MAAM,KAAK,GAAG,GAAG,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;QACnD,IAAI,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;YACvB,KAAK,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,QAAQ,GAAG,IAAI,CAAC;QACnD,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,OAAoB;IAC9C,OAAO,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;AAC3C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAoB,EAAE,WAAmB,EAAE;IAC7E,OAAO,CAAC,CAAa,EAAE,EAAE;QACvB,MAAM,OAAO,GAAkB;YAC7B,QAAQ;YACR,MAAM,EAAE,CAAC,CAAC,KAAK;YACf,UAAU,EAAE,OAAO,CAAC,WAAW;YAC/B,OAAO;SACR,CAAC;QAEF,iBAAiB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAChC,CAAC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,SAAsB;IACxD,MAAM,WAAW,GAAG,SAAS,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,CAAC;IACzE,MAAM,SAAS,GAAG,SAAS,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,CAAC;IAErE,MAAM,mBAAmB,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC9D,WAAW,CAAC,IAAI,CAAC,CAClB,CAAC;IACF,MAAM,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC1D,WAAW,CAAC,IAAI,CAAC,CAClB,CAAC;IAEF,OAAO,mBAAmB,IAAI,iBAAiB,CAAC;AAClD,CAAC","sourcesContent":["/**\n * Copyright Aquera Inc 2023\n *\n * This source code is licensed under the BSD-3-Clause license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * Resizable Helper Utility\n * Provides common functionality for resizable table columns\n */\n\nexport interface ResizeOptions {\n minWidth?: number;\n startX: number;\n startWidth: number;\n element: HTMLElement;\n}\n\nexport interface ColumnResizeData {\n columnIndex: number;\n newWidth: number;\n}\n\n/**\n * Handles the start of a resize operation\n * @param e Mouse event\n * @param options Resize configuration options\n * @returns Cleanup function to remove event listeners\n */\nexport function handleResizeStart(e: MouseEvent, options: ResizeOptions): () => void {\n e.preventDefault();\n e.stopPropagation();\n \n const { minWidth = 50, startX, startWidth, element } = options;\n const resizer = e.target as HTMLElement;\n \n // Add resizing class for visual feedback\n resizer.classList.add('resizing');\n\n const onMouseMove = (e: MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n \n const delta = e.pageX - startX;\n const newWidth = Math.max(minWidth, startWidth + delta);\n\n // Apply width to the current element\n element.style.width = newWidth + 'px';\n\n // Synchronize width across all cells in the same column\n synchronizeColumnWidth(element, newWidth);\n };\n\n const onMouseUp = () => {\n resizer.classList.remove('resizing');\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n };\n\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n\n // Return cleanup function\n return () => {\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n };\n}\n\n/**\n * Gets the column index of an element within its table row\n * @param element The table cell or header element\n * @param selector The CSS selector for the column elements\n * @returns Column index (0-based)\n */\nexport function getColumnIndex(element: HTMLElement, selector: string): number {\n const tableRow = element.closest('nile-table-row');\n if (tableRow) {\n const columns = tableRow.querySelectorAll(selector);\n return Array.from(columns).indexOf(element);\n }\n return 0;\n}\n\n/**\n * Synchronizes the width of all cells in the same column\n * @param sourceElement The element that was resized\n * @param newWidth The new width to apply\n */\nexport function synchronizeColumnWidth(sourceElement: HTMLElement, newWidth: number): void {\n const tableBody = sourceElement.closest('nile-table-body');\n if (!tableBody) return;\n\n const isHeader = sourceElement.tagName.toLowerCase() === 'nile-table-header-item';\n const selector = isHeader ? 'nile-table-header-item' : 'nile-table-cell-item';\n const targetSelector = isHeader ? 'nile-table-cell-item' : 'nile-table-cell-item';\n \n const columnIndex = getColumnIndex(sourceElement, selector);\n const rows = tableBody.querySelectorAll('nile-table-row');\n \n rows.forEach(row => {\n const cells = row.querySelectorAll(targetSelector);\n if (cells[columnIndex]) {\n cells[columnIndex].style.width = newWidth + 'px';\n }\n });\n}\n\n/**\n * Checks if an element has the resizable attribute\n * @param element The element to check\n * @returns True if the element is resizable\n */\nexport function isResizable(element: HTMLElement): boolean {\n return element.hasAttribute('resizable');\n}\n\n/**\n * Creates a resize handler function for use in component event listeners\n * @param element The element to make resizable\n * @param minWidth Minimum width constraint\n * @returns Event handler function\n */\nexport function createResizeHandler(element: HTMLElement, minWidth: number = 50): (e: MouseEvent) => void {\n return (e: MouseEvent) => {\n const options: ResizeOptions = {\n minWidth,\n startX: e.pageX,\n startWidth: element.offsetWidth,\n element\n };\n \n handleResizeStart(e, options);\n };\n}\n\n/**\n * Detects if any columns in a table are resizable\n * @param tableBody The table body element\n * @returns True if any columns have resizable attribute\n */\nexport function hasResizableColumns(tableBody: HTMLElement): boolean {\n const headerItems = tableBody.querySelectorAll('nile-table-header-item');\n const cellItems = tableBody.querySelectorAll('nile-table-cell-item');\n \n const hasResizableHeaders = Array.from(headerItems).some(item => \n isResizable(item)\n );\n const hasResizableCells = Array.from(cellItems).some(item => \n isResizable(item)\n );\n \n return hasResizableHeaders || hasResizableCells;\n} \n"]}
|
@@ -1,16 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* Copyright Aquera Inc 2023
|
3
|
-
*
|
4
|
-
* This source code is licensed under the BSD-3-Clause license found in the
|
5
|
-
* LICENSE file in the root directory of this source tree.
|
6
|
-
*/
|
7
|
-
/**
|
8
|
-
* Resizable Styles Utility
|
9
|
-
* Centralized styles for resizable table functionality
|
10
|
-
*/
|
11
|
-
export declare const resizableHostStyles: import("lit").CSSResult;
|
12
|
-
export declare const resizableHeaderStyles: import("lit").CSSResult;
|
13
|
-
export declare const resizerStyles: import("lit").CSSResult;
|
14
|
-
export declare const headerResizerStyles: import("lit").CSSResult;
|
15
|
-
export declare const resizableSlotStyles: import("lit").CSSResult;
|
16
|
-
export declare const tableLayoutStyles: import("lit").CSSResult;
|