/ /docs

# Redirect legacy single-file sitemap URL to Astro's sitemap index
/docs/sitemap.xml /docs/sitemap-index.xml 301

/docs/:version/redirect pageId=:pageId /docs/javascript-data-grid/changelog 301
/docs/redirect pageId=:pageId /docs/javascript-data-grid/changelog 301

# Removed blog articles - specific redirects to equivalent new URLs
/blog/articles/4-ways-to-handle-read-only-cells /blog/4-ways-to-handle-read-only-cells 301
/blog/articles/2019/09/introducing-ckeditor-4-spreadsheets /blog/introducing-ckeditor-4-spreadsheets 301
/blog/articles/2016/2/what-to-expect-when-switching-from-open-source-to-commercial /blog/what-to-expect-when-switching-from-open-source-to-commercial 301
/blog/handsontable-14.4.0-enhanced-navigation-and-bug-fixes /blog 301
# Removed blog articles - wildcard fallback to blog homepage
/blog/articles/* /blog 301

# Removed demo pages
/demo/* /demo 301

# Old version landing pages
/0.8.0/* /docs/javascript-data-grid/changelog 301

# Deprecated customer pages
/customers/* /customers/ 301

# Angular dedicated docs are available from 16.0+ only.
# Versions 12.1-15.3 had the Angular package but no dedicated docs pages - redirect to latest Angular docs.
/docs/15.3/angular-data-grid/* /docs/angular-data-grid/ 301
/docs/15.2/angular-data-grid/* /docs/angular-data-grid/ 301
/docs/15.1/angular-data-grid/* /docs/angular-data-grid/ 301
/docs/15.0/angular-data-grid/* /docs/angular-data-grid/ 301
/docs/14.6/angular-data-grid/* /docs/angular-data-grid/ 301
/docs/14.5/angular-data-grid/* /docs/angular-data-grid/ 301
/docs/14.4/angular-data-grid/* /docs/angular-data-grid/ 301
/docs/14.3/angular-data-grid/* /docs/angular-data-grid/ 301
/docs/14.2/angular-data-grid/* /docs/angular-data-grid/ 301
/docs/14.1/angular-data-grid/* /docs/angular-data-grid/ 301
/docs/14.0/angular-data-grid/* /docs/angular-data-grid/ 301
/docs/13.1/angular-data-grid/* /docs/angular-data-grid/ 301
/docs/13.0/angular-data-grid/* /docs/angular-data-grid/ 301
/docs/12.4/angular-data-grid/* /docs/angular-data-grid/ 301
/docs/12.3/angular-data-grid/* /docs/angular-data-grid/ 301
/docs/12.2/angular-data-grid/* /docs/angular-data-grid/ 301
/docs/12.1/angular-data-grid/* /docs/angular-data-grid/ 301
/docs/12.0/angular-data-grid/* /docs/javascript-data-grid/ 301
/docs/11.1/angular-data-grid/* /docs/javascript-data-grid/ 301
/docs/11.0/angular-data-grid/* /docs/javascript-data-grid/ 301
/docs/10.0/angular-data-grid/* /docs/javascript-data-grid/ 301
/docs/9.0/angular-data-grid/* /docs/javascript-data-grid/ 301

/docs/ActionBarComponent.html /docs/javascript-data-grid/api/action-bar-component/
/docs/AlterManager.html /docs/javascript-data-grid/api/alter-manager/
/docs/AutoColumnSize.html /docs/javascript-data-grid/api/auto-column-size/
/docs/Autofill.html /docs/javascript-data-grid/api/autofill/
/docs/AutofillCalculations.html /docs/javascript-data-grid/api/autofill-calculations/
/docs/AutoRowSize.html /docs/javascript-data-grid/api/auto-row-size/
/docs/BacklightUI.html /docs/javascript-data-grid/backlightui
/docs/BaseCell.html /docs/javascript-data-grid/api/base-cell/
/docs/BaseComponent.html /docs/javascript-data-grid/api/base-component/
/docs/BaseEditor.html /docs/javascript-data-grid/api/base-editor/
/docs/BasePlugin.html /docs/javascript-data-grid/api/base-plugin/
/docs/BindRowsWithHeaders.html /docs/javascript-data-grid/api/bind-rows-with-headers/
/docs/BindStrategy.html /docs/javascript-data-grid/api/bind-strategy/
/docs/CellCoords.html /docs/javascript-data-grid/api/cell-coords/
/docs/CellRange.html /docs/javascript-data-grid/api/cell-range/
/docs/CellReference.html /docs/javascript-data-grid/api/cell-reference/
/docs/CellValue.html /docs/javascript-data-grid/api/cell-value/
/docs/CollapsibleColumns.html /docs/javascript-data-grid/api/collapsible-columns/
/docs/CollapsingUI.html /docs/javascript-data-grid/collapsingui
/docs/ColumnsMapper.html /docs/javascript-data-grid/api/columns-mapper/
/docs/ColumnSorting.html /docs/javascript-data-grid/api/column-sorting/
/docs/ColumnStatesManager.html /docs/javascript-data-grid/api/column-states-manager/
/docs/ColumnSummary.html /docs/javascript-data-grid/api/column-summary/
/docs/CommandExecutor.html /docs/javascript-data-grid/api/command-executor/
/docs/CommentEditor.html /docs/javascript-data-grid/api/comment-editor/
/docs/Comments.html /docs/javascript-data-grid/api/comments/
/docs/ConditionCollection.html /docs/javascript-data-grid/api/condition-collection/
/docs/ConditionComponent.html /docs/javascript-data-grid/api/condition-component/
/docs/ConditionUpdateObserver.html /docs/javascript-data-grid/api/condition-update-observer/
/docs/ContextMenu.html /docs/javascript-data-grid/api/context-menu/
/docs/ContextMenuUI.html /docs/javascript-data-grid/contextmenuui
/docs/CopyPaste.html /docs/javascript-data-grid/api/copy-paste/
/docs/Core.html /docs/javascript-data-grid/api/core/
/docs/Cursor.html /docs/javascript-data-grid/api/cursor/
/docs/CustomBorders.html /docs/javascript-data-grid/api/custom-borders/
/docs/DataFilter.html /docs/javascript-data-grid/api/data-filter/
/docs/DataMap.html /docs/javascript-data-grid/api/data-map/
/docs/DataObserver.html /docs/javascript-data-grid/api/data-observer/
/docs/DataProvider.html /docs/javascript-data-grid/api/data-provider/
/docs/DateCalculator.html /docs/javascript-data-grid/api/date-calculator/
/docs/DisplaySwitch.html /docs/javascript-data-grid/api/display-switch/
/docs/DragToScroll.html /docs/javascript-data-grid/api/drag-to-scroll/
/docs/DropdownMenu.html /docs/javascript-data-grid/api/dropdown-menu/
/docs/EditorManager.html /docs/javascript-data-grid/api/editor-manager/
/docs/Endpoints.html /docs/javascript-data-grid/api/endpoints/
/docs/EventManager.html /docs/javascript-data-grid/api/event-manager/
/docs/ExportFile.html /docs/javascript-data-grid/api/export-file/
/docs/ExpressionModifier.html /docs/javascript-data-grid/api/expression-modifier/
/docs/Filters.html /docs/javascript-data-grid/api/filters/
/docs/FocusableWrapper.html /docs/javascript-data-grid/api/focusable-wrapper/
/docs/Formulas.html /docs/javascript-data-grid/api/formulas/
/docs/GanttChart.html /docs/javascript-data-grid/api/gantt-chart/
/docs/GanttChartDataFeed.html /docs/javascript-data-grid/api/gantt-chart-data-feed/
/docs/GhostTable.html /docs/javascript-data-grid/api/ghost-table/
/docs/GuidelineUI.html /docs/javascript-data-grid/guidelineui
/docs/HeadersUI.html /docs/javascript-data-grid/headersui
/docs/HeaderTooltips.html /docs/javascript-data-grid/api/header-tooltips/
/docs/HiddenColumns.html /docs/javascript-data-grid/api/hidden-columns/
/docs/HiddenRows.html /docs/javascript-data-grid/api/hidden-rows/
/docs/Highlight.html /docs/javascript-data-grid/api/highlight/
/docs/Hooks.html /docs/javascript-data-grid/api/hooks/
/docs/InputUI.html /docs/javascript-data-grid/inputui
/docs/Interval.html /docs/javascript-data-grid/api/interval/
/docs/ItemsFactory.html /docs/javascript-data-grid/api/items-factory/
/docs/LinkedList.html /docs/javascript-data-grid/api/linked-list/
/docs/LinkUI.html /docs/javascript-data-grid/linkui
/docs/ManualColumnFreeze.html /docs/javascript-data-grid/api/manual-column-freeze/
/docs/ManualColumnMove.html /docs/javascript-data-grid/api/manual-column-move/
/docs/ManualColumnResize.html /docs/javascript-data-grid/api/manual-column-resize/
/docs/ManualRowMove.html /docs/javascript-data-grid/api/manual-row-move/
/docs/ManualRowResize.html /docs/javascript-data-grid/api/manual-row-resize/
/docs/Matrix.html /docs/javascript-data-grid/api/matrix/
/docs/Menu.html /docs/javascript-data-grid/api/menu/
/docs/MergeCells.html /docs/javascript-data-grid/api/merge-cells/
/docs/MergeCellsAction.html /docs/javascript-data-grid/api/merge-cells-action/
/docs/MergedCellCoords.html /docs/javascript-data-grid/api/merged-cell-coords/
/docs/MergedCellsCollection.html /docs/javascript-data-grid/api/merged-cells-collection/
/docs/MultiColumnSorting.html /docs/javascript-data-grid/api/multi-column-sorting/
/docs/MultipleSelectUI.html /docs/javascript-data-grid/multipleselectui
/docs/NestedHeaders.html /docs/javascript-data-grid/api/nested-headers/
/docs/NestedRows.html /docs/javascript-data-grid/api/nested-rows/
/docs/NodeStructure.html /docs/javascript-data-grid/api/node-structure/
/docs/ObserveChanges.html /docs/javascript-data-grid/api/observe-changes/
/docs/OperatorsComponent.html /docs/javascript-data-grid/api/operators-component/
/docs/Options.html /docs/javascript-data-grid/api/options/
/docs/Queue.html /docs/javascript-data-grid/api/queue/
/docs/RadioInputUI.html /docs/javascript-data-grid/radioinputui
/docs/RecordTranslator.html /docs/javascript-data-grid/api/record-translator/
/docs/RowsMapper.html /docs/javascript-data-grid/api/rows-mapper/
/docs/SamplesGenerator.html /docs/javascript-data-grid/api/samples-generator/
/docs/Search.html /docs/javascript-data-grid/api/search/
/docs/Selection.html /docs/javascript-data-grid/api/selection/
/docs/SelectionCalculations.html /docs/javascript-data-grid/api/selection-calculations/
/docs/SelectionRange.html /docs/javascript-data-grid/api/selection-range/
/docs/SelectUI.html /docs/javascript-data-grid/selectui
/docs/Sheet.html /docs/javascript-data-grid/api/sheet/
/docs/Stack.html /docs/javascript-data-grid/api/stack/
/docs/Storage.html /docs/javascript-data-grid/api/storage/
/docs/TableView.html /docs/javascript-data-grid/api/table-view/
/docs/TextEditor.html /docs/javascript-data-grid/api/text-editor/
/docs/Transformation.html /docs/javascript-data-grid/api/transformation/
/docs/TrimRows.html /docs/javascript-data-grid/api/trim-rows/
/docs/UndoRedo.html /docs/javascript-data-grid/api/undo-redo/
/docs/UndoRedoSnapshot.html /docs/javascript-data-grid/api/undo-redo-snapshot/
/docs/UnmergeCellsAction.html /docs/javascript-data-grid/api/unmerge-cells-action/
/docs/ValueComponent.htm /docs/javascript-data-grid/valuecomponent.htm

/docs/tutorial-introduction/ /docs/javascript-data-grid/
/docs/tutorial-compatibility/ /docs/javascript-data-grid/supported-browsers/
/docs/tutorial-licensing/ /docs/javascript-data-grid/software-license/
/docs/tutorial-license-key/ /docs/javascript-data-grid/license-key/
/docs/tutorial-quick-start/ /docs/javascript-data-grid/installation/
/docs/tutorial-data-binding/ /docs/javascript-data-grid/binding-to-data/
/docs/tutorial-data-sources/ /docs/javascript-data-grid/binding-to-data/
/docs/tutorial-load-and-save/ /docs/javascript-data-grid/saving-data/
/docs/tutorial-setting-options/ /docs/javascript-data-grid/setting-options/
/docs/tutorial-grid-sizing/ /docs/javascript-data-grid/grid-size/
/docs/tutorial-using-callbacks/ /docs/javascript-data-grid/events-and-hooks/
/docs/tutorial-keyboard-navigation/ /docs/javascript-data-grid/keyboard-navigation/
/docs/tutorial-internationalization/ /docs/javascript-data-grid/internationalization-i18n/
/docs/tutorial-modules/ /docs/javascript-data-grid/modules/
/docs/tutorial-custom-build/ /docs/javascript-data-grid/building/
/docs/tutorial-custom-plugin/ /docs/javascript-data-grid/plugins/
/docs/tutorial-cell-types/ /docs/javascript-data-grid/cell-type/
/docs/tutorial-cell-editor/ /docs/javascript-data-grid/cell-editor/
/docs/tutorial-cell-function/ /docs/javascript-data-grid/cell-function/
/docs/tutorial-suspend-rendering/ /docs/javascript-data-grid/batch-operations/
/docs/tutorial-testing/ /docs/javascript-data-grid/testing/
/docs/tutorial-performance-tips/ /docs/javascript-data-grid/performance/
/docs/tutorial-release-notes/ /docs/javascript-data-grid/release-notes/
/docs/tutorial-migration-guide/ /docs/javascript-data-grid/migration-from-7.4-to-8.0/
/docs/tutorial-known-limitations/ /docs/javascript-data-grid/third-party-licenses/

/docs/:major.:minor/react-installation/ /docs/:major.:minor/react-data-grid/installation/
/docs/:major.:minor/react-simple-example/ /docs/:major.:minor/react-data-grid/binding-to-data/
/docs/:major.:minor/react-simple-examples/ /docs/:major.:minor/react-data-grid/binding-to-data/
/docs/:major.:minor/react-modules/ /docs/:major.:minor/react-data-grid/modules/
/docs/:major.:minor/react-hot-column/ /docs/:major.:minor/react-data-grid/hot-column/
/docs/:major.:minor/react-setting-up-a-language/ /docs/:major.:minor/react-data-grid/language/
/docs/:major.:minor/react-setting-up-a-locale/ /docs/:major.:minor/react-data-grid/language/
/docs/:major.:minor/react-custom-context-menu-example/ /docs/:major.:minor/react-data-grid/context-menu/
/docs/:major.:minor/react-custom-editor-example/ /docs/:major.:minor/react-data-grid/cell-editor/
/docs/:major.:minor/react-custom-renderer-example/ /docs/:major.:minor/react-data-grid/cell-renderer/
/docs/:major.:minor/react-language-change-example/ /docs/:major.:minor/react-data-grid/language/
/docs/:major.:minor/react-redux-example/ /docs/:major.:minor/react-data-grid/redux/
/docs/:major.:minor/react-hot-reference/ /docs/:major.:minor/react-data-grid/instance-methods/

/docs/react-installation/ /docs/react-data-grid/installation/
/docs/react-simple-example/ /docs/react-data-grid/binding-to-data/
/docs/react-simple-examples/ /docs/react-data-grid/binding-to-data/
/docs/react-modules/ /docs/react-data-grid/modules/
/docs/react-hot-column/ /docs/react-data-grid/hot-column/
/docs/react-setting-up-a-language/ /docs/react-data-grid/language/
/docs/react-setting-up-a-locale/ /docs/react-data-grid/language/
/docs/react-custom-context-menu-example/ /docs/react-data-grid/context-menu/
/docs/react-custom-editor-example/ /docs/react-data-grid/cell-editor/
/docs/react-custom-renderer-example/ /docs/react-data-grid/cell-renderer/
/docs/react-language-change-example/ /docs/react-data-grid/language/
/docs/react-redux-example/ /docs/react-data-grid/redux/
/docs/react-hot-reference/ /docs/react-data-grid/instance-methods/

/docs/:major.:minor/vue3-installation/                        /docs/:major.:minor/vue-data-grid/installation/
/docs/:major.:minor/vue3-basic-example/                       /docs/:major.:minor/vue-data-grid/installation/
/docs/:major.:minor/vue3-modules/                             /docs/:major.:minor/vue-data-grid/modules/
/docs/:major.:minor/vue3-hot-column/                          /docs/:major.:minor/vue-data-grid/vue-hot-column/
/docs/:major.:minor/vue3-hot-reference/                       /docs/:major.:minor/vue-data-grid/vue-instance-reference/
/docs/:major.:minor/vue3-custom-renderer-example/             /docs/:major.:minor/vue-data-grid/cell-renderer/
/docs/:major.:minor/vue3-custom-editor-example/               /docs/:major.:minor/vue-data-grid/cell-editor/
/docs/:major.:minor/vue3-custom-context-menu-example/         /docs/:major.:minor/vue-data-grid/context-menu/
/docs/:major.:minor/vue3-custom-id-class-style/               /docs/:major.:minor/vue-data-grid/vue-custom-id-class-style/
/docs/:major.:minor/vue3-formulas-example/                    /docs/:major.:minor/vue-data-grid/formula-calculation/
/docs/:major.:minor/vue3-language-change-example/             /docs/:major.:minor/vue-data-grid/language/
/docs/:major.:minor/vue3-setting-up-a-translation/            /docs/:major.:minor/vue-data-grid/language/
/docs/:major.:minor/vue3-vuex-example/                        /docs/:major.:minor/vue-data-grid/vue-vuex/

/docs/javascript-data-grid/vue3-installation/                 /docs/vue-data-grid/installation/
/docs/react-data-grid/vue3-installation/                      /docs/vue-data-grid/installation/
/docs/angular-data-grid/vue3-installation/                    /docs/vue-data-grid/installation/
/docs/vue-data-grid/vue3-installation/                        /docs/vue-data-grid/installation/

/docs/javascript-data-grid/vue3-basic-example/                /docs/vue-data-grid/installation/
/docs/react-data-grid/vue3-basic-example/                     /docs/vue-data-grid/installation/
/docs/angular-data-grid/vue3-basic-example/                   /docs/vue-data-grid/installation/
/docs/vue-data-grid/vue3-basic-example/                       /docs/vue-data-grid/installation/

/docs/javascript-data-grid/vue3-modules/                      /docs/vue-data-grid/modules/
/docs/react-data-grid/vue3-modules/                           /docs/vue-data-grid/modules/
/docs/angular-data-grid/vue3-modules/                         /docs/vue-data-grid/modules/
/docs/vue-data-grid/vue3-modules/                             /docs/vue-data-grid/modules/

/docs/javascript-data-grid/vue3-hot-column/                   /docs/vue-data-grid/vue-hot-column/
/docs/react-data-grid/vue3-hot-column/                        /docs/vue-data-grid/vue-hot-column/
/docs/angular-data-grid/vue3-hot-column/                      /docs/vue-data-grid/vue-hot-column/
/docs/vue-data-grid/vue3-hot-column/                          /docs/vue-data-grid/vue-hot-column/

/docs/javascript-data-grid/vue3-hot-reference/                /docs/vue-data-grid/vue-instance-reference/
/docs/react-data-grid/vue3-hot-reference/                     /docs/vue-data-grid/vue-instance-reference/
/docs/angular-data-grid/vue3-hot-reference/                   /docs/vue-data-grid/vue-instance-reference/
/docs/vue-data-grid/vue3-hot-reference/                       /docs/vue-data-grid/vue-instance-reference/

/docs/javascript-data-grid/vue3-custom-renderer-example/      /docs/vue-data-grid/cell-renderer/
/docs/react-data-grid/vue3-custom-renderer-example/           /docs/vue-data-grid/cell-renderer/
/docs/angular-data-grid/vue3-custom-renderer-example/         /docs/vue-data-grid/cell-renderer/
/docs/vue-data-grid/vue3-custom-renderer-example/             /docs/vue-data-grid/cell-renderer/

/docs/javascript-data-grid/vue3-custom-editor-example/        /docs/vue-data-grid/cell-editor/
/docs/react-data-grid/vue3-custom-editor-example/             /docs/vue-data-grid/cell-editor/
/docs/angular-data-grid/vue3-custom-editor-example/           /docs/vue-data-grid/cell-editor/
/docs/vue-data-grid/vue3-custom-editor-example/               /docs/vue-data-grid/cell-editor/

/docs/javascript-data-grid/vue3-custom-context-menu-example/  /docs/vue-data-grid/context-menu/
/docs/react-data-grid/vue3-custom-context-menu-example/       /docs/vue-data-grid/context-menu/
/docs/angular-data-grid/vue3-custom-context-menu-example/     /docs/vue-data-grid/context-menu/
/docs/vue-data-grid/vue3-custom-context-menu-example/         /docs/vue-data-grid/context-menu/

/docs/javascript-data-grid/vue3-custom-id-class-style/        /docs/vue-data-grid/vue-custom-id-class-style/
/docs/react-data-grid/vue3-custom-id-class-style/             /docs/vue-data-grid/vue-custom-id-class-style/
/docs/angular-data-grid/vue3-custom-id-class-style/           /docs/vue-data-grid/vue-custom-id-class-style/
/docs/vue-data-grid/vue3-custom-id-class-style/               /docs/vue-data-grid/vue-custom-id-class-style/

/docs/javascript-data-grid/vue3-formulas-example/             /docs/vue-data-grid/formula-calculation/
/docs/react-data-grid/vue3-formulas-example/                  /docs/vue-data-grid/formula-calculation/
/docs/angular-data-grid/vue3-formulas-example/                /docs/vue-data-grid/formula-calculation/
/docs/vue-data-grid/vue3-formulas-example/                    /docs/vue-data-grid/formula-calculation/

/docs/javascript-data-grid/vue3-language-change-example/      /docs/vue-data-grid/language/
/docs/react-data-grid/vue3-language-change-example/           /docs/vue-data-grid/language/
/docs/angular-data-grid/vue3-language-change-example/         /docs/vue-data-grid/language/
/docs/vue-data-grid/vue3-language-change-example/             /docs/vue-data-grid/language/

/docs/javascript-data-grid/vue3-setting-up-a-translation/     /docs/vue-data-grid/language/
/docs/react-data-grid/vue3-setting-up-a-translation/          /docs/vue-data-grid/language/
/docs/angular-data-grid/vue3-setting-up-a-translation/        /docs/vue-data-grid/language/
/docs/vue-data-grid/vue3-setting-up-a-translation/            /docs/vue-data-grid/language/

/docs/javascript-data-grid/vue3-vuex-example/                 /docs/vue-data-grid/vue-vuex/
/docs/react-data-grid/vue3-vuex-example/                      /docs/vue-data-grid/vue-vuex/
/docs/angular-data-grid/vue3-vuex-example/                    /docs/vue-data-grid/vue-vuex/
/docs/vue-data-grid/vue3-vuex-example/                        /docs/vue-data-grid/vue-vuex/

/docs/hyperformula https://hyperformula.handsontable.com/
/docs/hyperformula/* https://hyperformula.handsontable.com/:splat

/docs/react /docs/react-data-grid/installation/
/docs/angular /docs/javascript-data-grid/angular-installation/
/docs/vue /docs/vue-data-grid/installation/
/docs/vue3 /docs/vue-data-grid/installation/

/docs/react-data-grid/row-sorting /docs/react-data-grid/rows-sorting
/docs/react-data-grid/column-sorting /docs/react-data-grid/rows-sorting
/docs/react-data-grid/release-notes /docs/react-data-grid/changelog
/docs/react-modules /docs/react-data-grid/modules
/docs/react-setting-up-a-locale /docs/react-data-grid/language
/docs/angular-simple-example /docs/javascript-data-grid/angular-simple-example

/docs/7.1.0/frameworks-wrapper-for-angular-installation.html /docs/javascript-data-grid/angular-installation/
/docs/7.1.0/frameworks-wrapper-for-vue-hot-column.html /docs/javascript-data-grid/vue-hot-column/
/docs/7.1.0/tutorial-introduction.html /docs/javascript-data-grid/
/docs/7.2.2/frameworks-wrapper-for-react-hot-column.html /docs/react-data-grid/hot-column/
/docs/8.0.0/tutorial-migration-guide.html /docs/javascript-data-grid/changelog/
/docs/8.2.0/tutorial-introduction.html /docs/javascript-data-grid/
/docs/8.3.0/tutorial-modules.html /docs/javascript-data-grid/modules/
/docs/8.3.0/tutorial-suspend-rendering.html /docs/javascript-data-grid/batch-operations/


/docs/react-data-grid/angular-installation/ /docs/angular-data-grid/installation/
/docs/react-data-grid/angular-basic-example/ /docs/angular-data-grid/demo/
/docs/react-data-grid/angular-modules/ /docs/angular-data-grid/modules/
/docs/react-data-grid/angular-custom-id/ /docs/angular-data-grid/api/options/
/docs/react-data-grid/angular-setting-up-a-translation/ /docs/react-data-grid/locale/
/docs/react-data-grid/angular-custom-context-menu-example/ /docs/react-data-grid/context-menu/
/docs/react-data-grid/angular-custom-editor-example/ /docs/angular-data-grid/cell-editor/
/docs/react-data-grid/angular-custom-renderer-example/ /docs/angular-data-grid/cell-renderer/
/docs/react-data-grid/angular-language-change-example/ /docs/angular-data-grid/language/
/docs/react-data-grid/angular-hot-reference/ /docs/angular-data-grid/api/core/

/docs/javascript-data-grid/angular-installation/ /docs/angular-data-grid/installation/
/docs/javascript-data-grid/angular-basic-example/ /docs/angular-data-grid/demo/
/docs/javascript-data-grid/angular-modules/ /docs/angular-data-grid/modules/
/docs/javascript-data-grid/angular-custom-id/ /docs/angular-data-grid/api/options/
/docs/javascript-data-grid/angular-setting-up-a-translation/ /docs/javascript-data-grid/locale/
/docs/javascript-data-grid/angular-custom-context-menu-example/ /docs/javascript-data-grid/context-menu/
/docs/javascript-data-grid/angular-custom-editor-example/ /docs/angular-data-grid/cell-editor/
/docs/javascript-data-grid/angular-custom-renderer-example/ /docs/angular-data-grid/cell-renderer/
/docs/javascript-data-grid/angular-language-change-example/ /docs/angular-data-grid/language/
/docs/javascript-data-grid/angular-hot-reference/ /docs/angular-data-grid/api/core/

# Cell-type recipe URL fixes - old flat Angular paths redirect to correct /cell-types/ structure
/docs/angular-data-grid/recipes/color-picker-angular/ /docs/angular-data-grid/recipes/cell-types/color-picker/ 301
/docs/angular-data-grid/recipes/feedback-angular/ /docs/angular-data-grid/recipes/cell-types/feedback/ 301
/docs/angular-data-grid/recipes/stars-rating-angular/ /docs/angular-data-grid/recipes/cell-types/rating/ 301
/docs/angular-data-grid/recipes/datepicker-angular/ /docs/angular-data-grid/recipes/cell-types/datepicker/ 301

# Angular guide file unique slugs redirect to main pages (forced: framework-loader builds all 3 framework variants)
/docs/angular-data-grid/recipes/cell-types/color-picker-angular/ /docs/angular-data-grid/recipes/cell-types/color-picker/ 301!
/docs/javascript-data-grid/recipes/cell-types/color-picker-angular/ /docs/javascript-data-grid/recipes/cell-types/color-picker/ 301!
/docs/react-data-grid/recipes/cell-types/color-picker-angular/ /docs/react-data-grid/recipes/cell-types/colorful-picker/ 301!
/docs/angular-data-grid/recipes/cell-types/feedback-angular/ /docs/angular-data-grid/recipes/cell-types/feedback/ 301!
/docs/javascript-data-grid/recipes/cell-types/feedback-angular/ /docs/javascript-data-grid/recipes/cell-types/feedback/ 301!
/docs/react-data-grid/recipes/cell-types/feedback-angular/ /docs/react-data-grid/recipes/cell-types/feedback-react/ 301!
/docs/angular-data-grid/recipes/cell-types/rating-angular/ /docs/angular-data-grid/recipes/cell-types/rating/ 301!
/docs/javascript-data-grid/recipes/cell-types/rating-angular/ /docs/javascript-data-grid/recipes/cell-types/rating/ 301!
/docs/react-data-grid/recipes/cell-types/rating-angular/ /docs/react-data-grid/recipes/cell-types/react-rating/ 301!
/docs/angular-data-grid/recipes/cell-types/datepicker-angular/ /docs/angular-data-grid/recipes/cell-types/datepicker/ 301!

# JS->React: slug mismatches when framework switcher substitutes prefix (forced: pages exist for all frameworks)
/docs/react-data-grid/recipes/cell-types/color-picker/ /docs/react-data-grid/recipes/cell-types/colorful-picker/ 301!
/docs/react-data-grid/recipes/cell-types/feedback/ /docs/react-data-grid/recipes/cell-types/feedback-react/ 301!
/docs/react-data-grid/recipes/cell-types/rating/ /docs/react-data-grid/recipes/cell-types/react-rating/ 301!

# React->JS: slug mismatches when framework switcher substitutes prefix (forced: pages exist for all frameworks)
/docs/javascript-data-grid/recipes/cell-types/colorful-picker/ /docs/javascript-data-grid/recipes/cell-types/color-picker/ 301!
/docs/javascript-data-grid/recipes/cell-types/feedback-react/ /docs/javascript-data-grid/recipes/cell-types/feedback/ 301!
/docs/javascript-data-grid/recipes/cell-types/react-rating/ /docs/javascript-data-grid/recipes/cell-types/rating/ 301!

# React->Angular: slug mismatches when framework switcher substitutes prefix (forced: pages exist for all frameworks)
/docs/angular-data-grid/recipes/cell-types/colorful-picker/ /docs/angular-data-grid/recipes/cell-types/color-picker/ 301!
/docs/angular-data-grid/recipes/cell-types/feedback-react/ /docs/angular-data-grid/recipes/cell-types/feedback/ 301!
/docs/angular-data-grid/recipes/cell-types/react-rating/ /docs/angular-data-grid/recipes/cell-types/rating/ 301!

# JS-only cell-type recipes: redirect React/Angular versions to cell-types overview (forced: framework-loader builds all variants)
/docs/react-data-grid/recipes/cell-types/flatpickr/ /docs/react-data-grid/recipes/cell-types/ 301!
/docs/angular-data-grid/recipes/cell-types/flatpickr/ /docs/angular-data-grid/recipes/cell-types/ 301!
/docs/react-data-grid/recipes/cell-types/pikaday/ /docs/react-data-grid/recipes/cell-types/ 301!
/docs/angular-data-grid/recipes/cell-types/pikaday/ /docs/angular-data-grid/recipes/cell-types/ 301!
/docs/react-data-grid/recipes/cell-types/numbro/ /docs/react-data-grid/recipes/cell-types/ 301!
/docs/angular-data-grid/recipes/cell-types/numbro/ /docs/angular-data-grid/recipes/cell-types/ 301!
/docs/react-data-grid/recipes/cell-types/moment-date/ /docs/react-data-grid/recipes/cell-types/ 301!
/docs/angular-data-grid/recipes/cell-types/moment-date/ /docs/angular-data-grid/recipes/cell-types/ 301!
/docs/react-data-grid/recipes/cell-types/moment-time/ /docs/react-data-grid/recipes/cell-types/ 301!
/docs/angular-data-grid/recipes/cell-types/moment-time/ /docs/angular-data-grid/recipes/cell-types/ 301!

# Angular-only datepicker: redirect JS/React versions to cell-types overview (forced: framework-loader builds all variants)
/docs/javascript-data-grid/recipes/cell-types/datepicker/ /docs/javascript-data-grid/recipes/cell-types/ 301!
/docs/react-data-grid/recipes/cell-types/datepicker/ /docs/react-data-grid/recipes/cell-types/ 301!

/docs/next/:splat /docs/:splat
