lsp-grid 1.0.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 +34 -0
- package/dist/cjs/app-globals-Bfsg1bDt.js +16 -0
- package/dist/cjs/app-globals-Bfsg1bDt.js.map +1 -0
- package/dist/cjs/cell-renderer-DtuYp7tj.js +106 -0
- package/dist/cjs/cell-renderer-DtuYp7tj.js.map +1 -0
- package/dist/cjs/column.drag.plugin-BIptTmfz.js +2554 -0
- package/dist/cjs/column.drag.plugin-BIptTmfz.js.map +1 -0
- package/dist/cjs/column.service-BnVSAfcu.js +1391 -0
- package/dist/cjs/column.service-BnVSAfcu.js.map +1 -0
- package/dist/cjs/data.store-CrF4Nf9q.js +3615 -0
- package/dist/cjs/data.store-CrF4Nf9q.js.map +1 -0
- package/dist/cjs/debounce-DgeyTQM0.js +498 -0
- package/dist/cjs/debounce-DgeyTQM0.js.map +1 -0
- package/dist/cjs/edit.utils-Bw-E3Fj6.js +118 -0
- package/dist/cjs/edit.utils-Bw-E3Fj6.js.map +1 -0
- package/dist/cjs/events-D0Syn6ut.js +46 -0
- package/dist/cjs/events-D0Syn6ut.js.map +1 -0
- package/dist/cjs/filter.button-CaAAXq-6.js +49 -0
- package/dist/cjs/filter.button-CaAAXq-6.js.map +1 -0
- package/dist/cjs/header-cell-renderer-DhRJqZ-w.js +356 -0
- package/dist/cjs/header-cell-renderer-DhRJqZ-w.js.map +1 -0
- package/dist/cjs/index-VM40U6Gh.js +2549 -0
- package/dist/cjs/index-VM40U6Gh.js.map +1 -0
- package/dist/cjs/index.cjs.js +346 -0
- package/dist/cjs/index.cjs.js.map +1 -0
- package/dist/cjs/loader.cjs.js +19 -0
- package/dist/cjs/loader.cjs.js.map +1 -0
- package/dist/cjs/revo-grid.cjs.entry.js +2187 -0
- package/dist/cjs/revo-grid.cjs.entry.js.map +1 -0
- package/dist/cjs/revo-grid.cjs.js +31 -0
- package/dist/cjs/revo-grid.cjs.js.map +1 -0
- package/dist/cjs/revo-grid.entry.cjs.js.map +1 -0
- package/dist/cjs/revogr-attribution.revogr-extra.revogr-focus.revogr-overlay-selection.revogr-row-headers.revogr-scroll-virtual.revogr-temp-range.entry.cjs.js.map +1 -0
- package/dist/cjs/revogr-attribution_7.cjs.entry.js +1463 -0
- package/dist/cjs/revogr-attribution_7.cjs.entry.js.map +1 -0
- package/dist/cjs/revogr-clipboard.revogr-edit.revogr-order-editor.entry.cjs.js.map +1 -0
- package/dist/cjs/revogr-clipboard_3.cjs.entry.js +456 -0
- package/dist/cjs/revogr-clipboard_3.cjs.entry.js.map +1 -0
- package/dist/cjs/revogr-data.revogr-header.revogr-viewport-scroll.vnode-html.entry.cjs.js.map +1 -0
- package/dist/cjs/revogr-data_4.cjs.entry.js +948 -0
- package/dist/cjs/revogr-data_4.cjs.entry.js.map +1 -0
- package/dist/cjs/revogr-filter-panel.cjs.entry.js +382 -0
- package/dist/cjs/revogr-filter-panel.cjs.entry.js.map +1 -0
- package/dist/cjs/revogr-filter-panel.entry.cjs.js.map +1 -0
- package/dist/cjs/row-header-utils-DL640c7x.js +420 -0
- package/dist/cjs/row-header-utils-DL640c7x.js.map +1 -0
- package/dist/cjs/text-editor-DWChyeVV.js +81 -0
- package/dist/cjs/text-editor-DWChyeVV.js.map +1 -0
- package/dist/cjs/throttle-Bb1Bbfd1.js +278 -0
- package/dist/cjs/throttle-Bb1Bbfd1.js.map +1 -0
- package/dist/cjs/viewport.helpers-CI6uB8tu.js +59 -0
- package/dist/cjs/viewport.helpers-CI6uB8tu.js.map +1 -0
- package/dist/collection/collection-manifest.json +28 -0
- package/dist/collection/components/attribution/revogr-attribution.js +20 -0
- package/dist/collection/components/attribution/revogr-attribution.js.map +1 -0
- package/dist/collection/components/clipboard/revogr-clipboard.js +396 -0
- package/dist/collection/components/clipboard/revogr-clipboard.js.map +1 -0
- package/dist/collection/components/data/cell-renderer.js +44 -0
- package/dist/collection/components/data/cell-renderer.js.map +1 -0
- package/dist/collection/components/data/column.service.js +293 -0
- package/dist/collection/components/data/column.service.js.map +1 -0
- package/dist/collection/components/data/revogr-data-style.css +75 -0
- package/dist/collection/components/data/revogr-data.js +697 -0
- package/dist/collection/components/data/revogr-data.js.map +1 -0
- package/dist/collection/components/data/row-highlight.plugin.js +51 -0
- package/dist/collection/components/data/row-highlight.plugin.js.map +1 -0
- package/dist/collection/components/data/row-renderer.js +16 -0
- package/dist/collection/components/data/row-renderer.js.map +1 -0
- package/dist/collection/components/editors/edit.utils.js +13 -0
- package/dist/collection/components/editors/edit.utils.js.map +1 -0
- package/dist/collection/components/editors/revogr-edit-style.css +16 -0
- package/dist/collection/components/editors/revogr-edit.js +346 -0
- package/dist/collection/components/editors/revogr-edit.js.map +1 -0
- package/dist/collection/components/editors/text-editor.js +74 -0
- package/dist/collection/components/editors/text-editor.js.map +1 -0
- package/dist/collection/components/extra/revogr-extra.js +125 -0
- package/dist/collection/components/extra/revogr-extra.js.map +1 -0
- package/dist/collection/components/header/header-cell-renderer.js +34 -0
- package/dist/collection/components/header/header-cell-renderer.js.map +1 -0
- package/dist/collection/components/header/header-group-renderer.js +25 -0
- package/dist/collection/components/header/header-group-renderer.js.map +1 -0
- package/dist/collection/components/header/header-renderer.js +61 -0
- package/dist/collection/components/header/header-renderer.js.map +1 -0
- package/dist/collection/components/header/resizable.directive.js +237 -0
- package/dist/collection/components/header/resizable.directive.js.map +1 -0
- package/dist/collection/components/header/resizable.element.js +38 -0
- package/dist/collection/components/header/resizable.element.js.map +1 -0
- package/dist/collection/components/header/revogr-header-style.css +144 -0
- package/dist/collection/components/header/revogr-header.js +573 -0
- package/dist/collection/components/header/revogr-header.js.map +1 -0
- package/dist/collection/components/order/order-renderer.js +50 -0
- package/dist/collection/components/order/order-renderer.js.map +1 -0
- package/dist/collection/components/order/order-row.service.js +72 -0
- package/dist/collection/components/order/order-row.service.js.map +1 -0
- package/dist/collection/components/order/revogr-order-editor.js +461 -0
- package/dist/collection/components/order/revogr-order-editor.js.map +1 -0
- package/dist/collection/components/overlay/autofill.service.js +224 -0
- package/dist/collection/components/overlay/autofill.service.js.map +1 -0
- package/dist/collection/components/overlay/keyboard.service.js +158 -0
- package/dist/collection/components/overlay/keyboard.service.js.map +1 -0
- package/dist/collection/components/overlay/revogr-overlay-selection.js +1515 -0
- package/dist/collection/components/overlay/revogr-overlay-selection.js.map +1 -0
- package/dist/collection/components/overlay/revogr-overlay-style.css +95 -0
- package/dist/collection/components/overlay/selection.utils.js +136 -0
- package/dist/collection/components/overlay/selection.utils.js.map +1 -0
- package/dist/collection/components/revoGrid/grid.helpers.js +33 -0
- package/dist/collection/components/revoGrid/grid.helpers.js.map +1 -0
- package/dist/collection/components/revoGrid/plugin.service.js +81 -0
- package/dist/collection/components/revoGrid/plugin.service.js.map +1 -0
- package/dist/collection/components/revoGrid/revo-grid-style.css +567 -0
- package/dist/collection/components/revoGrid/revo-grid.js +3671 -0
- package/dist/collection/components/revoGrid/revo-grid.js.map +1 -0
- package/dist/collection/components/revoGrid/viewport.helpers.js +49 -0
- package/dist/collection/components/revoGrid/viewport.helpers.js.map +1 -0
- package/dist/collection/components/revoGrid/viewport.resize.service.js +55 -0
- package/dist/collection/components/revoGrid/viewport.resize.service.js.map +1 -0
- package/dist/collection/components/revoGrid/viewport.scrolling.service.js +90 -0
- package/dist/collection/components/revoGrid/viewport.scrolling.service.js.map +1 -0
- package/dist/collection/components/revoGrid/viewport.service.js +237 -0
- package/dist/collection/components/revoGrid/viewport.service.js.map +1 -0
- package/dist/collection/components/rowHeaders/revogr-row-headers.js +291 -0
- package/dist/collection/components/rowHeaders/revogr-row-headers.js.map +1 -0
- package/dist/collection/components/rowHeaders/row-header-render.js +5 -0
- package/dist/collection/components/rowHeaders/row-header-render.js.map +1 -0
- package/dist/collection/components/scroll/revogr-viewport-scroll-style.css +69 -0
- package/dist/collection/components/scroll/revogr-viewport-scroll.js +601 -0
- package/dist/collection/components/scroll/revogr-viewport-scroll.js.map +1 -0
- package/dist/collection/components/scrollable/autohide-scroll.plugin.js +44 -0
- package/dist/collection/components/scrollable/autohide-scroll.plugin.js.map +1 -0
- package/dist/collection/components/scrollable/revogr-scroll-style.css +34 -0
- package/dist/collection/components/scrollable/revogr-scroll-virtual.js +295 -0
- package/dist/collection/components/scrollable/revogr-scroll-virtual.js.map +1 -0
- package/dist/collection/components/selectionFocus/revogr-focus-style.css +7 -0
- package/dist/collection/components/selectionFocus/revogr-focus.js +400 -0
- package/dist/collection/components/selectionFocus/revogr-focus.js.map +1 -0
- package/dist/collection/components/selectionTempRange/revogr-temp-range-style.css +28 -0
- package/dist/collection/components/selectionTempRange/revogr-temp-range.js +171 -0
- package/dist/collection/components/selectionTempRange/revogr-temp-range.js.map +1 -0
- package/dist/collection/components/vnode/vnode-converter.js +84 -0
- package/dist/collection/components/vnode/vnode-converter.js.map +1 -0
- package/dist/collection/components/vnode/vnode.utils.js +18 -0
- package/dist/collection/components/vnode/vnode.utils.js.map +1 -0
- package/dist/collection/global/global.js +19 -0
- package/dist/collection/global/global.js.map +1 -0
- package/dist/collection/index.js +13 -0
- package/dist/collection/index.js.map +1 -0
- package/dist/collection/plugins/add-rows-on-paste.plugin.js +40 -0
- package/dist/collection/plugins/add-rows-on-paste.plugin.js.map +1 -0
- package/dist/collection/plugins/base.plugin.js +90 -0
- package/dist/collection/plugins/base.plugin.js.map +1 -0
- package/dist/collection/plugins/column.auto-size.plugin.js +225 -0
- package/dist/collection/plugins/column.auto-size.plugin.js.map +1 -0
- package/dist/collection/plugins/column.stretch.plugin.js +96 -0
- package/dist/collection/plugins/column.stretch.plugin.js.map +1 -0
- package/dist/collection/plugins/dispatcher.js +40 -0
- package/dist/collection/plugins/dispatcher.js.map +1 -0
- package/dist/collection/plugins/export/csv.js +72 -0
- package/dist/collection/plugins/export/csv.js.map +1 -0
- package/dist/collection/plugins/export/export.plugin.js +157 -0
- package/dist/collection/plugins/export/export.plugin.js.map +1 -0
- package/dist/collection/plugins/export/types.js +2 -0
- package/dist/collection/plugins/export/types.js.map +1 -0
- package/dist/collection/plugins/filter/conditions/equal.js +21 -0
- package/dist/collection/plugins/filter/conditions/equal.js.map +1 -0
- package/dist/collection/plugins/filter/conditions/number/greaterThan.js +14 -0
- package/dist/collection/plugins/filter/conditions/number/greaterThan.js.map +1 -0
- package/dist/collection/plugins/filter/conditions/number/greaterThanOrEqual.js +11 -0
- package/dist/collection/plugins/filter/conditions/number/greaterThanOrEqual.js.map +1 -0
- package/dist/collection/plugins/filter/conditions/number/lessThan.js +16 -0
- package/dist/collection/plugins/filter/conditions/number/lessThan.js.map +1 -0
- package/dist/collection/plugins/filter/conditions/number/lessThanOrEqual.js +11 -0
- package/dist/collection/plugins/filter/conditions/number/lessThanOrEqual.js.map +1 -0
- package/dist/collection/plugins/filter/conditions/set.js +7 -0
- package/dist/collection/plugins/filter/conditions/set.js.map +1 -0
- package/dist/collection/plugins/filter/conditions/string/beginswith.js +21 -0
- package/dist/collection/plugins/filter/conditions/string/beginswith.js.map +1 -0
- package/dist/collection/plugins/filter/conditions/string/contains.js +25 -0
- package/dist/collection/plugins/filter/conditions/string/contains.js.map +1 -0
- package/dist/collection/plugins/filter/filter.button.js +28 -0
- package/dist/collection/plugins/filter/filter.button.js.map +1 -0
- package/dist/collection/plugins/filter/filter.indexed.js +49 -0
- package/dist/collection/plugins/filter/filter.indexed.js.map +1 -0
- package/dist/collection/plugins/filter/filter.panel.js +610 -0
- package/dist/collection/plugins/filter/filter.panel.js.map +1 -0
- package/dist/collection/plugins/filter/filter.plugin.js +388 -0
- package/dist/collection/plugins/filter/filter.plugin.js.map +1 -0
- package/dist/collection/plugins/filter/filter.style.css +165 -0
- package/dist/collection/plugins/filter/filter.types.js +9 -0
- package/dist/collection/plugins/filter/filter.types.js.map +1 -0
- package/dist/collection/plugins/groupingRow/grouping.const.js +16 -0
- package/dist/collection/plugins/groupingRow/grouping.const.js.map +1 -0
- package/dist/collection/plugins/groupingRow/grouping.row.expand.service.js +79 -0
- package/dist/collection/plugins/groupingRow/grouping.row.expand.service.js.map +1 -0
- package/dist/collection/plugins/groupingRow/grouping.row.plugin.js +245 -0
- package/dist/collection/plugins/groupingRow/grouping.row.plugin.js.map +1 -0
- package/dist/collection/plugins/groupingRow/grouping.row.renderer.js +38 -0
- package/dist/collection/plugins/groupingRow/grouping.row.renderer.js.map +1 -0
- package/dist/collection/plugins/groupingRow/grouping.row.types.js +2 -0
- package/dist/collection/plugins/groupingRow/grouping.row.types.js.map +1 -0
- package/dist/collection/plugins/groupingRow/grouping.service.js +178 -0
- package/dist/collection/plugins/groupingRow/grouping.service.js.map +1 -0
- package/dist/collection/plugins/groupingRow/grouping.trimmed.service.js +61 -0
- package/dist/collection/plugins/groupingRow/grouping.trimmed.service.js.map +1 -0
- package/dist/collection/plugins/index.js +15 -0
- package/dist/collection/plugins/index.js.map +1 -0
- package/dist/collection/plugins/moveColumn/column.drag.plugin.js +175 -0
- package/dist/collection/plugins/moveColumn/column.drag.plugin.js.map +1 -0
- package/dist/collection/plugins/moveColumn/order-column.handler.js +71 -0
- package/dist/collection/plugins/moveColumn/order-column.handler.js.map +1 -0
- package/dist/collection/plugins/rtl/rtl.plugin.js +110 -0
- package/dist/collection/plugins/rtl/rtl.plugin.js.map +1 -0
- package/dist/collection/plugins/sorting/sorting.func.js +82 -0
- package/dist/collection/plugins/sorting/sorting.func.js.map +1 -0
- package/dist/collection/plugins/sorting/sorting.plugin.js +224 -0
- package/dist/collection/plugins/sorting/sorting.plugin.js.map +1 -0
- package/dist/collection/plugins/sorting/sorting.sign.js +9 -0
- package/dist/collection/plugins/sorting/sorting.sign.js.map +1 -0
- package/dist/collection/plugins/sorting/sorting.types.js +2 -0
- package/dist/collection/plugins/sorting/sorting.types.js.map +1 -0
- package/dist/collection/plugins/wcag/index.js +84 -0
- package/dist/collection/plugins/wcag/index.js.map +1 -0
- package/dist/collection/serve/controller.js +344 -0
- package/dist/collection/serve/data.js +201 -0
- package/dist/collection/services/cell.helpers.js +12 -0
- package/dist/collection/services/cell.helpers.js.map +1 -0
- package/dist/collection/services/column.data.provider.js +119 -0
- package/dist/collection/services/column.data.provider.js.map +1 -0
- package/dist/collection/services/data.provider.js +89 -0
- package/dist/collection/services/data.provider.js.map +1 -0
- package/dist/collection/services/dimension.provider.js +176 -0
- package/dist/collection/services/dimension.provider.js.map +1 -0
- package/dist/collection/services/local.scroll.service.js +124 -0
- package/dist/collection/services/local.scroll.service.js.map +1 -0
- package/dist/collection/services/local.scroll.timer.js +81 -0
- package/dist/collection/services/local.scroll.timer.js.map +1 -0
- package/dist/collection/services/selection.store.connector.js +307 -0
- package/dist/collection/services/selection.store.connector.js.map +1 -0
- package/dist/collection/services/viewport.provider.js +17 -0
- package/dist/collection/services/viewport.provider.js.map +1 -0
- package/dist/collection/store/dataSource/data.proxy.js +45 -0
- package/dist/collection/store/dataSource/data.proxy.js.map +1 -0
- package/dist/collection/store/dataSource/data.store.js +144 -0
- package/dist/collection/store/dataSource/data.store.js.map +1 -0
- package/dist/collection/store/dataSource/index.js +7 -0
- package/dist/collection/store/dataSource/index.js.map +1 -0
- package/dist/collection/store/dataSource/trimmed.plugin.js +34 -0
- package/dist/collection/store/dataSource/trimmed.plugin.js.map +1 -0
- package/dist/collection/store/dimension/dimension.helpers.js +101 -0
- package/dist/collection/store/dimension/dimension.helpers.js.map +1 -0
- package/dist/collection/store/dimension/dimension.recalculate.plugin.js +35 -0
- package/dist/collection/store/dimension/dimension.recalculate.plugin.js.map +1 -0
- package/dist/collection/store/dimension/dimension.store.js +109 -0
- package/dist/collection/store/dimension/dimension.store.js.map +1 -0
- package/dist/collection/store/dimension/dimension.trim.plugin.js +61 -0
- package/dist/collection/store/dimension/dimension.trim.plugin.js.map +1 -0
- package/dist/collection/store/dimension/index.js +6 -0
- package/dist/collection/store/dimension/index.js.map +1 -0
- package/dist/collection/store/index.js +17 -0
- package/dist/collection/store/index.js.map +1 -0
- package/dist/collection/store/selection/index.js +6 -0
- package/dist/collection/store/selection/index.js.map +1 -0
- package/dist/collection/store/selection/selection.helpers.js +53 -0
- package/dist/collection/store/selection/selection.helpers.js.map +1 -0
- package/dist/collection/store/selection/selection.store.js +85 -0
- package/dist/collection/store/selection/selection.store.js.map +1 -0
- package/dist/collection/store/vp/index.js +6 -0
- package/dist/collection/store/vp/index.js.map +1 -0
- package/dist/collection/store/vp/viewport.helpers.js +251 -0
- package/dist/collection/store/vp/viewport.helpers.js.map +1 -0
- package/dist/collection/store/vp/viewport.store.js +151 -0
- package/dist/collection/store/vp/viewport.store.js.map +1 -0
- package/dist/collection/themeManager/theme.compact.js +9 -0
- package/dist/collection/themeManager/theme.compact.js.map +1 -0
- package/dist/collection/themeManager/theme.default.js +9 -0
- package/dist/collection/themeManager/theme.default.js.map +1 -0
- package/dist/collection/themeManager/theme.material.js +9 -0
- package/dist/collection/themeManager/theme.material.js.map +1 -0
- package/dist/collection/themeManager/theme.service.js +53 -0
- package/dist/collection/themeManager/theme.service.js.map +1 -0
- package/dist/collection/types/dimension.js +2 -0
- package/dist/collection/types/dimension.js.map +1 -0
- package/dist/collection/types/events.js +118 -0
- package/dist/collection/types/events.js.map +1 -0
- package/dist/collection/types/index.js +12 -0
- package/dist/collection/types/index.js.map +1 -0
- package/dist/collection/types/interfaces.js +2 -0
- package/dist/collection/types/interfaces.js.map +1 -0
- package/dist/collection/types/plugin.js +2 -0
- package/dist/collection/types/plugin.js.map +1 -0
- package/dist/collection/types/plugin.types.js +2 -0
- package/dist/collection/types/plugin.types.js.map +1 -0
- package/dist/collection/types/selection.js +2 -0
- package/dist/collection/types/selection.js.map +1 -0
- package/dist/collection/types/theme.js +2 -0
- package/dist/collection/types/theme.js.map +1 -0
- package/dist/collection/types/viewport.interfaces.js +2 -0
- package/dist/collection/types/viewport.interfaces.js.map +1 -0
- package/dist/collection/utils/browser.js +7 -0
- package/dist/collection/utils/browser.js.map +1 -0
- package/dist/collection/utils/closest.polifill.js +22 -0
- package/dist/collection/utils/closest.polifill.js.map +1 -0
- package/dist/collection/utils/column.utils.js +153 -0
- package/dist/collection/utils/column.utils.js.map +1 -0
- package/dist/collection/utils/consts.js +26 -0
- package/dist/collection/utils/consts.js.map +1 -0
- package/dist/collection/utils/events.js +39 -0
- package/dist/collection/utils/events.js.map +1 -0
- package/dist/collection/utils/header.utils.js +24 -0
- package/dist/collection/utils/header.utils.js.map +1 -0
- package/dist/collection/utils/index.js +140 -0
- package/dist/collection/utils/index.js.map +1 -0
- package/dist/collection/utils/key.codes.js +80 -0
- package/dist/collection/utils/key.codes.js.map +1 -0
- package/dist/collection/utils/key.utils.js +90 -0
- package/dist/collection/utils/key.utils.js.map +1 -0
- package/dist/collection/utils/mobile.js +7 -0
- package/dist/collection/utils/mobile.js.map +1 -0
- package/dist/collection/utils/platform.js +9 -0
- package/dist/collection/utils/platform.js.map +1 -0
- package/dist/collection/utils/row-header-utils.js +9 -0
- package/dist/collection/utils/row-header-utils.js.map +1 -0
- package/dist/collection/utils/store.types.js +2 -0
- package/dist/collection/utils/store.types.js.map +1 -0
- package/dist/collection/utils/store.utils.js +15 -0
- package/dist/collection/utils/store.utils.js.map +1 -0
- package/dist/esm/app-globals-FBz64o-g.js +14 -0
- package/dist/esm/app-globals-FBz64o-g.js.map +1 -0
- package/dist/esm/cell-renderer-Ca_PCGjJ.js +98 -0
- package/dist/esm/cell-renderer-Ca_PCGjJ.js.map +1 -0
- package/dist/esm/column.drag.plugin-BtuUyB-2.js +2528 -0
- package/dist/esm/column.drag.plugin-BtuUyB-2.js.map +1 -0
- package/dist/esm/column.service-CTqFIQUy.js +1343 -0
- package/dist/esm/column.service-CTqFIQUy.js.map +1 -0
- package/dist/esm/data.store-B-lvmoFH.js +3553 -0
- package/dist/esm/data.store-B-lvmoFH.js.map +1 -0
- package/dist/esm/debounce-DTUQ1fY7.js +488 -0
- package/dist/esm/debounce-DTUQ1fY7.js.map +1 -0
- package/dist/esm/edit.utils-CyCANCLB.js +103 -0
- package/dist/esm/edit.utils-CyCANCLB.js.map +1 -0
- package/dist/esm/events-CKtYJJSv.js +43 -0
- package/dist/esm/events-CKtYJJSv.js.map +1 -0
- package/dist/esm/filter.button-CjABZQgg.js +39 -0
- package/dist/esm/filter.button-CjABZQgg.js.map +1 -0
- package/dist/esm/header-cell-renderer-DnjpJuXq.js +351 -0
- package/dist/esm/header-cell-renderer-DnjpJuXq.js.map +1 -0
- package/dist/esm/index-BAoInZ4V.js +2519 -0
- package/dist/esm/index-BAoInZ4V.js.map +1 -0
- package/dist/esm/index.js +181 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/loader.js +17 -0
- package/dist/esm/loader.js.map +1 -0
- package/dist/esm/revo-grid.entry.js +2185 -0
- package/dist/esm/revo-grid.entry.js.map +1 -0
- package/dist/esm/revo-grid.js +27 -0
- package/dist/esm/revo-grid.js.map +1 -0
- package/dist/esm/revogr-attribution.revogr-extra.revogr-focus.revogr-overlay-selection.revogr-row-headers.revogr-scroll-virtual.revogr-temp-range.entry.js.map +1 -0
- package/dist/esm/revogr-attribution_7.entry.js +1455 -0
- package/dist/esm/revogr-attribution_7.entry.js.map +1 -0
- package/dist/esm/revogr-clipboard.revogr-edit.revogr-order-editor.entry.js.map +1 -0
- package/dist/esm/revogr-clipboard_3.entry.js +452 -0
- package/dist/esm/revogr-clipboard_3.entry.js.map +1 -0
- package/dist/esm/revogr-data.revogr-header.revogr-viewport-scroll.vnode-html.entry.js.map +1 -0
- package/dist/esm/revogr-data_4.entry.js +943 -0
- package/dist/esm/revogr-data_4.entry.js.map +1 -0
- package/dist/esm/revogr-filter-panel.entry.js +380 -0
- package/dist/esm/revogr-filter-panel.entry.js.map +1 -0
- package/dist/esm/row-header-utils-vnoLGj5A.js +407 -0
- package/dist/esm/row-header-utils-vnoLGj5A.js.map +1 -0
- package/dist/esm/text-editor-Cp7lwBZi.js +79 -0
- package/dist/esm/text-editor-Cp7lwBZi.js.map +1 -0
- package/dist/esm/throttle-DiUrHjcY.js +273 -0
- package/dist/esm/throttle-DiUrHjcY.js.map +1 -0
- package/dist/esm/viewport.helpers-Ch4AQMMg.js +53 -0
- package/dist/esm/viewport.helpers-Ch4AQMMg.js.map +1 -0
- package/dist/index.cjs.js +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/revo-grid/app-globals-FBz64o-g.js +14 -0
- package/dist/revo-grid/app-globals-FBz64o-g.js.map +1 -0
- package/dist/revo-grid/cell-renderer-Ca_PCGjJ.js +98 -0
- package/dist/revo-grid/cell-renderer-Ca_PCGjJ.js.map +1 -0
- package/dist/revo-grid/column.drag.plugin-BtuUyB-2.js +2528 -0
- package/dist/revo-grid/column.drag.plugin-BtuUyB-2.js.map +1 -0
- package/dist/revo-grid/column.service-CTqFIQUy.js +1343 -0
- package/dist/revo-grid/column.service-CTqFIQUy.js.map +1 -0
- package/dist/revo-grid/data.store-B-lvmoFH.js +3553 -0
- package/dist/revo-grid/data.store-B-lvmoFH.js.map +1 -0
- package/dist/revo-grid/debounce-DTUQ1fY7.js +488 -0
- package/dist/revo-grid/debounce-DTUQ1fY7.js.map +1 -0
- package/dist/revo-grid/edit.utils-CyCANCLB.js +103 -0
- package/dist/revo-grid/edit.utils-CyCANCLB.js.map +1 -0
- package/dist/revo-grid/events-CKtYJJSv.js +43 -0
- package/dist/revo-grid/events-CKtYJJSv.js.map +1 -0
- package/dist/revo-grid/filter.button-CjABZQgg.js +39 -0
- package/dist/revo-grid/filter.button-CjABZQgg.js.map +1 -0
- package/dist/revo-grid/header-cell-renderer-DnjpJuXq.js +351 -0
- package/dist/revo-grid/header-cell-renderer-DnjpJuXq.js.map +1 -0
- package/dist/revo-grid/index-BAoInZ4V.js +2490 -0
- package/dist/revo-grid/index-BAoInZ4V.js.map +1 -0
- package/dist/revo-grid/index.esm.js +181 -0
- package/dist/revo-grid/index.esm.js.map +1 -0
- package/dist/revo-grid/loader.esm.js.map +1 -0
- package/dist/revo-grid/revo-grid.entry.esm.js.map +1 -0
- package/dist/revo-grid/revo-grid.entry.js +2185 -0
- package/dist/revo-grid/revo-grid.entry.js.map +1 -0
- package/dist/revo-grid/revo-grid.esm.js +27 -0
- package/dist/revo-grid/revo-grid.esm.js.map +1 -0
- package/dist/revo-grid/revogr-attribution.revogr-extra.revogr-focus.revogr-overlay-selection.revogr-row-headers.revogr-scroll-virtual.revogr-temp-range.entry.esm.js.map +1 -0
- package/dist/revo-grid/revogr-attribution_7.entry.js +1455 -0
- package/dist/revo-grid/revogr-attribution_7.entry.js.map +1 -0
- package/dist/revo-grid/revogr-clipboard.revogr-edit.revogr-order-editor.entry.esm.js.map +1 -0
- package/dist/revo-grid/revogr-clipboard_3.entry.js +452 -0
- package/dist/revo-grid/revogr-clipboard_3.entry.js.map +1 -0
- package/dist/revo-grid/revogr-data.revogr-header.revogr-viewport-scroll.vnode-html.entry.esm.js.map +1 -0
- package/dist/revo-grid/revogr-data_4.entry.js +943 -0
- package/dist/revo-grid/revogr-data_4.entry.js.map +1 -0
- package/dist/revo-grid/revogr-filter-panel.entry.esm.js.map +1 -0
- package/dist/revo-grid/revogr-filter-panel.entry.js +380 -0
- package/dist/revo-grid/revogr-filter-panel.entry.js.map +1 -0
- package/dist/revo-grid/row-header-utils-vnoLGj5A.js +407 -0
- package/dist/revo-grid/row-header-utils-vnoLGj5A.js.map +1 -0
- package/dist/revo-grid/text-editor-Cp7lwBZi.js +79 -0
- package/dist/revo-grid/text-editor-Cp7lwBZi.js.map +1 -0
- package/dist/revo-grid/throttle-DiUrHjcY.js +273 -0
- package/dist/revo-grid/throttle-DiUrHjcY.js.map +1 -0
- package/dist/revo-grid/viewport.helpers-Ch4AQMMg.js +53 -0
- package/dist/revo-grid/viewport.helpers-Ch4AQMMg.js.map +1 -0
- package/dist/types/components/attribution/revogr-attribution.d.ts +12 -0
- package/dist/types/components/clipboard/revogr-clipboard.d.ts +89 -0
- package/dist/types/components/data/cell-renderer.d.ts +12 -0
- package/dist/types/components/data/column.service.d.ts +61 -0
- package/dist/types/components/data/revogr-data.d.ts +107 -0
- package/dist/types/components/data/row-highlight.plugin.d.ts +10 -0
- package/dist/types/components/data/row-renderer.d.ts +12 -0
- package/dist/types/components/editors/edit.utils.d.ts +3 -0
- package/dist/types/components/editors/revogr-edit.d.ts +63 -0
- package/dist/types/components/editors/text-editor.d.ts +43 -0
- package/dist/types/components/extra/revogr-extra.d.ts +38 -0
- package/dist/types/components/header/header-cell-renderer.d.ts +9 -0
- package/dist/types/components/header/header-group-renderer.d.ts +15 -0
- package/dist/types/components/header/header-renderer.d.ts +16 -0
- package/dist/types/components/header/resizable.directive.d.ts +55 -0
- package/dist/types/components/header/resizable.element.d.ts +5 -0
- package/dist/types/components/header/revogr-header.d.ts +90 -0
- package/dist/types/components/order/order-renderer.d.ts +29 -0
- package/dist/types/components/order/order-row.service.d.ts +27 -0
- package/dist/types/components/order/revogr-order-editor.d.ts +56 -0
- package/dist/types/components/overlay/autofill.service.d.ts +80 -0
- package/dist/types/components/overlay/keyboard.service.d.ts +28 -0
- package/dist/types/components/overlay/revogr-overlay-selection.d.ts +278 -0
- package/dist/types/components/overlay/selection.utils.d.ts +47 -0
- package/dist/types/components/revoGrid/grid.helpers.d.ts +17 -0
- package/dist/types/components/revoGrid/plugin.service.d.ts +37 -0
- package/dist/types/components/revoGrid/revo-grid.d.ts +686 -0
- package/dist/types/components/revoGrid/viewport.helpers.d.ts +39 -0
- package/dist/types/components/revoGrid/viewport.resize.service.d.ts +17 -0
- package/dist/types/components/revoGrid/viewport.scrolling.service.d.ts +20 -0
- package/dist/types/components/revoGrid/viewport.service.d.ts +59 -0
- package/dist/types/components/rowHeaders/revogr-row-headers.d.ts +51 -0
- package/dist/types/components/rowHeaders/row-header-render.d.ts +9 -0
- package/dist/types/components/scroll/revogr-viewport-scroll.d.ts +117 -0
- package/dist/types/components/scrollable/autohide-scroll.plugin.d.ts +22 -0
- package/dist/types/components/scrollable/revogr-scroll-virtual.d.ts +43 -0
- package/dist/types/components/selectionFocus/revogr-focus.d.ts +58 -0
- package/dist/types/components/selectionTempRange/revogr-temp-range.d.ts +28 -0
- package/dist/types/components/vnode/vnode-converter.d.ts +19 -0
- package/dist/types/components/vnode/vnode.utils.d.ts +9 -0
- package/dist/types/components.d.ts +2583 -0
- package/dist/types/global/global.d.ts +1 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/plugins/add-rows-on-paste.plugin.d.ts +14 -0
- package/dist/types/plugins/base.plugin.d.ts +51 -0
- package/dist/types/plugins/column.auto-size.plugin.d.ts +55 -0
- package/dist/types/plugins/column.stretch.plugin.d.ts +20 -0
- package/dist/types/plugins/dispatcher.d.ts +20 -0
- package/dist/types/plugins/export/csv.d.ts +9 -0
- package/dist/types/plugins/export/export.plugin.d.ts +24 -0
- package/dist/types/plugins/export/types.d.ts +23 -0
- package/dist/types/plugins/filter/conditions/equal.d.ts +4 -0
- package/dist/types/plugins/filter/conditions/number/greaterThan.d.ts +3 -0
- package/dist/types/plugins/filter/conditions/number/greaterThanOrEqual.d.ts +3 -0
- package/dist/types/plugins/filter/conditions/number/lessThan.d.ts +3 -0
- package/dist/types/plugins/filter/conditions/number/lessThanOrEqual.d.ts +3 -0
- package/dist/types/plugins/filter/conditions/set.d.ts +4 -0
- package/dist/types/plugins/filter/conditions/string/beginswith.d.ts +3 -0
- package/dist/types/plugins/filter/conditions/string/contains.d.ts +4 -0
- package/dist/types/plugins/filter/filter.button.d.ts +14 -0
- package/dist/types/plugins/filter/filter.indexed.d.ts +20 -0
- package/dist/types/plugins/filter/filter.panel.d.ts +53 -0
- package/dist/types/plugins/filter/filter.plugin.d.ts +73 -0
- package/dist/types/plugins/filter/filter.types.d.ts +129 -0
- package/dist/types/plugins/groupingRow/grouping.const.d.ts +12 -0
- package/dist/types/plugins/groupingRow/grouping.row.expand.service.d.ts +15 -0
- package/dist/types/plugins/groupingRow/grouping.row.plugin.d.ts +39 -0
- package/dist/types/plugins/groupingRow/grouping.row.renderer.d.ts +6 -0
- package/dist/types/plugins/groupingRow/grouping.row.types.d.ts +103 -0
- package/dist/types/plugins/groupingRow/grouping.service.d.ts +36 -0
- package/dist/types/plugins/groupingRow/grouping.trimmed.service.d.ts +10 -0
- package/dist/types/plugins/index.d.ts +11 -0
- package/dist/types/plugins/moveColumn/column.drag.plugin.d.ts +42 -0
- package/dist/types/plugins/moveColumn/order-column.handler.d.ts +16 -0
- package/dist/types/plugins/rtl/rtl.plugin.d.ts +37 -0
- package/dist/types/plugins/sorting/sorting.func.d.ts +9 -0
- package/dist/types/plugins/sorting/sorting.plugin.d.ts +48 -0
- package/dist/types/plugins/sorting/sorting.sign.d.ts +6 -0
- package/dist/types/plugins/sorting/sorting.types.d.ts +14 -0
- package/dist/types/plugins/wcag/index.d.ts +26 -0
- package/dist/types/services/cell.helpers.d.ts +2 -0
- package/dist/types/services/column.data.provider.d.ts +27 -0
- package/dist/types/services/data.provider.d.ts +36 -0
- package/dist/types/services/dimension.provider.d.ts +66 -0
- package/dist/types/services/local.scroll.service.d.ts +36 -0
- package/dist/types/services/local.scroll.timer.d.ts +32 -0
- package/dist/types/services/selection.store.connector.d.ts +79 -0
- package/dist/types/services/viewport.provider.d.ts +7 -0
- package/dist/types/stencil-public-runtime.d.ts +1709 -0
- package/dist/types/store/dataSource/data.proxy.d.ts +14 -0
- package/dist/types/store/dataSource/data.store.d.ts +74 -0
- package/dist/types/store/dataSource/index.d.ts +3 -0
- package/dist/types/store/dataSource/trimmed.plugin.d.ts +12 -0
- package/dist/types/store/dimension/dimension.helpers.d.ts +24 -0
- package/dist/types/store/dimension/dimension.recalculate.plugin.d.ts +9 -0
- package/dist/types/store/dimension/dimension.store.d.ts +21 -0
- package/dist/types/store/dimension/dimension.trim.plugin.d.ts +13 -0
- package/dist/types/store/dimension/index.d.ts +2 -0
- package/dist/types/store/index.d.ts +8 -0
- package/dist/types/store/selection/index.d.ts +2 -0
- package/dist/types/store/selection/selection.helpers.d.ts +6 -0
- package/dist/types/store/selection/selection.store.d.ts +22 -0
- package/dist/types/store/vp/index.d.ts +7 -0
- package/dist/types/store/vp/viewport.helpers.d.ts +54 -0
- package/dist/types/store/vp/viewport.store.d.ts +26 -0
- package/dist/types/themeManager/theme.compact.d.ts +4 -0
- package/dist/types/themeManager/theme.default.d.ts +4 -0
- package/dist/types/themeManager/theme.material.d.ts +4 -0
- package/dist/types/themeManager/theme.service.d.ts +13 -0
- package/dist/types/types/dimension.d.ts +8 -0
- package/dist/types/types/events.d.ts +2 -0
- package/dist/types/types/index.d.ts +8 -0
- package/dist/types/types/interfaces.d.ts +768 -0
- package/dist/types/types/plugin.d.ts +9 -0
- package/dist/types/types/plugin.types.d.ts +48 -0
- package/dist/types/types/selection.d.ts +178 -0
- package/dist/types/types/theme.d.ts +7 -0
- package/dist/types/types/viewport.interfaces.d.ts +45 -0
- package/dist/types/utils/browser.d.ts +1 -0
- package/dist/types/utils/closest.polifill.d.ts +0 -0
- package/dist/types/utils/column.utils.d.ts +52 -0
- package/dist/types/utils/consts.d.ts +22 -0
- package/dist/types/utils/events.d.ts +5 -0
- package/dist/types/utils/header.utils.d.ts +2 -0
- package/dist/types/utils/index.d.ts +32 -0
- package/dist/types/utils/key.codes.d.ts +73 -0
- package/dist/types/utils/key.utils.d.ts +13 -0
- package/dist/types/utils/mobile.d.ts +1 -0
- package/dist/types/utils/platform.d.ts +4 -0
- package/dist/types/utils/row-header-utils.d.ts +2 -0
- package/dist/types/utils/store.types.d.ts +97 -0
- package/dist/types/utils/store.utils.d.ts +10 -0
- package/hydrate/index.d.ts +273 -0
- package/hydrate/index.js +33890 -0
- package/hydrate/index.mjs +33882 -0
- package/hydrate/package.json +12 -0
- package/loader/cdn.js +4 -0
- package/loader/index.cjs.js +4 -0
- package/loader/index.d.ts +24 -0
- package/loader/index.es2017.js +4 -0
- package/loader/index.js +5 -0
- package/package.json +101 -0
- package/react/dist/index.d.ts +6191 -0
- package/react/dist/react-datagrid.js +260 -0
- package/react/dist/react-datagrid.umd.cjs +272 -0
- package/standalone/column.service.js +1345 -0
- package/standalone/column.service.js.map +1 -0
- package/standalone/consts.js +30 -0
- package/standalone/consts.js.map +1 -0
- package/standalone/data.store.js +3099 -0
- package/standalone/data.store.js.map +1 -0
- package/standalone/debounce.js +215 -0
- package/standalone/debounce.js.map +1 -0
- package/standalone/dimension.helpers.js +229 -0
- package/standalone/dimension.helpers.js.map +1 -0
- package/standalone/filter.button.js +39 -0
- package/standalone/filter.button.js.map +1 -0
- package/standalone/index.d.ts +68 -0
- package/standalone/index.js +217 -0
- package/standalone/index.js.map +1 -0
- package/standalone/index2.js +140 -0
- package/standalone/index2.js.map +1 -0
- package/standalone/local.scroll.timer.js +207 -0
- package/standalone/local.scroll.timer.js.map +1 -0
- package/standalone/platform.js +90 -0
- package/standalone/platform.js.map +1 -0
- package/standalone/revo-grid.d.ts +11 -0
- package/standalone/revo-grid.js +4884 -0
- package/standalone/revo-grid.js.map +1 -0
- package/standalone/revogr-attribution.d.ts +11 -0
- package/standalone/revogr-attribution.js +12 -0
- package/standalone/revogr-attribution.js.map +1 -0
- package/standalone/revogr-attribution2.js +32 -0
- package/standalone/revogr-attribution2.js.map +1 -0
- package/standalone/revogr-clipboard.d.ts +11 -0
- package/standalone/revogr-clipboard.js +12 -0
- package/standalone/revogr-clipboard.js.map +1 -0
- package/standalone/revogr-clipboard2.js +164 -0
- package/standalone/revogr-clipboard2.js.map +1 -0
- package/standalone/revogr-data.d.ts +11 -0
- package/standalone/revogr-data.js +12 -0
- package/standalone/revogr-data.js.map +1 -0
- package/standalone/revogr-data2.js +378 -0
- package/standalone/revogr-data2.js.map +1 -0
- package/standalone/revogr-edit.d.ts +11 -0
- package/standalone/revogr-edit.js +12 -0
- package/standalone/revogr-edit.js.map +1 -0
- package/standalone/revogr-edit2.js +334 -0
- package/standalone/revogr-edit2.js.map +1 -0
- package/standalone/revogr-extra.d.ts +11 -0
- package/standalone/revogr-extra.js +12 -0
- package/standalone/revogr-extra.js.map +1 -0
- package/standalone/revogr-extra2.js +73 -0
- package/standalone/revogr-extra2.js.map +1 -0
- package/standalone/revogr-filter-panel.d.ts +11 -0
- package/standalone/revogr-filter-panel.js +411 -0
- package/standalone/revogr-filter-panel.js.map +1 -0
- package/standalone/revogr-focus.d.ts +11 -0
- package/standalone/revogr-focus.js +12 -0
- package/standalone/revogr-focus.js.map +1 -0
- package/standalone/revogr-focus2.js +112 -0
- package/standalone/revogr-focus2.js.map +1 -0
- package/standalone/revogr-header.d.ts +11 -0
- package/standalone/revogr-header.js +12 -0
- package/standalone/revogr-header.js.map +1 -0
- package/standalone/revogr-header2.js +707 -0
- package/standalone/revogr-header2.js.map +1 -0
- package/standalone/revogr-order-editor.d.ts +11 -0
- package/standalone/revogr-order-editor.js +12 -0
- package/standalone/revogr-order-editor.js.map +1 -0
- package/standalone/revogr-order-editor2.js +201 -0
- package/standalone/revogr-order-editor2.js.map +1 -0
- package/standalone/revogr-overlay-selection.d.ts +11 -0
- package/standalone/revogr-overlay-selection.js +12 -0
- package/standalone/revogr-overlay-selection.js.map +1 -0
- package/standalone/revogr-overlay-selection2.js +972 -0
- package/standalone/revogr-overlay-selection2.js.map +1 -0
- package/standalone/revogr-row-headers.d.ts +11 -0
- package/standalone/revogr-row-headers.js +12 -0
- package/standalone/revogr-row-headers.js.map +1 -0
- package/standalone/revogr-row-headers2.js +520 -0
- package/standalone/revogr-row-headers2.js.map +1 -0
- package/standalone/revogr-scroll-virtual.d.ts +11 -0
- package/standalone/revogr-scroll-virtual.js +12 -0
- package/standalone/revogr-scroll-virtual.js.map +1 -0
- package/standalone/revogr-scroll-virtual2.js +184 -0
- package/standalone/revogr-scroll-virtual2.js.map +1 -0
- package/standalone/revogr-temp-range.d.ts +11 -0
- package/standalone/revogr-temp-range.js +12 -0
- package/standalone/revogr-temp-range.js.map +1 -0
- package/standalone/revogr-temp-range2.js +93 -0
- package/standalone/revogr-temp-range2.js.map +1 -0
- package/standalone/revogr-viewport-scroll.d.ts +11 -0
- package/standalone/revogr-viewport-scroll.js +12 -0
- package/standalone/revogr-viewport-scroll.js.map +1 -0
- package/standalone/revogr-viewport-scroll2.js +421 -0
- package/standalone/revogr-viewport-scroll2.js.map +1 -0
- package/standalone/selection.utils.js +179 -0
- package/standalone/selection.utils.js.map +1 -0
- package/standalone/throttle.js +75 -0
- package/standalone/throttle.js.map +1 -0
- package/standalone/toNumber.js +282 -0
- package/standalone/toNumber.js.map +1 -0
- package/standalone/vnode-converter.js +46 -0
- package/standalone/vnode-converter.js.map +1 -0
- package/standalone/vnode-html.d.ts +11 -0
- package/standalone/vnode-html.js +12 -0
- package/standalone/vnode-html.js.map +1 -0
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Built by LevelSkill.Pro
|
|
3
|
+
*/
|
|
4
|
+
import { BasePlugin } from "../base.plugin";
|
|
5
|
+
/**
|
|
6
|
+
* RTL (Right-to-Left) Plugin for RevoGrid
|
|
7
|
+
*
|
|
8
|
+
* This plugin handles RTL transformation by subscribing to the beforecolumnsset event
|
|
9
|
+
* and applying column order reversal when RTL mode is enabled.
|
|
10
|
+
*/
|
|
11
|
+
export class RTLPlugin extends BasePlugin {
|
|
12
|
+
constructor(revogrid, providers) {
|
|
13
|
+
super(revogrid, providers);
|
|
14
|
+
this.isRTLEnabled = false;
|
|
15
|
+
this.init();
|
|
16
|
+
}
|
|
17
|
+
init() {
|
|
18
|
+
// Subscribe to beforecolumnsset event to apply RTL transformation
|
|
19
|
+
this.addEventListener('beforecolumnsset', (event) => {
|
|
20
|
+
this.handleBeforeColumnsSet(event);
|
|
21
|
+
});
|
|
22
|
+
// Listen for RTL property changes
|
|
23
|
+
this.addEventListener('aftergridinit', () => {
|
|
24
|
+
this.updateRTLState();
|
|
25
|
+
});
|
|
26
|
+
// Watch for RTL property changes
|
|
27
|
+
this.watch('rtl', (value) => {
|
|
28
|
+
this.isRTLEnabled = value;
|
|
29
|
+
this.emit('rtlstatechanged', { rtl: this.isRTLEnabled });
|
|
30
|
+
}, { immediate: true });
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Handle the beforecolumnsset event to apply RTL transformation
|
|
34
|
+
*/
|
|
35
|
+
handleBeforeColumnsSet(event) {
|
|
36
|
+
if (!this.isRTLEnabled) {
|
|
37
|
+
return; // No transformation needed if RTL is disabled
|
|
38
|
+
}
|
|
39
|
+
const columnCollection = event.detail;
|
|
40
|
+
// Apply RTL transformation to all column types
|
|
41
|
+
const transformedColumns = this.applyRTLTransformationToCollection(columnCollection);
|
|
42
|
+
// Update the event detail with transformed columns
|
|
43
|
+
event.detail.columns = transformedColumns.columns;
|
|
44
|
+
event.detail.columnByProp = transformedColumns.columnByProp;
|
|
45
|
+
event.detail.columnGrouping = transformedColumns.columnGrouping;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Apply RTL transformation to the entire column collection
|
|
49
|
+
*/
|
|
50
|
+
applyRTLTransformationToCollection(collection) {
|
|
51
|
+
const transformedCollection = {
|
|
52
|
+
columns: {
|
|
53
|
+
rgCol: [],
|
|
54
|
+
colPinStart: [],
|
|
55
|
+
colPinEnd: [],
|
|
56
|
+
},
|
|
57
|
+
columnByProp: Object.assign({}, collection.columnByProp),
|
|
58
|
+
columnGrouping: {
|
|
59
|
+
rgCol: [],
|
|
60
|
+
colPinStart: [],
|
|
61
|
+
colPinEnd: [],
|
|
62
|
+
},
|
|
63
|
+
maxLevel: collection.maxLevel,
|
|
64
|
+
sort: Object.assign({}, collection.sort),
|
|
65
|
+
};
|
|
66
|
+
// Transform each column type
|
|
67
|
+
Object.keys(collection.columns).forEach((type) => {
|
|
68
|
+
const columnType = type;
|
|
69
|
+
const columns = collection.columns[columnType];
|
|
70
|
+
// Apply RTL transformation to columns - create new reversed array
|
|
71
|
+
const reversedColumns = [...columns].reverse();
|
|
72
|
+
transformedCollection.columns[columnType] = reversedColumns;
|
|
73
|
+
// Transform column grouping for this type
|
|
74
|
+
transformedCollection.columnGrouping[columnType] = this.applyRTLTransformationToGroups(collection.columnGrouping[columnType], columns.length);
|
|
75
|
+
});
|
|
76
|
+
return transformedCollection;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Apply RTL transformation to column groups
|
|
80
|
+
*/
|
|
81
|
+
applyRTLTransformationToGroups(groups, totalColumns) {
|
|
82
|
+
return groups.map(group => {
|
|
83
|
+
// Reverse the indexes for RTL
|
|
84
|
+
const reversedIndexes = group.indexes.map((index) => totalColumns - 1 - index).reverse();
|
|
85
|
+
return Object.assign(Object.assign({}, group), { indexes: reversedIndexes });
|
|
86
|
+
}).reverse(); // Reverse the group order
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Update RTL state based on the grid's rtl property
|
|
90
|
+
*/
|
|
91
|
+
updateRTLState() {
|
|
92
|
+
const grid = this.revogrid;
|
|
93
|
+
if (grid && typeof grid.rtl === 'boolean') {
|
|
94
|
+
this.isRTLEnabled = grid.rtl;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Get current RTL state
|
|
99
|
+
*/
|
|
100
|
+
getRTLState() {
|
|
101
|
+
return this.isRTLEnabled;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Clean up the plugin
|
|
105
|
+
*/
|
|
106
|
+
destroy() {
|
|
107
|
+
super.destroy();
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=rtl.plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rtl.plugin.js","sourceRoot":"","sources":["../../../src/plugins/rtl/rtl.plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAI5C;;;;;GAKG;AACH,MAAM,OAAO,SAAU,SAAQ,UAAU;IAGvC,YACE,QAA6B,EAC7B,SAA0B;QAE1B,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QANrB,iBAAY,GAAG,KAAK,CAAC;QAO3B,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAEO,IAAI;QACV,kEAAkE;QAClE,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,CAAC,KAAK,EAAE,EAAE;YAClD,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,kCAAkC;QAClC,IAAI,CAAC,gBAAgB,CAAC,eAAe,EAAE,GAAG,EAAE;YAC1C,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,CAAC,CAAC,CAAC;QAEH,iCAAiC;QACjC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,KAAc,EAAE,EAAE;YACnC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QAC3D,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1B,CAAC;IAED;;OAEG;IACK,sBAAsB,CAAC,KAAoC;QACjE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,OAAO,CAAC,8CAA8C;QACxD,CAAC;QAED,MAAM,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAC;QAEtC,+CAA+C;QAC/C,MAAM,kBAAkB,GAAG,IAAI,CAAC,kCAAkC,CAAC,gBAAgB,CAAC,CAAC;QAErF,mDAAmD;QACnD,KAAK,CAAC,MAAM,CAAC,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC;QAClD,KAAK,CAAC,MAAM,CAAC,YAAY,GAAG,kBAAkB,CAAC,YAAY,CAAC;QAC5D,KAAK,CAAC,MAAM,CAAC,cAAc,GAAG,kBAAkB,CAAC,cAAc,CAAC;IAClE,CAAC;IAED;;OAEG;IACK,kCAAkC,CAAC,UAA4B;QACrE,MAAM,qBAAqB,GAAqB;YAC9C,OAAO,EAAE;gBACP,KAAK,EAAE,EAAE;gBACT,WAAW,EAAE,EAAE;gBACf,SAAS,EAAE,EAAE;aACd;YACD,YAAY,oBAAO,UAAU,CAAC,YAAY,CAAE;YAC5C,cAAc,EAAE;gBACd,KAAK,EAAE,EAAE;gBACT,WAAW,EAAE,EAAE;gBACf,SAAS,EAAE,EAAE;aACd;YACD,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,IAAI,oBAAO,UAAU,CAAC,IAAI,CAAE;SAC7B,CAAC;QAEF,6BAA6B;QAC7B,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC/C,MAAM,UAAU,GAAG,IAAuC,CAAC;YAC3D,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAE/C,kEAAkE;YAClE,MAAM,eAAe,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;YAC/C,qBAAqB,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,eAAe,CAAC;YAE5D,0CAA0C;YAC1C,qBAAqB,CAAC,cAAc,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,8BAA8B,CACpF,UAAU,CAAC,cAAc,CAAC,UAAU,CAAC,EACrC,OAAO,CAAC,MAAM,CACf,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,OAAO,qBAAqB,CAAC;IAC/B,CAAC;IAED;;OAEG;IACK,8BAA8B,CAAC,MAAa,EAAE,YAAoB;QACxE,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACxB,8BAA8B;YAC9B,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAa,EAAE,EAAE,CAC1D,YAAY,GAAG,CAAC,GAAG,KAAK,CACzB,CAAC,OAAO,EAAE,CAAC;YAEZ,uCACK,KAAK,KACR,OAAO,EAAE,eAAe,IACxB;QACJ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,0BAA0B;IAC1C,CAAC;IAED;;OAEG;IACK,cAAc;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAe,CAAC;QAClC,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAC1C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC;QAC/B,CAAC;IACH,CAAC;IAED;;OAEG;IACI,WAAW;QAChB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAGD;;OAEG;IACI,OAAO;QACZ,KAAK,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC;CACF","sourcesContent":["import { BasePlugin } from '../base.plugin';\r\nimport type { PluginProviders } from '@type';\r\nimport { type ColumnCollection } from '../../utils/column.utils';\r\n\r\n/**\r\n * RTL (Right-to-Left) Plugin for RevoGrid\r\n * \r\n * This plugin handles RTL transformation by subscribing to the beforecolumnsset event\r\n * and applying column order reversal when RTL mode is enabled.\r\n */\r\nexport class RTLPlugin extends BasePlugin {\r\n private isRTLEnabled = false;\r\n\r\n constructor(\r\n revogrid: HTMLRevoGridElement,\r\n providers: PluginProviders,\r\n ) {\r\n super(revogrid, providers);\r\n this.init();\r\n }\r\n\r\n private init() {\r\n // Subscribe to beforecolumnsset event to apply RTL transformation\r\n this.addEventListener('beforecolumnsset', (event) => {\r\n this.handleBeforeColumnsSet(event);\r\n });\r\n\r\n // Listen for RTL property changes\r\n this.addEventListener('aftergridinit', () => {\r\n this.updateRTLState();\r\n });\r\n\r\n // Watch for RTL property changes\r\n this.watch('rtl', (value: boolean) => {\r\n this.isRTLEnabled = value;\r\n this.emit('rtlstatechanged', { rtl: this.isRTLEnabled });\r\n }, { immediate: true });\r\n }\r\n\r\n /**\r\n * Handle the beforecolumnsset event to apply RTL transformation\r\n */\r\n private handleBeforeColumnsSet(event: CustomEvent<ColumnCollection>) {\r\n if (!this.isRTLEnabled) {\r\n return; // No transformation needed if RTL is disabled\r\n }\r\n\r\n const columnCollection = event.detail;\r\n \r\n // Apply RTL transformation to all column types\r\n const transformedColumns = this.applyRTLTransformationToCollection(columnCollection);\r\n \r\n // Update the event detail with transformed columns\r\n event.detail.columns = transformedColumns.columns;\r\n event.detail.columnByProp = transformedColumns.columnByProp;\r\n event.detail.columnGrouping = transformedColumns.columnGrouping;\r\n }\r\n\r\n /**\r\n * Apply RTL transformation to the entire column collection\r\n */\r\n private applyRTLTransformationToCollection(collection: ColumnCollection): ColumnCollection {\r\n const transformedCollection: ColumnCollection = {\r\n columns: {\r\n rgCol: [],\r\n colPinStart: [],\r\n colPinEnd: [],\r\n },\r\n columnByProp: { ...collection.columnByProp },\r\n columnGrouping: {\r\n rgCol: [],\r\n colPinStart: [],\r\n colPinEnd: [],\r\n },\r\n maxLevel: collection.maxLevel,\r\n sort: { ...collection.sort },\r\n };\r\n\r\n // Transform each column type\r\n Object.keys(collection.columns).forEach((type) => {\r\n const columnType = type as keyof typeof collection.columns;\r\n const columns = collection.columns[columnType];\r\n \r\n // Apply RTL transformation to columns - create new reversed array\r\n const reversedColumns = [...columns].reverse();\r\n transformedCollection.columns[columnType] = reversedColumns;\r\n \r\n // Transform column grouping for this type\r\n transformedCollection.columnGrouping[columnType] = this.applyRTLTransformationToGroups(\r\n collection.columnGrouping[columnType],\r\n columns.length\r\n );\r\n });\r\n\r\n return transformedCollection;\r\n }\r\n\r\n /**\r\n * Apply RTL transformation to column groups\r\n */\r\n private applyRTLTransformationToGroups(groups: any[], totalColumns: number): any[] {\r\n return groups.map(group => {\r\n // Reverse the indexes for RTL\r\n const reversedIndexes = group.indexes.map((index: number) => \r\n totalColumns - 1 - index\r\n ).reverse();\r\n \r\n return {\r\n ...group,\r\n indexes: reversedIndexes\r\n };\r\n }).reverse(); // Reverse the group order\r\n }\r\n\r\n /**\r\n * Update RTL state based on the grid's rtl property\r\n */\r\n private updateRTLState() {\r\n const grid = this.revogrid as any;\r\n if (grid && typeof grid.rtl === 'boolean') {\r\n this.isRTLEnabled = grid.rtl;\r\n }\r\n }\r\n\r\n /**\r\n * Get current RTL state\r\n */\r\n public getRTLState(): boolean {\r\n return this.isRTLEnabled;\r\n }\r\n\r\n\r\n /**\r\n * Clean up the plugin\r\n */\r\n public destroy() {\r\n super.destroy();\r\n }\r\n} "]}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Built by LevelSkill.Pro
|
|
3
|
+
*/
|
|
4
|
+
import { isGrouping } from "../groupingRow/grouping.service";
|
|
5
|
+
import { getCellRaw } from "../../utils/column.utils";
|
|
6
|
+
export function sortIndexByItems(indexes, source, sortingFunc = {}) {
|
|
7
|
+
// if no sorting - return unsorted indexes
|
|
8
|
+
if (Object.entries(sortingFunc).length === 0) {
|
|
9
|
+
// Unsorted indexes
|
|
10
|
+
return [...Array(indexes.length).keys()];
|
|
11
|
+
}
|
|
12
|
+
//
|
|
13
|
+
/**
|
|
14
|
+
* go through all indexes and align in new order
|
|
15
|
+
* performs a multi-level sorting by applying multiple comparison functions to determine the order of the items based on different properties.
|
|
16
|
+
*/
|
|
17
|
+
return indexes.sort((a, b) => {
|
|
18
|
+
const itemA = source[a];
|
|
19
|
+
const itemB = source[b];
|
|
20
|
+
for (const [prop, cmp] of Object.entries(sortingFunc)) {
|
|
21
|
+
if (isGrouping(itemA)) {
|
|
22
|
+
if (itemA['__rvgr-prop'] !== prop) {
|
|
23
|
+
return 0;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
if (isGrouping(itemB)) {
|
|
27
|
+
if (itemB['__rvgr-prop'] !== prop) {
|
|
28
|
+
return 0;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* If the comparison function returns a non-zero value (sorted), it means that the items should be sorted based on the given property. In such a case, the function immediately returns the sorted value, indicating the order in which the items should be arranged.
|
|
33
|
+
* If none of the comparison functions result in a non-zero value, indicating that the items are equal or should remain in the same order, the function eventually returns 0.
|
|
34
|
+
*/
|
|
35
|
+
const sorted = cmp === null || cmp === void 0 ? void 0 : cmp(prop, itemA, itemB);
|
|
36
|
+
if (sorted) {
|
|
37
|
+
return sorted;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return 0;
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
export function defaultCellCompare(prop, a, b) {
|
|
44
|
+
const aRaw = this.column ? getCellRaw(a, this.column) : a === null || a === void 0 ? void 0 : a[prop];
|
|
45
|
+
const bRaw = this.column ? getCellRaw(b, this.column) : b === null || b === void 0 ? void 0 : b[prop];
|
|
46
|
+
const av = typeof aRaw === 'number' ? aRaw : aRaw === null || aRaw === void 0 ? void 0 : aRaw.toString().toLowerCase();
|
|
47
|
+
const bv = typeof bRaw === 'number' ? bRaw : bRaw === null || bRaw === void 0 ? void 0 : bRaw.toString().toLowerCase();
|
|
48
|
+
if (av === bv) {
|
|
49
|
+
return 0;
|
|
50
|
+
}
|
|
51
|
+
if (av > bv) {
|
|
52
|
+
return 1;
|
|
53
|
+
}
|
|
54
|
+
return -1;
|
|
55
|
+
}
|
|
56
|
+
export function descCellCompare(cmp) {
|
|
57
|
+
return (prop, a, b) => {
|
|
58
|
+
return -1 * cmp(prop, a, b);
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
export function getNextOrder(currentOrder) {
|
|
62
|
+
switch (currentOrder) {
|
|
63
|
+
case undefined:
|
|
64
|
+
return 'asc';
|
|
65
|
+
case 'asc':
|
|
66
|
+
return 'desc';
|
|
67
|
+
case 'desc':
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
export function getComparer(column, order) {
|
|
72
|
+
var _a;
|
|
73
|
+
const cellCmp = ((_a = column === null || column === void 0 ? void 0 : column.cellCompare) === null || _a === void 0 ? void 0 : _a.bind({ order })) || (defaultCellCompare === null || defaultCellCompare === void 0 ? void 0 : defaultCellCompare.bind({ column, order }));
|
|
74
|
+
if (order == 'asc') {
|
|
75
|
+
return cellCmp;
|
|
76
|
+
}
|
|
77
|
+
if (order == 'desc') {
|
|
78
|
+
return descCellCompare(cellCmp);
|
|
79
|
+
}
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=sorting.func.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sorting.func.js","sourceRoot":"","sources":["../../../src/plugins/sorting/sorting.func.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CellCompareFunc, ColumnProp, ColumnRegular, DataType, Order } from '@type';\r\nimport type { SortingOrderFunction } from './sorting.types';\r\nimport { isGrouping } from '../groupingRow/grouping.service';\r\nimport { getCellRaw } from '../../utils/column.utils';\r\n\r\nexport function sortIndexByItems(\r\n indexes: number[],\r\n source: DataType[],\r\n sortingFunc: SortingOrderFunction = {},\r\n): number[] {\r\n // if no sorting - return unsorted indexes\r\n if (Object.entries(sortingFunc).length === 0) {\r\n // Unsorted indexes\r\n return [...Array(indexes.length).keys()];\r\n }\r\n //\r\n /**\r\n * go through all indexes and align in new order\r\n * performs a multi-level sorting by applying multiple comparison functions to determine the order of the items based on different properties.\r\n */\r\n return indexes.sort((a, b) => {\r\n const itemA = source[a];\r\n const itemB = source[b];\r\n for (const [prop, cmp] of Object.entries(sortingFunc)) {\r\n if (isGrouping(itemA)) {\r\n if (itemA['__rvgr-prop'] !== prop) {\r\n return 0;\r\n }\r\n }\r\n if (isGrouping(itemB)) {\r\n if (itemB['__rvgr-prop'] !== prop) {\r\n return 0;\r\n }\r\n }\r\n /**\r\n * If the comparison function returns a non-zero value (sorted), it means that the items should be sorted based on the given property. In such a case, the function immediately returns the sorted value, indicating the order in which the items should be arranged.\r\n * If none of the comparison functions result in a non-zero value, indicating that the items are equal or should remain in the same order, the function eventually returns 0.\r\n */\r\n const sorted = cmp?.(prop, itemA, itemB);\r\n if (sorted) {\r\n return sorted;\r\n }\r\n }\r\n return 0;\r\n });\r\n}\r\n\r\nexport function defaultCellCompare(this: { column?: ColumnRegular }, prop: ColumnProp, a: DataType, b: DataType) {\r\n const aRaw = this.column ? getCellRaw(a, this.column) : a?.[prop];\r\n const bRaw = this.column ? getCellRaw(b, this.column) : b?.[prop];\r\n const av = typeof aRaw === 'number' ? aRaw : aRaw?.toString().toLowerCase();\r\n const bv = typeof bRaw === 'number' ? bRaw : bRaw?.toString().toLowerCase();\r\n\r\n if (av === bv) {\r\n return 0;\r\n }\r\n if (av > bv) {\r\n return 1;\r\n }\r\n return -1;\r\n}\r\n\r\nexport function descCellCompare(cmp: CellCompareFunc) {\r\n return (prop: ColumnProp, a: DataType, b: DataType): number => {\r\n return -1 * cmp(prop, a, b);\r\n };\r\n}\r\n\r\nexport function getNextOrder(currentOrder: Order): Order {\r\n switch (currentOrder) {\r\n case undefined:\r\n return 'asc';\r\n case 'asc':\r\n return 'desc';\r\n case 'desc':\r\n return undefined;\r\n }\r\n}\r\n\r\n\r\nexport function getComparer(column: Partial<ColumnRegular> | undefined, order: Order): CellCompareFunc | undefined {\r\n const cellCmp: CellCompareFunc =\r\n column?.cellCompare?.bind({ order }) || defaultCellCompare?.bind({ column, order });\r\n if (order == 'asc') {\r\n return cellCmp;\r\n }\r\n if (order == 'desc') {\r\n return descCellCompare(cellCmp);\r\n }\r\n return undefined;\r\n}\r\n"]}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Built by LevelSkill.Pro
|
|
3
|
+
*/
|
|
4
|
+
import size from "lodash/size";
|
|
5
|
+
import debounce from "lodash/debounce";
|
|
6
|
+
import { BasePlugin } from "../base.plugin";
|
|
7
|
+
import { getColumnByProp } from "../../utils/column.utils";
|
|
8
|
+
import { columnTypes, rowTypes } from "../../store/index";
|
|
9
|
+
import { getComparer, getNextOrder, sortIndexByItems } from "./sorting.func";
|
|
10
|
+
export * from './sorting.types';
|
|
11
|
+
export * from './sorting.func';
|
|
12
|
+
export * from './sorting.sign';
|
|
13
|
+
/**
|
|
14
|
+
* Lifecycle
|
|
15
|
+
* 1. @event `beforesorting` - Triggered when sorting just starts. Nothing has happened yet. This can be triggered from a column or from the source. If the type is from rows, the column will be undefined.
|
|
16
|
+
* 2. @event `beforesourcesortingapply` - Triggered before the sorting data is applied to the data source. You can prevent this event, and the data will not be sorted.
|
|
17
|
+
* 3. @event `beforesortingapply` - Triggered before the sorting data is applied to the data source. You can prevent this event, and the data will not be sorted. This event is only called from a column sorting click.
|
|
18
|
+
* 4. @event `aftersortingapply` - Triggered after sorting has been applied and completed. This event occurs for both row and column sorting.
|
|
19
|
+
*
|
|
20
|
+
* Note: If you prevent an event, it will not proceed to the subsequent steps.
|
|
21
|
+
*/
|
|
22
|
+
export class SortingPlugin extends BasePlugin {
|
|
23
|
+
constructor(revogrid, providers, config) {
|
|
24
|
+
super(revogrid, providers);
|
|
25
|
+
this.revogrid = revogrid;
|
|
26
|
+
/**
|
|
27
|
+
* Delayed sorting promise
|
|
28
|
+
*/
|
|
29
|
+
this.sortingPromise = null;
|
|
30
|
+
/**
|
|
31
|
+
* We need to sort only so often
|
|
32
|
+
*/
|
|
33
|
+
this.postponeSort = debounce((order, comparison, ignoreViewportUpdate) => this.runSorting(order, comparison, ignoreViewportUpdate), 50);
|
|
34
|
+
const setConfig = (cfg) => {
|
|
35
|
+
var _a;
|
|
36
|
+
if (cfg) {
|
|
37
|
+
const sortingFunc = {};
|
|
38
|
+
const order = {};
|
|
39
|
+
(_a = cfg.columns) === null || _a === void 0 ? void 0 : _a.forEach(col => {
|
|
40
|
+
sortingFunc[col.prop] = getComparer(col, col.order);
|
|
41
|
+
order[col.prop] = col.order;
|
|
42
|
+
});
|
|
43
|
+
if (cfg.additive) {
|
|
44
|
+
this.sorting = Object.assign(Object.assign({}, this.sorting), order);
|
|
45
|
+
this.sortingFunc = Object.assign(Object.assign({}, this.sortingFunc), sortingFunc);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
// // set sorting
|
|
49
|
+
this.sorting = order;
|
|
50
|
+
this.sortingFunc = sortingFunc;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
setConfig(config);
|
|
55
|
+
this.addEventListener('sortingconfigchanged', ({ detail }) => {
|
|
56
|
+
config = detail;
|
|
57
|
+
setConfig(detail);
|
|
58
|
+
this.startSorting(this.sorting, this.sortingFunc);
|
|
59
|
+
});
|
|
60
|
+
this.addEventListener('beforeheaderrender', ({ detail, }) => {
|
|
61
|
+
var _a;
|
|
62
|
+
const { data: column } = detail;
|
|
63
|
+
if (column.sortable) {
|
|
64
|
+
detail.data = Object.assign(Object.assign({}, column), { order: (_a = this.sorting) === null || _a === void 0 ? void 0 : _a[column.prop] });
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
this.addEventListener('beforeanysource', ({ detail: { type }, }) => {
|
|
68
|
+
// if sorting was provided - sort data
|
|
69
|
+
if (!!this.sorting && this.sortingFunc) {
|
|
70
|
+
const event = this.emit('beforesourcesortingapply', { type, sorting: this.sorting });
|
|
71
|
+
if (event.defaultPrevented) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
this.startSorting(this.sorting, this.sortingFunc);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
this.addEventListener('aftercolumnsset', ({ detail: { order }, }) => {
|
|
78
|
+
// if config provided - do nothing, read from config
|
|
79
|
+
if (config) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
const columns = this.providers.column.getColumns();
|
|
83
|
+
const sortingFunc = {};
|
|
84
|
+
for (let prop in order) {
|
|
85
|
+
const cmp = getComparer(getColumnByProp(columns, prop), order[prop]);
|
|
86
|
+
sortingFunc[prop] = cmp;
|
|
87
|
+
}
|
|
88
|
+
// set sorting
|
|
89
|
+
this.sorting = order;
|
|
90
|
+
this.sortingFunc = order && sortingFunc;
|
|
91
|
+
});
|
|
92
|
+
this.addEventListener('beforeheaderclick', (e) => {
|
|
93
|
+
var _a, _b, _c, _d;
|
|
94
|
+
if (e.defaultPrevented) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
if (!((_b = (_a = e.detail) === null || _a === void 0 ? void 0 : _a.column) === null || _b === void 0 ? void 0 : _b.sortable)) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
this.headerclick(e.detail.column, (_d = (_c = e.detail) === null || _c === void 0 ? void 0 : _c.originalEvent) === null || _d === void 0 ? void 0 : _d.shiftKey);
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Entry point for sorting, waits for all delayes, registers jobs
|
|
105
|
+
*/
|
|
106
|
+
startSorting(order, sortingFunc, ignoreViewportUpdate) {
|
|
107
|
+
if (!this.sortingPromise) {
|
|
108
|
+
// add job before render
|
|
109
|
+
this.revogrid.jobsBeforeRender.push(new Promise(resolve => {
|
|
110
|
+
this.sortingPromise = resolve;
|
|
111
|
+
}));
|
|
112
|
+
}
|
|
113
|
+
this.postponeSort(order, sortingFunc, ignoreViewportUpdate);
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Apply sorting to data on header click
|
|
117
|
+
* If additive - add to existing sorting, multiple columns can be sorted
|
|
118
|
+
*/
|
|
119
|
+
headerclick(column, additive) {
|
|
120
|
+
var _a, _b, _c;
|
|
121
|
+
const columnProp = column.prop;
|
|
122
|
+
let order = getNextOrder((_a = this.sorting) === null || _a === void 0 ? void 0 : _a[columnProp]);
|
|
123
|
+
const beforeEvent = this.emit('beforesorting', { column, order, additive });
|
|
124
|
+
if (beforeEvent.defaultPrevented) {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
order = beforeEvent.detail.order;
|
|
128
|
+
// apply sort data
|
|
129
|
+
const beforeApplyEvent = this.emit('beforesortingapply', {
|
|
130
|
+
column: beforeEvent.detail.column,
|
|
131
|
+
order,
|
|
132
|
+
additive,
|
|
133
|
+
});
|
|
134
|
+
if (beforeApplyEvent.defaultPrevented) {
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
const cmp = getComparer(beforeApplyEvent.detail.column, beforeApplyEvent.detail.order);
|
|
138
|
+
if (beforeApplyEvent.detail.additive && this.sorting) {
|
|
139
|
+
const sorting = {};
|
|
140
|
+
const sortingFunc = {};
|
|
141
|
+
if (columnProp in sorting && size(sorting) > 1 && order === undefined) {
|
|
142
|
+
delete sorting[columnProp];
|
|
143
|
+
delete sortingFunc[columnProp];
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
sorting[columnProp] = order;
|
|
147
|
+
sortingFunc[columnProp] = cmp;
|
|
148
|
+
}
|
|
149
|
+
this.sorting = Object.assign(Object.assign({}, this.sorting), sorting);
|
|
150
|
+
// extend sorting function with new sorting for multiple columns sorting
|
|
151
|
+
this.sortingFunc = Object.assign(Object.assign({}, this.sortingFunc), sortingFunc);
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
if (order) {
|
|
155
|
+
// reset sorting
|
|
156
|
+
this.sorting = { [columnProp]: order };
|
|
157
|
+
this.sortingFunc = { [columnProp]: cmp };
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
(_b = this.sorting) === null || _b === void 0 ? true : delete _b[columnProp];
|
|
161
|
+
(_c = this.sortingFunc) === null || _c === void 0 ? true : delete _c[columnProp];
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
this.startSorting(this.sorting, this.sortingFunc);
|
|
165
|
+
}
|
|
166
|
+
runSorting(order, comparison, ignoreViewportUpdate) {
|
|
167
|
+
var _a;
|
|
168
|
+
this.sort(order, comparison, undefined, ignoreViewportUpdate);
|
|
169
|
+
(_a = this.sortingPromise) === null || _a === void 0 ? void 0 : _a.call(this);
|
|
170
|
+
this.sortingPromise = null;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Sort items by sorting function
|
|
174
|
+
* @requires proxyItems applied to row store
|
|
175
|
+
* @requires source applied to row store
|
|
176
|
+
*
|
|
177
|
+
* @param sorting - per column sorting
|
|
178
|
+
* @param data - this.stores['rgRow'].store.get('source')
|
|
179
|
+
*/
|
|
180
|
+
sort(sorting, sortingFunc, types = rowTypes, ignoreViewportUpdate = false) {
|
|
181
|
+
// if no sorting - reset
|
|
182
|
+
if (!Object.keys(sorting || {}).length) {
|
|
183
|
+
for (let type of types) {
|
|
184
|
+
const storeService = this.providers.data.stores[type];
|
|
185
|
+
// row data
|
|
186
|
+
const source = storeService.store.get('source');
|
|
187
|
+
// row indexes
|
|
188
|
+
const proxyItems = storeService.store.get('proxyItems');
|
|
189
|
+
// row indexes
|
|
190
|
+
const newItemsOrder = Array.from({ length: source.length }, (_, i) => i); // recover indexes range(0, source.length)
|
|
191
|
+
this.providers.dimension.updateSizesPositionByNewDataIndexes(type, newItemsOrder, proxyItems);
|
|
192
|
+
storeService.setData({ proxyItems: newItemsOrder, source: [...source], });
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
for (let type of types) {
|
|
197
|
+
const storeService = this.providers.data.stores[type];
|
|
198
|
+
// row data
|
|
199
|
+
const source = storeService.store.get('source');
|
|
200
|
+
// row indexes
|
|
201
|
+
const proxyItems = storeService.store.get('proxyItems');
|
|
202
|
+
const newItemsOrder = sortIndexByItems([...proxyItems], source, sortingFunc);
|
|
203
|
+
// take row indexes before trim applied and proxy items
|
|
204
|
+
const prevItems = storeService.store.get('items');
|
|
205
|
+
storeService.setData({
|
|
206
|
+
proxyItems: newItemsOrder,
|
|
207
|
+
source: [...source],
|
|
208
|
+
});
|
|
209
|
+
// take currently visible row indexes
|
|
210
|
+
const newItems = storeService.store.get('items');
|
|
211
|
+
if (!ignoreViewportUpdate) {
|
|
212
|
+
this.providers.dimension
|
|
213
|
+
.updateSizesPositionByNewDataIndexes(type, newItems, prevItems);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
// refresh columns to redraw column headers and show correct icon
|
|
218
|
+
columnTypes.forEach((type) => {
|
|
219
|
+
this.providers.column.dataSources[type].refresh();
|
|
220
|
+
});
|
|
221
|
+
this.emit('aftersortingapply');
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=sorting.plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sorting.plugin.js","sourceRoot":"","sources":["../../../src/plugins/sorting/sorting.plugin.ts"],"names":[],"mappings":"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","sourcesContent":["import size from 'lodash/size';\r\nimport debounce from 'lodash/debounce';\r\n\r\nimport { BasePlugin } from '../base.plugin';\r\nimport type {\r\n Order,\r\n ColumnRegular,\r\n DimensionRows,\r\n PluginProviders,\r\n} from '@type';\r\nimport type { SortingConfig, SortingOrder, SortingOrderFunction } from './sorting.types';\r\nimport { getColumnByProp } from '../../utils/column.utils';\r\nimport { columnTypes, rowTypes } from '@store';\r\nimport { getComparer, getNextOrder, sortIndexByItems } from './sorting.func';\r\n\r\nexport * from './sorting.types';\r\nexport * from './sorting.func';\r\nexport * from './sorting.sign';\r\n\r\n/**\r\n * Lifecycle\r\n * 1. @event `beforesorting` - Triggered when sorting just starts. Nothing has happened yet. This can be triggered from a column or from the source. If the type is from rows, the column will be undefined.\r\n * 2. @event `beforesourcesortingapply` - Triggered before the sorting data is applied to the data source. You can prevent this event, and the data will not be sorted.\r\n * 3. @event `beforesortingapply` - Triggered before the sorting data is applied to the data source. You can prevent this event, and the data will not be sorted. This event is only called from a column sorting click.\r\n * 4. @event `aftersortingapply` - Triggered after sorting has been applied and completed. This event occurs for both row and column sorting.\r\n *\r\n * Note: If you prevent an event, it will not proceed to the subsequent steps.\r\n */\r\n\r\nexport class SortingPlugin extends BasePlugin {\r\n // Current sorting order per column prop\r\n sorting?: SortingOrder;\r\n\r\n // Each column sorting function, multiple columns sorting supported\r\n sortingFunc?: SortingOrderFunction;\r\n /**\r\n * Delayed sorting promise\r\n */\r\n sortingPromise: (() => void) | null = null;\r\n\r\n /**\r\n * We need to sort only so often\r\n */\r\n postponeSort = debounce(\r\n (order?: SortingOrder, comparison?: SortingOrderFunction, ignoreViewportUpdate?: boolean) =>\r\n this.runSorting(order, comparison, ignoreViewportUpdate),\r\n 50,\r\n );\r\n\r\n constructor(\r\n public revogrid: HTMLRevoGridElement,\r\n providers: PluginProviders,\r\n config?: SortingConfig,\r\n ) {\r\n super(revogrid, providers);\r\n\r\n const setConfig = (cfg?: SortingConfig) => {\r\n if (cfg) {\r\n const sortingFunc: SortingOrderFunction = {};\r\n const order: SortingOrder = {};\r\n cfg.columns?.forEach(col => {\r\n sortingFunc[col.prop] = getComparer(col, col.order);\r\n order[col.prop] = col.order;\r\n });\r\n\r\n if (cfg.additive) {\r\n this.sorting = {\r\n ...this.sorting,\r\n ...order,\r\n };\r\n this.sortingFunc = {\r\n ...this.sortingFunc,\r\n ...sortingFunc,\r\n };\r\n } else {\r\n // // set sorting\r\n this.sorting = order;\r\n this.sortingFunc = sortingFunc;\r\n }\r\n }\r\n }\r\n\r\n setConfig(config);\r\n\r\n this.addEventListener('sortingconfigchanged', ({ detail }) => {\r\n config = detail;\r\n setConfig(detail);\r\n this.startSorting(this.sorting, this.sortingFunc);\r\n });\r\n\r\n this.addEventListener('beforeheaderrender', ({\r\n detail,\r\n }) => {\r\n const { data: column } = detail;\r\n if (column.sortable) {\r\n detail.data = {\r\n ...column,\r\n order: this.sorting?.[column.prop],\r\n };\r\n }\r\n });\r\n\r\n this.addEventListener('beforeanysource', ({\r\n detail: { type },\r\n }) => {\r\n // if sorting was provided - sort data\r\n if (!!this.sorting && this.sortingFunc) {\r\n const event = this.emit('beforesourcesortingapply', { type, sorting: this.sorting });\r\n if (event.defaultPrevented) {\r\n return;\r\n }\r\n this.startSorting(this.sorting, this.sortingFunc);\r\n }\r\n });\r\n this.addEventListener('aftercolumnsset', ({\r\n detail: { order },\r\n }) => {\r\n // if config provided - do nothing, read from config\r\n if (config) {\r\n return;\r\n }\r\n\r\n const columns = this.providers.column.getColumns();\r\n const sortingFunc: SortingOrderFunction = {};\r\n\r\n for (let prop in order) {\r\n const cmp = getComparer(\r\n getColumnByProp(columns, prop),\r\n order[prop],\r\n );\r\n sortingFunc[prop] = cmp;\r\n }\r\n\r\n // set sorting\r\n this.sorting = order;\r\n this.sortingFunc = order && sortingFunc;\r\n });\r\n this.addEventListener('beforeheaderclick', (e) => {\r\n if (e.defaultPrevented) {\r\n return;\r\n }\r\n\r\n if (!e.detail?.column?.sortable) {\r\n return;\r\n }\r\n\r\n this.headerclick(\r\n e.detail.column,\r\n e.detail?.originalEvent?.shiftKey,\r\n );\r\n });\r\n }\r\n\r\n /**\r\n * Entry point for sorting, waits for all delayes, registers jobs\r\n */\r\n startSorting(order?: SortingOrder, sortingFunc?: SortingOrderFunction, ignoreViewportUpdate?: boolean) {\r\n if (!this.sortingPromise) {\r\n // add job before render\r\n this.revogrid.jobsBeforeRender.push(\r\n new Promise<void>(resolve => {\r\n this.sortingPromise = resolve;\r\n }),\r\n );\r\n }\r\n this.postponeSort(order, sortingFunc, ignoreViewportUpdate);\r\n }\r\n\r\n\r\n /**\r\n * Apply sorting to data on header click\r\n * If additive - add to existing sorting, multiple columns can be sorted\r\n */\r\n headerclick(column: ColumnRegular, additive: boolean) {\r\n const columnProp = column.prop;\r\n let order: Order = getNextOrder(this.sorting?.[columnProp]);\r\n const beforeEvent = this.emit('beforesorting', { column, order, additive });\r\n if (beforeEvent.defaultPrevented) {\r\n return;\r\n }\r\n order = beforeEvent.detail.order;\r\n\r\n // apply sort data\r\n const beforeApplyEvent = this.emit('beforesortingapply', {\r\n column: beforeEvent.detail.column,\r\n order,\r\n additive,\r\n });\r\n if (beforeApplyEvent.defaultPrevented) {\r\n return;\r\n }\r\n const cmp = getComparer(beforeApplyEvent.detail.column, beforeApplyEvent.detail.order);\r\n\r\n if (beforeApplyEvent.detail.additive && this.sorting) {\r\n const sorting: SortingOrder = {};\r\n const sortingFunc: SortingOrderFunction = {};\r\n\r\n if (columnProp in sorting && size(sorting) > 1 && order === undefined) {\r\n delete sorting[columnProp];\r\n delete sortingFunc[columnProp];\r\n } else {\r\n sorting[columnProp] = order;\r\n sortingFunc[columnProp] = cmp;\r\n } \r\n\r\n this.sorting = {\r\n ...this.sorting,\r\n ...sorting,\r\n };\r\n \r\n // extend sorting function with new sorting for multiple columns sorting\r\n this.sortingFunc = {\r\n ...this.sortingFunc,\r\n ...sortingFunc,\r\n };\r\n } else {\r\n if (order) {\r\n // reset sorting\r\n this.sorting = { [columnProp]: order };\r\n this.sortingFunc = { [columnProp]: cmp };\r\n } else {\r\n delete this.sorting?.[columnProp];\r\n delete this.sortingFunc?.[columnProp];\r\n }\r\n }\r\n\r\n this.startSorting(this.sorting, this.sortingFunc);\r\n }\r\n\r\n runSorting(\r\n order?: SortingOrder,\r\n comparison?: SortingOrderFunction,\r\n ignoreViewportUpdate?: boolean\r\n ) {\r\n this.sort(order, comparison, undefined, ignoreViewportUpdate);\r\n this.sortingPromise?.();\r\n this.sortingPromise = null;\r\n }\r\n\r\n /**\r\n * Sort items by sorting function\r\n * @requires proxyItems applied to row store\r\n * @requires source applied to row store\r\n *\r\n * @param sorting - per column sorting\r\n * @param data - this.stores['rgRow'].store.get('source')\r\n */\r\n sort(\r\n sorting?: SortingOrder,\r\n sortingFunc?: SortingOrderFunction,\r\n types: DimensionRows[] = rowTypes,\r\n ignoreViewportUpdate = false\r\n ) {\r\n // if no sorting - reset\r\n if (!Object.keys(sorting || {}).length) {\r\n for (let type of types) {\r\n const storeService = this.providers.data.stores[type];\r\n // row data\r\n const source = storeService.store.get('source');\r\n // row indexes\r\n const proxyItems = storeService.store.get('proxyItems');\r\n // row indexes\r\n const newItemsOrder = Array.from({ length: source.length }, (_, i) => i); // recover indexes range(0, source.length)\r\n this.providers.dimension.updateSizesPositionByNewDataIndexes(type, newItemsOrder, proxyItems);\r\n storeService.setData({ proxyItems: newItemsOrder, source: [...source], });\r\n }\r\n } else {\r\n for (let type of types) {\r\n const storeService = this.providers.data.stores[type];\r\n // row data\r\n const source = storeService.store.get('source');\r\n // row indexes\r\n const proxyItems = storeService.store.get('proxyItems');\r\n\r\n const newItemsOrder = sortIndexByItems(\r\n [...proxyItems],\r\n source,\r\n sortingFunc,\r\n );\r\n \r\n // take row indexes before trim applied and proxy items\r\n const prevItems = storeService.store.get('items');\r\n storeService.setData({\r\n proxyItems: newItemsOrder,\r\n source: [...source],\r\n });\r\n // take currently visible row indexes\r\n const newItems = storeService.store.get('items');\r\n if (!ignoreViewportUpdate) {\r\n this.providers.dimension\r\n .updateSizesPositionByNewDataIndexes(type, newItems, prevItems);\r\n }\r\n }\r\n }\r\n // refresh columns to redraw column headers and show correct icon\r\n columnTypes.forEach((type) => {\r\n this.providers.column.dataSources[type].refresh();\r\n });\r\n this.emit('aftersortingapply');\r\n }\r\n}\r\n\r\n\r\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Built by LevelSkill.Pro
|
|
3
|
+
*/
|
|
4
|
+
import { h } from "@stencil/core";
|
|
5
|
+
export const SortingSign = ({ column }) => {
|
|
6
|
+
var _a;
|
|
7
|
+
return h("i", { class: (_a = column === null || column === void 0 ? void 0 : column.order) !== null && _a !== void 0 ? _a : 'sort-off' });
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=sorting.sign.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sorting.sign.js","sourceRoot":"","sources":["../../../src/plugins/sorting/sorting.sign.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAMlC,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,EAAE,MAAM,EAAS,EAAE,EAAE;;IAC/C,OAAO,SAAG,KAAK,EAAE,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,mCAAI,UAAU,GAAI,CAAC;AACnD,CAAC,CAAC","sourcesContent":["import { h } from '@stencil/core';\r\nimport { ColumnRegular } from '@type';\r\n\r\ntype Props = {\r\n column: ColumnRegular;\r\n};\r\nexport const SortingSign = ({ column }: Props) => {\r\n return <i class={column?.order ?? 'sort-off'} />;\r\n};\r\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sorting.types.js","sourceRoot":"","sources":["../../../src/plugins/sorting/sorting.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { CellCompareFunc, ColumnProp, Order } from '@type';\r\n\r\nexport type SortingOrder = Record<ColumnProp, Order>;\r\nexport type SortingOrderFunction = Record<\r\n ColumnProp,\r\n CellCompareFunc | undefined\r\n>;\r\nexport type ColumnSetEvent = {\r\n order: SortingOrder;\r\n};\r\n\r\nexport type SortingConfig = {\r\n columns?: { prop: ColumnProp; order: Order; cellCompare?: CellCompareFunc }[];\r\n additive?: boolean;\r\n};\r\n"]}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Built by LevelSkill.Pro
|
|
3
|
+
*/
|
|
4
|
+
import { BasePlugin } from "../base.plugin";
|
|
5
|
+
/**
|
|
6
|
+
* WCAG Plugin is responsible for enhancing the accessibility features of the RevoGrid component.
|
|
7
|
+
* It ensures that the grid is fully compliant with Web Content Accessibility Guidelines (WCAG) 2.1.
|
|
8
|
+
* This plugin should be the last plugin you add, as it modifies the grid's default behavior.
|
|
9
|
+
*
|
|
10
|
+
* The WCAG Plugin performs the following tasks:
|
|
11
|
+
* - Sets the 'dir' attribute to 'ltr' for left-to-right text direction.
|
|
12
|
+
* - Sets the 'role' attribute to 'treegrid' for treelike hierarchical structure.
|
|
13
|
+
* - Sets the 'aria-keyshortcuts' attribute to 'Enter' and 'Esc' for keyboard shortcuts.
|
|
14
|
+
* - Adds event listeners for keyboard navigation and editing.
|
|
15
|
+
*
|
|
16
|
+
* By default, the plugin adds ARIA roles and properties to the grid elements, providing semantic information
|
|
17
|
+
* for assistive technologies. These roles include 'grid', 'row', and 'gridcell'. The plugin also sets
|
|
18
|
+
* ARIA attributes such as 'aria-rowindex', 'aria-colindex', and 'aria-selected'.
|
|
19
|
+
*
|
|
20
|
+
* The WCAG Plugin ensures that the grid is fully functional and usable for users with various disabilities,
|
|
21
|
+
* including visual impairments, deaf-blindness, and cognitive disabilities.
|
|
22
|
+
*
|
|
23
|
+
* Note: The WCAG Plugin should be added as the last plugin in the list of plugins, as it modifies the grid's
|
|
24
|
+
* default behavior and may conflict with other plugins if added earlier.
|
|
25
|
+
*/
|
|
26
|
+
export class WCAGPlugin extends BasePlugin {
|
|
27
|
+
constructor(revogrid, providers) {
|
|
28
|
+
super(revogrid, providers);
|
|
29
|
+
revogrid.setAttribute('role', 'treegrid');
|
|
30
|
+
revogrid.setAttribute('aria-keyshortcuts', 'Enter');
|
|
31
|
+
revogrid.setAttribute('aria-multiselectable', 'true');
|
|
32
|
+
revogrid.setAttribute('tabindex', '0');
|
|
33
|
+
/**
|
|
34
|
+
* Before Columns Set Event
|
|
35
|
+
*/
|
|
36
|
+
this.addEventListener('beforecolumnsset', ({ detail }) => {
|
|
37
|
+
const columns = [
|
|
38
|
+
...detail.columns.colPinStart,
|
|
39
|
+
...detail.columns.rgCol,
|
|
40
|
+
...detail.columns.colPinEnd,
|
|
41
|
+
];
|
|
42
|
+
revogrid.setAttribute('aria-colcount', `${columns.length}`);
|
|
43
|
+
columns.forEach((column, index) => {
|
|
44
|
+
const { columnProperties, cellProperties } = column;
|
|
45
|
+
column.columnProperties = (...args) => {
|
|
46
|
+
const result = (columnProperties === null || columnProperties === void 0 ? void 0 : columnProperties(...args)) || {};
|
|
47
|
+
result.role = 'columnheader';
|
|
48
|
+
result['aria-colindex'] = `${index}`;
|
|
49
|
+
return result;
|
|
50
|
+
};
|
|
51
|
+
column.cellProperties = (...args) => {
|
|
52
|
+
const wcagProps = {
|
|
53
|
+
['role']: 'gridcell',
|
|
54
|
+
['aria-colindex']: `${index}`,
|
|
55
|
+
['aria-rowindex']: `${args[0].rowIndex}`,
|
|
56
|
+
['tabindex']: -1,
|
|
57
|
+
};
|
|
58
|
+
const columnProps = (cellProperties === null || cellProperties === void 0 ? void 0 : cellProperties(...args)) || {};
|
|
59
|
+
return Object.assign(Object.assign({}, wcagProps), columnProps);
|
|
60
|
+
};
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
/**
|
|
64
|
+
* Before Row Set Event
|
|
65
|
+
*/
|
|
66
|
+
this.addEventListener('beforesourceset', ({ detail, }) => {
|
|
67
|
+
revogrid.setAttribute('aria-rowcount', `${detail.source.length}`);
|
|
68
|
+
});
|
|
69
|
+
this.addEventListener('beforerowrender', ({ detail, }) => {
|
|
70
|
+
detail.node.$attrs$ = Object.assign(Object.assign({}, detail.node.$attrs$), { role: 'row', ['aria-rowindex']: detail.item.itemIndex });
|
|
71
|
+
});
|
|
72
|
+
// focuscell
|
|
73
|
+
this.addEventListener('afterfocus', async (e) => {
|
|
74
|
+
if (e.defaultPrevented) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
const el = this.revogrid.querySelector(`revogr-data[type="${e.detail.rowType}"][col-type="${e.detail.colType}"] [data-rgrow="${e.detail.rowIndex}"][data-rgcol="${e.detail.colIndex}"]`);
|
|
78
|
+
if (el instanceof HTMLElement) {
|
|
79
|
+
el.focus();
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/wcag/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { CellProps, PluginProviders } from '@type';\r\nimport { BasePlugin } from '../base.plugin';\r\nimport { ColumnCollection } from 'src/utils';\r\n\r\n/**\r\n * WCAG Plugin is responsible for enhancing the accessibility features of the RevoGrid component.\r\n * It ensures that the grid is fully compliant with Web Content Accessibility Guidelines (WCAG) 2.1.\r\n * This plugin should be the last plugin you add, as it modifies the grid's default behavior.\r\n *\r\n * The WCAG Plugin performs the following tasks:\r\n * - Sets the 'dir' attribute to 'ltr' for left-to-right text direction.\r\n * - Sets the 'role' attribute to 'treegrid' for treelike hierarchical structure.\r\n * - Sets the 'aria-keyshortcuts' attribute to 'Enter' and 'Esc' for keyboard shortcuts.\r\n * - Adds event listeners for keyboard navigation and editing.\r\n *\r\n * By default, the plugin adds ARIA roles and properties to the grid elements, providing semantic information\r\n * for assistive technologies. These roles include 'grid', 'row', and 'gridcell'. The plugin also sets\r\n * ARIA attributes such as 'aria-rowindex', 'aria-colindex', and 'aria-selected'.\r\n *\r\n * The WCAG Plugin ensures that the grid is fully functional and usable for users with various disabilities,\r\n * including visual impairments, deaf-blindness, and cognitive disabilities.\r\n *\r\n * Note: The WCAG Plugin should be added as the last plugin in the list of plugins, as it modifies the grid's\r\n * default behavior and may conflict with other plugins if added earlier.\r\n */\r\nexport class WCAGPlugin extends BasePlugin {\r\n constructor(revogrid: HTMLRevoGridElement, providers: PluginProviders) {\r\n super(revogrid, providers);\r\n\r\n revogrid.setAttribute('role', 'treegrid');\r\n revogrid.setAttribute('aria-keyshortcuts', 'Enter');\r\n revogrid.setAttribute('aria-multiselectable', 'true');\r\n revogrid.setAttribute('tabindex', '0');\r\n\r\n /**\r\n * Before Columns Set Event\r\n */\r\n this.addEventListener(\r\n 'beforecolumnsset',\r\n ({ detail }: CustomEvent<ColumnCollection>) => {\r\n const columns = [\r\n ...detail.columns.colPinStart,\r\n ...detail.columns.rgCol,\r\n ...detail.columns.colPinEnd,\r\n ];\r\n\r\n revogrid.setAttribute('aria-colcount', `${columns.length}`);\r\n\r\n columns.forEach((column, index) => {\r\n const { columnProperties, cellProperties } = column;\r\n\r\n column.columnProperties = (...args) => {\r\n const result = columnProperties?.(...args) || {};\r\n\r\n result.role = 'columnheader';\r\n result['aria-colindex'] = `${index}`;\r\n\r\n return result;\r\n };\r\n\r\n column.cellProperties = (...args) => {\r\n const wcagProps: CellProps = {\r\n ['role']: 'gridcell',\r\n ['aria-colindex']: `${index}`,\r\n ['aria-rowindex']: `${args[0].rowIndex}`,\r\n ['tabindex']: -1,\r\n };\r\n const columnProps: CellProps = cellProperties?.(...args) || {};\r\n\r\n return {\r\n ...wcagProps,\r\n ...columnProps,\r\n };\r\n };\r\n });\r\n },\r\n );\r\n\r\n /**\r\n * Before Row Set Event\r\n */\r\n this.addEventListener(\r\n 'beforesourceset',\r\n ({\r\n detail,\r\n }: CustomEvent<HTMLRevoGridElementEventMap['beforesourceset']>) => {\r\n revogrid.setAttribute('aria-rowcount', `${detail.source.length}`);\r\n },\r\n );\r\n this.addEventListener(\r\n 'beforerowrender',\r\n ({\r\n detail,\r\n }: CustomEvent<HTMLRevogrDataElementEventMap['beforerowrender']>) => {\r\n detail.node.$attrs$ = {\r\n ...detail.node.$attrs$,\r\n role: 'row',\r\n ['aria-rowindex']: detail.item.itemIndex,\r\n };\r\n },\r\n );\r\n\r\n // focuscell\r\n this.addEventListener(\r\n 'afterfocus',\r\n async (\r\n e: CustomEvent<HTMLRevogrFocusElementEventMap['afterfocus']>,\r\n ) => {\r\n if (e.defaultPrevented) {\r\n return;\r\n }\r\n const el = this.revogrid.querySelector(\r\n `revogr-data[type=\"${e.detail.rowType}\"][col-type=\"${e.detail.colType}\"] [data-rgrow=\"${e.detail.rowIndex}\"][data-rgcol=\"${e.detail.colIndex}\"]`,\r\n );\r\n if (el instanceof HTMLElement) {\r\n el.focus();\r\n }\r\n },\r\n );\r\n }\r\n}\r\n"]}
|