Leave actions centered and ensure that they will wrap as needed on smaller devices. Also ensure that they are listed in the toolbar in the order they are defined in configuration (global first, then tile level), and that the order sticks even when ownership changes.
As part of this change, the concept of 'moves' has been added to the cached state which allows explicitly defining when a user has made a move, instead of just counting each state update as a move (or throwing it out entirely). This also allows the puzzle to assign IDs to everything the first time it starts up and re-use those IDs from cache. That ensures IDs will not change between page loads, which can make it easier to debug and also allows for logic related to IDs (such as sorting) to be persistent.
Leave actions centered and ensure that they will wrap as needed on smaller devices. Also ensure that they are listed in the toolbar in the order they are defined in configuration (global first, then tile level), and that the order sticks even when ownership changes.
As part of this change, the concept of 'moves' has been added to the cached state which allows explicitly defining when a user has made a move, instead of just counting each state update as a move (or throwing it out entirely). This also allows the puzzle to assign IDs to everything the first time it starts up and re-use those IDs from cache. That ensures IDs will not change between page loads, which can make it easier to debug and also allows for logic related to IDs (such as sorting) to be persistent.