Agentic upgrade guide for 3.16.0
This file contains structured instructions for AI assistants helping consumers upgrade to this version of the package.
Automated migrations
Run the automated migration tool first to apply all available codemods for this release:
dt-app update @dynatrace/strato-components
Sections marked Automated by codemod below have already been applied — verify the result rather than applying them manually. Sections without that marker require manual code changes.
Each section below corresponds to a change in this release that requires consumer attention. Sections are separated by ---.
To opt into the standard ValidationState API on the DQLEditor from @dynatrace/strato-components/editors, set enableValidationState and update the callbacks:
- Add
enableValidationStateto eachDQLEditorusage. onValidityChangenow receives aValidationState(status,trigger,errors) instead ofDQLEditorValidityInfo[].- Replace
onValidationStartwithonValidityChangeand check forstate.status === 'pending'. - Replace
onValidationEndwithonValidityChangeand check forstate.status === 'done'; the validation result is instate.errors(aValidationError[], notDQLEditorValidityInfo[], so adjust any state or types that hold it). validate()on the ref resolves with the currentValidationStateonce the DQL verify call settles.
// Before
<DQLEditor
onValidationStart={() => setPending(true)}
onValidationEnd={() => setPending(false)}
onValidityChange={(validityInfo) => setIssues(validityInfo)}
/>
// After
<DQLEditor
enableValidationState
onValidityChange={(state) => {
setPending(state.status === 'pending');
if (state.status === 'done') {
setIssues(state.errors);
}
}}
/>
ResponsiveGrid is a new opt-in component from @dynatrace/strato-components/layouts — no existing code requires migration. Use it instead of the Grid from @dynatrace/strato-components when the column count should depend on the grid's own width.
ResponsiveGrid wraps Grid and replaces gridTemplateColumns, gridTemplate, grid, and gridItem with a columns prop. Each key is the component width in px the value applies from, a positive integer n expands to repeat(n, minmax(0, 1fr)), and a string is used as the track list verbatim.
import {
Container,
ResponsiveGrid,
} from '@dynatrace/strato-components/layouts';
<ResponsiveGrid columns={{ 0: 1, 600: 2, 1000: 4 }} gap={16}>
<Container>Box 1</Container>
<Container>Box 2</Container>
</ResponsiveGrid>;
An omitted key takes the value of the next smaller one, and an omitted 0 is 1. All other Grid props keep their type and default.
A wrapper is rendered around the grid element. The grid container props apply to the grid element; everything else, including className, style, as, and ref, applies to the wrapper. The wrapper is a size container, so it has to take its width from a parent.