@glideappsfinal/glide-data-grid 6.0.9
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/.eslintignore +4 -0
- package/.eslintrc +68 -0
- package/API.md +1466 -0
- package/CHANGELOG.md +895 -0
- package/LICENSE +21 -0
- package/README.md +190 -0
- package/build.sh +21 -0
- package/dist/cjs/cells/boolean-cell.js +87 -0
- package/dist/cjs/cells/boolean-cell.js.map +1 -0
- package/dist/cjs/cells/bubble-cell.js +53 -0
- package/dist/cjs/cells/bubble-cell.js.map +1 -0
- package/dist/cjs/cells/cell-types.js +2 -0
- package/dist/cjs/cells/cell-types.js.map +1 -0
- package/dist/cjs/cells/drilldown-cell.js +171 -0
- package/dist/cjs/cells/drilldown-cell.js.map +1 -0
- package/dist/cjs/cells/image-cell.js +94 -0
- package/dist/cjs/cells/image-cell.js.map +1 -0
- package/dist/cjs/cells/index.js +29 -0
- package/dist/cjs/cells/index.js.map +1 -0
- package/dist/cjs/cells/loading-cell.js +41 -0
- package/dist/cjs/cells/loading-cell.js.map +1 -0
- package/dist/cjs/cells/markdown-cell.js +30 -0
- package/dist/cjs/cells/markdown-cell.js.map +1 -0
- package/dist/cjs/cells/marker-cell.js +80 -0
- package/dist/cjs/cells/marker-cell.js.map +1 -0
- package/dist/cjs/cells/new-row-cell.js +53 -0
- package/dist/cjs/cells/new-row-cell.js.map +1 -0
- package/dist/cjs/cells/number-cell.js +44 -0
- package/dist/cjs/cells/number-cell.js.map +1 -0
- package/dist/cjs/cells/protected-cell.js +35 -0
- package/dist/cjs/cells/protected-cell.js.map +1 -0
- package/dist/cjs/cells/row-id-cell.js +23 -0
- package/dist/cjs/cells/row-id-cell.js.map +1 -0
- package/dist/cjs/cells/text-cell.js +48 -0
- package/dist/cjs/cells/text-cell.js.map +1 -0
- package/dist/cjs/cells/uri-cell.js +104 -0
- package/dist/cjs/cells/uri-cell.js.map +1 -0
- package/dist/cjs/common/browser-detect.js +20 -0
- package/dist/cjs/common/browser-detect.js.map +1 -0
- package/dist/cjs/common/image-window-loader.js +98 -0
- package/dist/cjs/common/image-window-loader.js.map +1 -0
- package/dist/cjs/common/is-hotkey.js +76 -0
- package/dist/cjs/common/is-hotkey.js.map +1 -0
- package/dist/cjs/common/math.js +297 -0
- package/dist/cjs/common/math.js.map +1 -0
- package/dist/cjs/common/render-state-provider.js +70 -0
- package/dist/cjs/common/render-state-provider.js.map +1 -0
- package/dist/cjs/common/resize-detector.js +27 -0
- package/dist/cjs/common/resize-detector.js.map +1 -0
- package/dist/cjs/common/styles.js +135 -0
- package/dist/cjs/common/styles.js.map +1 -0
- package/dist/cjs/common/support.js +60 -0
- package/dist/cjs/common/support.js.map +1 -0
- package/dist/cjs/common/utils.js +193 -0
- package/dist/cjs/common/utils.js.map +1 -0
- package/dist/cjs/data-editor/copy-paste.js +269 -0
- package/dist/cjs/data-editor/copy-paste.js.map +1 -0
- package/dist/cjs/data-editor/data-editor-fns.js +190 -0
- package/dist/cjs/data-editor/data-editor-fns.js.map +1 -0
- package/dist/cjs/data-editor/data-editor-keybindings.js +126 -0
- package/dist/cjs/data-editor/data-editor-keybindings.js.map +1 -0
- package/dist/cjs/data-editor/data-editor.js +2892 -0
- package/dist/cjs/data-editor/data-editor.js.map +1 -0
- package/dist/cjs/data-editor/group-rename.css +2 -0
- package/dist/cjs/data-editor/group-rename.js +49 -0
- package/dist/cjs/data-editor/group-rename.js.map +1 -0
- package/dist/cjs/data-editor/row-grouping-api.js +34 -0
- package/dist/cjs/data-editor/row-grouping-api.js.map +1 -0
- package/dist/cjs/data-editor/row-grouping.js +189 -0
- package/dist/cjs/data-editor/row-grouping.js.map +1 -0
- package/dist/cjs/data-editor/use-autoscroll.js +36 -0
- package/dist/cjs/data-editor/use-autoscroll.js.map +1 -0
- package/dist/cjs/data-editor/use-cells-for-selection.js +53 -0
- package/dist/cjs/data-editor/use-cells-for-selection.js.map +1 -0
- package/dist/cjs/data-editor/use-column-sizer.js +189 -0
- package/dist/cjs/data-editor/use-column-sizer.js.map +1 -0
- package/dist/cjs/data-editor/use-initial-scroll-offset.js +81 -0
- package/dist/cjs/data-editor/use-initial-scroll-offset.js.map +1 -0
- package/dist/cjs/data-editor/use-rem-adjuster.js +29 -0
- package/dist/cjs/data-editor/use-rem-adjuster.js.map +1 -0
- package/dist/cjs/data-editor/visible-region.js +2 -0
- package/dist/cjs/data-editor/visible-region.js.map +1 -0
- package/dist/cjs/data-editor-all.js +19 -0
- package/dist/cjs/data-editor-all.js.map +1 -0
- package/dist/cjs/index.js +36 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/internal/click-outside-container/click-outside-container.js +34 -0
- package/dist/cjs/internal/click-outside-container/click-outside-container.js.map +1 -0
- package/dist/cjs/internal/data-editor-container/data-grid-container.js +36 -0
- package/dist/cjs/internal/data-editor-container/data-grid-container.js.map +1 -0
- package/dist/cjs/internal/data-grid/animation-manager.js +95 -0
- package/dist/cjs/internal/data-grid/animation-manager.js.map +1 -0
- package/dist/cjs/internal/data-grid/cell-set.js +56 -0
- package/dist/cjs/internal/data-grid/cell-set.js.map +1 -0
- package/dist/cjs/internal/data-grid/color-parser.js +122 -0
- package/dist/cjs/internal/data-grid/color-parser.js.map +1 -0
- package/dist/cjs/internal/data-grid/data-grid-sprites.js +64 -0
- package/dist/cjs/internal/data-grid/data-grid-sprites.js.map +1 -0
- package/dist/cjs/internal/data-grid/data-grid-types.js +299 -0
- package/dist/cjs/internal/data-grid/data-grid-types.js.map +1 -0
- package/dist/cjs/internal/data-grid/data-grid.js +1208 -0
- package/dist/cjs/internal/data-grid/data-grid.js.map +1 -0
- package/dist/cjs/internal/data-grid/event-args.js +30 -0
- package/dist/cjs/internal/data-grid/event-args.js.map +1 -0
- package/dist/cjs/internal/data-grid/image-window-loader-interface.js +2 -0
- package/dist/cjs/internal/data-grid/image-window-loader-interface.js.map +1 -0
- package/dist/cjs/internal/data-grid/render/data-grid-lib.js +652 -0
- package/dist/cjs/internal/data-grid/render/data-grid-lib.js.map +1 -0
- package/dist/cjs/internal/data-grid/render/data-grid-render.blit.js +218 -0
- package/dist/cjs/internal/data-grid/render/data-grid-render.blit.js.map +1 -0
- package/dist/cjs/internal/data-grid/render/data-grid-render.cells.js +369 -0
- package/dist/cjs/internal/data-grid/render/data-grid-render.cells.js.map +1 -0
- package/dist/cjs/internal/data-grid/render/data-grid-render.header.js +440 -0
- package/dist/cjs/internal/data-grid/render/data-grid-render.header.js.map +1 -0
- package/dist/cjs/internal/data-grid/render/data-grid-render.js +316 -0
- package/dist/cjs/internal/data-grid/render/data-grid-render.js.map +1 -0
- package/dist/cjs/internal/data-grid/render/data-grid-render.lines.js +256 -0
- package/dist/cjs/internal/data-grid/render/data-grid-render.lines.js.map +1 -0
- package/dist/cjs/internal/data-grid/render/data-grid-render.walk.js +157 -0
- package/dist/cjs/internal/data-grid/render/data-grid-render.walk.js.map +1 -0
- package/dist/cjs/internal/data-grid/render/data-grid.render.rings.js +203 -0
- package/dist/cjs/internal/data-grid/render/data-grid.render.rings.js.map +1 -0
- package/dist/cjs/internal/data-grid/render/draw-checkbox.js +65 -0
- package/dist/cjs/internal/data-grid/render/draw-checkbox.js.map +1 -0
- package/dist/cjs/internal/data-grid/render/draw-edit-hover-indicator.js +38 -0
- package/dist/cjs/internal/data-grid/render/draw-edit-hover-indicator.js.map +1 -0
- package/dist/cjs/internal/data-grid/render/draw-grid-arg.js +2 -0
- package/dist/cjs/internal/data-grid/render/draw-grid-arg.js.map +1 -0
- package/dist/cjs/internal/data-grid/sprites.js +288 -0
- package/dist/cjs/internal/data-grid/sprites.js.map +1 -0
- package/dist/cjs/internal/data-grid/use-animation-queue.js +33 -0
- package/dist/cjs/internal/data-grid/use-animation-queue.js.map +1 -0
- package/dist/cjs/internal/data-grid/use-selection-behavior.js +112 -0
- package/dist/cjs/internal/data-grid/use-selection-behavior.js.map +1 -0
- package/dist/cjs/internal/data-grid-dnd/data-grid-dnd.js +239 -0
- package/dist/cjs/internal/data-grid-dnd/data-grid-dnd.js.map +1 -0
- package/dist/cjs/internal/data-grid-overlay-editor/data-grid-overlay-editor-style.js +77 -0
- package/dist/cjs/internal/data-grid-overlay-editor/data-grid-overlay-editor-style.js.map +1 -0
- package/dist/cjs/internal/data-grid-overlay-editor/data-grid-overlay-editor.js +124 -0
- package/dist/cjs/internal/data-grid-overlay-editor/data-grid-overlay-editor.js.map +1 -0
- package/dist/cjs/internal/data-grid-overlay-editor/private/bubbles-overlay-editor-style.js +34 -0
- package/dist/cjs/internal/data-grid-overlay-editor/private/bubbles-overlay-editor-style.js.map +1 -0
- package/dist/cjs/internal/data-grid-overlay-editor/private/bubbles-overlay-editor.js +10 -0
- package/dist/cjs/internal/data-grid-overlay-editor/private/bubbles-overlay-editor.js.map +1 -0
- package/dist/cjs/internal/data-grid-overlay-editor/private/drilldown-overlay-editor.js +50 -0
- package/dist/cjs/internal/data-grid-overlay-editor/private/drilldown-overlay-editor.js.map +1 -0
- package/dist/cjs/internal/data-grid-overlay-editor/private/image-overlay-editor-style.js +56 -0
- package/dist/cjs/internal/data-grid-overlay-editor/private/image-overlay-editor-style.js.map +1 -0
- package/dist/cjs/internal/data-grid-overlay-editor/private/image-overlay-editor.js +21 -0
- package/dist/cjs/internal/data-grid-overlay-editor/private/image-overlay-editor.js.map +1 -0
- package/dist/cjs/internal/data-grid-overlay-editor/private/markdown-overlay-editor-style.js +76 -0
- package/dist/cjs/internal/data-grid-overlay-editor/private/markdown-overlay-editor-style.js.map +1 -0
- package/dist/cjs/internal/data-grid-overlay-editor/private/markdown-overlay-editor.js +32 -0
- package/dist/cjs/internal/data-grid-overlay-editor/private/markdown-overlay-editor.js.map +1 -0
- package/dist/cjs/internal/data-grid-overlay-editor/private/number-overlay-editor-style.js +15 -0
- package/dist/cjs/internal/data-grid-overlay-editor/private/number-overlay-editor-style.js.map +1 -0
- package/dist/cjs/internal/data-grid-overlay-editor/private/number-overlay-editor.js +30 -0
- package/dist/cjs/internal/data-grid-overlay-editor/private/number-overlay-editor.js.map +1 -0
- package/dist/cjs/internal/data-grid-overlay-editor/private/uri-overlay-editor-style.js +53 -0
- package/dist/cjs/internal/data-grid-overlay-editor/private/uri-overlay-editor-style.js.map +1 -0
- package/dist/cjs/internal/data-grid-overlay-editor/private/uri-overlay-editor.js +21 -0
- package/dist/cjs/internal/data-grid-overlay-editor/private/uri-overlay-editor.js.map +1 -0
- package/dist/cjs/internal/data-grid-overlay-editor/use-stay-on-screen.js +47 -0
- package/dist/cjs/internal/data-grid-overlay-editor/use-stay-on-screen.js.map +1 -0
- package/dist/cjs/internal/data-grid-search/data-grid-search-style.js +96 -0
- package/dist/cjs/internal/data-grid-search/data-grid-search-style.js.map +1 -0
- package/dist/cjs/internal/data-grid-search/data-grid-search.js +297 -0
- package/dist/cjs/internal/data-grid-search/data-grid-search.js.map +1 -0
- package/dist/cjs/internal/growing-entry/growing-entry-style.js +60 -0
- package/dist/cjs/internal/growing-entry/growing-entry-style.js.map +1 -0
- package/dist/cjs/internal/growing-entry/growing-entry.js +41 -0
- package/dist/cjs/internal/growing-entry/growing-entry.js.map +1 -0
- package/dist/cjs/internal/markdown-div/markdown-div.js +41 -0
- package/dist/cjs/internal/markdown-div/markdown-div.js.map +1 -0
- package/dist/cjs/internal/markdown-div/private/markdown-container.js +19 -0
- package/dist/cjs/internal/markdown-div/private/markdown-container.js.map +1 -0
- package/dist/cjs/internal/scrolling-data-grid/infinite-scroller.js +265 -0
- package/dist/cjs/internal/scrolling-data-grid/infinite-scroller.js.map +1 -0
- package/dist/cjs/internal/scrolling-data-grid/scrolling-data-grid.js +155 -0
- package/dist/cjs/internal/scrolling-data-grid/scrolling-data-grid.js.map +1 -0
- package/dist/cjs/internal/scrolling-data-grid/use-kinetic-scroll.js +65 -0
- package/dist/cjs/internal/scrolling-data-grid/use-kinetic-scroll.js.map +1 -0
- package/dist/dts/cells/boolean-cell.d.ts +4 -0
- package/dist/dts/cells/boolean-cell.d.ts.map +1 -0
- package/dist/dts/cells/bubble-cell.d.ts +4 -0
- package/dist/dts/cells/bubble-cell.d.ts.map +1 -0
- package/dist/dts/cells/cell-types.d.ts +89 -0
- package/dist/dts/cells/cell-types.d.ts.map +1 -0
- package/dist/dts/cells/drilldown-cell.d.ts +4 -0
- package/dist/dts/cells/drilldown-cell.d.ts.map +1 -0
- package/dist/dts/cells/image-cell.d.ts +5 -0
- package/dist/dts/cells/image-cell.d.ts.map +1 -0
- package/dist/dts/cells/index.d.ts +4 -0
- package/dist/dts/cells/index.d.ts.map +1 -0
- package/dist/dts/cells/loading-cell.d.ts +4 -0
- package/dist/dts/cells/loading-cell.d.ts.map +1 -0
- package/dist/dts/cells/markdown-cell.d.ts +4 -0
- package/dist/dts/cells/markdown-cell.d.ts.map +1 -0
- package/dist/dts/cells/marker-cell.d.ts +4 -0
- package/dist/dts/cells/marker-cell.d.ts.map +1 -0
- package/dist/dts/cells/new-row-cell.d.ts +4 -0
- package/dist/dts/cells/new-row-cell.d.ts.map +1 -0
- package/dist/dts/cells/number-cell.d.ts +4 -0
- package/dist/dts/cells/number-cell.d.ts.map +1 -0
- package/dist/dts/cells/protected-cell.d.ts +4 -0
- package/dist/dts/cells/protected-cell.d.ts.map +1 -0
- package/dist/dts/cells/row-id-cell.d.ts +4 -0
- package/dist/dts/cells/row-id-cell.d.ts.map +1 -0
- package/dist/dts/cells/text-cell.d.ts +4 -0
- package/dist/dts/cells/text-cell.d.ts.map +1 -0
- package/dist/dts/cells/uri-cell.d.ts +4 -0
- package/dist/dts/cells/uri-cell.d.ts.map +1 -0
- package/dist/dts/common/browser-detect.d.ts +11 -0
- package/dist/dts/common/browser-detect.d.ts.map +1 -0
- package/dist/dts/common/image-window-loader.d.ts +15 -0
- package/dist/dts/common/image-window-loader.d.ts.map +1 -0
- package/dist/dts/common/is-hotkey.d.ts +7 -0
- package/dist/dts/common/is-hotkey.d.ts.map +1 -0
- package/dist/dts/common/math.d.ts +20 -0
- package/dist/dts/common/math.d.ts.map +1 -0
- package/dist/dts/common/render-state-provider.d.ts +20 -0
- package/dist/dts/common/render-state-provider.d.ts.map +1 -0
- package/dist/dts/common/resize-detector.d.ts +11 -0
- package/dist/dts/common/resize-detector.d.ts.map +1 -0
- package/dist/dts/common/styles.d.ts +61 -0
- package/dist/dts/common/styles.d.ts.map +1 -0
- package/dist/dts/common/support.d.ts +13 -0
- package/dist/dts/common/support.d.ts.map +1 -0
- package/dist/dts/common/utils.d.ts +38 -0
- package/dist/dts/common/utils.d.ts.map +1 -0
- package/dist/dts/data-editor/copy-paste.d.ts +22 -0
- package/dist/dts/data-editor/copy-paste.d.ts.map +1 -0
- package/dist/dts/data-editor/data-editor-fns.d.ts +16 -0
- package/dist/dts/data-editor/data-editor-fns.d.ts.map +1 -0
- package/dist/dts/data-editor/data-editor-keybindings.d.ts +62 -0
- package/dist/dts/data-editor/data-editor-keybindings.d.ts.map +1 -0
- package/dist/dts/data-editor/data-editor.d.ts +532 -0
- package/dist/dts/data-editor/data-editor.d.ts.map +1 -0
- package/dist/dts/data-editor/group-rename.d.ts +12 -0
- package/dist/dts/data-editor/group-rename.d.ts.map +1 -0
- package/dist/dts/data-editor/row-grouping-api.d.ts +21 -0
- package/dist/dts/data-editor/row-grouping-api.d.ts.map +1 -0
- package/dist/dts/data-editor/row-grouping.d.ts +82 -0
- package/dist/dts/data-editor/row-grouping.d.ts.map +1 -0
- package/dist/dts/data-editor/use-autoscroll.d.ts +4 -0
- package/dist/dts/data-editor/use-autoscroll.d.ts.map +1 -0
- package/dist/dts/data-editor/use-cells-for-selection.d.ts +7 -0
- package/dist/dts/data-editor/use-cells-for-selection.d.ts.map +1 -0
- package/dist/dts/data-editor/use-column-sizer.d.ts +11 -0
- package/dist/dts/data-editor/use-column-sizer.d.ts.map +1 -0
- package/dist/dts/data-editor/use-initial-scroll-offset.d.ts +9 -0
- package/dist/dts/data-editor/use-initial-scroll-offset.d.ts.map +1 -0
- package/dist/dts/data-editor/use-rem-adjuster.d.ts +22 -0
- package/dist/dts/data-editor/use-rem-adjuster.d.ts.map +1 -0
- package/dist/dts/data-editor/visible-region.d.ts +19 -0
- package/dist/dts/data-editor/visible-region.d.ts.map +1 -0
- package/dist/dts/data-editor-all.d.ts +8 -0
- package/dist/dts/data-editor-all.d.ts.map +1 -0
- package/dist/dts/index.d.ts +52 -0
- package/dist/dts/index.d.ts.map +1 -0
- package/dist/dts/internal/click-outside-container/click-outside-container.d.ts +15 -0
- package/dist/dts/internal/click-outside-container/click-outside-container.d.ts.map +1 -0
- package/dist/dts/internal/data-editor-container/data-grid-container.d.ts +10 -0
- package/dist/dts/internal/data-editor-container/data-grid-container.d.ts.map +1 -0
- package/dist/dts/internal/data-grid/animation-manager.d.ts +26 -0
- package/dist/dts/internal/data-grid/animation-manager.d.ts.map +1 -0
- package/dist/dts/internal/data-grid/cell-set.d.ts +17 -0
- package/dist/dts/internal/data-grid/cell-set.d.ts.map +1 -0
- package/dist/dts/internal/data-grid/color-parser.d.ts +16 -0
- package/dist/dts/internal/data-grid/color-parser.d.ts.map +1 -0
- package/dist/dts/internal/data-grid/data-grid-sprites.d.ts +35 -0
- package/dist/dts/internal/data-grid/data-grid-sprites.d.ts.map +1 -0
- package/dist/dts/internal/data-grid/data-grid-types.d.ts +443 -0
- package/dist/dts/internal/data-grid/data-grid-types.d.ts.map +1 -0
- package/dist/dts/internal/data-grid/data-grid.d.ts +244 -0
- package/dist/dts/internal/data-grid/data-grid.d.ts.map +1 -0
- package/dist/dts/internal/data-grid/event-args.d.ts +117 -0
- package/dist/dts/internal/data-grid/event-args.d.ts.map +1 -0
- package/dist/dts/internal/data-grid/image-window-loader-interface.d.ts +9 -0
- package/dist/dts/internal/data-grid/image-window-loader-interface.d.ts.map +1 -0
- package/dist/dts/internal/data-grid/render/data-grid-lib.d.ts +60 -0
- package/dist/dts/internal/data-grid/render/data-grid-lib.d.ts.map +1 -0
- package/dist/dts/internal/data-grid/render/data-grid-render.blit.d.ts +20 -0
- package/dist/dts/internal/data-grid/render/data-grid-render.blit.d.ts.map +1 -0
- package/dist/dts/internal/data-grid/render/data-grid-render.cells.d.ts +32 -0
- package/dist/dts/internal/data-grid/render/data-grid-render.cells.d.ts.map +1 -0
- package/dist/dts/internal/data-grid/render/data-grid-render.d.ts +3 -0
- package/dist/dts/internal/data-grid/render/data-grid-render.d.ts.map +1 -0
- package/dist/dts/internal/data-grid/render/data-grid-render.header.d.ts +22 -0
- package/dist/dts/internal/data-grid/render/data-grid-render.header.d.ts.map +1 -0
- package/dist/dts/internal/data-grid/render/data-grid-render.lines.d.ts +10 -0
- package/dist/dts/internal/data-grid/render/data-grid-render.lines.d.ts.map +1 -0
- package/dist/dts/internal/data-grid/render/data-grid-render.walk.d.ts +14 -0
- package/dist/dts/internal/data-grid/render/data-grid-render.walk.d.ts.map +1 -0
- package/dist/dts/internal/data-grid/render/data-grid.render.rings.d.ts +8 -0
- package/dist/dts/internal/data-grid/render/data-grid.render.rings.d.ts.map +1 -0
- package/dist/dts/internal/data-grid/render/draw-checkbox.d.ts +4 -0
- package/dist/dts/internal/data-grid/render/draw-checkbox.d.ts.map +1 -0
- package/dist/dts/internal/data-grid/render/draw-edit-hover-indicator.d.ts +4 -0
- package/dist/dts/internal/data-grid/render/draw-edit-hover-indicator.d.ts.map +1 -0
- package/dist/dts/internal/data-grid/render/draw-grid-arg.d.ts +73 -0
- package/dist/dts/internal/data-grid/render/draw-grid-arg.d.ts.map +1 -0
- package/dist/dts/internal/data-grid/sprites.d.ts +34 -0
- package/dist/dts/internal/data-grid/sprites.d.ts.map +1 -0
- package/dist/dts/internal/data-grid/use-animation-queue.d.ts +5 -0
- package/dist/dts/internal/data-grid/use-animation-queue.d.ts.map +1 -0
- package/dist/dts/internal/data-grid/use-selection-behavior.d.ts +13 -0
- package/dist/dts/internal/data-grid/use-selection-behavior.d.ts.map +1 -0
- package/dist/dts/internal/data-grid-dnd/data-grid-dnd.d.ts +63 -0
- package/dist/dts/internal/data-grid-dnd/data-grid-dnd.d.ts.map +1 -0
- package/dist/dts/internal/data-grid-overlay-editor/data-grid-overlay-editor-style.d.ts +9 -0
- package/dist/dts/internal/data-grid-overlay-editor/data-grid-overlay-editor-style.d.ts.map +1 -0
- package/dist/dts/internal/data-grid-overlay-editor/data-grid-overlay-editor.d.ts +32 -0
- package/dist/dts/internal/data-grid-overlay-editor/data-grid-overlay-editor.d.ts.map +1 -0
- package/dist/dts/internal/data-grid-overlay-editor/private/bubbles-overlay-editor-style.d.ts +2 -0
- package/dist/dts/internal/data-grid-overlay-editor/private/bubbles-overlay-editor-style.d.ts.map +1 -0
- package/dist/dts/internal/data-grid-overlay-editor/private/bubbles-overlay-editor.d.ts +7 -0
- package/dist/dts/internal/data-grid-overlay-editor/private/bubbles-overlay-editor.d.ts.map +1 -0
- package/dist/dts/internal/data-grid-overlay-editor/private/drilldown-overlay-editor.d.ts +8 -0
- package/dist/dts/internal/data-grid-overlay-editor/private/drilldown-overlay-editor.d.ts.map +1 -0
- package/dist/dts/internal/data-grid-overlay-editor/private/image-overlay-editor-style.d.ts +2 -0
- package/dist/dts/internal/data-grid-overlay-editor/private/image-overlay-editor-style.d.ts.map +1 -0
- package/dist/dts/internal/data-grid-overlay-editor/private/image-overlay-editor.d.ts +13 -0
- package/dist/dts/internal/data-grid-overlay-editor/private/image-overlay-editor.d.ts.map +1 -0
- package/dist/dts/internal/data-grid-overlay-editor/private/markdown-overlay-editor-style.d.ts +6 -0
- package/dist/dts/internal/data-grid-overlay-editor/private/markdown-overlay-editor-style.d.ts.map +1 -0
- package/dist/dts/internal/data-grid-overlay-editor/private/markdown-overlay-editor.d.ts +14 -0
- package/dist/dts/internal/data-grid-overlay-editor/private/markdown-overlay-editor.d.ts.map +1 -0
- package/dist/dts/internal/data-grid-overlay-editor/private/number-overlay-editor-style.d.ts +2 -0
- package/dist/dts/internal/data-grid-overlay-editor/private/number-overlay-editor-style.d.ts.map +1 -0
- package/dist/dts/internal/data-grid-overlay-editor/private/number-overlay-editor.d.ts +17 -0
- package/dist/dts/internal/data-grid-overlay-editor/private/number-overlay-editor.d.ts.map +1 -0
- package/dist/dts/internal/data-grid-overlay-editor/private/uri-overlay-editor-style.d.ts +2 -0
- package/dist/dts/internal/data-grid-overlay-editor/private/uri-overlay-editor-style.d.ts.map +1 -0
- package/dist/dts/internal/data-grid-overlay-editor/private/uri-overlay-editor.d.ts +13 -0
- package/dist/dts/internal/data-grid-overlay-editor/private/uri-overlay-editor.d.ts.map +1 -0
- package/dist/dts/internal/data-grid-overlay-editor/use-stay-on-screen.d.ts +8 -0
- package/dist/dts/internal/data-grid-overlay-editor/use-stay-on-screen.d.ts.map +1 -0
- package/dist/dts/internal/data-grid-search/data-grid-search-style.d.ts +2 -0
- package/dist/dts/internal/data-grid-search/data-grid-search-style.d.ts.map +1 -0
- package/dist/dts/internal/data-grid-search/data-grid-search.d.ts +41 -0
- package/dist/dts/internal/data-grid-search/data-grid-search.d.ts.map +1 -0
- package/dist/dts/internal/growing-entry/growing-entry-style.d.ts +4 -0
- package/dist/dts/internal/growing-entry/growing-entry-style.d.ts.map +1 -0
- package/dist/dts/internal/growing-entry/growing-entry.d.ts +12 -0
- package/dist/dts/internal/growing-entry/growing-entry.d.ts.map +1 -0
- package/dist/dts/internal/markdown-div/markdown-div.d.ts +14 -0
- package/dist/dts/internal/markdown-div/markdown-div.d.ts.map +1 -0
- package/dist/dts/internal/markdown-div/private/markdown-container.d.ts +2 -0
- package/dist/dts/internal/markdown-div/private/markdown-container.d.ts.map +1 -0
- package/dist/dts/internal/scrolling-data-grid/infinite-scroller.d.ts +38 -0
- package/dist/dts/internal/scrolling-data-grid/infinite-scroller.d.ts.map +1 -0
- package/dist/dts/internal/scrolling-data-grid/scrolling-data-grid.d.ts +57 -0
- package/dist/dts/internal/scrolling-data-grid/scrolling-data-grid.d.ts.map +1 -0
- package/dist/dts/internal/scrolling-data-grid/use-kinetic-scroll.d.ts +3 -0
- package/dist/dts/internal/scrolling-data-grid/use-kinetic-scroll.d.ts.map +1 -0
- package/dist/esm/cells/boolean-cell.js +87 -0
- package/dist/esm/cells/boolean-cell.js.map +1 -0
- package/dist/esm/cells/bubble-cell.js +53 -0
- package/dist/esm/cells/bubble-cell.js.map +1 -0
- package/dist/esm/cells/cell-types.js +2 -0
- package/dist/esm/cells/cell-types.js.map +1 -0
- package/dist/esm/cells/drilldown-cell.js +171 -0
- package/dist/esm/cells/drilldown-cell.js.map +1 -0
- package/dist/esm/cells/image-cell.js +94 -0
- package/dist/esm/cells/image-cell.js.map +1 -0
- package/dist/esm/cells/index.js +30 -0
- package/dist/esm/cells/index.js.map +1 -0
- package/dist/esm/cells/loading-cell.js +41 -0
- package/dist/esm/cells/loading-cell.js.map +1 -0
- package/dist/esm/cells/markdown-cell.js +30 -0
- package/dist/esm/cells/markdown-cell.js.map +1 -0
- package/dist/esm/cells/marker-cell.js +80 -0
- package/dist/esm/cells/marker-cell.js.map +1 -0
- package/dist/esm/cells/new-row-cell.js +53 -0
- package/dist/esm/cells/new-row-cell.js.map +1 -0
- package/dist/esm/cells/number-cell.js +44 -0
- package/dist/esm/cells/number-cell.js.map +1 -0
- package/dist/esm/cells/protected-cell.js +35 -0
- package/dist/esm/cells/protected-cell.js.map +1 -0
- package/dist/esm/cells/row-id-cell.js +23 -0
- package/dist/esm/cells/row-id-cell.js.map +1 -0
- package/dist/esm/cells/text-cell.js +48 -0
- package/dist/esm/cells/text-cell.js.map +1 -0
- package/dist/esm/cells/uri-cell.js +104 -0
- package/dist/esm/cells/uri-cell.js.map +1 -0
- package/dist/esm/common/browser-detect.js +20 -0
- package/dist/esm/common/browser-detect.js.map +1 -0
- package/dist/esm/common/image-window-loader.js +98 -0
- package/dist/esm/common/image-window-loader.js.map +1 -0
- package/dist/esm/common/is-hotkey.js +76 -0
- package/dist/esm/common/is-hotkey.js.map +1 -0
- package/dist/esm/common/math.js +297 -0
- package/dist/esm/common/math.js.map +1 -0
- package/dist/esm/common/render-state-provider.js +70 -0
- package/dist/esm/common/render-state-provider.js.map +1 -0
- package/dist/esm/common/resize-detector.js +27 -0
- package/dist/esm/common/resize-detector.js.map +1 -0
- package/dist/esm/common/styles.js +135 -0
- package/dist/esm/common/styles.js.map +1 -0
- package/dist/esm/common/support.js +60 -0
- package/dist/esm/common/support.js.map +1 -0
- package/dist/esm/common/utils.js +193 -0
- package/dist/esm/common/utils.js.map +1 -0
- package/dist/esm/data-editor/copy-paste.js +269 -0
- package/dist/esm/data-editor/copy-paste.js.map +1 -0
- package/dist/esm/data-editor/data-editor-fns.js +197 -0
- package/dist/esm/data-editor/data-editor-fns.js.map +1 -0
- package/dist/esm/data-editor/data-editor-keybindings.js +126 -0
- package/dist/esm/data-editor/data-editor-keybindings.js.map +1 -0
- package/dist/esm/data-editor/data-editor.js +2892 -0
- package/dist/esm/data-editor/data-editor.js.map +1 -0
- package/dist/esm/data-editor/group-rename.css +2 -0
- package/dist/esm/data-editor/group-rename.js +49 -0
- package/dist/esm/data-editor/group-rename.js.map +1 -0
- package/dist/esm/data-editor/row-grouping-api.js +34 -0
- package/dist/esm/data-editor/row-grouping-api.js.map +1 -0
- package/dist/esm/data-editor/row-grouping.js +189 -0
- package/dist/esm/data-editor/row-grouping.js.map +1 -0
- package/dist/esm/data-editor/use-autoscroll.js +36 -0
- package/dist/esm/data-editor/use-autoscroll.js.map +1 -0
- package/dist/esm/data-editor/use-cells-for-selection.js +53 -0
- package/dist/esm/data-editor/use-cells-for-selection.js.map +1 -0
- package/dist/esm/data-editor/use-column-sizer.js +189 -0
- package/dist/esm/data-editor/use-column-sizer.js.map +1 -0
- package/dist/esm/data-editor/use-initial-scroll-offset.js +81 -0
- package/dist/esm/data-editor/use-initial-scroll-offset.js.map +1 -0
- package/dist/esm/data-editor/use-rem-adjuster.js +29 -0
- package/dist/esm/data-editor/use-rem-adjuster.js.map +1 -0
- package/dist/esm/data-editor/visible-region.js +2 -0
- package/dist/esm/data-editor/visible-region.js.map +1 -0
- package/dist/esm/data-editor-all.js +19 -0
- package/dist/esm/data-editor-all.js.map +1 -0
- package/dist/esm/index.js +36 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/internal/click-outside-container/click-outside-container.js +34 -0
- package/dist/esm/internal/click-outside-container/click-outside-container.js.map +1 -0
- package/dist/esm/internal/data-editor-container/data-grid-container.js +36 -0
- package/dist/esm/internal/data-editor-container/data-grid-container.js.map +1 -0
- package/dist/esm/internal/data-grid/animation-manager.js +95 -0
- package/dist/esm/internal/data-grid/animation-manager.js.map +1 -0
- package/dist/esm/internal/data-grid/cell-set.js +56 -0
- package/dist/esm/internal/data-grid/cell-set.js.map +1 -0
- package/dist/esm/internal/data-grid/color-parser.js +122 -0
- package/dist/esm/internal/data-grid/color-parser.js.map +1 -0
- package/dist/esm/internal/data-grid/data-grid-sprites.js +65 -0
- package/dist/esm/internal/data-grid/data-grid-sprites.js.map +1 -0
- package/dist/esm/internal/data-grid/data-grid-types.js +299 -0
- package/dist/esm/internal/data-grid/data-grid-types.js.map +1 -0
- package/dist/esm/internal/data-grid/data-grid.js +1209 -0
- package/dist/esm/internal/data-grid/data-grid.js.map +1 -0
- package/dist/esm/internal/data-grid/event-args.js +30 -0
- package/dist/esm/internal/data-grid/event-args.js.map +1 -0
- package/dist/esm/internal/data-grid/image-window-loader-interface.js +2 -0
- package/dist/esm/internal/data-grid/image-window-loader-interface.js.map +1 -0
- package/dist/esm/internal/data-grid/render/data-grid-lib.js +653 -0
- package/dist/esm/internal/data-grid/render/data-grid-lib.js.map +1 -0
- package/dist/esm/internal/data-grid/render/data-grid-render.blit.js +219 -0
- package/dist/esm/internal/data-grid/render/data-grid-render.blit.js.map +1 -0
- package/dist/esm/internal/data-grid/render/data-grid-render.cells.js +370 -0
- package/dist/esm/internal/data-grid/render/data-grid-render.cells.js.map +1 -0
- package/dist/esm/internal/data-grid/render/data-grid-render.header.js +440 -0
- package/dist/esm/internal/data-grid/render/data-grid-render.header.js.map +1 -0
- package/dist/esm/internal/data-grid/render/data-grid-render.js +320 -0
- package/dist/esm/internal/data-grid/render/data-grid-render.js.map +1 -0
- package/dist/esm/internal/data-grid/render/data-grid-render.lines.js +261 -0
- package/dist/esm/internal/data-grid/render/data-grid-render.lines.js.map +1 -0
- package/dist/esm/internal/data-grid/render/data-grid-render.walk.js +158 -0
- package/dist/esm/internal/data-grid/render/data-grid-render.walk.js.map +1 -0
- package/dist/esm/internal/data-grid/render/data-grid.render.rings.js +205 -0
- package/dist/esm/internal/data-grid/render/data-grid.render.rings.js.map +1 -0
- package/dist/esm/internal/data-grid/render/draw-checkbox.js +65 -0
- package/dist/esm/internal/data-grid/render/draw-checkbox.js.map +1 -0
- package/dist/esm/internal/data-grid/render/draw-edit-hover-indicator.js +38 -0
- package/dist/esm/internal/data-grid/render/draw-edit-hover-indicator.js.map +1 -0
- package/dist/esm/internal/data-grid/render/draw-grid-arg.js +2 -0
- package/dist/esm/internal/data-grid/render/draw-grid-arg.js.map +1 -0
- package/dist/esm/internal/data-grid/sprites.js +288 -0
- package/dist/esm/internal/data-grid/sprites.js.map +1 -0
- package/dist/esm/internal/data-grid/use-animation-queue.js +34 -0
- package/dist/esm/internal/data-grid/use-animation-queue.js.map +1 -0
- package/dist/esm/internal/data-grid/use-selection-behavior.js +112 -0
- package/dist/esm/internal/data-grid/use-selection-behavior.js.map +1 -0
- package/dist/esm/internal/data-grid-dnd/data-grid-dnd.js +239 -0
- package/dist/esm/internal/data-grid-dnd/data-grid-dnd.js.map +1 -0
- package/dist/esm/internal/data-grid-overlay-editor/data-grid-overlay-editor-style.js +77 -0
- package/dist/esm/internal/data-grid-overlay-editor/data-grid-overlay-editor-style.js.map +1 -0
- package/dist/esm/internal/data-grid-overlay-editor/data-grid-overlay-editor.js +124 -0
- package/dist/esm/internal/data-grid-overlay-editor/data-grid-overlay-editor.js.map +1 -0
- package/dist/esm/internal/data-grid-overlay-editor/private/bubbles-overlay-editor-style.js +34 -0
- package/dist/esm/internal/data-grid-overlay-editor/private/bubbles-overlay-editor-style.js.map +1 -0
- package/dist/esm/internal/data-grid-overlay-editor/private/bubbles-overlay-editor.js +10 -0
- package/dist/esm/internal/data-grid-overlay-editor/private/bubbles-overlay-editor.js.map +1 -0
- package/dist/esm/internal/data-grid-overlay-editor/private/drilldown-overlay-editor.js +50 -0
- package/dist/esm/internal/data-grid-overlay-editor/private/drilldown-overlay-editor.js.map +1 -0
- package/dist/esm/internal/data-grid-overlay-editor/private/image-overlay-editor-style.js +56 -0
- package/dist/esm/internal/data-grid-overlay-editor/private/image-overlay-editor-style.js.map +1 -0
- package/dist/esm/internal/data-grid-overlay-editor/private/image-overlay-editor.js +21 -0
- package/dist/esm/internal/data-grid-overlay-editor/private/image-overlay-editor.js.map +1 -0
- package/dist/esm/internal/data-grid-overlay-editor/private/markdown-overlay-editor-style.js +76 -0
- package/dist/esm/internal/data-grid-overlay-editor/private/markdown-overlay-editor-style.js.map +1 -0
- package/dist/esm/internal/data-grid-overlay-editor/private/markdown-overlay-editor.js +32 -0
- package/dist/esm/internal/data-grid-overlay-editor/private/markdown-overlay-editor.js.map +1 -0
- package/dist/esm/internal/data-grid-overlay-editor/private/number-overlay-editor-style.js +15 -0
- package/dist/esm/internal/data-grid-overlay-editor/private/number-overlay-editor-style.js.map +1 -0
- package/dist/esm/internal/data-grid-overlay-editor/private/number-overlay-editor.js +30 -0
- package/dist/esm/internal/data-grid-overlay-editor/private/number-overlay-editor.js.map +1 -0
- package/dist/esm/internal/data-grid-overlay-editor/private/uri-overlay-editor-style.js +53 -0
- package/dist/esm/internal/data-grid-overlay-editor/private/uri-overlay-editor-style.js.map +1 -0
- package/dist/esm/internal/data-grid-overlay-editor/private/uri-overlay-editor.js +21 -0
- package/dist/esm/internal/data-grid-overlay-editor/private/uri-overlay-editor.js.map +1 -0
- package/dist/esm/internal/data-grid-overlay-editor/use-stay-on-screen.js +47 -0
- package/dist/esm/internal/data-grid-overlay-editor/use-stay-on-screen.js.map +1 -0
- package/dist/esm/internal/data-grid-search/data-grid-search-style.js +96 -0
- package/dist/esm/internal/data-grid-search/data-grid-search-style.js.map +1 -0
- package/dist/esm/internal/data-grid-search/data-grid-search.js +297 -0
- package/dist/esm/internal/data-grid-search/data-grid-search.js.map +1 -0
- package/dist/esm/internal/growing-entry/growing-entry-style.js +60 -0
- package/dist/esm/internal/growing-entry/growing-entry-style.js.map +1 -0
- package/dist/esm/internal/growing-entry/growing-entry.js +41 -0
- package/dist/esm/internal/growing-entry/growing-entry.js.map +1 -0
- package/dist/esm/internal/markdown-div/markdown-div.js +41 -0
- package/dist/esm/internal/markdown-div/markdown-div.js.map +1 -0
- package/dist/esm/internal/markdown-div/private/markdown-container.js +19 -0
- package/dist/esm/internal/markdown-div/private/markdown-container.js.map +1 -0
- package/dist/esm/internal/scrolling-data-grid/infinite-scroller.js +265 -0
- package/dist/esm/internal/scrolling-data-grid/infinite-scroller.js.map +1 -0
- package/dist/esm/internal/scrolling-data-grid/scrolling-data-grid.js +155 -0
- package/dist/esm/internal/scrolling-data-grid/scrolling-data-grid.js.map +1 -0
- package/dist/esm/internal/scrolling-data-grid/use-kinetic-scroll.js +65 -0
- package/dist/esm/internal/scrolling-data-grid/use-kinetic-scroll.js.map +1 -0
- package/dist/index.css +2 -0
- package/package.json +81 -0
- package/src/cells/boolean-cell.tsx +135 -0
- package/src/cells/bubble-cell.tsx +68 -0
- package/src/cells/cell-types.ts +124 -0
- package/src/cells/drilldown-cell.tsx +244 -0
- package/src/cells/image-cell.tsx +117 -0
- package/src/cells/index.ts +31 -0
- package/src/cells/loading-cell.tsx +56 -0
- package/src/cells/markdown-cell.tsx +44 -0
- package/src/cells/marker-cell.tsx +110 -0
- package/src/cells/new-row-cell.tsx +60 -0
- package/src/cells/number-cell.tsx +64 -0
- package/src/cells/protected-cell.tsx +42 -0
- package/src/cells/row-id-cell.tsx +35 -0
- package/src/cells/text-cell.tsx +63 -0
- package/src/cells/uri-cell.tsx +155 -0
- package/src/common/browser-detect.ts +25 -0
- package/src/common/image-window-loader.ts +114 -0
- package/src/common/is-hotkey.ts +86 -0
- package/src/common/math.ts +357 -0
- package/src/common/render-state-provider.ts +87 -0
- package/src/common/resize-detector.ts +43 -0
- package/src/common/styles.ts +214 -0
- package/src/common/support.ts +67 -0
- package/src/common/utils.tsx +284 -0
- package/src/data-editor/copy-paste.ts +320 -0
- package/src/data-editor/data-editor-fns.ts +227 -0
- package/src/data-editor/data-editor-keybindings.ts +198 -0
- package/src/data-editor/data-editor.tsx +4382 -0
- package/src/data-editor/group-rename.tsx +67 -0
- package/src/data-editor/row-grouping-api.ts +72 -0
- package/src/data-editor/row-grouping.ts +326 -0
- package/src/data-editor/stories/data-editor-repros.stories.tsx +107 -0
- package/src/data-editor/stories/data-editor.stories.tsx +796 -0
- package/src/data-editor/stories/utils.tsx +827 -0
- package/src/data-editor/use-autoscroll.ts +41 -0
- package/src/data-editor/use-cells-for-selection.ts +72 -0
- package/src/data-editor/use-column-sizer.ts +253 -0
- package/src/data-editor/use-initial-scroll-offset.ts +102 -0
- package/src/data-editor/use-rem-adjuster.ts +59 -0
- package/src/data-editor/visible-region.ts +20 -0
- package/src/data-editor-all.tsx +36 -0
- package/src/docs/00-faq.stories.tsx +63 -0
- package/src/docs/01-getting-started.stories.tsx +299 -0
- package/src/docs/02-editing-data.stories.tsx +365 -0
- package/src/docs/03-grid-column.stories.tsx +146 -0
- package/src/docs/04-streaming-data.stories.tsx +434 -0
- package/src/docs/05-copy-paste.stories.tsx.tsx +279 -0
- package/src/docs/06-search.stories.tsx +219 -0
- package/src/docs/07-column-grouping.stories.tsx +212 -0
- package/src/docs/08-theming.stories.tsx +409 -0
- package/src/docs/09-menus.stories.tsx +344 -0
- package/src/docs/doc-wrapper.tsx +512 -0
- package/src/docs/examples/add-column.stories.tsx +62 -0
- package/src/docs/examples/add-data-to-middle.stories.tsx +93 -0
- package/src/docs/examples/add-data-to-top.stories.tsx +70 -0
- package/src/docs/examples/add-data.stories.tsx +74 -0
- package/src/docs/examples/all-cell-kinds.stories.tsx +61 -0
- package/src/docs/examples/append-row-handle.stories.tsx +79 -0
- package/src/docs/examples/automatic-row-markers.stories.tsx +57 -0
- package/src/docs/examples/built-in-search.stories.tsx +83 -0
- package/src/docs/examples/cell-activated-event.stories.tsx +92 -0
- package/src/docs/examples/column-group-collapse.stories.tsx +105 -0
- package/src/docs/examples/column-groups.stories.tsx +51 -0
- package/src/docs/examples/content-alignment.stories.tsx +64 -0
- package/src/docs/examples/controlled-search.stories.tsx +93 -0
- package/src/docs/examples/controlled-selection.stories.tsx +98 -0
- package/src/docs/examples/copy-support.stories.tsx +63 -0
- package/src/docs/examples/custom-editors.stories.tsx +90 -0
- package/src/docs/examples/custom-event-target.stories.tsx +157 -0
- package/src/docs/examples/custom-group-header.stories.tsx +423 -0
- package/src/docs/examples/custom-header-icons.stories.tsx +76 -0
- package/src/docs/examples/custom-header.stories.tsx +67 -0
- package/src/docs/examples/custom-renderers.stories.tsx +72 -0
- package/src/docs/examples/drag-source.stories.tsx +63 -0
- package/src/docs/examples/drop-events.stories.tsx +155 -0
- package/src/docs/examples/fill-handle.stories.tsx +118 -0
- package/src/docs/examples/freeze-columns.stories.tsx +59 -0
- package/src/docs/examples/freeze-rows.stories.tsx +71 -0
- package/src/docs/examples/get-mouse-args.stories.tsx +61 -0
- package/src/docs/examples/header-menus.stories.tsx +162 -0
- package/src/docs/examples/highlight-cells.stories.tsx +84 -0
- package/src/docs/examples/imperative-scroll.stories.tsx +96 -0
- package/src/docs/examples/input-blending.stories.tsx +116 -0
- package/src/docs/examples/keybindings.stories.tsx +90 -0
- package/src/docs/examples/layout-integration.stories.tsx +48 -0
- package/src/docs/examples/multi-level-column-groups.stories.tsx +119 -0
- package/src/docs/examples/multi-select-columns.stories.tsx +47 -0
- package/src/docs/examples/new-column-button.stories.tsx +56 -0
- package/src/docs/examples/obscured-grid.stories.tsx +70 -0
- package/src/docs/examples/observe-visible-region.stories.tsx +56 -0
- package/src/docs/examples/one-hundred-thousand-columns.stories.tsx +31 -0
- package/src/docs/examples/one-million-rows.stories.tsx +37 -0
- package/src/docs/examples/overscroll.stories.tsx +74 -0
- package/src/docs/examples/padding.stories.tsx +74 -0
- package/src/docs/examples/paste-support.stories.tsx +73 -0
- package/src/docs/examples/prevent-diagonal-scroll.stories.tsx +47 -0
- package/src/docs/examples/rapid-updates.stories.tsx +108 -0
- package/src/docs/examples/rearrange-columns.stories.tsx +76 -0
- package/src/docs/examples/reorder-rows.stories.tsx +83 -0
- package/src/docs/examples/resizable-columns.stories.tsx +67 -0
- package/src/docs/examples/right-element.stories.tsx +87 -0
- package/src/docs/examples/right-to-left.stories.tsx +73 -0
- package/src/docs/examples/row-and-header-sizes.stories.tsx +75 -0
- package/src/docs/examples/row-grouping.stories.tsx +142 -0
- package/src/docs/examples/row-hover.stories.tsx +67 -0
- package/src/docs/examples/row-markers.stories.tsx +74 -0
- package/src/docs/examples/row-selections.stories.tsx +84 -0
- package/src/docs/examples/scaled-view.stories.tsx +36 -0
- package/src/docs/examples/scroll-offset.stories.tsx +49 -0
- package/src/docs/examples/scroll-shadows.stories.tsx +83 -0
- package/src/docs/examples/search-as-filter.stories.tsx +76 -0
- package/src/docs/examples/selection-serialization.stories.tsx +208 -0
- package/src/docs/examples/server-side-data.stories.tsx +219 -0
- package/src/docs/examples/shadow-dom.stories.tsx +107 -0
- package/src/docs/examples/silly-numbers.stories.tsx +40 -0
- package/src/docs/examples/small-editable-grid.stories.tsx +39 -0
- package/src/docs/examples/smooth-scrolling-grid.stories.tsx +56 -0
- package/src/docs/examples/span-cell.stories.tsx +99 -0
- package/src/docs/examples/stretch-column-size.stories.tsx +55 -0
- package/src/docs/examples/ten-million-cells.stories.tsx +34 -0
- package/src/docs/examples/theme-per-column.stories.tsx +88 -0
- package/src/docs/examples/theme-per-row.stories.tsx +73 -0
- package/src/docs/examples/theme-support.stories.tsx +150 -0
- package/src/docs/examples/tooltips.stories.tsx +119 -0
- package/src/docs/examples/trailing-row-options.stories.tsx +106 -0
- package/src/docs/examples/uneven-rows.stories.tsx +44 -0
- package/src/docs/examples/validate-data.stories.tsx +63 -0
- package/src/docs/examples/wrapping-text.stories.tsx +97 -0
- package/src/docs/template.tsx +69 -0
- package/src/index.ts +87 -0
- package/src/internal/click-outside-container/click-outside-container.tsx +50 -0
- package/src/internal/data-editor-container/data-grid-container.tsx +48 -0
- package/src/internal/data-grid/animation-manager.ts +119 -0
- package/src/internal/data-grid/cell-set.ts +65 -0
- package/src/internal/data-grid/color-parser.ts +141 -0
- package/src/internal/data-grid/data-grid-sprites.ts +107 -0
- package/src/internal/data-grid/data-grid-types.ts +742 -0
- package/src/internal/data-grid/data-grid.stories.tsx +410 -0
- package/src/internal/data-grid/data-grid.tsx +1978 -0
- package/src/internal/data-grid/event-args.ts +157 -0
- package/src/internal/data-grid/image-window-loader-interface.ts +9 -0
- package/src/internal/data-grid/render/data-grid-lib.ts +906 -0
- package/src/internal/data-grid/render/data-grid-render.blit.ts +291 -0
- package/src/internal/data-grid/render/data-grid-render.cells.ts +564 -0
- package/src/internal/data-grid/render/data-grid-render.header.ts +842 -0
- package/src/internal/data-grid/render/data-grid-render.lines.ts +379 -0
- package/src/internal/data-grid/render/data-grid-render.ts +825 -0
- package/src/internal/data-grid/render/data-grid-render.walk.ts +243 -0
- package/src/internal/data-grid/render/data-grid.render.rings.ts +348 -0
- package/src/internal/data-grid/render/draw-checkbox.ts +122 -0
- package/src/internal/data-grid/render/draw-edit-hover-indicator.ts +61 -0
- package/src/internal/data-grid/render/draw-grid-arg.ts +85 -0
- package/src/internal/data-grid/sprites.ts +321 -0
- package/src/internal/data-grid/use-animation-queue.ts +41 -0
- package/src/internal/data-grid/use-selection-behavior.ts +152 -0
- package/src/internal/data-grid-dnd/data-grid-dnd.tsx +450 -0
- package/src/internal/data-grid-overlay-editor/data-grid-overlay-editor-style.tsx +83 -0
- package/src/internal/data-grid-overlay-editor/data-grid-overlay-editor.tsx +262 -0
- package/src/internal/data-grid-overlay-editor/private/bubbles-overlay-editor-style.tsx +34 -0
- package/src/internal/data-grid-overlay-editor/private/bubbles-overlay-editor.tsx +21 -0
- package/src/internal/data-grid-overlay-editor/private/drilldown-overlay-editor.tsx +63 -0
- package/src/internal/data-grid-overlay-editor/private/image-overlay-editor-style.tsx +56 -0
- package/src/internal/data-grid-overlay-editor/private/image-overlay-editor.tsx +51 -0
- package/src/internal/data-grid-overlay-editor/private/markdown-overlay-editor-style.tsx +80 -0
- package/src/internal/data-grid-overlay-editor/private/markdown-overlay-editor.tsx +65 -0
- package/src/internal/data-grid-overlay-editor/private/number-overlay-editor-style.tsx +15 -0
- package/src/internal/data-grid-overlay-editor/private/number-overlay-editor.tsx +77 -0
- package/src/internal/data-grid-overlay-editor/private/uri-overlay-editor-style.tsx +53 -0
- package/src/internal/data-grid-overlay-editor/private/uri-overlay-editor.tsx +52 -0
- package/src/internal/data-grid-overlay-editor/use-stay-on-screen.ts +61 -0
- package/src/internal/data-grid-search/data-grid-search-style.tsx +96 -0
- package/src/internal/data-grid-search/data-grid-search.tsx +578 -0
- package/src/internal/growing-entry/growing-entry-style.tsx +62 -0
- package/src/internal/growing-entry/growing-entry.tsx +74 -0
- package/src/internal/markdown-div/markdown-div.tsx +55 -0
- package/src/internal/markdown-div/private/markdown-container.tsx +19 -0
- package/src/internal/scrolling-data-grid/infinite-scroller.tsx +379 -0
- package/src/internal/scrolling-data-grid/scrolling-data-grid.stories.tsx +164 -0
- package/src/internal/scrolling-data-grid/scrolling-data-grid.tsx +353 -0
- package/src/internal/scrolling-data-grid/use-kinetic-scroll.ts +78 -0
- package/src/stories/story-utils.tsx +72 -0
- package/test/animation-manager.test.ts +147 -0
- package/test/cells.test.tsx +122 -0
- package/test/click-outside-container.test.tsx +62 -0
- package/test/color-parser.test.ts +68 -0
- package/test/common.test.ts +74 -0
- package/test/compact-selection.test.ts +221 -0
- package/test/copy-paste.test.ts +485 -0
- package/test/data-editor-fns.test.ts +153 -0
- package/test/data-editor-input.test.tsx +683 -0
- package/test/data-editor-resize.test.tsx +271 -0
- package/test/data-editor.test.tsx +4945 -0
- package/test/data-grid-lib.test.ts +457 -0
- package/test/data-grid-overlay.test.tsx +67 -0
- package/test/data-grid-types.test.ts +52 -0
- package/test/data-grid.test.tsx +399 -0
- package/test/image-window-loader.test.ts +211 -0
- package/test/math.test.ts +201 -0
- package/test/render-state-provider.test.ts +86 -0
- package/test/row-grouping-api.test.ts +77 -0
- package/test/row-grouping.test.ts +586 -0
- package/test/test-utils.tsx +365 -0
- package/test/uri-cell.test.ts +124 -0
- package/test/use-animation-queue.test.ts +53 -0
- package/test/use-autoscroll.test.tsx +108 -0
- package/test/use-column-sizer.test.tsx +414 -0
- package/test/use-deep-memo.test.ts +41 -0
- package/test/use-kinetic-scroll.test.ts +57 -0
- package/test/use-rem-adjuster.test.ts +69 -0
- package/test/utils.test.ts +127 -0
- package/vitest.config.ts +40 -0
- package/vitest.setup.ts +13 -0
|
@@ -0,0 +1,742 @@
|
|
|
1
|
+
import has from "lodash/has.js";
|
|
2
|
+
import type React from "react";
|
|
3
|
+
import type { CSSProperties } from "react";
|
|
4
|
+
import type { Theme } from "../../common/styles.js";
|
|
5
|
+
import { assertNever, proveType } from "../../common/support.js";
|
|
6
|
+
import type { OverlayImageEditorProps } from "../data-grid-overlay-editor/private/image-overlay-editor.js";
|
|
7
|
+
import type { SpriteManager } from "./data-grid-sprites.js";
|
|
8
|
+
import type { BaseGridMouseEventArgs, CellActivatedEventArgs } from "./event-args.js";
|
|
9
|
+
import type { ImageWindowLoader } from "./image-window-loader-interface.js";
|
|
10
|
+
|
|
11
|
+
// Thoughts:
|
|
12
|
+
// rows/columns are called out as selected, but when selected they must also be added
|
|
13
|
+
// to the range. Handling delete events may have different desired outcomes depending on
|
|
14
|
+
// how the range came to be selected. The rows/columns properties retain this essential
|
|
15
|
+
// information.
|
|
16
|
+
/** @category Selection */
|
|
17
|
+
export interface GridSelection {
|
|
18
|
+
readonly current?: {
|
|
19
|
+
readonly cell: Item;
|
|
20
|
+
readonly range: Readonly<Rectangle>;
|
|
21
|
+
readonly rangeStack: readonly Readonly<Rectangle>[]; // lowest to highest, does not include range
|
|
22
|
+
};
|
|
23
|
+
readonly columns: CompactSelection;
|
|
24
|
+
readonly rows: CompactSelection;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/** @category Types */
|
|
28
|
+
export type ImageEditorType = React.ComponentType<OverlayImageEditorProps>;
|
|
29
|
+
|
|
30
|
+
/** @category Types */
|
|
31
|
+
export const BooleanEmpty = null;
|
|
32
|
+
/** @category Types */
|
|
33
|
+
export const BooleanIndeterminate = undefined;
|
|
34
|
+
|
|
35
|
+
/** @category Types */
|
|
36
|
+
export type BooleanEmpty = null;
|
|
37
|
+
/** @category Types */
|
|
38
|
+
export type BooleanIndeterminate = undefined;
|
|
39
|
+
|
|
40
|
+
/** @category Types */
|
|
41
|
+
export type DrawHeaderCallback = (
|
|
42
|
+
args: {
|
|
43
|
+
ctx: CanvasRenderingContext2D;
|
|
44
|
+
column: GridColumn;
|
|
45
|
+
columnIndex: number;
|
|
46
|
+
theme: Theme;
|
|
47
|
+
rect: Rectangle;
|
|
48
|
+
hoverAmount: number;
|
|
49
|
+
isSelected: boolean;
|
|
50
|
+
isHovered: boolean;
|
|
51
|
+
hasSelectedCell: boolean;
|
|
52
|
+
spriteManager: SpriteManager;
|
|
53
|
+
menuBounds: Rectangle;
|
|
54
|
+
hoverX: number | undefined;
|
|
55
|
+
hoverY: number | undefined;
|
|
56
|
+
},
|
|
57
|
+
drawContent: () => void
|
|
58
|
+
) => void;
|
|
59
|
+
|
|
60
|
+
/** @category Types */
|
|
61
|
+
export type DrawGroupHeaderCallback = (
|
|
62
|
+
args: {
|
|
63
|
+
ctx: CanvasRenderingContext2D;
|
|
64
|
+
groupName: string;
|
|
65
|
+
level: number;
|
|
66
|
+
span: readonly [start: number, end: number];
|
|
67
|
+
theme: Theme;
|
|
68
|
+
rect: Rectangle;
|
|
69
|
+
isSelected: boolean;
|
|
70
|
+
isHovered: boolean;
|
|
71
|
+
spriteManager: SpriteManager;
|
|
72
|
+
hoverX: number | undefined;
|
|
73
|
+
hoverY: number | undefined;
|
|
74
|
+
},
|
|
75
|
+
drawContent: () => void
|
|
76
|
+
) => void;
|
|
77
|
+
|
|
78
|
+
/** @category Types */
|
|
79
|
+
export type DrawCellCallback = (
|
|
80
|
+
args: {
|
|
81
|
+
ctx: CanvasRenderingContext2D;
|
|
82
|
+
cell: GridCell;
|
|
83
|
+
theme: Theme;
|
|
84
|
+
rect: Rectangle;
|
|
85
|
+
col: number;
|
|
86
|
+
row: number;
|
|
87
|
+
hoverAmount: number;
|
|
88
|
+
hoverX: number | undefined;
|
|
89
|
+
hoverY: number | undefined;
|
|
90
|
+
highlighted: boolean;
|
|
91
|
+
imageLoader: ImageWindowLoader;
|
|
92
|
+
},
|
|
93
|
+
drawContent: () => void
|
|
94
|
+
) => void;
|
|
95
|
+
|
|
96
|
+
/** @category Cells */
|
|
97
|
+
export enum GridCellKind {
|
|
98
|
+
Uri = "uri",
|
|
99
|
+
Text = "text",
|
|
100
|
+
Image = "image",
|
|
101
|
+
RowID = "row-id",
|
|
102
|
+
Number = "number",
|
|
103
|
+
Bubble = "bubble",
|
|
104
|
+
Boolean = "boolean",
|
|
105
|
+
Loading = "loading",
|
|
106
|
+
Markdown = "markdown",
|
|
107
|
+
Drilldown = "drilldown",
|
|
108
|
+
Protected = "protected",
|
|
109
|
+
Custom = "custom",
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/** @category Columns */
|
|
113
|
+
export enum GridColumnIcon {
|
|
114
|
+
HeaderRowID = "headerRowID",
|
|
115
|
+
HeaderCode = "headerCode",
|
|
116
|
+
HeaderNumber = "headerNumber",
|
|
117
|
+
HeaderString = "headerString",
|
|
118
|
+
HeaderBoolean = "headerBoolean",
|
|
119
|
+
HeaderAudioUri = "headerAudioUri",
|
|
120
|
+
HeaderVideoUri = "headerVideoUri",
|
|
121
|
+
HeaderEmoji = "headerEmoji",
|
|
122
|
+
HeaderImage = "headerImage",
|
|
123
|
+
HeaderUri = "headerUri",
|
|
124
|
+
HeaderPhone = "headerPhone",
|
|
125
|
+
HeaderMarkdown = "headerMarkdown",
|
|
126
|
+
HeaderDate = "headerDate",
|
|
127
|
+
HeaderTime = "headerTime",
|
|
128
|
+
HeaderEmail = "headerEmail",
|
|
129
|
+
HeaderReference = "headerReference",
|
|
130
|
+
HeaderIfThenElse = "headerIfThenElse",
|
|
131
|
+
HeaderSingleValue = "headerSingleValue",
|
|
132
|
+
HeaderLookup = "headerLookup",
|
|
133
|
+
HeaderTextTemplate = "headerTextTemplate",
|
|
134
|
+
HeaderMath = "headerMath",
|
|
135
|
+
HeaderRollup = "headerRollup",
|
|
136
|
+
HeaderJoinStrings = "headerJoinStrings",
|
|
137
|
+
HeaderSplitString = "headerSplitString",
|
|
138
|
+
HeaderGeoDistance = "headerGeoDistance",
|
|
139
|
+
HeaderArray = "headerArray",
|
|
140
|
+
RowOwnerOverlay = "rowOwnerOverlay",
|
|
141
|
+
ProtectedColumnOverlay = "protectedColumnOverlay",
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/** @category Columns */
|
|
145
|
+
export enum GridColumnMenuIcon {
|
|
146
|
+
Triangle = "triangle",
|
|
147
|
+
Dots = "dots",
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/** @category Types */
|
|
151
|
+
export type CellArray = readonly (readonly GridCell[])[];
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* This type is used to specify the coordinates of
|
|
155
|
+
* a cell or header within the dataset: positive row
|
|
156
|
+
* numbers identify cells.
|
|
157
|
+
*
|
|
158
|
+
* - `-1`: Header
|
|
159
|
+
* - `-2`: Group header
|
|
160
|
+
* - `0 and higher`: Row index
|
|
161
|
+
*
|
|
162
|
+
* @category Types
|
|
163
|
+
*/
|
|
164
|
+
export type Item = readonly [col: number, row: number];
|
|
165
|
+
|
|
166
|
+
export interface BaseGridColumn {
|
|
167
|
+
readonly title: string;
|
|
168
|
+
readonly group?: string | string[];
|
|
169
|
+
readonly icon?: GridColumnIcon | string;
|
|
170
|
+
readonly overlayIcon?: GridColumnIcon | string;
|
|
171
|
+
readonly menuIcon?: GridColumnMenuIcon | string;
|
|
172
|
+
readonly indicatorIcon?: GridColumnIcon | string;
|
|
173
|
+
readonly hasMenu?: boolean;
|
|
174
|
+
readonly grow?: number;
|
|
175
|
+
readonly style?: "normal" | "highlight";
|
|
176
|
+
readonly themeOverride?: Partial<Theme>;
|
|
177
|
+
readonly trailingRowOptions?: {
|
|
178
|
+
readonly hint?: string;
|
|
179
|
+
readonly addIcon?: string;
|
|
180
|
+
readonly targetColumn?: number | GridColumn;
|
|
181
|
+
readonly themeOverride?: Partial<Theme>;
|
|
182
|
+
readonly disabled?: boolean;
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/** @category Columns */
|
|
187
|
+
export function isSizedGridColumn(c: GridColumn): c is SizedGridColumn {
|
|
188
|
+
return "width" in c && typeof c.width === "number";
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/** @category Columns */
|
|
192
|
+
export interface SizedGridColumn extends BaseGridColumn {
|
|
193
|
+
readonly width: number;
|
|
194
|
+
readonly id?: string;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/** @category Columns */
|
|
198
|
+
export interface AutoGridColumn extends BaseGridColumn {
|
|
199
|
+
readonly id: string;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/** @category Types */
|
|
203
|
+
export async function resolveCellsThunk(thunk: GetCellsThunk | CellArray): Promise<CellArray> {
|
|
204
|
+
if (typeof thunk === "object") return thunk;
|
|
205
|
+
return await thunk();
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/** @category Types */
|
|
209
|
+
export type GetCellsThunk = () => Promise<CellArray>;
|
|
210
|
+
|
|
211
|
+
/** @category Columns */
|
|
212
|
+
export type GridColumn = SizedGridColumn | AutoGridColumn;
|
|
213
|
+
|
|
214
|
+
export type InnerColumnExtension = {
|
|
215
|
+
growOffset?: number;
|
|
216
|
+
rowMarker?: "square" | "circle";
|
|
217
|
+
rowMarkerChecked?: BooleanIndeterminate | boolean;
|
|
218
|
+
headerRowMarkerTheme?: Partial<Theme>;
|
|
219
|
+
headerRowMarkerAlwaysVisible?: boolean;
|
|
220
|
+
headerRowMarkerDisabled?: boolean;
|
|
221
|
+
};
|
|
222
|
+
|
|
223
|
+
/** @category Columns */
|
|
224
|
+
export type InnerGridColumn = SizedGridColumn & InnerColumnExtension;
|
|
225
|
+
|
|
226
|
+
// export type SizedGridColumn = Omit<GridColumn, "width"> & { readonly width: number };
|
|
227
|
+
|
|
228
|
+
/** @category Cells */
|
|
229
|
+
export type ReadWriteGridCell = TextCell | NumberCell | MarkdownCell | UriCell | CustomCell | BooleanCell;
|
|
230
|
+
|
|
231
|
+
/** @category Cells */
|
|
232
|
+
export type EditableGridCell = TextCell | ImageCell | BooleanCell | MarkdownCell | UriCell | NumberCell | CustomCell;
|
|
233
|
+
|
|
234
|
+
/** @category Cells */
|
|
235
|
+
export type EditableGridCellKind = EditableGridCell["kind"];
|
|
236
|
+
|
|
237
|
+
// All EditableGridCells are inherently ValidatedGridCells, and this is more specific and thus more useful.
|
|
238
|
+
/** @category Cells */
|
|
239
|
+
export function isEditableGridCell(cell: GridCell): cell is ValidatedGridCell {
|
|
240
|
+
if (
|
|
241
|
+
cell.kind === GridCellKind.Loading ||
|
|
242
|
+
cell.kind === GridCellKind.Bubble ||
|
|
243
|
+
cell.kind === GridCellKind.RowID ||
|
|
244
|
+
cell.kind === GridCellKind.Protected ||
|
|
245
|
+
cell.kind === GridCellKind.Drilldown
|
|
246
|
+
) {
|
|
247
|
+
return false;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
proveType<EditableGridCell>(cell);
|
|
251
|
+
return true;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/** @category Cells */
|
|
255
|
+
export function isTextEditableGridCell(cell: GridCell): cell is ReadWriteGridCell {
|
|
256
|
+
if (
|
|
257
|
+
cell.kind === GridCellKind.Loading ||
|
|
258
|
+
cell.kind === GridCellKind.Bubble ||
|
|
259
|
+
cell.kind === GridCellKind.RowID ||
|
|
260
|
+
cell.kind === GridCellKind.Protected ||
|
|
261
|
+
cell.kind === GridCellKind.Drilldown ||
|
|
262
|
+
cell.kind === GridCellKind.Boolean ||
|
|
263
|
+
cell.kind === GridCellKind.Image ||
|
|
264
|
+
cell.kind === GridCellKind.Custom
|
|
265
|
+
) {
|
|
266
|
+
return false;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
proveType<ReadWriteGridCell>(cell);
|
|
270
|
+
return true;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
/** @category Cells */
|
|
274
|
+
export function isInnerOnlyCell(cell: InnerGridCell): cell is InnerOnlyGridCell {
|
|
275
|
+
return cell.kind === InnerGridCellKind.Marker || cell.kind === InnerGridCellKind.NewRow;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
/** @category Cells */
|
|
279
|
+
export function isReadWriteCell(cell: GridCell): cell is ReadWriteGridCell {
|
|
280
|
+
if (!isEditableGridCell(cell) || cell.kind === GridCellKind.Image) return false;
|
|
281
|
+
|
|
282
|
+
switch (cell.kind) {
|
|
283
|
+
case GridCellKind.Text:
|
|
284
|
+
case GridCellKind.Number:
|
|
285
|
+
case GridCellKind.Markdown:
|
|
286
|
+
case GridCellKind.Uri:
|
|
287
|
+
case GridCellKind.Custom:
|
|
288
|
+
case GridCellKind.Boolean:
|
|
289
|
+
return cell.readonly !== true;
|
|
290
|
+
default:
|
|
291
|
+
assertNever(cell, "A cell was passed with an invalid kind");
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
/** @category Cells */
|
|
296
|
+
export type GridCell =
|
|
297
|
+
| EditableGridCell
|
|
298
|
+
| BubbleCell
|
|
299
|
+
| RowIDCell
|
|
300
|
+
| LoadingCell
|
|
301
|
+
| ProtectedCell
|
|
302
|
+
| DrilldownCell
|
|
303
|
+
| CustomCell;
|
|
304
|
+
|
|
305
|
+
type InnerOnlyGridCell = NewRowCell | MarkerCell;
|
|
306
|
+
/** @category Cells */
|
|
307
|
+
export type InnerGridCell = GridCell | InnerOnlyGridCell;
|
|
308
|
+
|
|
309
|
+
/** @category Cells */
|
|
310
|
+
export type CellList = readonly Item[];
|
|
311
|
+
|
|
312
|
+
/** @category Types */
|
|
313
|
+
export interface Rectangle {
|
|
314
|
+
x: number;
|
|
315
|
+
y: number;
|
|
316
|
+
width: number;
|
|
317
|
+
height: number;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
export function isRectangleEqual(a: Rectangle | undefined, b: Rectangle | undefined): boolean {
|
|
321
|
+
if (a === b) return true;
|
|
322
|
+
if (a === undefined || b === undefined) return false;
|
|
323
|
+
return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
export type CellActivationBehavior = "double-click" | "single-click" | "second-click";
|
|
327
|
+
|
|
328
|
+
/** @category Cells */
|
|
329
|
+
export interface BaseGridCell {
|
|
330
|
+
readonly allowOverlay: boolean;
|
|
331
|
+
readonly lastUpdated?: number;
|
|
332
|
+
readonly style?: "normal" | "faded";
|
|
333
|
+
readonly themeOverride?: Partial<Theme>;
|
|
334
|
+
readonly span?: readonly [start: number, end: number];
|
|
335
|
+
readonly contentAlign?: "left" | "right" | "center";
|
|
336
|
+
readonly cursor?: CSSProperties["cursor"];
|
|
337
|
+
readonly copyData?: string;
|
|
338
|
+
readonly activationBehaviorOverride?: CellActivationBehavior;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
/** @category Cells */
|
|
342
|
+
export interface LoadingCell extends BaseGridCell {
|
|
343
|
+
readonly kind: GridCellKind.Loading;
|
|
344
|
+
readonly skeletonWidth?: number;
|
|
345
|
+
readonly skeletonHeight?: number;
|
|
346
|
+
readonly skeletonWidthVariability?: number;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
/** @category Cells */
|
|
350
|
+
export interface ProtectedCell extends BaseGridCell {
|
|
351
|
+
readonly kind: GridCellKind.Protected;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
export interface HoverEffectTheme {
|
|
355
|
+
bgColor: string;
|
|
356
|
+
fullSize: boolean;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
/** @category Cells */
|
|
360
|
+
export interface TextCell extends BaseGridCell {
|
|
361
|
+
readonly kind: GridCellKind.Text;
|
|
362
|
+
readonly displayData: string;
|
|
363
|
+
readonly data: string;
|
|
364
|
+
readonly readonly?: boolean;
|
|
365
|
+
readonly allowWrapping?: boolean;
|
|
366
|
+
readonly hoverEffect?: boolean;
|
|
367
|
+
readonly hoverEffectTheme?: HoverEffectTheme;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
/** @category Cells */
|
|
371
|
+
export interface NumberCell extends BaseGridCell {
|
|
372
|
+
readonly kind: GridCellKind.Number;
|
|
373
|
+
readonly displayData: string;
|
|
374
|
+
readonly data: number | undefined;
|
|
375
|
+
readonly readonly?: boolean;
|
|
376
|
+
readonly fixedDecimals?: number;
|
|
377
|
+
readonly allowNegative?: boolean;
|
|
378
|
+
readonly thousandSeparator?: boolean | string;
|
|
379
|
+
readonly decimalSeparator?: string;
|
|
380
|
+
readonly hoverEffect?: boolean;
|
|
381
|
+
readonly hoverEffectTheme?: HoverEffectTheme;
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
/** @category Cells */
|
|
385
|
+
export interface ImageCell extends BaseGridCell {
|
|
386
|
+
readonly kind: GridCellKind.Image;
|
|
387
|
+
readonly data: string[];
|
|
388
|
+
readonly rounding?: number;
|
|
389
|
+
readonly displayData?: string[]; // used for small images for faster scrolling
|
|
390
|
+
readonly readonly?: boolean;
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
/** @category Cells */
|
|
394
|
+
export interface BubbleCell extends BaseGridCell {
|
|
395
|
+
readonly kind: GridCellKind.Bubble;
|
|
396
|
+
readonly data: string[];
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
/** @category Renderers */
|
|
400
|
+
export type SelectionRange = number | readonly [number, number];
|
|
401
|
+
|
|
402
|
+
/** @category Renderers */
|
|
403
|
+
export type ProvideEditorComponent<T extends InnerGridCell> = React.FunctionComponent<{
|
|
404
|
+
readonly onChange: (newValue: T) => void;
|
|
405
|
+
readonly onFinishedEditing: (newValue?: T, movement?: readonly [-1 | 0 | 1, -1 | 0 | 1]) => void;
|
|
406
|
+
readonly isHighlighted: boolean;
|
|
407
|
+
readonly value: T;
|
|
408
|
+
readonly initialValue?: string;
|
|
409
|
+
readonly validatedSelection?: SelectionRange;
|
|
410
|
+
readonly imageEditorOverride?: ImageEditorType;
|
|
411
|
+
readonly markdownDivCreateNode?: (content: string) => DocumentFragment;
|
|
412
|
+
readonly target: Rectangle;
|
|
413
|
+
readonly forceEditMode: boolean;
|
|
414
|
+
readonly isValid?: boolean;
|
|
415
|
+
readonly theme: Theme;
|
|
416
|
+
readonly portalElementRef?: React.RefObject<HTMLElement>;
|
|
417
|
+
readonly activation?: CellActivatedEventArgs;
|
|
418
|
+
}>;
|
|
419
|
+
|
|
420
|
+
type ObjectEditorCallbackResult<T extends InnerGridCell> = {
|
|
421
|
+
editor: ProvideEditorComponent<T>;
|
|
422
|
+
deletedValue?: (toDelete: T) => T;
|
|
423
|
+
styleOverride?: CSSProperties;
|
|
424
|
+
disablePadding?: boolean;
|
|
425
|
+
disableStyling?: boolean;
|
|
426
|
+
};
|
|
427
|
+
|
|
428
|
+
/** @category Renderers */
|
|
429
|
+
export type ProvideEditorCallbackResult<T extends InnerGridCell> =
|
|
430
|
+
| (ProvideEditorComponent<T> & {
|
|
431
|
+
disablePadding?: boolean;
|
|
432
|
+
disableStyling?: boolean;
|
|
433
|
+
})
|
|
434
|
+
| ObjectEditorCallbackResult<T>
|
|
435
|
+
| undefined;
|
|
436
|
+
|
|
437
|
+
/** @category Renderers */
|
|
438
|
+
export function isObjectEditorCallbackResult<T extends InnerGridCell>(
|
|
439
|
+
obj: ProvideEditorCallbackResult<T>
|
|
440
|
+
): obj is ObjectEditorCallbackResult<T> {
|
|
441
|
+
return has(obj, "editor");
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
/** @category Renderers */
|
|
445
|
+
export type ProvideEditorCallback<T extends InnerGridCell> = (
|
|
446
|
+
cell: T & { location?: Item; activation?: CellActivatedEventArgs }
|
|
447
|
+
) => ProvideEditorCallbackResult<T>;
|
|
448
|
+
|
|
449
|
+
/** @category Cells */
|
|
450
|
+
export type ValidatedGridCell = EditableGridCell & {
|
|
451
|
+
selectionRange?: SelectionRange;
|
|
452
|
+
};
|
|
453
|
+
|
|
454
|
+
/** @category Cells */
|
|
455
|
+
export interface CustomCell<T extends {} = {}> extends BaseGridCell {
|
|
456
|
+
readonly kind: GridCellKind.Custom;
|
|
457
|
+
readonly data: T;
|
|
458
|
+
readonly copyData: string;
|
|
459
|
+
readonly readonly?: boolean;
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
/** @category Cells */
|
|
463
|
+
export interface DrilldownCellData {
|
|
464
|
+
readonly text: string;
|
|
465
|
+
readonly img?: string;
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
/** @category Cells */
|
|
469
|
+
export interface DrilldownCell extends BaseGridCell {
|
|
470
|
+
readonly kind: GridCellKind.Drilldown;
|
|
471
|
+
readonly data: readonly DrilldownCellData[];
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
/** @category Cells */
|
|
475
|
+
export interface BooleanCell extends BaseGridCell {
|
|
476
|
+
readonly kind: GridCellKind.Boolean;
|
|
477
|
+
readonly data: boolean | BooleanEmpty | BooleanIndeterminate;
|
|
478
|
+
readonly readonly?: boolean;
|
|
479
|
+
readonly allowOverlay: false;
|
|
480
|
+
readonly maxSize?: number;
|
|
481
|
+
readonly hoverEffectIntensity?: number;
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
// Can be written more concisely, not easier to read if more concise.
|
|
485
|
+
/** @category Cells */
|
|
486
|
+
export function booleanCellIsEditable(cell: BooleanCell): boolean {
|
|
487
|
+
return !(cell.readonly ?? false);
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
/** @category Cells */
|
|
491
|
+
export interface RowIDCell extends BaseGridCell {
|
|
492
|
+
readonly kind: GridCellKind.RowID;
|
|
493
|
+
readonly data: string;
|
|
494
|
+
readonly readonly?: boolean;
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
/** @category Cells */
|
|
498
|
+
export interface MarkdownCell extends BaseGridCell {
|
|
499
|
+
readonly kind: GridCellKind.Markdown;
|
|
500
|
+
readonly data: string;
|
|
501
|
+
readonly readonly?: boolean;
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
/** @category Cells */
|
|
505
|
+
export interface UriCell extends BaseGridCell {
|
|
506
|
+
readonly kind: GridCellKind.Uri;
|
|
507
|
+
readonly data: string;
|
|
508
|
+
readonly displayData?: string;
|
|
509
|
+
readonly readonly?: boolean;
|
|
510
|
+
readonly onClickUri?: (args: BaseGridMouseEventArgs & { readonly preventDefault: () => void }) => void;
|
|
511
|
+
readonly hoverEffect?: boolean;
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
/** @category Cells */
|
|
515
|
+
export enum InnerGridCellKind {
|
|
516
|
+
NewRow = "new-row",
|
|
517
|
+
Marker = "marker",
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
export type EditListItem = { location: Item; value: EditableGridCell };
|
|
521
|
+
|
|
522
|
+
/** @category Cells */
|
|
523
|
+
export interface NewRowCell extends BaseGridCell {
|
|
524
|
+
readonly kind: InnerGridCellKind.NewRow;
|
|
525
|
+
readonly hint: string;
|
|
526
|
+
readonly allowOverlay: false;
|
|
527
|
+
readonly icon?: string;
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
/** @category Cells */
|
|
531
|
+
export interface MarkerCell extends BaseGridCell {
|
|
532
|
+
readonly kind: InnerGridCellKind.Marker;
|
|
533
|
+
readonly allowOverlay: false;
|
|
534
|
+
readonly row: number;
|
|
535
|
+
readonly drawHandle: boolean;
|
|
536
|
+
readonly checked: boolean;
|
|
537
|
+
readonly checkboxStyle: "square" | "circle";
|
|
538
|
+
readonly markerKind: "checkbox" | "number" | "both" | "checkbox-visible";
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
/** @category Selection */
|
|
542
|
+
export type Slice = [start: number, end: number];
|
|
543
|
+
/** @category Selection */
|
|
544
|
+
export type CompactSelectionRanges = readonly Slice[];
|
|
545
|
+
|
|
546
|
+
export type FillHandleDirection = "horizontal" | "vertical" | "orthogonal" | "any";
|
|
547
|
+
|
|
548
|
+
/**
|
|
549
|
+
* Configuration options for the fill-handle (the little drag square in the bottom-right of a selection).
|
|
550
|
+
*
|
|
551
|
+
* `shape` – Either a square or a circle. Default is `square`.
|
|
552
|
+
* `size` – Width/height (or diameter) in CSS pixels. Default is `4`.
|
|
553
|
+
* `offsetX` – Horizontal offset from the bottom-right corner of the cell (positive is →). Default is `-2`.
|
|
554
|
+
* `offsetY` – Vertical offset from the bottom-right corner of the cell (positive is ↓). Default is `-2`.
|
|
555
|
+
* `outline` – Width of the outline stroke in CSS pixels. Default is `0`.
|
|
556
|
+
*/
|
|
557
|
+
export type FillHandleConfig = {
|
|
558
|
+
readonly shape: "square" | "circle";
|
|
559
|
+
readonly size: number;
|
|
560
|
+
readonly offsetX: number;
|
|
561
|
+
readonly offsetY: number;
|
|
562
|
+
readonly outline: number;
|
|
563
|
+
};
|
|
564
|
+
|
|
565
|
+
export type FillHandle = boolean | Partial<FillHandleConfig>;
|
|
566
|
+
|
|
567
|
+
/**
|
|
568
|
+
* Default configuration used when `fillHandle` is simply `true`.
|
|
569
|
+
*/
|
|
570
|
+
export const DEFAULT_FILL_HANDLE: Readonly<FillHandleConfig> = {
|
|
571
|
+
shape: "square",
|
|
572
|
+
size: 4,
|
|
573
|
+
offsetX: -2,
|
|
574
|
+
offsetY: -2,
|
|
575
|
+
outline: 0,
|
|
576
|
+
} as const;
|
|
577
|
+
|
|
578
|
+
function mergeRanges(input: CompactSelectionRanges) {
|
|
579
|
+
if (input.length === 0) {
|
|
580
|
+
return [];
|
|
581
|
+
}
|
|
582
|
+
const ranges = [...input];
|
|
583
|
+
|
|
584
|
+
const stack: [number, number][] = [];
|
|
585
|
+
|
|
586
|
+
ranges.sort(function (a, b) {
|
|
587
|
+
return a[0] - b[0];
|
|
588
|
+
});
|
|
589
|
+
|
|
590
|
+
stack.push([...ranges[0]]);
|
|
591
|
+
|
|
592
|
+
for (const range of ranges.slice(1)) {
|
|
593
|
+
const top = stack[stack.length - 1];
|
|
594
|
+
|
|
595
|
+
if (top[1] < range[0]) {
|
|
596
|
+
stack.push([...range]);
|
|
597
|
+
} else if (top[1] < range[1]) {
|
|
598
|
+
top[1] = range[1];
|
|
599
|
+
}
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
return stack;
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
let emptyCompactSelection: CompactSelection | undefined;
|
|
606
|
+
|
|
607
|
+
/** @category Selection */
|
|
608
|
+
export class CompactSelection {
|
|
609
|
+
private constructor(public readonly items: CompactSelectionRanges) {}
|
|
610
|
+
|
|
611
|
+
static create = (items: CompactSelectionRanges) => {
|
|
612
|
+
return new CompactSelection(mergeRanges(items));
|
|
613
|
+
};
|
|
614
|
+
|
|
615
|
+
static empty = (): CompactSelection => {
|
|
616
|
+
return emptyCompactSelection ?? (emptyCompactSelection = new CompactSelection([]));
|
|
617
|
+
};
|
|
618
|
+
|
|
619
|
+
static fromSingleSelection = (selection: number | Slice) => {
|
|
620
|
+
return CompactSelection.empty().add(selection);
|
|
621
|
+
};
|
|
622
|
+
|
|
623
|
+
static fromArray = (items: readonly number[]): CompactSelection => {
|
|
624
|
+
if (items.length === 0) return CompactSelection.empty();
|
|
625
|
+
const slices = items.map(s => [s, s + 1] as Slice);
|
|
626
|
+
const newItems = mergeRanges(slices);
|
|
627
|
+
return new CompactSelection(newItems);
|
|
628
|
+
};
|
|
629
|
+
|
|
630
|
+
public offset(amount: number): CompactSelection {
|
|
631
|
+
if (amount === 0) return this;
|
|
632
|
+
const newItems = this.items.map(x => [x[0] + amount, x[1] + amount] as Slice);
|
|
633
|
+
return new CompactSelection(newItems);
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
public add(selection: number | Slice): CompactSelection {
|
|
637
|
+
const slice: Slice = typeof selection === "number" ? [selection, selection + 1] : selection;
|
|
638
|
+
const newItems = mergeRanges([...this.items, slice]);
|
|
639
|
+
return new CompactSelection(newItems);
|
|
640
|
+
}
|
|
641
|
+
|
|
642
|
+
public remove(selection: number | Slice): CompactSelection {
|
|
643
|
+
const items = [...this.items];
|
|
644
|
+
|
|
645
|
+
const selMin = typeof selection === "number" ? selection : selection[0];
|
|
646
|
+
const selMax = typeof selection === "number" ? selection + 1 : selection[1];
|
|
647
|
+
|
|
648
|
+
for (const [i, slice] of items.entries()) {
|
|
649
|
+
const [start, end] = slice;
|
|
650
|
+
// Remove part of slice that intersects removed selection.
|
|
651
|
+
if (start <= selMax && selMin <= end) {
|
|
652
|
+
const toAdd: Slice[] = [];
|
|
653
|
+
if (start < selMin) {
|
|
654
|
+
toAdd.push([start, selMin]);
|
|
655
|
+
}
|
|
656
|
+
if (selMax < end) {
|
|
657
|
+
toAdd.push([selMax, end]);
|
|
658
|
+
}
|
|
659
|
+
items.splice(i, 1, ...toAdd);
|
|
660
|
+
}
|
|
661
|
+
}
|
|
662
|
+
return new CompactSelection(items);
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
public first(): number | undefined {
|
|
666
|
+
if (this.items.length === 0) return undefined;
|
|
667
|
+
return this.items[0][0];
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
public last(): number | undefined {
|
|
671
|
+
if (this.items.length === 0) return undefined;
|
|
672
|
+
return this.items.slice(-1)[0][1] - 1;
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
public hasIndex(index: number): boolean {
|
|
676
|
+
for (let i = 0; i < this.items.length; i++) {
|
|
677
|
+
const [start, end] = this.items[i];
|
|
678
|
+
if (index >= start && index < end) return true;
|
|
679
|
+
}
|
|
680
|
+
return false;
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
public hasAll(index: Slice): boolean {
|
|
684
|
+
for (let x = index[0]; x < index[1]; x++) {
|
|
685
|
+
if (!this.hasIndex(x)) return false;
|
|
686
|
+
}
|
|
687
|
+
return true;
|
|
688
|
+
}
|
|
689
|
+
|
|
690
|
+
public some(predicate: (index: number) => boolean): boolean {
|
|
691
|
+
for (const i of this) {
|
|
692
|
+
if (predicate(i)) return true;
|
|
693
|
+
}
|
|
694
|
+
return false;
|
|
695
|
+
}
|
|
696
|
+
|
|
697
|
+
public equals(other: CompactSelection): boolean {
|
|
698
|
+
if (other === this) return true;
|
|
699
|
+
|
|
700
|
+
if (other.items.length !== this.items.length) return false;
|
|
701
|
+
|
|
702
|
+
for (let i = 0; i < this.items.length; i++) {
|
|
703
|
+
const left = other.items[i];
|
|
704
|
+
const right = this.items[i];
|
|
705
|
+
|
|
706
|
+
if (left[0] !== right[0] || left[1] !== right[1]) return false;
|
|
707
|
+
}
|
|
708
|
+
|
|
709
|
+
return true;
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
// Really old JS wont have access to the iterator and babel will stop people using it
|
|
713
|
+
// when trying to support browsers so old we don't support them anyway. What goes on
|
|
714
|
+
// between an engineer and their bundler in the privacy of their CI server is none of
|
|
715
|
+
// my business anyway.
|
|
716
|
+
public toArray(): number[] {
|
|
717
|
+
const result: number[] = [];
|
|
718
|
+
for (const [start, end] of this.items) {
|
|
719
|
+
for (let x = start; x < end; x++) {
|
|
720
|
+
result.push(x);
|
|
721
|
+
}
|
|
722
|
+
}
|
|
723
|
+
return result;
|
|
724
|
+
}
|
|
725
|
+
|
|
726
|
+
get length(): number {
|
|
727
|
+
let len = 0;
|
|
728
|
+
for (const [start, end] of this.items) {
|
|
729
|
+
len += end - start;
|
|
730
|
+
}
|
|
731
|
+
|
|
732
|
+
return len;
|
|
733
|
+
}
|
|
734
|
+
|
|
735
|
+
*[Symbol.iterator]() {
|
|
736
|
+
for (const [start, end] of this.items) {
|
|
737
|
+
for (let x = start; x < end; x++) {
|
|
738
|
+
yield x;
|
|
739
|
+
}
|
|
740
|
+
}
|
|
741
|
+
}
|
|
742
|
+
}
|