@limetech/lime-elements 38.37.0 → 38.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +28 -0
- package/dist/cjs/{checkbox.template-92ae2e60.js → checkbox.template-db4cd6c5.js} +2 -2
- package/dist/cjs/{checkbox.template-92ae2e60.js.map → checkbox.template-db4cd6c5.js.map} +1 -1
- package/dist/cjs/{index-174a078a.js → index-1ed03b2b.js} +1 -14
- package/dist/cjs/index-1ed03b2b.js.map +1 -0
- package/dist/cjs/lime-elements.cjs.js +2 -2
- package/dist/cjs/limel-3d-hover-effect-glow.cjs.entry.js +1 -1
- package/dist/cjs/limel-action-bar-item_2.cjs.entry.js +2 -2
- package/dist/cjs/limel-action-bar_2.cjs.entry.js +1 -1
- package/dist/cjs/limel-ai-avatar.cjs.entry.js +1 -1
- package/dist/cjs/limel-badge.cjs.entry.js +1 -1
- package/dist/cjs/limel-banner.cjs.entry.js +1 -1
- package/dist/cjs/limel-breadcrumbs_7.cjs.entry.js +2 -2
- package/dist/cjs/limel-button-group.cjs.entry.js +1 -1
- package/dist/cjs/limel-button.cjs.entry.js +2 -2
- package/dist/cjs/limel-callout.cjs.entry.js +1 -1
- package/dist/cjs/limel-card.cjs.entry.js +1 -1
- package/dist/cjs/limel-chart.cjs.entry.js +1 -1
- package/dist/cjs/limel-checkbox.cjs.entry.js +2 -2
- package/dist/cjs/limel-chip_2.cjs.entry.js +2 -2
- package/dist/cjs/limel-circular-progress.cjs.entry.js +1 -1
- package/dist/cjs/limel-code-editor.cjs.entry.js +1 -1
- package/dist/cjs/limel-collapsible-section.cjs.entry.js +2 -2
- package/dist/cjs/limel-color-picker-palette.cjs.entry.js +1 -1
- package/dist/cjs/limel-color-picker.cjs.entry.js +1 -1
- package/dist/cjs/limel-config.cjs.entry.js +1 -1
- package/dist/cjs/limel-date-picker.cjs.entry.js +1 -1
- package/dist/cjs/limel-dialog.cjs.entry.js +1 -1
- package/dist/cjs/limel-dock-button.cjs.entry.js +1 -1
- package/dist/cjs/limel-dock.cjs.entry.js +1 -1
- package/dist/cjs/limel-drag-handle.cjs.entry.js +1 -1
- package/dist/cjs/limel-dynamic-label.cjs.entry.js +1 -1
- package/dist/cjs/limel-file-dropzone_2.cjs.entry.js +1 -1
- package/dist/cjs/limel-file-viewer.cjs.entry.js +1 -1
- package/dist/cjs/limel-file.cjs.entry.js +1 -1
- package/dist/cjs/limel-flatpickr-adapter.cjs.entry.js +1 -1
- package/dist/cjs/limel-flex-container.cjs.entry.js +1 -1
- package/dist/cjs/limel-form.cjs.entry.js +1 -1
- package/dist/cjs/limel-grid.cjs.entry.js +1 -1
- package/dist/cjs/limel-header.cjs.entry.js +1 -1
- package/dist/cjs/limel-help-content.cjs.entry.js +1 -1
- package/dist/cjs/limel-help.cjs.entry.js +1 -1
- package/dist/cjs/limel-helper-line_2.cjs.entry.js +1 -1
- package/dist/cjs/limel-icon-button.cjs.entry.js +3 -3
- package/dist/cjs/limel-icon-button.cjs.entry.js.map +1 -1
- package/dist/cjs/limel-icon.cjs.entry.js +1 -1
- package/dist/cjs/limel-info-tile.cjs.entry.js +1 -1
- package/dist/cjs/limel-linear-progress.cjs.entry.js +1 -1
- package/dist/cjs/limel-list-item.cjs.entry.js +2 -2
- package/dist/cjs/limel-markdown.cjs.entry.js +1 -1
- package/dist/cjs/limel-menu-item-meta.cjs.entry.js +1 -1
- package/dist/cjs/limel-picker.cjs.entry.js +1 -1
- package/dist/cjs/limel-popover_2.cjs.entry.js +1 -1
- package/dist/cjs/limel-portal_3.cjs.entry.js +1 -1
- package/dist/cjs/limel-profile-picture.cjs.entry.js +1 -1
- package/dist/cjs/limel-progress-flow-item.cjs.entry.js +1 -1
- package/dist/cjs/limel-progress-flow.cjs.entry.js +1 -1
- package/dist/cjs/limel-prosemirror-adapter.cjs.entry.js +1 -1
- package/dist/cjs/limel-radio-button-group.cjs.entry.js +1 -1
- package/dist/cjs/limel-radio-button.cjs.entry.js +1 -1
- package/dist/cjs/limel-select.cjs.entry.js +1 -1
- package/dist/cjs/limel-shortcut.cjs.entry.js +1 -1
- package/dist/cjs/limel-slider.cjs.entry.js +1 -1
- package/dist/cjs/limel-snackbar.cjs.entry.js +1 -1
- package/dist/cjs/limel-split-button.cjs.entry.js +1 -1
- package/dist/cjs/limel-switch.cjs.entry.js +2 -2
- package/dist/cjs/limel-tab-bar.cjs.entry.js +1 -1
- package/dist/cjs/limel-tab-panel.cjs.entry.js +1 -1
- package/dist/cjs/limel-table.cjs.entry.js +26536 -20436
- package/dist/cjs/limel-table.cjs.entry.js.map +1 -1
- package/dist/cjs/limel-text-editor.cjs.entry.js +1 -1
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/{make-enter-clickable-39af24ec.js → make-enter-clickable-3369d31a.js} +28 -15
- package/dist/cjs/make-enter-clickable-3369d31a.js.map +1 -0
- package/dist/collection/components/icon-button/icon-button.css +1 -1
- package/dist/collection/components/table/columns.js.map +1 -1
- package/dist/collection/components/table/table-selection.js +3 -0
- package/dist/collection/components/table/table-selection.js.map +1 -1
- package/dist/collection/components/table/table.css +406 -163
- package/dist/collection/components/table/table.js +94 -44
- package/dist/collection/components/table/table.js.map +1 -1
- package/dist/collection/util/make-enter-clickable.js +27 -13
- package/dist/collection/util/make-enter-clickable.js.map +1 -1
- package/dist/esm/{checkbox.template-9acc6347.js → checkbox.template-024bb3b3.js} +2 -2
- package/dist/esm/{checkbox.template-9acc6347.js.map → checkbox.template-024bb3b3.js.map} +1 -1
- package/dist/esm/{index-2714248e.js → index-0c4503aa.js} +2 -14
- package/dist/esm/index-0c4503aa.js.map +1 -0
- package/dist/esm/lime-elements.js +3 -3
- package/dist/esm/limel-3d-hover-effect-glow.entry.js +1 -1
- package/dist/esm/limel-action-bar-item_2.entry.js +2 -2
- package/dist/esm/limel-action-bar_2.entry.js +1 -1
- package/dist/esm/limel-ai-avatar.entry.js +1 -1
- package/dist/esm/limel-badge.entry.js +1 -1
- package/dist/esm/limel-banner.entry.js +1 -1
- package/dist/esm/limel-breadcrumbs_7.entry.js +2 -2
- package/dist/esm/limel-button-group.entry.js +1 -1
- package/dist/esm/limel-button.entry.js +2 -2
- package/dist/esm/limel-callout.entry.js +1 -1
- package/dist/esm/limel-card.entry.js +1 -1
- package/dist/esm/limel-chart.entry.js +1 -1
- package/dist/esm/limel-checkbox.entry.js +2 -2
- package/dist/esm/limel-chip_2.entry.js +2 -2
- package/dist/esm/limel-circular-progress.entry.js +1 -1
- package/dist/esm/limel-code-editor.entry.js +1 -1
- package/dist/esm/limel-collapsible-section.entry.js +2 -2
- package/dist/esm/limel-color-picker-palette.entry.js +1 -1
- package/dist/esm/limel-color-picker.entry.js +1 -1
- package/dist/esm/limel-config.entry.js +1 -1
- package/dist/esm/limel-date-picker.entry.js +1 -1
- package/dist/esm/limel-dialog.entry.js +1 -1
- package/dist/esm/limel-dock-button.entry.js +1 -1
- package/dist/esm/limel-dock.entry.js +1 -1
- package/dist/esm/limel-drag-handle.entry.js +1 -1
- package/dist/esm/limel-dynamic-label.entry.js +1 -1
- package/dist/esm/limel-file-dropzone_2.entry.js +1 -1
- package/dist/esm/limel-file-viewer.entry.js +1 -1
- package/dist/esm/limel-file.entry.js +1 -1
- package/dist/esm/limel-flatpickr-adapter.entry.js +1 -1
- package/dist/esm/limel-flex-container.entry.js +1 -1
- package/dist/esm/limel-form.entry.js +1 -1
- package/dist/esm/limel-grid.entry.js +1 -1
- package/dist/esm/limel-header.entry.js +1 -1
- package/dist/esm/limel-help-content.entry.js +1 -1
- package/dist/esm/limel-help.entry.js +1 -1
- package/dist/esm/limel-helper-line_2.entry.js +1 -1
- package/dist/esm/limel-icon-button.entry.js +3 -3
- package/dist/esm/limel-icon-button.entry.js.map +1 -1
- package/dist/esm/limel-icon.entry.js +1 -1
- package/dist/esm/limel-info-tile.entry.js +1 -1
- package/dist/esm/limel-linear-progress.entry.js +1 -1
- package/dist/esm/limel-list-item.entry.js +2 -2
- package/dist/esm/limel-markdown.entry.js +1 -1
- package/dist/esm/limel-menu-item-meta.entry.js +1 -1
- package/dist/esm/limel-picker.entry.js +1 -1
- package/dist/esm/limel-popover_2.entry.js +1 -1
- package/dist/esm/limel-portal_3.entry.js +1 -1
- package/dist/esm/limel-profile-picture.entry.js +1 -1
- package/dist/esm/limel-progress-flow-item.entry.js +1 -1
- package/dist/esm/limel-progress-flow.entry.js +1 -1
- package/dist/esm/limel-prosemirror-adapter.entry.js +1 -1
- package/dist/esm/limel-radio-button-group.entry.js +1 -1
- package/dist/esm/limel-radio-button.entry.js +1 -1
- package/dist/esm/limel-select.entry.js +1 -1
- package/dist/esm/limel-shortcut.entry.js +1 -1
- package/dist/esm/limel-slider.entry.js +1 -1
- package/dist/esm/limel-snackbar.entry.js +1 -1
- package/dist/esm/limel-split-button.entry.js +1 -1
- package/dist/esm/limel-switch.entry.js +2 -2
- package/dist/esm/limel-tab-bar.entry.js +1 -1
- package/dist/esm/limel-tab-panel.entry.js +1 -1
- package/dist/esm/limel-table.entry.js +26536 -20436
- package/dist/esm/limel-table.entry.js.map +1 -1
- package/dist/esm/limel-text-editor.entry.js +1 -1
- package/dist/esm/loader.js +3 -3
- package/dist/esm/{make-enter-clickable-e0d24198.js → make-enter-clickable-1ab65ddc.js} +28 -15
- package/dist/esm/make-enter-clickable-1ab65ddc.js.map +1 -0
- package/dist/lime-elements/lime-elements.esm.js +1 -1
- package/dist/lime-elements/lime-elements.esm.js.map +1 -1
- package/dist/lime-elements/{p-8ded6465.js → p-03fd2774.js} +2 -2
- package/dist/lime-elements/{p-8539647d.entry.js → p-054daef5.entry.js} +2 -2
- package/dist/lime-elements/{p-4f85b3c4.entry.js → p-07c4def0.entry.js} +2 -2
- package/dist/lime-elements/{p-5b1cb891.entry.js → p-08f75835.entry.js} +2 -2
- package/dist/lime-elements/{p-eac0220e.entry.js → p-147b0a68.entry.js} +2 -2
- package/dist/lime-elements/{p-407a0e61.entry.js → p-19f525ba.entry.js} +2 -2
- package/dist/lime-elements/{p-ac55217a.entry.js → p-1a351a7f.entry.js} +2 -2
- package/dist/lime-elements/{p-bb0095c2.entry.js → p-1af74f5c.entry.js} +2 -2
- package/dist/lime-elements/{p-2116b3ce.entry.js → p-2356b938.entry.js} +2 -2
- package/dist/lime-elements/{p-8c667a56.entry.js → p-25158b9e.entry.js} +2 -2
- package/dist/lime-elements/{p-8e7d31b3.entry.js → p-263bac63.entry.js} +2 -2
- package/dist/lime-elements/{p-18256ad9.entry.js → p-280cbd66.entry.js} +2 -2
- package/dist/lime-elements/{p-3a36b862.entry.js → p-291cd743.entry.js} +2 -2
- package/dist/lime-elements/{p-aa159bd8.entry.js → p-2a616374.entry.js} +2 -2
- package/dist/lime-elements/{p-5f113a63.entry.js → p-312d104a.entry.js} +2 -2
- package/dist/lime-elements/{p-52fb3988.entry.js → p-317f00ea.entry.js} +2 -2
- package/dist/lime-elements/{p-c7ffe359.entry.js → p-32611964.entry.js} +2 -2
- package/dist/lime-elements/{p-416f25fc.entry.js → p-333ba7ca.entry.js} +2 -2
- package/dist/lime-elements/{p-b80a7353.entry.js → p-354c2d16.entry.js} +2 -2
- package/dist/lime-elements/{p-d497cac7.entry.js → p-36ae8adf.entry.js} +2 -2
- package/dist/lime-elements/{p-4ed15eb7.entry.js → p-3fcd15bd.entry.js} +2 -2
- package/dist/lime-elements/{p-2ff2186f.entry.js → p-4d225689.entry.js} +2 -2
- package/dist/lime-elements/p-4e77c9a5.js +2 -0
- package/dist/lime-elements/p-4e77c9a5.js.map +1 -0
- package/dist/lime-elements/{p-668e583c.entry.js → p-56c9bb65.entry.js} +2 -2
- package/dist/lime-elements/{p-745417ee.entry.js → p-5ca68424.entry.js} +2 -2
- package/dist/lime-elements/{p-b928421f.entry.js → p-5ef0a1fe.entry.js} +2 -2
- package/dist/lime-elements/p-5ef0a1fe.entry.js.map +1 -0
- package/dist/lime-elements/{p-4a9a6e16.entry.js → p-60a43c1d.entry.js} +2 -2
- package/dist/lime-elements/{p-ac334aa7.entry.js → p-67b697b4.entry.js} +2 -2
- package/dist/lime-elements/{p-b45cfa71.entry.js → p-6c5eea77.entry.js} +2 -2
- package/dist/lime-elements/{p-5ac43dbd.entry.js → p-6ce5a93f.entry.js} +2 -2
- package/dist/lime-elements/{p-d4a220eb.entry.js → p-6ddb0265.entry.js} +2 -2
- package/dist/lime-elements/{p-0115bb1e.entry.js → p-6ef87216.entry.js} +2 -2
- package/dist/lime-elements/{p-51d475d8.entry.js → p-6f3a34f1.entry.js} +2 -2
- package/dist/lime-elements/{p-54fc2316.entry.js → p-718d5311.entry.js} +2 -2
- package/dist/lime-elements/{p-e839ce5b.entry.js → p-72a79ebe.entry.js} +2 -2
- package/dist/lime-elements/{p-0d247b83.entry.js → p-7b681f7c.entry.js} +2 -2
- package/dist/lime-elements/{p-f8b6d7e1.entry.js → p-7d107fba.entry.js} +2 -2
- package/dist/lime-elements/{p-47da9c59.entry.js → p-81de7836.entry.js} +2 -2
- package/dist/lime-elements/{p-32572c31.entry.js → p-8535dc16.entry.js} +2 -2
- package/dist/lime-elements/{p-706c2e84.entry.js → p-9697010e.entry.js} +2 -2
- package/dist/lime-elements/{p-483ba5da.entry.js → p-9a64025b.entry.js} +2 -2
- package/dist/lime-elements/{p-f1ec1eeb.entry.js → p-9c9876f9.entry.js} +2 -2
- package/dist/lime-elements/{p-9b809f4d.entry.js → p-9e225545.entry.js} +2 -2
- package/dist/lime-elements/{p-4ddb8b05.entry.js → p-a92369cb.entry.js} +2 -2
- package/dist/lime-elements/{p-1e4ca584.entry.js → p-ae25ca92.entry.js} +2 -2
- package/dist/lime-elements/{p-580a29c5.entry.js → p-b076958e.entry.js} +2 -2
- package/dist/lime-elements/{p-20950d83.entry.js → p-b3f1f121.entry.js} +2 -2
- package/dist/lime-elements/{p-07988749.entry.js → p-b89cb5a3.entry.js} +2 -2
- package/dist/lime-elements/{p-6ef94d19.entry.js → p-b906e1c5.entry.js} +2 -2
- package/dist/lime-elements/p-bdfa539c.js +3 -0
- package/dist/lime-elements/p-bdfa539c.js.map +1 -0
- package/dist/lime-elements/{p-b43e8cb2.entry.js → p-c445aed7.entry.js} +2 -2
- package/dist/lime-elements/{p-489d7f63.entry.js → p-c64e86fd.entry.js} +2 -2
- package/dist/lime-elements/{p-cbbe129b.entry.js → p-cb81be35.entry.js} +2 -2
- package/dist/lime-elements/{p-9af45dec.entry.js → p-cd0010ba.entry.js} +2 -2
- package/dist/lime-elements/{p-250acfe4.entry.js → p-ce0e6d28.entry.js} +2 -2
- package/dist/lime-elements/{p-7528a002.entry.js → p-cecdb592.entry.js} +2 -2
- package/dist/lime-elements/{p-2fdb51de.entry.js → p-dd0f3190.entry.js} +2 -2
- package/dist/lime-elements/{p-10d1256b.entry.js → p-e1df39fc.entry.js} +2 -2
- package/dist/lime-elements/{p-c823d32b.entry.js → p-e22edc40.entry.js} +2 -2
- package/dist/lime-elements/{p-3a61deb1.entry.js → p-e4fd6591.entry.js} +2 -2
- package/dist/lime-elements/{p-e739d600.entry.js → p-e8370ee5.entry.js} +2 -2
- package/dist/lime-elements/{p-874f06f0.entry.js → p-ead08551.entry.js} +5 -5
- package/dist/lime-elements/{p-ae507565.entry.js → p-ec03874d.entry.js} +2 -2
- package/dist/lime-elements/{p-b5a96409.entry.js → p-f1c9089e.entry.js} +2 -2
- package/dist/lime-elements/p-f6d8811f.entry.js +2 -0
- package/dist/lime-elements/p-f6d8811f.entry.js.map +1 -0
- package/dist/lime-elements/{p-c2f922ba.entry.js → p-f8cbb607.entry.js} +2 -2
- package/dist/types/components/table/columns.d.ts +7 -11
- package/dist/types/components/table/table-selection.d.ts +4 -4
- package/dist/types/components/table/table.d.ts +15 -5
- package/dist/types/components.d.ts +12 -0
- package/dist/types/util/make-enter-clickable.d.ts +19 -3
- package/package.json +3 -3
- package/dist/cjs/index-174a078a.js.map +0 -1
- package/dist/cjs/make-enter-clickable-39af24ec.js.map +0 -1
- package/dist/esm/index-2714248e.js.map +0 -1
- package/dist/esm/make-enter-clickable-e0d24198.js.map +0 -1
- package/dist/lime-elements/p-288f0842.js +0 -3
- package/dist/lime-elements/p-288f0842.js.map +0 -1
- package/dist/lime-elements/p-533a3cfb.entry.js +0 -2
- package/dist/lime-elements/p-533a3cfb.entry.js.map +0 -1
- package/dist/lime-elements/p-b928421f.entry.js.map +0 -1
- package/dist/lime-elements/p-e127eaaa.js +0 -2
- package/dist/lime-elements/p-e127eaaa.js.map +0 -1
- /package/dist/lime-elements/{p-8ded6465.js.map → p-03fd2774.js.map} +0 -0
- /package/dist/lime-elements/{p-8539647d.entry.js.map → p-054daef5.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-4f85b3c4.entry.js.map → p-07c4def0.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-5b1cb891.entry.js.map → p-08f75835.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-eac0220e.entry.js.map → p-147b0a68.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-407a0e61.entry.js.map → p-19f525ba.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-ac55217a.entry.js.map → p-1a351a7f.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-bb0095c2.entry.js.map → p-1af74f5c.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-2116b3ce.entry.js.map → p-2356b938.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-8c667a56.entry.js.map → p-25158b9e.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-8e7d31b3.entry.js.map → p-263bac63.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-18256ad9.entry.js.map → p-280cbd66.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-3a36b862.entry.js.map → p-291cd743.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-aa159bd8.entry.js.map → p-2a616374.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-5f113a63.entry.js.map → p-312d104a.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-52fb3988.entry.js.map → p-317f00ea.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-c7ffe359.entry.js.map → p-32611964.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-416f25fc.entry.js.map → p-333ba7ca.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-b80a7353.entry.js.map → p-354c2d16.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-d497cac7.entry.js.map → p-36ae8adf.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-4ed15eb7.entry.js.map → p-3fcd15bd.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-2ff2186f.entry.js.map → p-4d225689.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-668e583c.entry.js.map → p-56c9bb65.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-745417ee.entry.js.map → p-5ca68424.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-4a9a6e16.entry.js.map → p-60a43c1d.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-ac334aa7.entry.js.map → p-67b697b4.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-b45cfa71.entry.js.map → p-6c5eea77.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-5ac43dbd.entry.js.map → p-6ce5a93f.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-d4a220eb.entry.js.map → p-6ddb0265.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-0115bb1e.entry.js.map → p-6ef87216.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-51d475d8.entry.js.map → p-6f3a34f1.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-54fc2316.entry.js.map → p-718d5311.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-e839ce5b.entry.js.map → p-72a79ebe.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-0d247b83.entry.js.map → p-7b681f7c.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-f8b6d7e1.entry.js.map → p-7d107fba.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-47da9c59.entry.js.map → p-81de7836.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-32572c31.entry.js.map → p-8535dc16.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-706c2e84.entry.js.map → p-9697010e.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-483ba5da.entry.js.map → p-9a64025b.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-f1ec1eeb.entry.js.map → p-9c9876f9.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-9b809f4d.entry.js.map → p-9e225545.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-4ddb8b05.entry.js.map → p-a92369cb.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-1e4ca584.entry.js.map → p-ae25ca92.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-580a29c5.entry.js.map → p-b076958e.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-20950d83.entry.js.map → p-b3f1f121.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-07988749.entry.js.map → p-b89cb5a3.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-6ef94d19.entry.js.map → p-b906e1c5.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-b43e8cb2.entry.js.map → p-c445aed7.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-489d7f63.entry.js.map → p-c64e86fd.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-cbbe129b.entry.js.map → p-cb81be35.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-9af45dec.entry.js.map → p-cd0010ba.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-250acfe4.entry.js.map → p-ce0e6d28.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-7528a002.entry.js.map → p-cecdb592.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-2fdb51de.entry.js.map → p-dd0f3190.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-10d1256b.entry.js.map → p-e1df39fc.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-c823d32b.entry.js.map → p-e22edc40.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-3a61deb1.entry.js.map → p-e4fd6591.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-e739d600.entry.js.map → p-e8370ee5.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-874f06f0.entry.js.map → p-ead08551.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-ae507565.entry.js.map → p-ec03874d.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-b5a96409.entry.js.map → p-f1c9089e.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-c2f922ba.entry.js.map → p-f8cbb607.entry.js.map} +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { h, Host, } from '@stencil/core';
|
|
2
|
-
import
|
|
2
|
+
import { TabulatorFull, } from 'tabulator-tables';
|
|
3
3
|
import { ColumnDefinitionFactory, createColumnSorter } from './columns';
|
|
4
4
|
import { isEqual, has } from 'lodash-es';
|
|
5
5
|
import { ElementPool } from './element-pool';
|
|
@@ -14,6 +14,7 @@ const FIRST_PAGE = 1;
|
|
|
14
14
|
* @exampleComponent limel-example-table-header-menu
|
|
15
15
|
* @exampleComponent limel-example-table-movable-columns
|
|
16
16
|
* @exampleComponent limel-example-table-sorting-disabled
|
|
17
|
+
* @exampleComponent limel-example-table-pagination
|
|
17
18
|
* @exampleComponent limel-example-table-local
|
|
18
19
|
* @exampleComponent limel-example-table-remote
|
|
19
20
|
* @exampleComponent limel-example-table-activate-row
|
|
@@ -27,6 +28,8 @@ const FIRST_PAGE = 1;
|
|
|
27
28
|
*/
|
|
28
29
|
export class Table {
|
|
29
30
|
constructor() {
|
|
31
|
+
this.initialized = false;
|
|
32
|
+
this.destroyed = false;
|
|
30
33
|
this.shouldSort = false;
|
|
31
34
|
this.getActiveRows = () => {
|
|
32
35
|
if (!this.tabulator) {
|
|
@@ -55,10 +58,12 @@ export class Table {
|
|
|
55
58
|
}
|
|
56
59
|
return {
|
|
57
60
|
movableColumns: true,
|
|
58
|
-
columnMoved: this.handleMoveColumn,
|
|
59
61
|
};
|
|
60
62
|
};
|
|
61
63
|
this.handleMoveColumn = (_, components) => {
|
|
64
|
+
if (!this.movableColumns) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
62
67
|
const columns = components.map(this.findColumn).filter(Boolean);
|
|
63
68
|
this.changeColumns.emit(columns);
|
|
64
69
|
};
|
|
@@ -88,6 +93,7 @@ export class Table {
|
|
|
88
93
|
this.selectable = undefined;
|
|
89
94
|
this.selection = undefined;
|
|
90
95
|
this.language = 'en';
|
|
96
|
+
this.paginationLocation = 'bottom';
|
|
91
97
|
this.handleDataSorting = this.handleDataSorting.bind(this);
|
|
92
98
|
this.handlePageLoaded = this.handlePageLoaded.bind(this);
|
|
93
99
|
this.handleRenderComplete = this.handleRenderComplete.bind(this);
|
|
@@ -104,13 +110,23 @@ export class Table {
|
|
|
104
110
|
this.columnFactory = new ColumnDefinitionFactory(this.pool);
|
|
105
111
|
}
|
|
106
112
|
componentWillLoad() {
|
|
107
|
-
this.firstRequest = this.mode === 'remote';
|
|
108
113
|
this.initTableSelection();
|
|
109
114
|
}
|
|
110
115
|
componentDidLoad() {
|
|
116
|
+
this.destroyed = false;
|
|
111
117
|
this.init();
|
|
112
118
|
}
|
|
113
119
|
disconnectedCallback() {
|
|
120
|
+
this.destroyed = true;
|
|
121
|
+
this.initialized = false;
|
|
122
|
+
if (this.resizeObserver) {
|
|
123
|
+
this.resizeObserver.disconnect();
|
|
124
|
+
this.resizeObserver = null;
|
|
125
|
+
}
|
|
126
|
+
if (this.tabulator) {
|
|
127
|
+
this.tabulator.destroy();
|
|
128
|
+
this.tabulator = null;
|
|
129
|
+
}
|
|
114
130
|
this.pool.clear();
|
|
115
131
|
}
|
|
116
132
|
totalRowsChanged() {
|
|
@@ -140,7 +156,7 @@ export class Table {
|
|
|
140
156
|
const shouldReplace = this.shouldReplaceData(newIds, oldIds);
|
|
141
157
|
const hasRowUpdates = !areRowsEqual(newData, oldData);
|
|
142
158
|
setTimeout(() => {
|
|
143
|
-
if (!this.tabulator) {
|
|
159
|
+
if (!this.tabulator || !this.initialized) {
|
|
144
160
|
return;
|
|
145
161
|
}
|
|
146
162
|
if (shouldReplace) {
|
|
@@ -154,7 +170,9 @@ export class Table {
|
|
|
154
170
|
this.setSelection();
|
|
155
171
|
return;
|
|
156
172
|
}
|
|
157
|
-
|
|
173
|
+
if (newData.length > 0) {
|
|
174
|
+
this.tabulator.updateOrAddData(newData);
|
|
175
|
+
}
|
|
158
176
|
});
|
|
159
177
|
}
|
|
160
178
|
updateColumns(newColumns, oldColumns) {
|
|
@@ -245,6 +263,7 @@ export class Table {
|
|
|
245
263
|
if (this.tabulator) {
|
|
246
264
|
this.pool.releaseAll();
|
|
247
265
|
this.tabulator.destroy();
|
|
266
|
+
this.initialized = false;
|
|
248
267
|
}
|
|
249
268
|
const table = this.host.shadowRoot.querySelector('#tabulator-table');
|
|
250
269
|
this.initTabulatorComponent(table);
|
|
@@ -263,19 +282,46 @@ export class Table {
|
|
|
263
282
|
// If that's the case lets just create the table no
|
|
264
283
|
// matter if its rendered or not.
|
|
265
284
|
if (!('ResizeObserver' in window)) {
|
|
266
|
-
this.tabulator =
|
|
285
|
+
this.tabulator = this.createTabulator(table);
|
|
267
286
|
this.setSelection();
|
|
268
287
|
return;
|
|
269
288
|
}
|
|
270
|
-
|
|
289
|
+
this.resizeObserver = new ResizeObserver(() => {
|
|
271
290
|
requestAnimationFrame(() => {
|
|
272
|
-
|
|
291
|
+
var _a, _b;
|
|
292
|
+
if (this.destroyed) {
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
this.tabulator = this.createTabulator(table);
|
|
273
296
|
this.setSelection();
|
|
274
|
-
|
|
275
|
-
|
|
297
|
+
(_a = this.resizeObserver) === null || _a === void 0 ? void 0 : _a.unobserve(table);
|
|
298
|
+
(_b = this.resizeObserver) === null || _b === void 0 ? void 0 : _b.disconnect();
|
|
276
299
|
});
|
|
277
300
|
});
|
|
278
|
-
|
|
301
|
+
this.resizeObserver.observe(table);
|
|
302
|
+
}
|
|
303
|
+
createTabulator(table) {
|
|
304
|
+
const tabulator = new TabulatorFull(table, this.getOptions());
|
|
305
|
+
tabulator.on('rowClick', this.onClickRow);
|
|
306
|
+
tabulator.on('dataSorting', this.handleDataSorting);
|
|
307
|
+
tabulator.on('pageLoaded', this.handlePageLoaded);
|
|
308
|
+
tabulator.on('columnMoved', this.handleMoveColumn);
|
|
309
|
+
tabulator.on('renderComplete', this.handleRenderComplete);
|
|
310
|
+
tabulator.on('tableBuilt', () => {
|
|
311
|
+
var _a;
|
|
312
|
+
if (this.destroyed) {
|
|
313
|
+
tabulator.destroy();
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
316
|
+
this.initialized = true;
|
|
317
|
+
if (this.isRemoteMode() && !((_a = this.data) === null || _a === void 0 ? void 0 : _a.length)) {
|
|
318
|
+
this.tabulator.setData();
|
|
319
|
+
}
|
|
320
|
+
else if (!this.isRemoteMode()) {
|
|
321
|
+
this.updateData(this.data, []);
|
|
322
|
+
}
|
|
323
|
+
});
|
|
324
|
+
return tabulator;
|
|
279
325
|
}
|
|
280
326
|
initTableSelection() {
|
|
281
327
|
if (this.selectable) {
|
|
@@ -297,7 +343,7 @@ export class Table {
|
|
|
297
343
|
const ajaxOptions = this.getAjaxOptions();
|
|
298
344
|
const paginationOptions = this.getPaginationOptions();
|
|
299
345
|
const columnOptions = this.getColumnOptions();
|
|
300
|
-
return Object.assign(Object.assign(Object.assign(Object.assign({ data: this.data, layout: mapLayout(this.layout), columns: this.getColumnDefinitions()
|
|
346
|
+
return Object.assign(Object.assign(Object.assign(Object.assign({ data: this.data, layout: mapLayout(this.layout), columns: this.getColumnDefinitions() }, ajaxOptions), paginationOptions), { rowFormatter: this.formatRow, initialSort: this.getInitialSorting(), nestedFieldSeparator: false }), columnOptions);
|
|
301
347
|
}
|
|
302
348
|
getInitialSorting() {
|
|
303
349
|
if (this.currentSorting && this.currentSorting.length > 0) {
|
|
@@ -363,46 +409,27 @@ export class Table {
|
|
|
363
409
|
ajaxRequesting: this.handleAjaxRequesting,
|
|
364
410
|
};
|
|
365
411
|
}
|
|
366
|
-
/*
|
|
367
|
-
* The ajaxRequesting callback is triggered when ever an ajax request is made.
|
|
368
|
-
*
|
|
369
|
-
* Tabulator is requesting data with an AJAX request even though it has been
|
|
370
|
-
* given data when it was created.
|
|
371
|
-
*
|
|
372
|
-
* It seems unnecessary for us to emit the `load` event as well when this
|
|
373
|
-
* happens, since we can just initialize the table with the data that has been
|
|
374
|
-
* given to us. Therefore, we abort the request if:
|
|
375
|
-
*
|
|
376
|
-
* * its the first time this method is called and,
|
|
377
|
-
* * data has been sent in to the component as a prop
|
|
378
|
-
*
|
|
379
|
-
*/
|
|
380
412
|
handleAjaxRequesting() {
|
|
381
|
-
|
|
382
|
-
const abortRequest = this.firstRequest && !!((_a = this.data) === null || _a === void 0 ? void 0 : _a.length);
|
|
383
|
-
this.firstRequest = false;
|
|
384
|
-
if (abortRequest) {
|
|
385
|
-
setTimeout(() => {
|
|
386
|
-
this.updateMaxPage();
|
|
387
|
-
this.tabulator.replaceData(this.data);
|
|
388
|
-
});
|
|
389
|
-
return false;
|
|
390
|
-
}
|
|
391
|
-
return true;
|
|
413
|
+
return !this.destroyed;
|
|
392
414
|
}
|
|
393
415
|
getPaginationOptions() {
|
|
394
416
|
if (!this.pageSize) {
|
|
395
417
|
return {};
|
|
396
418
|
}
|
|
397
419
|
return {
|
|
398
|
-
pagination:
|
|
420
|
+
pagination: true,
|
|
421
|
+
paginationMode: this.isRemoteMode() ? 'remote' : 'local',
|
|
399
422
|
paginationSize: this.pageSize,
|
|
400
423
|
paginationInitialPage: this.page,
|
|
401
424
|
};
|
|
402
425
|
}
|
|
403
426
|
requestData(_, __, params) {
|
|
404
|
-
|
|
405
|
-
|
|
427
|
+
var _a, _b;
|
|
428
|
+
if (this.destroyed) {
|
|
429
|
+
return Promise.reject();
|
|
430
|
+
}
|
|
431
|
+
const sorters = (_a = params.sorters) !== null && _a !== void 0 ? _a : [];
|
|
432
|
+
const currentPage = (_b = params.page) !== null && _b !== void 0 ? _b : FIRST_PAGE;
|
|
406
433
|
if (this.page !== currentPage) {
|
|
407
434
|
this.changePage.emit(currentPage);
|
|
408
435
|
}
|
|
@@ -451,11 +478,14 @@ export class Table {
|
|
|
451
478
|
this.tabulator.setSort(this.getColumnSorter(this.sorting));
|
|
452
479
|
}
|
|
453
480
|
}
|
|
454
|
-
onClickRow(
|
|
481
|
+
onClickRow(event, row) {
|
|
455
482
|
if (row.getPosition === undefined) {
|
|
456
483
|
// Not a data row, probably a CalcComponent
|
|
457
484
|
return;
|
|
458
485
|
}
|
|
486
|
+
if (event.defaultPrevented) {
|
|
487
|
+
return;
|
|
488
|
+
}
|
|
459
489
|
if (this.isActiveRow(row)) {
|
|
460
490
|
this.activeRow = null;
|
|
461
491
|
}
|
|
@@ -506,15 +536,17 @@ export class Table {
|
|
|
506
536
|
return columns.some((column) => has(column, 'aggregator'));
|
|
507
537
|
}
|
|
508
538
|
render() {
|
|
509
|
-
var _a;
|
|
539
|
+
var _a, _b;
|
|
540
|
+
const totalRows = (_a = this.totalRows) !== null && _a !== void 0 ? _a : this.data.length;
|
|
510
541
|
return (h(Host, { class: {
|
|
511
542
|
'has-low-density': this.layout === 'lowDensity',
|
|
543
|
+
'has-pagination-on-top': this.paginationLocation === 'top',
|
|
512
544
|
} }, h("div", { id: "tabulator-container", class: {
|
|
513
|
-
'has-pagination':
|
|
545
|
+
'has-pagination': totalRows > this.pageSize,
|
|
514
546
|
'has-aggregation': this.hasAggregation(this.columns),
|
|
515
547
|
'has-movable-columns': this.movableColumns,
|
|
516
548
|
'has-rowselector': this.selectable,
|
|
517
|
-
'has-selection': (
|
|
549
|
+
'has-selection': (_b = this.tableSelection) === null || _b === void 0 ? void 0 : _b.hasSelection,
|
|
518
550
|
} }, h("div", { id: "tabulator-loader", style: { display: this.loading ? 'flex' : 'none' } }, h("limel-spinner", { size: "large" })), this.renderEmptyMessage(), this.renderSelectAll(), h("div", { id: "tabulator-table" }))));
|
|
519
551
|
}
|
|
520
552
|
renderSelectAll() {
|
|
@@ -858,6 +890,24 @@ export class Table {
|
|
|
858
890
|
"attribute": "language",
|
|
859
891
|
"reflect": true,
|
|
860
892
|
"defaultValue": "'en'"
|
|
893
|
+
},
|
|
894
|
+
"paginationLocation": {
|
|
895
|
+
"type": "string",
|
|
896
|
+
"mutable": false,
|
|
897
|
+
"complexType": {
|
|
898
|
+
"original": "'top' | 'bottom'",
|
|
899
|
+
"resolved": "\"bottom\" | \"top\"",
|
|
900
|
+
"references": {}
|
|
901
|
+
},
|
|
902
|
+
"required": false,
|
|
903
|
+
"optional": false,
|
|
904
|
+
"docs": {
|
|
905
|
+
"tags": [],
|
|
906
|
+
"text": "Location of the pagination controls.\n- `top`: Display pagination controls at the top of the table\n- `bottom`: Display pagination controls at the bottom of the table (default)"
|
|
907
|
+
},
|
|
908
|
+
"attribute": "pagination-location",
|
|
909
|
+
"reflect": true,
|
|
910
|
+
"defaultValue": "'bottom'"
|
|
861
911
|
}
|
|
862
912
|
};
|
|
863
913
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table.js","sourceRoot":"","sources":["../../../src/components/table/table.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n h,\n Prop,\n Element,\n Watch,\n EventEmitter,\n Event,\n Host,\n} from '@stencil/core';\nimport TabulatorTable from 'tabulator-tables';\nimport {\n Column,\n TableParams,\n ColumnSorter,\n ColumnAggregate,\n RowData,\n} from './table.types';\nimport { ColumnDefinitionFactory, createColumnSorter } from './columns';\nimport { isEqual, has } from 'lodash-es';\nimport { ElementPool } from './element-pool';\nimport { TableSelection } from './table-selection';\nimport { mapLayout, Layout } from './layout';\nimport { areRowsEqual } from './utils';\nimport { Languages } from '../date-picker/date.types';\nimport translate from '../../global/translations';\n\nconst FIRST_PAGE = 1;\n\n/**\n * @exampleComponent limel-example-table\n * @exampleComponent limel-example-table-custom-components\n * @exampleComponent limel-example-table-header-menu\n * @exampleComponent limel-example-table-movable-columns\n * @exampleComponent limel-example-table-sorting-disabled\n * @exampleComponent limel-example-table-local\n * @exampleComponent limel-example-table-remote\n * @exampleComponent limel-example-table-activate-row\n * @exampleComponent limel-example-table-selectable-rows\n * @exampleComponent limel-example-table-default-sorted\n * @exampleComponent limel-example-table-layout-default\n * @exampleComponent limel-example-table-layout-stretch-last-column\n * @exampleComponent limel-example-table-layout-stretch-columns\n * @exampleComponent limel-example-table-layout-low-density\n * @exampleComponent limel-example-table-interactive-rows\n */\n@Component({\n tag: 'limel-table',\n styleUrl: 'table.scss',\n shadow: true,\n})\nexport class Table {\n /**\n * Data to be displayed in the table. Provide a stable `id` on each row to keep\n * scroll position, focus, and selections intact across updates.\n */\n @Prop()\n public data: object[] = [];\n\n /**\n * Columns used to display the data\n */\n @Prop()\n public columns: Column[] = [];\n\n /**\n * Set to either `local` or `remote` to change how the table handles the\n * loaded data. When in `local` mode, all sorting and pagination will be\n * done locally with the data given. When in `remote` mode, the consumer\n * is responsible to give the table new data when a `load` event occurs\n */\n @Prop()\n public mode: 'local' | 'remote' = 'local';\n\n /**\n * Defines the layout of the table, based on how width of the columns are calculated.\n *\n * - `default`: makes columns as wide as their contents.\n * - `stretchLastColumn`: makes columns as wide as their contents, stretch the last column to fill up the remaining table width.\n * - `stretchColumns`: stretches all columns to fill the available width when possible.\n * - `lowDensity`: makes columns as wide as their contents, and creates a low density and airy layout.\n */\n @Prop()\n public layout: Layout;\n\n /**\n * Number of rows per page\n */\n @Prop()\n public pageSize: number;\n\n /**\n * The number of total rows available for the data\n */\n @Prop()\n public totalRows: number;\n\n /**\n * The initial sorted columns\n */\n @Prop()\n public sorting: ColumnSorter[] = [];\n\n /**\n * Active row in the table\n */\n @Prop({ mutable: true })\n public activeRow: RowData;\n\n /**\n * Set to `true` to enable reordering of the columns by dragging them\n */\n @Prop()\n public movableColumns: boolean;\n\n /**\n * Set to `false` to disable column sorting through header interactions.\n * Programmatic sorting through the `sorting` prop and `sort` event remains available.\n */\n @Prop()\n public sortableColumns: boolean = true;\n\n /**\n * Set to `true` to trigger loading animation\n */\n @Prop()\n public loading: boolean = false;\n\n /**\n * The page to show\n */\n @Prop()\n public page: number = FIRST_PAGE;\n\n /**\n * Emitted when `mode` is `local` the data is sorted\n */\n @Event()\n public sort: EventEmitter<ColumnSorter[]>;\n\n /**\n * Emitted when a new page has been set\n */\n @Event()\n public changePage: EventEmitter<number>;\n\n /**\n * A message to display when the table has no data\n */\n @Prop()\n public emptyMessage: string;\n\n /**\n * Column aggregates to be displayed in the table\n */\n @Prop()\n public aggregates: ColumnAggregate[];\n\n /**\n * Enables row selection\n */\n @Prop()\n public selectable: boolean;\n\n /**\n * Selected data. Requires `selectable` to be true.\n */\n @Prop()\n public selection: object[];\n\n /**\n * Defines the language for translations.\n */\n @Prop({ reflect: true })\n public language: Languages = 'en';\n\n /**\n * Emitted when `mode` is `remote` and the table is loading new data. The\n * consumer is responsible for giving the table new data\n */\n @Event()\n public load: EventEmitter<TableParams>;\n\n /**\n * Emitted when a row is activated\n */\n @Event()\n public activate: EventEmitter<object>;\n\n /**\n * Emitted when the columns have been changed\n */\n @Event()\n public changeColumns: EventEmitter<Column[]>;\n\n /**\n * Emitted when the row selection has been changed\n */\n @Event()\n public select: EventEmitter<object[]>;\n\n /**\n * Emitted when the select all rows state is toggled\n */\n @Event()\n public selectAll: EventEmitter<boolean>;\n\n @Element()\n private host: HTMLLimelTableElement;\n\n private currentLoad: { page: number; sorters: ColumnSorter[] };\n\n private tabulator: Tabulator;\n\n private pool: ElementPool;\n private columnFactory: ColumnDefinitionFactory;\n private firstRequest: boolean;\n private currentSorting: ColumnSorter[];\n private tableSelection: TableSelection;\n private shouldSort = false;\n\n constructor() {\n this.handleDataSorting = this.handleDataSorting.bind(this);\n this.handlePageLoaded = this.handlePageLoaded.bind(this);\n this.handleRenderComplete = this.handleRenderComplete.bind(this);\n this.handleAjaxRequesting = this.handleAjaxRequesting.bind(this);\n this.requestData = this.requestData.bind(this);\n this.onClickRow = this.onClickRow.bind(this);\n this.formatRow = this.formatRow.bind(this);\n this.formatRows = this.formatRows.bind(this);\n this.updateMaxPage = this.updateMaxPage.bind(this);\n this.initTabulatorComponent = this.initTabulatorComponent.bind(this);\n this.setSelection = this.setSelection.bind(this);\n this.addColumnAggregator = this.addColumnAggregator.bind(this);\n this.pool = new ElementPool(document);\n this.columnFactory = new ColumnDefinitionFactory(this.pool);\n }\n\n public componentWillLoad() {\n this.firstRequest = this.mode === 'remote';\n this.initTableSelection();\n }\n\n public componentDidLoad() {\n this.init();\n }\n\n public disconnectedCallback() {\n this.pool.clear();\n }\n\n @Watch('totalRows')\n protected totalRowsChanged() {\n this.updateMaxPage();\n }\n\n @Watch('pageSize')\n protected pageSizeChanged() {\n this.updateMaxPage();\n }\n\n @Watch('page')\n protected pageChanged() {\n if (!this.tabulator) {\n return;\n }\n\n if (this.tabulator.getPage() === this.page) {\n return;\n }\n\n this.tabulator.setPage(this.page);\n }\n\n @Watch('activeRow')\n protected activeRowChanged() {\n if (!this.tabulator) {\n return;\n }\n\n this.formatRows();\n }\n\n @Watch('data')\n protected updateData(newData: RowData[] = [], oldData: RowData[] = []) {\n const newIds = this.getRowIds(newData);\n const oldIds = this.getRowIds(oldData);\n const shouldReplace = this.shouldReplaceData(newIds, oldIds);\n const hasRowUpdates = !areRowsEqual(newData, oldData);\n\n setTimeout(() => {\n if (!this.tabulator) {\n return;\n }\n\n if (shouldReplace) {\n this.pool.releaseAll();\n this.tabulator.replaceData(newData);\n this.setSelection();\n\n return;\n }\n\n if (hasRowUpdates) {\n this.tabulator.updateData(newData);\n this.setSelection();\n\n return;\n }\n\n this.tabulator.updateOrAddData(newData);\n });\n }\n\n @Watch('columns')\n protected updateColumns(newColumns: Column[], oldColumns: Column[]) {\n if (!this.tabulator) {\n return;\n }\n\n if (this.areSameColumns(newColumns, oldColumns)) {\n return;\n }\n\n const columnsInTable = this.tabulator\n .getColumns()\n .filter((c) => c.getField());\n\n const oldColumnsInTable = columnsInTable.map((c) =>\n oldColumns.find((old) => old.field === c.getField())\n );\n\n if (this.areSameColumns(newColumns, oldColumnsInTable)) {\n return;\n }\n\n this.tabulator.setColumns(this.getColumnDefinitions());\n this.shouldSort = true;\n }\n\n @Watch('aggregates')\n protected updateAggregates(\n newAggregates: ColumnAggregate[],\n oldAggregates: ColumnAggregate[]\n ) {\n if (!this.tabulator) {\n return;\n }\n\n if (isEqual(newAggregates, oldAggregates)) {\n return;\n }\n\n if (!this.haveSameAggregateFields(newAggregates, oldAggregates)) {\n this.init();\n\n return;\n }\n\n this.tabulator.recalc();\n this.tabulator.rowManager.redraw();\n }\n\n @Watch('selection')\n protected updateSelection(newSelection: any[]) {\n if (!this.tableSelection) {\n return;\n }\n\n this.tableSelection.setSelection(newSelection);\n }\n\n @Watch('selectable')\n protected updateSelectable() {\n if (this.tableSelection && !this.selectable) {\n this.tableSelection = null;\n }\n\n this.initTableSelection();\n this.init();\n }\n\n @Watch('sortableColumns')\n protected updateSortableColumns() {\n if (!this.tabulator) {\n return;\n }\n\n this.tabulator.setColumns(this.getColumnDefinitions());\n this.shouldSort = true;\n }\n\n @Watch('sorting')\n protected updateSorting(\n newValue: ColumnSorter[],\n oldValue: ColumnSorter[]\n ) {\n const newSorting = this.getColumnSorter(newValue);\n const oldSorting = this.getColumnSorter(oldValue);\n if (isEqual(newSorting, oldSorting)) {\n return;\n }\n\n this.tabulator.setSort(newSorting);\n }\n\n private shouldReplaceData(\n newIds: Array<string | number>,\n oldIds: Array<string | number>\n ) {\n return (\n !this.areEqualIds(newIds, oldIds) ||\n !this.isSameOrder(newIds, oldIds)\n );\n }\n\n private getRowIds(data: RowData[]): Array<string | number> {\n return data.map((item) => item.id ?? item) as Array<string | number>;\n }\n\n private areEqualIds(\n newIds: Array<string | number>,\n oldIds: Array<string | number>\n ): boolean {\n const newIdSet = new Set(newIds);\n const oldIdSet = new Set(oldIds);\n\n return (\n newIdSet.size === oldIdSet.size &&\n newIds.every((id) => oldIdSet.has(id))\n );\n }\n\n private isSameOrder(\n newIds: Array<string | number>,\n oldIds: Array<string | number>\n ): boolean {\n return newIds.every((id, index) => id === oldIds[index]);\n }\n\n private areSameColumns(newColumns: Column[], oldColumns: Column[]) {\n return (\n newColumns.length === oldColumns.length &&\n newColumns.every((column) => oldColumns.includes(column))\n );\n }\n\n private haveSameAggregateFields(\n newAggregates: ColumnAggregate[],\n oldAggregates: ColumnAggregate[]\n ) {\n const oldAggregateFields = oldAggregates?.map((a) => a.field) || [];\n\n return (\n newAggregates?.length === oldAggregates?.length &&\n !!newAggregates?.every((a) => oldAggregateFields.includes(a.field))\n );\n }\n\n private init() {\n if (this.tabulator) {\n this.pool.releaseAll();\n this.tabulator.destroy();\n }\n\n const table: HTMLElement =\n this.host.shadowRoot.querySelector('#tabulator-table');\n this.initTabulatorComponent(table);\n }\n\n /*\n * Tabulator requires that the html element it's rendered inside\n * has a size before it's created, otherwise it doesn't consider\n * it self renderedy completely. (the callback \"renderComplete\"\n * is never run).\n *\n * @param table {HTMLElement}\n *\n */\n private initTabulatorComponent(table: HTMLElement) {\n // Some browsers do not implement the ResizeObserver API...\n // If that's the case lets just create the table no\n // matter if its rendered or not.\n if (!('ResizeObserver' in window)) {\n this.tabulator = new TabulatorTable(table, this.getOptions());\n this.setSelection();\n\n return;\n }\n\n const observer = new ResizeObserver(() => {\n requestAnimationFrame(() => {\n this.tabulator = new TabulatorTable(table, this.getOptions());\n this.setSelection();\n observer.unobserve(table);\n observer.disconnect();\n });\n });\n observer.observe(table);\n }\n\n private initTableSelection() {\n if (this.selectable) {\n this.tableSelection = new TableSelection(\n () => this.tabulator,\n this.pool,\n this.select,\n (key: string) => this.getTranslation(key)\n );\n this.tableSelection.setSelection(this.selection);\n }\n }\n\n private setSelection() {\n if (!(this.tabulator && this.tableSelection)) {\n return;\n }\n\n this.tableSelection.setSelection(this.selection);\n }\n\n private updateMaxPage() {\n this.tabulator?.setMaxPage(this.calculatePageCount());\n }\n\n private getOptions(): Tabulator.Options {\n const ajaxOptions = this.getAjaxOptions();\n const paginationOptions = this.getPaginationOptions();\n const columnOptions = this.getColumnOptions();\n\n return {\n data: this.data,\n layout: mapLayout(this.layout),\n columns: this.getColumnDefinitions(),\n dataSorting: this.handleDataSorting,\n pageLoaded: this.handlePageLoaded,\n renderComplete: this.handleRenderComplete,\n ...ajaxOptions,\n ...paginationOptions,\n rowClick: this.onClickRow,\n rowFormatter: this.formatRow,\n initialSort: this.getInitialSorting(),\n nestedFieldSeparator: false,\n ...columnOptions,\n };\n }\n\n private getInitialSorting(): Tabulator.Sorter[] {\n if (this.currentSorting && this.currentSorting.length > 0) {\n return this.getColumnSorter(this.currentSorting);\n }\n\n return this.getColumnSorter(this.sorting);\n }\n\n private getColumnSorter(sorting: ColumnSorter[]): Tabulator.Sorter[] {\n return sorting.map((sorter: ColumnSorter) => {\n return {\n column: String(sorter.column.field),\n dir: sorter.direction.toLocaleLowerCase() as Tabulator.SortDirection,\n };\n });\n }\n\n private getColumnDefinitions(): Tabulator.ColumnDefinition[] {\n const columnDefinitions = this.columns\n .map(this.addColumnAggregator)\n .map((column) => {\n const definition = this.columnFactory.create(column);\n const columnSortable = column.headerSort ?? true;\n definition.headerSort = this.sortableColumns && columnSortable;\n\n return definition;\n });\n\n if (this.tableSelection) {\n return this.tableSelection.getColumnDefinitions(columnDefinitions);\n }\n\n return columnDefinitions;\n }\n\n private addColumnAggregator(column: Column<any>): Column<any> {\n if (!this.aggregates?.length || column.aggregator) {\n return column;\n }\n\n const aggregate = this.aggregates.find((a) => a.field === column.field);\n if (aggregate) {\n column.aggregator = (col?: Column) => {\n if (!col) {\n return;\n }\n\n const value = this.aggregates.find(\n (a) => a.field === col.field\n )?.value;\n\n if (col.formatter) {\n return col.formatter(value);\n }\n\n return value;\n };\n }\n\n return column;\n }\n\n private getAjaxOptions(): Tabulator.OptionsData {\n if (!this.isRemoteMode()) {\n return {};\n }\n\n // Tabulator needs a URL to be set, even though this one will never be\n // used since we have our own custom `ajaxRequestFunc`\n const remoteUrl = 'https://localhost';\n\n return {\n ajaxSorting: true,\n ajaxURL: remoteUrl,\n ajaxRequestFunc: this.requestData,\n ajaxRequesting: this.handleAjaxRequesting,\n };\n }\n\n /*\n * The ajaxRequesting callback is triggered when ever an ajax request is made.\n *\n * Tabulator is requesting data with an AJAX request even though it has been\n * given data when it was created.\n *\n * It seems unnecessary for us to emit the `load` event as well when this\n * happens, since we can just initialize the table with the data that has been\n * given to us. Therefore, we abort the request if:\n *\n * * its the first time this method is called and,\n * * data has been sent in to the component as a prop\n *\n */\n private handleAjaxRequesting() {\n const abortRequest = this.firstRequest && !!this.data?.length;\n this.firstRequest = false;\n\n if (abortRequest) {\n setTimeout(() => {\n this.updateMaxPage();\n this.tabulator.replaceData(this.data);\n });\n\n return false;\n }\n\n return true;\n }\n\n private getPaginationOptions(): Tabulator.OptionsPagination {\n if (!this.pageSize) {\n return {};\n }\n\n return {\n pagination: this.isRemoteMode() ? 'remote' : 'local',\n paginationSize: this.pageSize,\n paginationInitialPage: this.page,\n };\n }\n\n private requestData(_, __, params: any): Promise<object> {\n const sorters = params.sorters;\n const currentPage = params.page;\n\n if (this.page !== currentPage) {\n this.changePage.emit(currentPage);\n }\n\n const columnSorters = sorters.map(createColumnSorter(this.columns));\n\n const load = {\n page: currentPage,\n sorters: columnSorters,\n };\n\n // In order to make limel-table behave more like a controlled component,\n // we always return the existing data from this function, therefore\n // relying on the consumer component to handle the loading\n // state via the loading prop, if it actually decides to load new data.\n const resolveExistingData = Promise.resolve({\n last_page: this.calculatePageCount(),\n data: this.data,\n });\n\n if (!isEqual(this.currentLoad, load)) {\n this.currentSorting = columnSorters;\n this.currentLoad = load;\n this.load.emit(load);\n }\n\n return resolveExistingData;\n }\n\n private isRemoteMode(): boolean {\n return this.mode === 'remote';\n }\n\n private handleDataSorting(sorters: Tabulator.Sorter[]): void {\n if (this.isRemoteMode()) {\n return;\n }\n\n const columnSorters = sorters.map(createColumnSorter(this.columns));\n if (columnSorters.length === 0) {\n return;\n }\n\n this.sort.emit(columnSorters);\n }\n\n private handlePageLoaded(page: number): void {\n if (this.isRemoteMode()) {\n return;\n }\n\n this.changePage.emit(page);\n }\n\n private handleRenderComplete(): void {\n if (this.tabulator && this.shouldSort) {\n this.shouldSort = false;\n this.tabulator.setSort(this.getColumnSorter(this.sorting));\n }\n }\n\n private onClickRow(_ev, row: Tabulator.RowComponent): void {\n if (row.getPosition === undefined) {\n // Not a data row, probably a CalcComponent\n return;\n }\n\n if (this.isActiveRow(row)) {\n this.activeRow = null;\n } else {\n this.activeRow = row.getData();\n }\n\n this.activate.emit(this.activeRow);\n }\n\n private getActiveRows: () => Tabulator.RowComponent[] = () => {\n if (!this.tabulator) {\n return [];\n }\n\n return this.tabulator.getRows('active');\n };\n\n private getActiveRowsData: () => object[] = () => {\n // Note: Tabulator.getData() creates copies of each data object\n // and will break this.selection.has checks, hence why this function\n // intentionally retrieves the data using the row components\n return this.getActiveRows().map((row) => row.getData());\n };\n\n private selectAllOnChange = (ev: CustomEvent<boolean>) => {\n const selectAll = ev.detail;\n\n ev.stopPropagation();\n ev.preventDefault();\n\n const newSelection = selectAll ? this.getActiveRowsData() : [];\n this.select.emit(newSelection);\n this.tableSelection.setSelection(newSelection);\n this.selectAll.emit(selectAll);\n };\n\n private formatRows() {\n // eslint-disable-next-line unicorn/no-array-for-each\n this.tabulator.getRows().forEach(this.formatRow);\n }\n\n private formatRow(row: Tabulator.RowComponent) {\n if (this.isActiveRow(row)) {\n row.getElement().classList.add('active');\n } else {\n row.getElement().classList.remove('active');\n }\n\n const interactiveFeedbackElement = row\n .getElement()\n .querySelectorAll('.interactive-feedback');\n if (interactiveFeedbackElement.length === 0) {\n const element = row.getElement().ownerDocument.createElement('div');\n element.classList.add('interactive-feedback');\n row.getElement().prepend(element);\n }\n }\n\n private isActiveRow(row: Tabulator.RowComponent) {\n if (!this.activeRow) {\n return false;\n }\n\n const activeRowId = this.activeRow.id ?? null;\n\n if (activeRowId !== null) {\n return activeRowId === row.getData().id;\n }\n\n return this.activeRow === row.getData();\n }\n\n private calculatePageCount(): number {\n let total = this.totalRows;\n if (!total) {\n total = this.data.length;\n }\n\n return Math.ceil(total / this.pageSize);\n }\n\n private hasAggregation(columns: Column[]): boolean {\n return columns.some((column) => has(column, 'aggregator'));\n }\n\n private getColumnOptions = (): Tabulator.OptionsColumns => {\n if (!this.movableColumns) {\n return {};\n }\n\n return {\n movableColumns: true,\n columnMoved: this.handleMoveColumn,\n };\n };\n\n private handleMoveColumn = (_, components: Tabulator.ColumnComponent[]) => {\n const columns = components.map(this.findColumn).filter(Boolean);\n this.changeColumns.emit(columns);\n };\n\n private findColumn = (component: Tabulator.ColumnComponent): Column => {\n return this.columns.find((column) => {\n return (\n column.field === component.getField() &&\n column.title === component.getDefinition().title\n );\n });\n };\n\n render() {\n return (\n <Host\n class={{\n 'has-low-density': this.layout === 'lowDensity',\n }}\n >\n <div\n id=\"tabulator-container\"\n class={{\n 'has-pagination': this.totalRows > this.pageSize,\n 'has-aggregation': this.hasAggregation(this.columns),\n 'has-movable-columns': this.movableColumns,\n 'has-rowselector': this.selectable,\n 'has-selection': this.tableSelection?.hasSelection,\n }}\n >\n {/* Toggle style instead of removing the loader\n because removing the element will cause a rerender, breaking the\n tabulator table */}\n <div\n id=\"tabulator-loader\"\n style={{ display: this.loading ? 'flex' : 'none' }}\n >\n <limel-spinner size=\"large\" />\n </div>\n {this.renderEmptyMessage()}\n {this.renderSelectAll()}\n <div id=\"tabulator-table\" />\n </div>\n </Host>\n );\n }\n\n private renderSelectAll() {\n if (!this.selectable) {\n return;\n }\n\n const showSelectAll = !this.loading && this.tableSelection;\n\n return (\n <div\n class=\"select-all\"\n style={{ display: showSelectAll ? 'inline-block' : 'none' }}\n >\n <limel-checkbox\n class=\"hide-label\"\n onChange={this.selectAllOnChange}\n disabled={this.data.length === 0}\n checked={this.tableSelection?.hasSelection}\n indeterminate={\n this.tableSelection?.hasSelection &&\n this.selection?.length < this.data.length\n }\n label={this.getTranslation('table.select-all')}\n />\n </div>\n );\n }\n\n private renderEmptyMessage() {\n const showEmptyMessage =\n !this.loading && this.data.length === 0 && this.emptyMessage;\n\n return (\n <div\n id=\"tabulator-empty-text\"\n style={{ display: showEmptyMessage ? 'flex' : 'none' }}\n >\n <span>{this.emptyMessage}</span>\n </div>\n );\n }\n\n private getTranslation = (key: string) => {\n return translate.get(key, this.language);\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"table.js","sourceRoot":"","sources":["../../../src/components/table/table.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n h,\n Prop,\n Element,\n Watch,\n EventEmitter,\n Event,\n Host,\n} from '@stencil/core';\nimport {\n TabulatorFull,\n Tabulator,\n Options as TabulatorOptions,\n Sorter as TabulatorSorter,\n SorterFromTable as TabulatorSorterFromTable,\n SortDirection as TabulatorSortDirection,\n ColumnComponent as TabulatorColumnComponent,\n ColumnDefinition as TabulatorColumnDefinition,\n RowComponent as TabulatorRowComponent,\n OptionsData as TabulatorOptionsData,\n OptionsPagination as TabulatorOptionsPagination,\n OptionsColumns as TabulatorOptionsColumns,\n} from 'tabulator-tables';\nimport {\n Column,\n TableParams,\n ColumnSorter,\n ColumnAggregate,\n RowData,\n} from './table.types';\nimport { ColumnDefinitionFactory, createColumnSorter } from './columns';\nimport { isEqual, has } from 'lodash-es';\nimport { ElementPool } from './element-pool';\nimport { TableSelection } from './table-selection';\nimport { mapLayout, Layout } from './layout';\nimport { areRowsEqual } from './utils';\nimport { Languages } from '../date-picker/date.types';\nimport translate from '../../global/translations';\n\nconst FIRST_PAGE = 1;\n\n/**\n * @exampleComponent limel-example-table\n * @exampleComponent limel-example-table-custom-components\n * @exampleComponent limel-example-table-header-menu\n * @exampleComponent limel-example-table-movable-columns\n * @exampleComponent limel-example-table-sorting-disabled\n * @exampleComponent limel-example-table-pagination\n * @exampleComponent limel-example-table-local\n * @exampleComponent limel-example-table-remote\n * @exampleComponent limel-example-table-activate-row\n * @exampleComponent limel-example-table-selectable-rows\n * @exampleComponent limel-example-table-default-sorted\n * @exampleComponent limel-example-table-layout-default\n * @exampleComponent limel-example-table-layout-stretch-last-column\n * @exampleComponent limel-example-table-layout-stretch-columns\n * @exampleComponent limel-example-table-layout-low-density\n * @exampleComponent limel-example-table-interactive-rows\n */\n@Component({\n tag: 'limel-table',\n styleUrl: 'table.scss',\n shadow: true,\n})\nexport class Table {\n /**\n * Data to be displayed in the table. Provide a stable `id` on each row to keep\n * scroll position, focus, and selections intact across updates.\n */\n @Prop()\n public data: object[] = [];\n\n /**\n * Columns used to display the data\n */\n @Prop()\n public columns: Column[] = [];\n\n /**\n * Set to either `local` or `remote` to change how the table handles the\n * loaded data. When in `local` mode, all sorting and pagination will be\n * done locally with the data given. When in `remote` mode, the consumer\n * is responsible to give the table new data when a `load` event occurs\n */\n @Prop()\n public mode: 'local' | 'remote' = 'local';\n\n /**\n * Defines the layout of the table, based on how width of the columns are calculated.\n *\n * - `default`: makes columns as wide as their contents.\n * - `stretchLastColumn`: makes columns as wide as their contents, stretch the last column to fill up the remaining table width.\n * - `stretchColumns`: stretches all columns to fill the available width when possible.\n * - `lowDensity`: makes columns as wide as their contents, and creates a low density and airy layout.\n */\n @Prop()\n public layout: Layout;\n\n /**\n * Number of rows per page\n */\n @Prop()\n public pageSize: number;\n\n /**\n * The number of total rows available for the data\n */\n @Prop()\n public totalRows: number;\n\n /**\n * The initial sorted columns\n */\n @Prop()\n public sorting: ColumnSorter[] = [];\n\n /**\n * Active row in the table\n */\n @Prop({ mutable: true })\n public activeRow: RowData;\n\n /**\n * Set to `true` to enable reordering of the columns by dragging them\n */\n @Prop()\n public movableColumns: boolean;\n\n /**\n * Set to `false` to disable column sorting through header interactions.\n * Programmatic sorting through the `sorting` prop and `sort` event remains available.\n */\n @Prop()\n public sortableColumns: boolean = true;\n\n /**\n * Set to `true` to trigger loading animation\n */\n @Prop()\n public loading: boolean = false;\n\n /**\n * The page to show\n */\n @Prop()\n public page: number = FIRST_PAGE;\n\n /**\n * Emitted when `mode` is `local` the data is sorted\n */\n @Event()\n public sort: EventEmitter<ColumnSorter[]>;\n\n /**\n * Emitted when a new page has been set\n */\n @Event()\n public changePage: EventEmitter<number>;\n\n /**\n * A message to display when the table has no data\n */\n @Prop()\n public emptyMessage: string;\n\n /**\n * Column aggregates to be displayed in the table\n */\n @Prop()\n public aggregates: ColumnAggregate[];\n\n /**\n * Enables row selection\n */\n @Prop()\n public selectable: boolean;\n\n /**\n * Selected data. Requires `selectable` to be true.\n */\n @Prop()\n public selection: object[];\n\n /**\n * Defines the language for translations.\n */\n @Prop({ reflect: true })\n public language: Languages = 'en';\n\n /**\n * Location of the pagination controls.\n * - `top`: Display pagination controls at the top of the table\n * - `bottom`: Display pagination controls at the bottom of the table (default)\n */\n @Prop({ reflect: true })\n public paginationLocation: 'top' | 'bottom' = 'bottom';\n\n /**\n * Emitted when `mode` is `remote` and the table is loading new data. The\n * consumer is responsible for giving the table new data\n */\n @Event()\n public load: EventEmitter<TableParams>;\n\n /**\n * Emitted when a row is activated\n */\n @Event()\n public activate: EventEmitter<object>;\n\n /**\n * Emitted when the columns have been changed\n */\n @Event()\n public changeColumns: EventEmitter<Column[]>;\n\n /**\n * Emitted when the row selection has been changed\n */\n @Event()\n public select: EventEmitter<object[]>;\n\n /**\n * Emitted when the select all rows state is toggled\n */\n @Event()\n public selectAll: EventEmitter<boolean>;\n\n @Element()\n private host: HTMLLimelTableElement;\n\n private currentLoad: { page: number; sorters: ColumnSorter[] };\n\n private tabulator: Tabulator;\n\n private pool: ElementPool;\n private columnFactory: ColumnDefinitionFactory;\n private initialized = false;\n private destroyed = false;\n private resizeObserver: ResizeObserver;\n private currentSorting: ColumnSorter[];\n private tableSelection: TableSelection;\n private shouldSort = false;\n\n constructor() {\n this.handleDataSorting = this.handleDataSorting.bind(this);\n this.handlePageLoaded = this.handlePageLoaded.bind(this);\n this.handleRenderComplete = this.handleRenderComplete.bind(this);\n this.handleAjaxRequesting = this.handleAjaxRequesting.bind(this);\n this.requestData = this.requestData.bind(this);\n this.onClickRow = this.onClickRow.bind(this);\n this.formatRow = this.formatRow.bind(this);\n this.formatRows = this.formatRows.bind(this);\n this.updateMaxPage = this.updateMaxPage.bind(this);\n this.initTabulatorComponent = this.initTabulatorComponent.bind(this);\n this.setSelection = this.setSelection.bind(this);\n this.addColumnAggregator = this.addColumnAggregator.bind(this);\n this.pool = new ElementPool(document);\n this.columnFactory = new ColumnDefinitionFactory(this.pool);\n }\n\n public componentWillLoad() {\n this.initTableSelection();\n }\n\n public componentDidLoad() {\n this.destroyed = false;\n this.init();\n }\n\n public disconnectedCallback() {\n this.destroyed = true;\n this.initialized = false;\n\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n this.resizeObserver = null;\n }\n\n if (this.tabulator) {\n this.tabulator.destroy();\n this.tabulator = null;\n }\n\n this.pool.clear();\n }\n\n @Watch('totalRows')\n protected totalRowsChanged() {\n this.updateMaxPage();\n }\n\n @Watch('pageSize')\n protected pageSizeChanged() {\n this.updateMaxPage();\n }\n\n @Watch('page')\n protected pageChanged() {\n if (!this.tabulator) {\n return;\n }\n\n if (this.tabulator.getPage() === this.page) {\n return;\n }\n\n this.tabulator.setPage(this.page);\n }\n\n @Watch('activeRow')\n protected activeRowChanged() {\n if (!this.tabulator) {\n return;\n }\n\n this.formatRows();\n }\n\n @Watch('data')\n protected updateData(newData: RowData[] = [], oldData: RowData[] = []) {\n const newIds = this.getRowIds(newData);\n const oldIds = this.getRowIds(oldData);\n const shouldReplace = this.shouldReplaceData(newIds, oldIds);\n const hasRowUpdates = !areRowsEqual(newData, oldData);\n\n setTimeout(() => {\n if (!this.tabulator || !this.initialized) {\n return;\n }\n\n if (shouldReplace) {\n this.pool.releaseAll();\n this.tabulator.replaceData(newData);\n this.setSelection();\n\n return;\n }\n\n if (hasRowUpdates) {\n this.tabulator.updateData(newData);\n this.setSelection();\n\n return;\n }\n\n if (newData.length > 0) {\n this.tabulator.updateOrAddData(newData);\n }\n });\n }\n\n @Watch('columns')\n protected updateColumns(newColumns: Column[], oldColumns: Column[]) {\n if (!this.tabulator) {\n return;\n }\n\n if (this.areSameColumns(newColumns, oldColumns)) {\n return;\n }\n\n const columnsInTable = this.tabulator\n .getColumns()\n .filter((c) => c.getField());\n\n const oldColumnsInTable = columnsInTable.map((c) =>\n oldColumns.find((old) => old.field === c.getField())\n );\n\n if (this.areSameColumns(newColumns, oldColumnsInTable)) {\n return;\n }\n\n this.tabulator.setColumns(this.getColumnDefinitions());\n this.shouldSort = true;\n }\n\n @Watch('aggregates')\n protected updateAggregates(\n newAggregates: ColumnAggregate[],\n oldAggregates: ColumnAggregate[]\n ) {\n if (!this.tabulator) {\n return;\n }\n\n if (isEqual(newAggregates, oldAggregates)) {\n return;\n }\n\n if (!this.haveSameAggregateFields(newAggregates, oldAggregates)) {\n this.init();\n\n return;\n }\n\n this.tabulator.recalc();\n this.tabulator.rowManager.redraw();\n }\n\n @Watch('selection')\n protected updateSelection(newSelection: any[]) {\n if (!this.tableSelection) {\n return;\n }\n\n this.tableSelection.setSelection(newSelection);\n }\n\n @Watch('selectable')\n protected updateSelectable() {\n if (this.tableSelection && !this.selectable) {\n this.tableSelection = null;\n }\n\n this.initTableSelection();\n this.init();\n }\n\n @Watch('sortableColumns')\n protected updateSortableColumns() {\n if (!this.tabulator) {\n return;\n }\n\n this.tabulator.setColumns(this.getColumnDefinitions());\n this.shouldSort = true;\n }\n\n @Watch('sorting')\n protected updateSorting(\n newValue: ColumnSorter[],\n oldValue: ColumnSorter[]\n ) {\n const newSorting = this.getColumnSorter(newValue);\n const oldSorting = this.getColumnSorter(oldValue);\n if (isEqual(newSorting, oldSorting)) {\n return;\n }\n\n this.tabulator.setSort(newSorting);\n }\n\n private shouldReplaceData(\n newIds: Array<string | number>,\n oldIds: Array<string | number>\n ) {\n return (\n !this.areEqualIds(newIds, oldIds) ||\n !this.isSameOrder(newIds, oldIds)\n );\n }\n\n private getRowIds(data: RowData[]): Array<string | number> {\n return data.map((item) => item.id ?? item) as Array<string | number>;\n }\n\n private areEqualIds(\n newIds: Array<string | number>,\n oldIds: Array<string | number>\n ): boolean {\n const newIdSet = new Set(newIds);\n const oldIdSet = new Set(oldIds);\n\n return (\n newIdSet.size === oldIdSet.size &&\n newIds.every((id) => oldIdSet.has(id))\n );\n }\n\n private isSameOrder(\n newIds: Array<string | number>,\n oldIds: Array<string | number>\n ): boolean {\n return newIds.every((id, index) => id === oldIds[index]);\n }\n\n private areSameColumns(newColumns: Column[], oldColumns: Column[]) {\n return (\n newColumns.length === oldColumns.length &&\n newColumns.every((column) => oldColumns.includes(column))\n );\n }\n\n private haveSameAggregateFields(\n newAggregates: ColumnAggregate[],\n oldAggregates: ColumnAggregate[]\n ) {\n const oldAggregateFields = oldAggregates?.map((a) => a.field) || [];\n\n return (\n newAggregates?.length === oldAggregates?.length &&\n !!newAggregates?.every((a) => oldAggregateFields.includes(a.field))\n );\n }\n\n private init() {\n if (this.tabulator) {\n this.pool.releaseAll();\n this.tabulator.destroy();\n this.initialized = false;\n }\n\n const table: HTMLElement =\n this.host.shadowRoot.querySelector('#tabulator-table');\n this.initTabulatorComponent(table);\n }\n\n /*\n * Tabulator requires that the html element it's rendered inside\n * has a size before it's created, otherwise it doesn't consider\n * it self renderedy completely. (the callback \"renderComplete\"\n * is never run).\n *\n * @param table {HTMLElement}\n *\n */\n private initTabulatorComponent(table: HTMLElement) {\n // Some browsers do not implement the ResizeObserver API...\n // If that's the case lets just create the table no\n // matter if its rendered or not.\n if (!('ResizeObserver' in window)) {\n this.tabulator = this.createTabulator(table);\n this.setSelection();\n\n return;\n }\n\n this.resizeObserver = new ResizeObserver(() => {\n requestAnimationFrame(() => {\n if (this.destroyed) {\n return;\n }\n\n this.tabulator = this.createTabulator(table);\n this.setSelection();\n this.resizeObserver?.unobserve(table);\n this.resizeObserver?.disconnect();\n });\n });\n this.resizeObserver.observe(table);\n }\n\n private createTabulator(table: HTMLElement): Tabulator {\n const tabulator = new TabulatorFull(table, this.getOptions());\n tabulator.on('rowClick', this.onClickRow);\n tabulator.on('dataSorting', this.handleDataSorting);\n tabulator.on('pageLoaded', this.handlePageLoaded);\n tabulator.on('columnMoved', this.handleMoveColumn);\n tabulator.on('renderComplete', this.handleRenderComplete);\n tabulator.on('tableBuilt', () => {\n if (this.destroyed) {\n tabulator.destroy();\n\n return;\n }\n\n this.initialized = true;\n if (this.isRemoteMode() && !this.data?.length) {\n this.tabulator.setData();\n } else if (!this.isRemoteMode()) {\n this.updateData(this.data, []);\n }\n });\n\n return tabulator;\n }\n\n private initTableSelection() {\n if (this.selectable) {\n this.tableSelection = new TableSelection(\n () => this.tabulator,\n this.pool,\n this.select,\n (key: string) => this.getTranslation(key)\n );\n this.tableSelection.setSelection(this.selection);\n }\n }\n\n private setSelection() {\n if (!(this.tabulator && this.tableSelection)) {\n return;\n }\n\n this.tableSelection.setSelection(this.selection);\n }\n\n private updateMaxPage() {\n this.tabulator?.setMaxPage(this.calculatePageCount());\n }\n\n private getOptions(): TabulatorOptions {\n const ajaxOptions = this.getAjaxOptions();\n const paginationOptions = this.getPaginationOptions();\n const columnOptions = this.getColumnOptions();\n\n return {\n data: this.data,\n layout: mapLayout(this.layout),\n columns: this.getColumnDefinitions(),\n ...ajaxOptions,\n ...paginationOptions,\n rowFormatter: this.formatRow,\n initialSort: this.getInitialSorting(),\n nestedFieldSeparator: false,\n ...columnOptions,\n };\n }\n\n private getInitialSorting(): TabulatorSorter[] {\n if (this.currentSorting && this.currentSorting.length > 0) {\n return this.getColumnSorter(this.currentSorting);\n }\n\n return this.getColumnSorter(this.sorting);\n }\n\n private getColumnSorter(sorting: ColumnSorter[]): TabulatorSorter[] {\n return sorting.map((sorter: ColumnSorter) => {\n return {\n column: String(sorter.column.field),\n dir: sorter.direction.toLocaleLowerCase() as TabulatorSortDirection,\n };\n });\n }\n\n private getColumnDefinitions(): TabulatorColumnDefinition[] {\n const columnDefinitions = this.columns\n .map(this.addColumnAggregator)\n .map((column) => {\n const definition = this.columnFactory.create(column);\n const columnSortable = column.headerSort ?? true;\n definition.headerSort = this.sortableColumns && columnSortable;\n\n return definition;\n });\n\n if (this.tableSelection) {\n return this.tableSelection.getColumnDefinitions(columnDefinitions);\n }\n\n return columnDefinitions;\n }\n\n private addColumnAggregator(column: Column<any>): Column<any> {\n if (!this.aggregates?.length || column.aggregator) {\n return column;\n }\n\n const aggregate = this.aggregates.find((a) => a.field === column.field);\n if (aggregate) {\n column.aggregator = (col?: Column) => {\n if (!col) {\n return;\n }\n\n const value = this.aggregates.find(\n (a) => a.field === col.field\n )?.value;\n\n if (col.formatter) {\n return col.formatter(value);\n }\n\n return value;\n };\n }\n\n return column;\n }\n\n private getAjaxOptions(): TabulatorOptionsData {\n if (!this.isRemoteMode()) {\n return {};\n }\n\n // Tabulator needs a URL to be set, even though this one will never be\n // used since we have our own custom `ajaxRequestFunc`\n const remoteUrl = 'https://localhost';\n\n return {\n ajaxSorting: true,\n ajaxURL: remoteUrl,\n ajaxRequestFunc: this.requestData,\n ajaxRequesting: this.handleAjaxRequesting,\n };\n }\n\n private handleAjaxRequesting() {\n return !this.destroyed;\n }\n\n private getPaginationOptions(): TabulatorOptionsPagination {\n if (!this.pageSize) {\n return {};\n }\n\n return {\n pagination: true,\n paginationMode: this.isRemoteMode() ? 'remote' : 'local',\n paginationSize: this.pageSize,\n paginationInitialPage: this.page,\n };\n }\n\n private requestData(_, __, params: any): Promise<object> {\n if (this.destroyed) {\n return Promise.reject();\n }\n\n const sorters = params.sorters ?? [];\n const currentPage = params.page ?? FIRST_PAGE;\n\n if (this.page !== currentPage) {\n this.changePage.emit(currentPage);\n }\n\n const columnSorters = sorters.map(createColumnSorter(this.columns));\n\n const load = {\n page: currentPage,\n sorters: columnSorters,\n };\n\n // In order to make limel-table behave more like a controlled component,\n // we always return the existing data from this function, therefore\n // relying on the consumer component to handle the loading\n // state via the loading prop, if it actually decides to load new data.\n const resolveExistingData = Promise.resolve({\n last_page: this.calculatePageCount(),\n data: this.data,\n });\n\n if (!isEqual(this.currentLoad, load)) {\n this.currentSorting = columnSorters;\n this.currentLoad = load;\n this.load.emit(load);\n }\n\n return resolveExistingData;\n }\n\n private isRemoteMode(): boolean {\n return this.mode === 'remote';\n }\n\n private handleDataSorting(sorters: TabulatorSorterFromTable[]): void {\n if (this.isRemoteMode()) {\n return;\n }\n\n const columnSorters = sorters.map(createColumnSorter(this.columns));\n if (columnSorters.length === 0) {\n return;\n }\n\n this.sort.emit(columnSorters);\n }\n\n private handlePageLoaded(page: number): void {\n if (this.isRemoteMode()) {\n return;\n }\n\n this.changePage.emit(page);\n }\n\n private handleRenderComplete(): void {\n if (this.tabulator && this.shouldSort) {\n this.shouldSort = false;\n this.tabulator.setSort(this.getColumnSorter(this.sorting));\n }\n }\n\n private onClickRow(event: PointerEvent, row: TabulatorRowComponent): void {\n if (row.getPosition === undefined) {\n // Not a data row, probably a CalcComponent\n return;\n }\n\n if (event.defaultPrevented) {\n return;\n }\n\n if (this.isActiveRow(row)) {\n this.activeRow = null;\n } else {\n this.activeRow = row.getData();\n }\n\n this.activate.emit(this.activeRow);\n }\n\n private readonly getActiveRows: () => TabulatorRowComponent[] = () => {\n if (!this.tabulator) {\n return [];\n }\n\n return this.tabulator.getRows('active');\n };\n\n private getActiveRowsData: () => object[] = () => {\n // Note: Tabulator.getData() creates copies of each data object\n // and will break this.selection.has checks, hence why this function\n // intentionally retrieves the data using the row components\n return this.getActiveRows().map((row) => row.getData());\n };\n\n private selectAllOnChange = (ev: CustomEvent<boolean>) => {\n const selectAll = ev.detail;\n\n ev.stopPropagation();\n ev.preventDefault();\n\n const newSelection = selectAll ? this.getActiveRowsData() : [];\n this.select.emit(newSelection);\n this.tableSelection.setSelection(newSelection);\n this.selectAll.emit(selectAll);\n };\n\n private formatRows() {\n // eslint-disable-next-line unicorn/no-array-for-each\n this.tabulator.getRows().forEach(this.formatRow);\n }\n\n private formatRow(row: TabulatorRowComponent) {\n if (this.isActiveRow(row)) {\n row.getElement().classList.add('active');\n } else {\n row.getElement().classList.remove('active');\n }\n\n const interactiveFeedbackElement = row\n .getElement()\n .querySelectorAll('.interactive-feedback');\n if (interactiveFeedbackElement.length === 0) {\n const element = row.getElement().ownerDocument.createElement('div');\n element.classList.add('interactive-feedback');\n row.getElement().prepend(element);\n }\n }\n\n private isActiveRow(row: TabulatorRowComponent) {\n if (!this.activeRow) {\n return false;\n }\n\n const activeRowId = this.activeRow.id ?? null;\n\n if (activeRowId !== null) {\n return activeRowId === row.getData().id;\n }\n\n return this.activeRow === row.getData();\n }\n\n private calculatePageCount(): number {\n let total = this.totalRows;\n if (!total) {\n total = this.data.length;\n }\n\n return Math.ceil(total / this.pageSize);\n }\n\n private hasAggregation(columns: Column[]): boolean {\n return columns.some((column) => has(column, 'aggregator'));\n }\n\n private readonly getColumnOptions = (): TabulatorOptionsColumns => {\n if (!this.movableColumns) {\n return {};\n }\n\n return {\n movableColumns: true,\n };\n };\n\n private readonly handleMoveColumn = (\n _,\n components: TabulatorColumnComponent[]\n ) => {\n if (!this.movableColumns) {\n return;\n }\n\n const columns = components.map(this.findColumn).filter(Boolean);\n this.changeColumns.emit(columns);\n };\n\n private readonly findColumn = (\n component: TabulatorColumnComponent\n ): Column => {\n return this.columns.find((column) => {\n return (\n column.field === component.getField() &&\n column.title === component.getDefinition().title\n );\n });\n };\n\n render() {\n const totalRows = this.totalRows ?? this.data.length;\n\n return (\n <Host\n class={{\n 'has-low-density': this.layout === 'lowDensity',\n 'has-pagination-on-top': this.paginationLocation === 'top',\n }}\n >\n <div\n id=\"tabulator-container\"\n class={{\n 'has-pagination': totalRows > this.pageSize,\n 'has-aggregation': this.hasAggregation(this.columns),\n 'has-movable-columns': this.movableColumns,\n 'has-rowselector': this.selectable,\n 'has-selection': this.tableSelection?.hasSelection,\n }}\n >\n {/* Toggle style instead of removing the loader\n because removing the element will cause a rerender, breaking the\n tabulator table */}\n <div\n id=\"tabulator-loader\"\n style={{ display: this.loading ? 'flex' : 'none' }}\n >\n <limel-spinner size=\"large\" />\n </div>\n {this.renderEmptyMessage()}\n {this.renderSelectAll()}\n <div id=\"tabulator-table\" />\n </div>\n </Host>\n );\n }\n\n private renderSelectAll() {\n if (!this.selectable) {\n return;\n }\n\n const showSelectAll = !this.loading && this.tableSelection;\n\n return (\n <div\n class=\"select-all\"\n style={{ display: showSelectAll ? 'inline-block' : 'none' }}\n >\n <limel-checkbox\n class=\"hide-label\"\n onChange={this.selectAllOnChange}\n disabled={this.data.length === 0}\n checked={this.tableSelection?.hasSelection}\n indeterminate={\n this.tableSelection?.hasSelection &&\n this.selection?.length < this.data.length\n }\n label={this.getTranslation('table.select-all')}\n />\n </div>\n );\n }\n\n private renderEmptyMessage() {\n const showEmptyMessage =\n !this.loading && this.data.length === 0 && this.emptyMessage;\n\n return (\n <div\n id=\"tabulator-empty-text\"\n style={{ display: showEmptyMessage ? 'flex' : 'none' }}\n >\n <span>{this.emptyMessage}</span>\n </div>\n );\n }\n\n private getTranslation = (key: string) => {\n return translate.get(key, this.language);\n };\n}\n"]}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { forceUpdate } from '@stencil/core';
|
|
2
1
|
const eventHandlers = new WeakMap();
|
|
3
2
|
class EnterClickable {
|
|
4
3
|
constructor(element) {
|
|
@@ -6,24 +5,20 @@ class EnterClickable {
|
|
|
6
5
|
this.isActive = false;
|
|
7
6
|
this.hasJustReleasedEnter = true;
|
|
8
7
|
this.handleKeyDown = (event) => {
|
|
9
|
-
|
|
10
|
-
if (event.key === 'Enter' && !this.isActive) {
|
|
8
|
+
if (event.key === 'Enter' && !this.isActive && !event.repeat) {
|
|
11
9
|
this.isActive = true;
|
|
12
|
-
if ((_a = this.element) === null || _a === void 0 ? void 0 : _a.shadowRoot) {
|
|
13
|
-
forceUpdate(this.element);
|
|
14
|
-
}
|
|
15
10
|
}
|
|
16
11
|
};
|
|
17
12
|
this.handleKeyUp = (event) => {
|
|
18
|
-
var _a;
|
|
19
13
|
if (event.key === 'Enter' && this.isActive) {
|
|
20
14
|
this.isActive = false;
|
|
21
15
|
this.hasJustReleasedEnter = true;
|
|
22
|
-
if ((_a = this.element) === null || _a === void 0 ? void 0 : _a.shadowRoot) {
|
|
23
|
-
forceUpdate(this.element);
|
|
24
|
-
}
|
|
25
16
|
}
|
|
26
17
|
};
|
|
18
|
+
this.handleBlur = () => {
|
|
19
|
+
this.isActive = false;
|
|
20
|
+
this.hasJustReleasedEnter = true;
|
|
21
|
+
};
|
|
27
22
|
this.handleClick = (event) => {
|
|
28
23
|
if (!this.isActive) {
|
|
29
24
|
return;
|
|
@@ -37,23 +32,39 @@ class EnterClickable {
|
|
|
37
32
|
this.callbacks = {
|
|
38
33
|
keydownHandler: this.handleKeyDown.bind(this),
|
|
39
34
|
keyupHandler: this.handleKeyUp.bind(this),
|
|
35
|
+
blurHandler: this.handleBlur.bind(this),
|
|
40
36
|
clickHandler: this.handleClick.bind(this),
|
|
41
37
|
};
|
|
42
38
|
}
|
|
43
39
|
enable() {
|
|
44
40
|
this.element.addEventListener('keydown', this.callbacks.keydownHandler);
|
|
45
41
|
this.element.addEventListener('keyup', this.callbacks.keyupHandler);
|
|
42
|
+
this.element.addEventListener('blur', this.callbacks.blurHandler);
|
|
46
43
|
this.element.addEventListener('click', this.callbacks.clickHandler, true);
|
|
47
44
|
}
|
|
48
45
|
disable() {
|
|
49
46
|
this.element.removeEventListener('keydown', this.callbacks.keydownHandler);
|
|
50
47
|
this.element.removeEventListener('keyup', this.callbacks.keyupHandler);
|
|
48
|
+
this.element.removeEventListener('blur', this.callbacks.blurHandler);
|
|
51
49
|
this.element.removeEventListener('click', this.callbacks.clickHandler, true);
|
|
52
50
|
}
|
|
53
51
|
}
|
|
54
52
|
/**
|
|
55
|
-
* Overrides the default browser behavior for clickable elements
|
|
56
|
-
* When focused and pressing down
|
|
53
|
+
* Overrides the default browser behavior for clickable elements.
|
|
54
|
+
* When focused and pressing down Enter, avoids calling onClick repeatedly.
|
|
55
|
+
*
|
|
56
|
+
* **Accessibility Context:**
|
|
57
|
+
* Per WCAG 2.1 guidelines, keyboard users must be able to activate buttons and
|
|
58
|
+
* clickable elements using both Enter and Space keys. Browsers natively support
|
|
59
|
+
* both keys on button elements, allowing keyboard-only users full access to
|
|
60
|
+
* interactive controls.
|
|
61
|
+
*
|
|
62
|
+
* **Why only Enter, not Space?**
|
|
63
|
+
* - Enter key: Fires click events repeatedly while held down (browser bug/quirk)
|
|
64
|
+
* - Space key: Fires click only once on keyup (correct behavior)
|
|
65
|
+
*
|
|
66
|
+
* This utility only fixes the problematic Enter key behavior. Space key
|
|
67
|
+
* works correctly by default and doesn't need intervention.
|
|
57
68
|
*
|
|
58
69
|
* @param element - The clickable element
|
|
59
70
|
*/
|
|
@@ -65,8 +76,11 @@ export function makeEnterClickable(element) {
|
|
|
65
76
|
}
|
|
66
77
|
}
|
|
67
78
|
/**
|
|
79
|
+
* Removes the keyboard-enter click override behavior from an element.
|
|
80
|
+
* Call this during teardown (e.g. `disconnectedCallback`) to avoid leaking
|
|
81
|
+
* event listeners.
|
|
68
82
|
*
|
|
69
|
-
* @param element
|
|
83
|
+
* @param element - The clickable element
|
|
70
84
|
*/
|
|
71
85
|
export function removeEnterClickable(element) {
|
|
72
86
|
const enterClickable = eventHandlers.get(element);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"make-enter-clickable.js","sourceRoot":"","sources":["../../src/util/make-enter-clickable.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"make-enter-clickable.js","sourceRoot":"","sources":["../../src/util/make-enter-clickable.ts"],"names":[],"mappings":"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","sourcesContent":["const eventHandlers: WeakMap<HTMLElement, EnterClickable> = new WeakMap();\n\nclass EnterClickable {\n private isActive = false;\n private hasJustReleasedEnter = true;\n\n constructor(private element: HTMLElement) {}\n\n private handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Enter' && !this.isActive && !event.repeat) {\n this.isActive = true;\n }\n };\n\n private handleKeyUp = (event: KeyboardEvent) => {\n if (event.key === 'Enter' && this.isActive) {\n this.isActive = false;\n this.hasJustReleasedEnter = true;\n }\n };\n\n private handleBlur = () => {\n this.isActive = false;\n this.hasJustReleasedEnter = true;\n };\n\n private handleClick = (event: MouseEvent) => {\n if (!this.isActive) {\n return;\n }\n\n if (this.hasJustReleasedEnter) {\n this.hasJustReleasedEnter = false;\n\n return;\n }\n\n event.stopImmediatePropagation();\n };\n\n private callbacks: CallBacks = {\n keydownHandler: this.handleKeyDown.bind(this),\n keyupHandler: this.handleKeyUp.bind(this),\n blurHandler: this.handleBlur.bind(this),\n clickHandler: this.handleClick.bind(this),\n };\n\n public enable() {\n this.element.addEventListener('keydown', this.callbacks.keydownHandler);\n this.element.addEventListener('keyup', this.callbacks.keyupHandler);\n this.element.addEventListener('blur', this.callbacks.blurHandler);\n this.element.addEventListener(\n 'click',\n this.callbacks.clickHandler,\n true\n );\n }\n\n public disable() {\n this.element.removeEventListener(\n 'keydown',\n this.callbacks.keydownHandler\n );\n this.element.removeEventListener('keyup', this.callbacks.keyupHandler);\n this.element.removeEventListener('blur', this.callbacks.blurHandler);\n this.element.removeEventListener(\n 'click',\n this.callbacks.clickHandler,\n true\n );\n }\n}\n\n/**\n * Overrides the default browser behavior for clickable elements.\n * When focused and pressing down Enter, avoids calling onClick repeatedly.\n *\n * **Accessibility Context:**\n * Per WCAG 2.1 guidelines, keyboard users must be able to activate buttons and\n * clickable elements using both Enter and Space keys. Browsers natively support\n * both keys on button elements, allowing keyboard-only users full access to\n * interactive controls.\n *\n * **Why only Enter, not Space?**\n * - Enter key: Fires click events repeatedly while held down (browser bug/quirk)\n * - Space key: Fires click only once on keyup (correct behavior)\n *\n * This utility only fixes the problematic Enter key behavior. Space key\n * works correctly by default and doesn't need intervention.\n *\n * @param element - The clickable element\n */\nexport function makeEnterClickable(element: HTMLElement) {\n if (!eventHandlers.has(element)) {\n const enterClickable = new EnterClickable(element);\n enterClickable.enable();\n eventHandlers.set(element, enterClickable);\n }\n}\n\n/**\n * Removes the keyboard-enter click override behavior from an element.\n * Call this during teardown (e.g. `disconnectedCallback`) to avoid leaking\n * event listeners.\n *\n * @param element - The clickable element\n */\nexport function removeEnterClickable(element: HTMLElement) {\n const enterClickable: EnterClickable = eventHandlers.get(element);\n if (enterClickable) {\n enterClickable.disable();\n eventHandlers.delete(element);\n }\n}\n\ninterface CallBacks {\n keydownHandler: (arg: KeyboardEvent) => void;\n keyupHandler: (arg: KeyboardEvent) => void;\n blurHandler: () => void;\n clickHandler: (arg: MouseEvent) => void;\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { h } from './index-
|
|
1
|
+
import { h } from './index-0c4503aa.js';
|
|
2
2
|
|
|
3
3
|
const CheckboxTemplate = (props) => {
|
|
4
4
|
const inputProps = {};
|
|
@@ -53,4 +53,4 @@ const HelperText = (props) => {
|
|
|
53
53
|
|
|
54
54
|
export { CheckboxTemplate as C };
|
|
55
55
|
|
|
56
|
-
//# sourceMappingURL=checkbox.template-
|
|
56
|
+
//# sourceMappingURL=checkbox.template-024bb3b3.js.map
|