At a high-level, this change ensures that cleaning up a workspace
doesn't move blocks in a way that overlaps with immovable blocks. It
also adds missing testing coverage for both Rect (used for bounding box
calculations during workspace cleanup) and WorkspaceSvg (for verifying
the updated clean up functionality).
This also renames the clean up function to be 'tidyUp' since that better
suits what's happening (as opposed to other clean-up routines which are
actually deinitializing objects).
* refactor(events): Introduce type predicates for event classes
Introduce predicates for testing Abstract event subclasses based on
their .type properties. These are useful because there are places
where it is not possible to use instanceof <ClassConstructor> tests
for type narrowing due to load ordering issues that would be caused
by the need to import (rather than just import type) the class
constructors in question.
* refactor(events): Use event type predicates
Simplify several sections of code by using type predicates for
type narrowing and thereby avoiding the need for explicit casts.
* chore(events): Fix copyright date of recently-added files
* chore: Remove unused import
Use of the filter function in Workspace.prototype.undo has caused
problems with repeated undo/redo (see issue #7026), the
originally-chosen fix for which was the addition (in PR #7069) of
code to fireNow to post-filter the .undoStack_ and .redoStack_ of
any workspace that had just been involved in dispatching events.
This apparently resolved the issue but added considerable
additional complexity and made it difficult to reason about how
events are processed for undo/redo.
Instead, since this filtering typically does nothing (at least
nothing desirable), simply don't re-filter events on the undo
stack before replaying them.
* refactor(events): Use "export ... from" where applicable
* refactor(events): Introduce EventType enum
Introduce an enum for the event .type values. We can't actually
use it as the type of the .type property on Abstract events,
because we want to allow developers to add their own custom
event types inheriting from this type, but at least this way we
can be reasonably sure that all of our own event subclasses have
distinct .type values—plus consistent use of enum syntax
(EventType.TYPE_NAME) is probably good for readability overall.
Put it in a separate module from the rest of events/utils.ts
because it would be helpful if event utils could use
event instanceof SomeEventType
for type narrowing but but at the moment most events are in
modules that depend on events/utils.ts for their .type
constant, and although circular ESM dependencies should work
in principle there are various restrictions and this
particular circularity causes issues at the moment.
A few of the event classes also depend on utils.ts for fire()
or other functions, which will be harder to deal with, but at
least this commit is win in terms of reducing the complexity
of our dependencies, making most of the Abstract event subclass
module dependent on type.ts, which has no imports, rather than
on utils.ts which has multiple imports.
* chore(deps): Add pretter-plugin-organize-imports
* chore: Remove insignificant blank lines in import sections
Since prettier-plugin-organize-imports sorts imports within
sections separated by blank lines, but preserves the section
divisions, remove any blank lines that are not dividing imports
into meaningful sections.
Do not remove blank lines separating side-effect-only imports
from main imports.
* chore: Remove unneded eslint-disable directives
* chore: Organise imports
* fix: removed the whole Drag category from the blocks
* fix: added comment according to reviewer
* fix: added comment according to reviewer
* fix: added comment according to reviewer
Add a condition check so that we don't unset
the group ID that is not set by us. Otherwise the
multi-select plugin undo/redo will be broken (apply
individually instead of all together)
Signed-off-by: Hollow Man <hollowman@opensuse.org>
* docs(block): Improve documentation for well-known block methods
Improve the JSDocs for the declarations of well-known block
methods:
- getDeveloperVariables
- compose
- decompose
- saveConnections
* docs(blocks): Improve block comments
Fix JSDoc formatting in both core/block.ts and blocks/*, as well as
making various other minor improvments.
* chore(blocks): Remove one unexported const
* chore(deps): bump @hyperjump/json-schema from 1.6.7 to 1.9.3
Bumps [@hyperjump/json-schema](https://github.com/hyperjump-io/json-schema) from 1.6.7 to 1.9.3.
- [Commits](https://github.com/hyperjump-io/json-schema/compare/v1.6.7...v1.9.3)
---
updated-dependencies:
- dependency-name: "@hyperjump/json-schema"
dependency-type: direct:development
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com>
* chore(deps): Add dev dependency on @hyperjump/browser
@hyperjump/json-schema (v1.7.0 and later) depends upon
@hyperjump/browser, but fails to declare it as a dependency,
only listing it as a peer dependency, so said package must be
installed separately.
* fix(tests): Use BASIC output as DETAILED is no longer supported
See issue hyperjump-io/json-chema#68 for additional info.
* feat(tests): Add more informational output in case of test failure
Since the BASIC output of the schema verifier is (slightly) less
helpful than the old DETAILED output, add an additional output
containing the first invalid path, e.g.:
#/9.3.0/0/exports/textToDom/newModule
in the results object returned by validate, since this is the
most useful part of that info.
Also use console.error and console.info instead of console.log
where appropriate.
* chore(tests): Format
---------
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Christopher Allen <cpcallen+git@google.com>
* chore(deps): Enable npm legacy-peer-deps option
Add legacy-peer-deps=true to .npmrc:
- Doesn't install a second, probably out-of-date copy of Blockly
in node_modules/blockly/.
- Prevents version conflicts when trying to update @blockly/*
dev dependencies, beause npm doesn't seem to be clever enough
to resovle peer dependency version conflicts for the blockly
package when updating plugins (which have blockly as a peer),
even if all plugins are updated at the same time.
- Brings the configuration of the blockly repo in line with
blockly-samples, for whatever that is worth. (Might avoid
problems during monorepo migration.)
* chore(deps): Update @blockly plugins following v11 release
Achieved by running:
npm install --save-dev @blockly/theme-modern@latest @blockly/block-test@latest @blockly/dev-tools@latest
* chore(deps): Install missing @typescript-eslint/parser dev dependency
Our .eslintrc.js references th @typescript-eslint/parser plugin,
but this plugin was not actually included in the devDependencies
section in package.json.
* feat: allow fetching block bounds not including children.
* chore: run formatter.
* chore: run the other formatter.
* fix: don't include subsequent blocks in the childless bounding rect.
* chore: remove logging.
This should help ensure that CI catches PRs that update
package.json without updating package-lock.json to match.
Proposed in response to breakage caused by PR #8209.