All notable changes to the Reactodia will be documented in this document.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
- Make tree- and list-like components more accessible:
- Change
ClassTree,InstancesSearch,ConnectionsMenuandSearchResultsto be "focus group" components with support for keyboard interaction (arrow keys to move focus or toggle tree items, space to select); - Add proper
aria-*attributes for "focus group" containers and children e.g.treeandtreeitemroles;
- Change
- Fix partially or fully hidden outlines for
WorkspaceLayoutItemheaders andNavigatortoggle button.
- Fix canvas panning optimization not being applied due to incorrect
z-indexvalue.
- Allow to define
WorkspaceRootandTranslationProvideras parent to theWorkspacecomponent so they can be shared between multiple workspaces or used outside the workspace itself:- Deprecate
translations,useDefaultTranslationandselectLabelLanguageprops onWorkspacecomponent in favor of wrapping the workspace inTranslationProviderwith (newly) exportedDefaultTranslation; - Remove deprecated
Translation.formatIri()method (useDataLocaleProvider.formatIri()instead).
- Deprecate
- Allow to configure
SearchResultsutility component withisItemDisabledandmultiSelectionprops:- Remove
singleSelectOnClickmode fromSearchResultsas it mostly superseded bymultiSelection.
- Remove
- Extend
ListElementViewutility component to accept any other additional HTML props. - Export
AccessibleListcomponent as base for accessible list-like container. - Always display ungroup buttons on
StandardGroupwhen the element is single-selected.
0.34.1 - 2026-03-30
- Fix stale/non-saved data when calling
applyChanges()immediately afterupdateData()inEntityEditorandRelationEditor. - Fix
SelectionAction*components not updating on selection change when provided as children toHalo.
- Allow to control the placement of newly created entity elements from
ClassTreeandSearchSectionElementTypesviaplaceCreatedEntityprop. - Expose
fixedElementsoption forperformLayout()to be able to constrain elements not to move (if supported by the layout function). - Improve ARIA-attributes and other accessibility interaction:
- Allow to resize and toggle
WorkspaceLayout*with a keyboard; - Change
WorkspaceLayout*to be<section>elements witharia-label(i.e. regions); - Add
roleforCanvaslayers,Toolbar,ZoomControl,UnifiedSearch(and other search inputs); - Add
aria-labelandaria-keyshortcutsforToolbarAction,SelectionAction,LinkAction.
- Allow to resize and toggle
0.34.0 - 2026-03-25
- Support proper graph manipulation on touchscreen devices:
- Allow to move and resize elements on touchscreen;
- Allow to manipulate link vertices on touchscreen (only in Firefox for now due to bug);
- Allow to select multiple elements with
Selectionwith touch whenCanvasApi.pointerModeisselection; - Allow to establish new links with
SelectionActionEstablishLinkon touchscreen; - Allow to move link source or target with
LinkActionMoveEndpointon touchscreen; - Make
ZoomOptions.requireCtrldefault tofalseto zoom without holdingCtrli.e. like on a map. - Enable
showPointerModeToggleonZoomControlby default (can be disabled by passingfalse).
- [💥Breaking] Extend and make optional built-in property editing form support:
- Extract property editor inputs into separate entry point
@reactodia/workspace/formsto be able to use external forms implementation without always bundling the built-in one; - Provide
InputText,InputListandInputSelectbasic form inputs; - Provide
InputFileform input withMemoryFileUploaderimplementation forFileUploadProviderinterface; VisualAuthoringnow requirespropertyEditorprop with changed contract, which have to return an editor component in all cases.DefaultPropertyEditorin combination with imported inputs provides default (built-in) property editing experience, but custom editors can be implemented withEntityEditorandRelationEditor"provider" components.
- Extract property editor inputs into separate entry point
- Allow to customize how resource anchors and asset URLs (e.g. images or downloadable files) are resolved via
DataLocaleProvider.{prepareAnchor, resolveAssetUrl}:- Resolve anchors and image thumbnail URLs in
StandardEntity,ClassicEntityandSelectionActionAnchor; - Add
useResolvedAssetUrl()helper hook to simplify resolving asset URLs from components;
- Resolve anchors and image thumbnail URLs in
- Support conditionally rendering
WorkspaceLayout*child components by passingnullinstead of a child to remove it:- Allow to hide left and right panels in
ClassicWorkspaceby passingnullto the corresponding props; - Allow to provide
classNameandstyletoWorkspaceLayout*components.
- Allow to hide left and right panels in
- Add
Translation.textOptional()to support common translation string defaults with ability to provide separate string for each case:- Use
search_defaults.input.placeholderfor a search input field; - Use
visual_authoring.dialog.apply.{label, text}for an "Apply" button inVisualAuthoringdialogs.
- Use
- Allow to customize default dialog sizes for built-in dialogs and persist user-changed sizes with
dialogSettingsProviderprop onWorkspace:- Default provider persists user-changed dialog sizes in-memory based on
dialogType.
- Default provider persists user-changed dialog sizes in-memory based on
- Expose
useAsync()utility hook to simplify data loading from via a single Promise-returning task. - Expose
useProvidedEntities()utility hook to have a simple way to load non-canvas entities with cache from aDataProvider. - Provide
onlySelectedproperty to link templates the same way as for element templates. - Allow to configure whether
ClassTreeandSearchSectionElementTypestree items should be draggable. - Allow to configure
SparqlDataProvider.lookup()vialookupQueryandfilterInnerPreludesettings.
- Preparations to extract generic scrollable paper component
Paperfrom diagram-specific state and logic:- Replace
reactodia-paper-areaCSS class byreactodia-canvas-areaandreactodia-paper. - Deprecate
CanvasMetrics.areain favor ofCanvasMetrics.pane.
- Replace
- Remove
AbortScopeutility class (can be trivially replaced by the built-inAbortSignal.any()function).
0.33.0 - 2026-03-16
- Allow to open "Edit entity" dialog from
VisualAuthoringfor an entity not present on the canvas (e.g. to edit related or well-known entities). - Extends metadata support for editing an entity or relation properties:
- Allow to order properties with
MetadataPropertyShape.order; - Allow to specify default value with
MetadataValueShape.defaultValue; - Provide
sourceandtargetentities toMetadataProvider.getRelationShape().
- Allow to order properties with
- Fix stale rendering (i.e. missing links after moving an endpoint until an element move) due to the lost scheduled layer updates.
- Fix unable to scroll inside canvas components and templates when
requireCtrlinzoomOptionsis setfalse. - Disallow moving relation source or target to another entity in authoring mode if the relation after move already exists on the canvas.
- Disable changing an entity IRI in a form when
MetadataProvider.canModifyEntity()disallows it. - Move link vertices together with source and target elements if both are selected in
Selectioncomponent. - Re-validate entities and links with
ValidationProviderwhen added or removed via undo/redo. - Fix marking
AnnotationLinkwithTemplateProperties.LayoutOnlywhen importing a diagram layout.
- Remove superfluous "Type" fields from the default "Edit entity" dialog.
- Provide
translationand currentlanguagetoValidationProvider.validate()method. - Allow to specify related property IRI when returning a validation item for a relation from
ValidationProvider. - Display language selector in
FormInputTextonly when shapedatatypeisrdf:langStringoruniqueLangis set to eithertrueorfalse(the selector will be hidden by default whendatatypeisxsd:string). - Deprecate getting
Translationinstance fromWorkspaceContext: useuseTranslation()hook instead to be able to subscribe to translation bundle changes in the future.
0.32.0 - 2026-03-10
- Avoid marking grouped relation as "layout only" when importing a diagram (only grouped relation links themselves).
- Fix being unable to pan the canvas in Firefox when an graph element with a scrollbar inside was present.
- Fix a freeze when opening a class tree in authoring mode when
MetadataProvider.filterConstructibleTypes()returns without any delay. - Fix calling
MetadataProvider.canConnect()with only source and without target when dragging over an element to establish a new link. - Fix
flushSync was called from inside a lifecycle methodReact warning when callingcenterTo(),centerContent(),zoomToFit()onCanvasApifrom a lifecycle method. - Fix labels not loading for element and link type selectors in
VisualAuthoringdialogs unless already preloaded from the diagram. - Use default property editor for entities or relations when
VisualAuthoring.propertyEditorreturnsundefined. - Fix
prepareLabelsoption forSparqlDataProviderto be applied forknownElementTypes(),knownLinkTypes(),elementTypes(),linkTypes(),propertyTypes()andelements. - Fix
SparqlDataProvider.elements()to always return entities with sorted types.
- Allow to set
classNameandstyleon workspace root when usingDefaultWorkspaceorClassicWorkspace. - Allow to customize link label style separately for each property type in
StandardRelation. - Allow to customize relation property editor with the built-in relation type selector
RelationTypeSelector. - Export
LinkMarkerCircleandLinkMarkerDiamondbuilt-in link marker styles in addition to existingLinkMarkerArrowhead:- Built-in link markers now use
context-strokeasstroke/fillvalue to match link path color.
- Built-in link markers now use
- Provide
translationand currentlanguagetocreateEntity()andcreateRelation()methods ofMetadataProvider. - Add
RdfDataProvider.clear()to clear all added graphs to the provider. - Add
datatypePredicatesoption forRdfDataProviderto explicitly place connectedNamedNodeproperty values into entity/relation properties as if they were literals. - Add
originPropertyoption toCompositeDataProviderandorigintoDataProviderDefinitionto attach information about source provider for an entity or relation as a property value:DataProviderDefinition.originreplaces previous non-configurablenameprop (which is marked as deprecated now).
- Add
anyoption forToolbarActionSavepropertymodeto be able to save when either diagram or authoring state has changes. - Increase default maximum fallback size when exporting a raster image to 8192x8192 px as it well supported in the current browsers.
0.31.2 - 2025-11-28
- Fix
AnnotationSupportnot unsubscribing fromAnnotationTopicat unmount which causes two annotations to be created fromSelectionActionAnnotatein React development mode. - Fix undo/redo history not working after panning or pinch-zoom gesture on touch devices.
- Fix keyboard hotkeys for selection actions not working after focusing on search input then clicking back on the selection box.
0.31.1 - 2025-11-18
- Fix incorrect canvas viewport position when
zoomToFit()or similar operation is called immediately after element position changes; - Omit properties without values in
StandardEntity,StandardRelationandClassicEntity.
0.31.0 - 2025-11-15
- Simplify canvas widgets placement at one or multiple layers:
- Canvas children are always assumed to be viewport widgets;
- Add
CanvasPlaceAtcomponent to render its children at specified non-viewport canvas layer instead; - Support new placement layers:
underlaylayer to place components under all canvas content,overLinkGeometrylayer to place components above link geometry (connections) but under link labels; - [💥Breaking] Remove
defineCanvasWidget()andSharedCanvasState.setCanvasWidget()(useCanvasPlaceAtto display components at canvas layers instead).
- Support to import and export diagram layout with custom element and link cell types (derived from
ElementorLink):- Introduce an optional contract for
ElementorLink-derived cell types to be serializable:SerializableElementCellandSerializableLinkCell; - When implemented, the corresponding cell types can be exported and later imported with the diagram;
DataDiagramModel.importLayout()will accept known cell types viaelementCellTypesandlinkCellTypesto import.
- Introduce an optional contract for
- Support diagram-only annotations:
- Add
AnnotationElementandAnnotationLinkelements and links which exports and imports with the diagram but does not exists in the data graph; - Rendered by default with new built-in templates
NoteTemplateandNoteLinkTemplatewhich useNoteAnnotation,NoteEntityandNoteLinktemplate components; - Add
AnnotationSupportcanvas widget which enables annotations in the UI (can be configured or disabled viaannotationsprop onDefaultWorkspaceandClassicWorkspace); - Support annotation elements in
SelectionActionEstablishLinkand newSelectionActionAnnotatecomponents; - Support annotation links in
LinkActionDelete,LinkActionMoveEndpointcomponents. - Add
DefaultRenameLinkProviderand use it by default to allow to change annotation link labels.
- Add
- Support user-resizable element templates with
ElementSizetemplate state property:- Resizable elements display "box with handles" in the
Haloto change the size; - Changed element sizes are captured and restored by
RestoreGeometrycommand.
- Resizable elements display "box with handles" in the
- Allow to customize link template separately for each link instead of only based on its link type IRI in
linkTemplateResolverforCanvas. - Allow to configure
DropOnCanvasto allow only some drop events and provide items to place on the canvas. - Support keyboard hotkeys for
LinkActioncomponents to act on a currently selected link.
- Fix link rendering lagging behind when moving elements.
- Fix
RdfDataProvider.links()returning empty results when called withlinkTypeIdsparameter. - Fix
HaloLinkand visual authoring link path highlight being rendered on top on elements by placing it ontooverLinkGeometrywidget layer instead. - Fix
HaloLinklink path highlighting not updating on link re-route. - Fix element template state not being restored when ungrouping entities.
- Fix missing element decorations after re-importing the same diagram.
- Fix
DraggableHandleto avoid using staleonDragHandleandonEndDragHandleprop values. - Fix being able to execute disabled
SelectionActionvia keyboard hotkey. - Fix throwing an error while trying to access
CanvasApi.metricsmembers before theCanvasis fully mounted.
- [💥Breaking] Canvas widgets are not automatically updated when parent canvas is rendered to reduce unnecessary re-renders, and now require explicit subscriptions:
- Subscribe to canvas
changeTransformevent when usingCanvasApi.metricsto convert between coordinates; - Subscribe to canvas
resizeevent to track viewport size; - Subscribe to
changeCellsevent fromDiagramModelto track graph content changes.
- Subscribe to canvas
- Add
TemplateProps.onlySelectedflag to use in the element templates to track if the element is the only one selected without performance penalty. - Avoid per-layer frame delay when processing canvas layer updates without calling
RenderingState.syncUpdate():- Add
useLayerDebouncedStore()hook as more flexible way to debounce and update with the canvas layer.
- Add
- Avoid eager link type creation for relation links, only create and fetch them on first render.
- [💥Breaking] Use typed
TemplateStateforElement.elementStateandLink.linkStateto avoid accidental type mismatch. - Make dialogs fill the available viewport when the viewport width is small:
- This is controlled by new CSS property
--reactodia-dialog-viewport-breakpoint-swith default value600pxwhich makes dialog fill the viewport if the available width is less or equal to that value.
- This is controlled by new CSS property
- Allow to override base z-index level for workspace components with a set z-index value via
--reactodia-z-index-baseCSS property; - Make
Halomargin configurable via CSS property--reactodia-selection-single-box-margin. - Highlight link path in
HaloLinkwith--reactodia-selection-link-colorcolor by default. - Add
changeTransformevent toCanvasApi.eventswhich triggers onCanvasApi.metrics.getTransform()changes, i.e. when coordinate mapping changes due to scale or canvas size is re-adjusted. - Add
DiagramModel.cellsVersionproperty which updates on every element or link addition/removal/reordering to be able to subscribe tochangeCellsevent withuseSyncStore()hook. - Deprecate
canvasWidgetsprop onDefaultWorkspaceandClassicWorkspacein favor of passing widgets directly as children. - Mark placeholder entity data with
PlaceholderDataPropertyproperty key to distinguish not-loaded-yet elements withEntityElement.isPlaceholderData():- Add
DataDiagramModel.requestData()as a convenient method to load all placeholder entities at once.
- Add
- Move expanded element state from distinct property on
Elementto be stored inElement.elementStatewithTemplateProperties.Expandedproperty:- All existing properties, methods and commands works as before but use element template state as storage for expanded state;
changeExpandedevent is removed from element events, usechangeElementStateevent instead;- When exporting the diagram the expanded state is serialized only with
elementStatewhile usingisExpandedproperty when importing the diagram for backward compatibility.
- Introduce
ElementTemplate.supportsproperty for templates to tell its capabilities such as ability to expand/collapse or resized by user. - Use consistent naming for standard element and link templates:
- Deprecate
DefaultLinkTemplateandDefaultLinkand alias them toStandardLinkTemplateandStandardRelation; - Change CSS class for standard element template from
reactodia-standard-templatetoreactodia-standard-element; - Change CSS class for default link template from
reactodia-default-linktoreactodia-standard-link; - Change translation groups from
standard_template/default_link_templatetostandard_element/standard_link.
- Deprecate
- Move "expand/collapse on double click" global element behavior to
StandardEntityandClassicEntityimplementation only. - Change
MetadataProvider.{createEntity, createRelation}to return result object with initial template state in addition to the data to customize the created cells (i.e. new elements can be expanded or collapsed). - Add
EditorController.applyAuthoringChanges()method to apply current authoring changes to the diagram (i.e. change entity data, delete relations, etc) and reset the change state to be empty. - Deprecate and hide by default "Edit" and "Delete" action buttons in
StandardEntityexpanded state (can be re-enabled by settingshowActionsprop totrue). - Deprecate
WorkpaceContext.{group, ungroupAll, ungroupSome}methods in favor of free functionsgroupEntities(),ungroupAllEntities(),ungroupSomeEntities().
- Use Vite to build the library instead of Webpack to reduce build time by 70% and produced bundle size by 38%.
- Update Vitest to v4.
- Use small subset of carbon design icons for various buttons.
0.30.1 - 2025-06-27
- Fix
BaseMetadataProvidernot delegatingcanModifyRelationmethod from object passed in its constructor. - Make
CanvasApi.{exportSvg, exportRaster}export images referenced in CSS stylesheets or inline styles frommask(mask-image) orbackground(background-image) CSS properties. - Fix incomplete styles for exported canvas due to non-captured custom CSS property values in Chromium-based browsers.
- Fix issues when setting a mutable selection array, e.g.
model.setSelection(model.elements). - Fix moving elements with
Selectiondoes not adding an undo command to the history.
- Avoid unnecessary component updates in
HaloandHaloLinkwhen multiple elements are selected.
- Expose
contentPaddingoption forCanvasApi.{exportSvg, exportRaster}methods to configure padding for the exported diagram.
0.30.0 - 2025-06-15
- Support authoring relation properties:
- Add
MetadataProvider.getRelationShape()interface method to get editor metadata for relation properties, and allow to returncanEdit: truefromMetadataProvider.canModifyRelation()to display relation properties editor;
- Add
- Display "edit" and "delete" inline entity actions:
- Add option
inlineEntityActions(defaults totrue) forVisualAuthoringto display entity actions inline at the top of each entity; - Improve the style for "cancel" (discard) action on entities and relations to make it consistent with other inline actions.
- Add option
- Add
ElementDecorationcomponent to display additional decorations over canvas elements either from the template itself or from outside the element:- Element decorations are not included in the computed element bounds but are exported with the canvas unless explicitly marked with
data-reactodia-no-exportattribute (as with other canvas elements).
- Element decorations are not included in the computed element bounds but are exported with the canvas unless explicitly marked with
- Support keyboard hotkeys for the focused canvas:
- Allow to specify arbitrary hotkeys to
ToolbarActionandSelectionActioncomponents, exportuseCanvasHotkey()hook to bind hotkey from any canvas widget; - Add default hotkeys for components:
Selection(Ctrl+A: select all),ToolbarActionUndo(Ctrl+Z),ToolbarActionRedo(Ctrl+Shift+Z),SelectionActionRemove(Delete, same as before),SelectionActionGroup(G).
- Allow to specify arbitrary hotkeys to
- [💥Breaking] Use separate HTML paper layer to display
LinkLabelcomponents instead of an SVG canvas, which allows to use CSS for layout, backgrounds and improves rendering performance:textClass,textStyle,rectClassandrectStyleare replaced byclassNameandstyleprops;- CSS should use HTML styling properties instead of SVG variants, e.g.
colorandbackground-colorinstead ofstrokeandfill; - Label content should be placed directly as children to the component instead of using
contentprop.
- Select entity label and image using
DataLocaleProviderbased on its properties:- [💥Breaking] Remove
ElementModel.{label, image}properties and instead useDataDiagramModel.localemethods to select them based onElementModel.propertiesinstead; - Allow to override data locale provider (default is
DefaultDataLocaleProvider) by passinglocaleoption tomodel.importLayout()ormodel.createNewDiagram();
- [💥Breaking] Remove
- Always display validation state for an entities and relations in case when the target does not have any authoring changes.
- Display elliptical authoring state overlays for elliptically-shaped entity elements.
- Use provided
durationinCanvasApi.animateGraph()for element transitions without the need to override the styles. - Trigger
keydown,keyup,scrollandcontextMenucanvas events only from a non-widget layer. - Fix marking existing relation as new or changed after moving its source or target to its original source or target.
- Optimize diagram loading time by avoiding unnecessary updates and separating a measuring element sizes step from applying the sizes to the rendering state.
- Export
BaseMetadataProvideras a stable base to instantiate or extend when implementing custom metadata providers. - Re-use and un-deprecate
model.localeformatting object withDataLocaleProviderinterface type:- Deprecate
Translation.formatIri()in favor oflocale.formatIri(); - Replace other deprecated methods of
localewith:selectEntityLabel(),selectEntityImageUrl(),formatEntityLabel(),formatEntityTypeList();
- Deprecate
- Provide gradual customization options for the built-in entity and relation property editor:
- Expose ability to customize property input in authoring forms with
inputResolveroption forVisualAuthoringcomponent; - Export built-in inputs
FormInputListandFormInputText, as well asFormInputSinglePropsandFormInputMultiPropsprops interfaces to implement custom property inputs.
- Expose ability to customize property input in authoring forms with
- [💥Breaking] Rename the following constants for consistency in naming style:
DIAGRAM_CONTEXT_URL_V1->DiagramContextV1,PLACEHOLDER_ELEMENT_TYPE->PlaceholderEntityType,PLACEHOLDER_LINK_TYPE->PlaceholderRelationType;
- Support the ability to expand up the
Dropdown,DropdownMenuandToolbarby settingdirectionto"up"e.g. for docking the toolbar to the bottom of the viewport. - Allow to return
iconMonochrome: truefor a type style to automatically apply dark theme filter for the icon. - Support optional dependency list in
useEventStore()to re-subscribe to store if needed.
- Make library compatible with React v19, while continuing support for v17 and v18.
- Increase
IndexedDbCachedProvider.DB_VERSIONto 4 due toElementModelchanges. - Remove deprecated
LocaleFormatter,DataGraphLocaleFormatterandFormattedPropertytypes. - Simplify the exported canvas SVG by using a single
<foreignObject>to hold the whole element layer instead of a separate one for each canvas element.
0.29.1 - 2025-03-25
- Fix "max update exceeded in
componentDidUpdate()" error that can be triggered inInstancesSearchin some cases.
0.29.0 - 2025-03-24
- Support round (elliptical-shaped) elements:
- Allow element templates to set
shape: 'ellipse'to correctly compute link geometry; - Change
ElementTemplateto be an object with additional element template options, allow to return bothElementTemplateandElementTemplateComponentfromelementTemplateResolver; - Add built-in basic circle-shaped
RoundTemplatewith itsRoundEntitytemplate component; - Add
RenderingState.getElementShape()method to compute shape information (including bounds) for the element.
- Allow element templates to set
- Support smooth-curved links:
- Allow link templates to set
spline: 'smooth'to have rounded joints and overall shape via cubic Bézier curves; - Render links as smooth-curved by default unless a
spline: 'straight'is set in the link template.
- Allow link templates to set
- Allow to dock a dialog to any side of a target with
dockproperty with a configurabledockMargin.
- Fix search section activation race in
UnifiedSearchwhich causes to sometimes open the first section instead of the specified one infocuscommand. - Auto-focus on search input field in
UnifiedSearchonfocuscommand. - Use
--reactodia-viewport-dock-margininstead of a hard-coded value to compute max size for a dialog without target.
- Use "rounded" look by default by setting default
--reactodia-border-radius-baseto a non-zero value (it can be unset as before if desired to have a more "rectangular" UI styling). - Make
Canvasa focusable element to allow to handle keyboard events scoped to the graph:- Removing selected elements on
Deletekey press now happens only whenSelectionActionRemoveif displayed by theHaloorSelectioncanvas widgets and only if the canvas has the focus to avoid accidental element removal by the action from unrelated document parts. - Expose
keydownandkeyupevents onCanvasApi.eventsto handle keyboard events scoped to the canvas. - Canvas is now auto-focused (without scroll) on certain actions such as removing selected elements, grouping or ungrouping entities or dismissing a dialog.
- Removing selected elements on
- Export built-in templates and its components separately for easier customization:
- Change
StandardTemplateto a template object, expose its components asStandardEntityandStandardEntityGroup; - Change
ClassicTemplateto a template object, expose its component asClassicEntity; - Rename
DefaultLinkPathTemplatetoDefaultLink.
- Change
- Improve default routing for self (feedback) links with a single user-defined variable to have a basic loop instead of a straight line.
- Reduce the size of the main package bundle by moving fallback synchronous (blocking) layout into the separate entry point
/layout-sync:- [💥Breaking] Make
defaultLayouta required prop for aWorkspace: if a bundled synchronous fallback (blockingDefaultLayout()) was used by default, now it is necessary to import it manually from/layout-sync; - The recommended layout algorithm usage is as before via Web Workers with
defineLayoutWorker()anduseWorker().
- [💥Breaking] Make
- [💥Breaking] Replace explicit "commands" passing by common
WorkspaceContext.getCommandBus():- Remove all commands-like props from components, e.g.
commands,connectionMenuCommands,instancesSearchCommands,searchCommands. - Triggering a command or listening for one from outside the component should be done by acquiring a commands object using
getCommandBus()with the following built-in command bus topics:ConnectionsMenuTopic,InstancesSearchTopic,UnifiedSearchTopic,VisualAuthoringTopic. - [🧪Experimental] Custom command bus topics can be defined with
CommandBusTopic.define().
- Remove all commands-like props from components, e.g.
- Support
linkTypeoption forSelectionActionEstablishLinkto create a relation of a specific type from that action by default.
- Move deprecated type styles and link templates into separate entry point
@reactodia/workspace/legacy-styles, includingSemanticTypeStyles,makeOntologyLinkTemplates(Reactodia)(factory) andmakeLinkStyleShowIri(Reactodia)factory. - Remove deprecated
WorkspaceProps.onIriClick()and corresponding events and trigger method onSharedCanvasState. - Extract
HashMap,HashSetand hash-code generation utilities into separate package@reactodia/hashmap. - Extract Web Worker-related utilities into separate package
@reactodia/worker-proxy:@reactodia/worker-proxy/protocolshould be used instead of@reactodia/workspace/worker-protocolto define custom workers.useWorker()hook now accepts any worker adhering to theRefCountedWorkerinterface from@reactodia/worker-proxy, e.g. created withrefCountedWorker()function.
- Replace
classnamesruntime dependency byclsx. - Update runtime dependencies:
n3,@vscode/codicons. - Update dev-dependencies: Webpack + loaders, SASS, TypeScript, Vitest, ESLint.
0.28.1 - 2025-02-28
- Fix missing elements on load when rendering in React strict mode (regression in v0.28.0).
- Improve performance of canvas scrolling and panning with mouse on large diagrams.
0.28.0 - 2025-02-26
- Support i18n for the UI components:
- Allow to provide custom bundles with translation strings and (optionally) disable the default one with
translationsanduseDefaultTranslationproperties for theWorkspace; - Provide
i18n/i18n.schema.jsonJSON schema to validate partial translation bundles.
- Allow to provide custom bundles with translation strings and (optionally) disable the default one with
- Basic design system and a built-in dark theme:
- Define a basic design system with CSS custom properties for colors, fonts, borders, spacing and transitions;
- Support base
border-radiuson inputs, buttons, panels, etc if provided via--reactodia-border-radius-base; - Change
StandardTemplateto use a common CSS property for entity color:--reactodia-element-style-color(previously was--reactodia-standard-entity-color); - Force specific color scheme (theme) via
colorSchemaproperty onWorkspaceRootandDefaultWorkspacewith defaultautomode; - Expose
useColorScheme()hook to observe current color scheme for the workspace. - Exporting the diagram (to SVG/PNG or printing it) always exports if the workspace is using the light theme.
- Ability to add, remove or modify property values in the "Edit entity" dialog:
- [🧪Experimental] Change
MetadataApi.getElementTypeShape()intogetElementShape()with a more specific contract, addgetLiteralLanguages().
- [🧪Experimental] Change
- Disallow selection of already present but grouped entities in
ConnectionsMenuand place them again onto the canvas. - Fix incorrect handling of a relation in the "Edit relation" dialog when reversing the its direction (e.g. a change from "Person isAuthorOf Book" to "Book isNamedAfter Person"), including validation against duplicate relations and the displayed direction.
- Fix error when trying to render a
ToolbarActionOpenorToolbarActionSavein the toolbar instead of a dropdown menu. - Fix links having unresolved labels and no markers when importing the same diagram layout twice.
- Relax assignment compatibility for branded IRI types (
ElementIri,ElementTypeIri,LinkTypeIri,PropertyTypeIri) to allow assignment from a rawstringtype but not between them.
- Deprecate
DiagramModel.localeusage: useTranslationobject to perform locale-specific formatting instead. - Remove unused
raceAbortSignal()function.
0.27.1 - 2025-01-25
- Auto-reset command history as the last step in
useLoadedWorkspace(). - Make diagram ready to use on mount without a required call to
createNewDiagram()orimportLayout()first (components which require a data provider may still wait for the explicit loading, e.g.ClassTree). - Properly re-initialize
VisualAuthoringon mount/unmount. - Change default
ClassTreeminimum search term length to 2 as a workaround for performance issues on large element type trees.
0.27.0 - 2024-12-05
- Introduce new search-centric default workspace layout with
UnifiedSearch:- Add
UnifiedSearchcomponent to unify graph text lookup under a single entry point, with built-in adapters:SearchSectionElementTypesforClassTree,SearchSectionEntitiesforInstancesSearch,SearchSectionLinkTypesforLinksToolbox; - [💥Breaking] Change
DefaultWorkspaceto use unified search, move non-menu toolbar items to the secondary toolbar andZoomControlto the left side of the viewport; - Export previous workspace layout under
ClassicWorkspaceandClassicToolbarcomponents;
- Add
- Add ability to dock viewport canvas widgets to any side/corner without style overrides:
- [💥Breaking] Add
dock(required),dockOffsetX,dockOffsetYprops toNavigator,ToolbarandZoomControlwidgets.
- [💥Breaking] Add
- Allow to switch canvas pointer mode with
ZoomControl:- Disabled by default, can be enabled via
showPointerModeToggleoption.
- Disabled by default, can be enabled via
- Support overlay dialogs without target which displayed as blocking modal:
- Expose
dialogTypeoption inOverlayController.showDialog()andBuiltinDialogTypefor built-in dialog types; - Add option to show dialog without a close button with
closable: false.
- Expose
- Fix links caching in
IndexedDbCachedProvider.links()not working due to nativecrypto.subtlebeing available only in secure contexts (e.g. HTTPS). - Fix
OverlayController.startTask()spinner not positioned at the center of the canvas horizontally. - Fix
ClassTreebecoming stuck at loading instead of displaying a error when initialization fails. - Partial fixes for
SparqlDataProvidercompatibility with Virtuoso:- Remove
?extractedLabelfrom default text lookup pattern inOwlRdfsSettings; - Fix keeping un-parametrized variable for
filterOnlyLanguagesif the corresponding setting is not set.
- Remove
- Avoid flicking selection when making a click on an already selected element when
Selectionwidget is used. - Fix ignored
disabledoption forLinkAction. - Keep the size for properties stable in
StandardTemplateto even when property labels are loaded. - Fix
computeLayout()considering hidden links for graph layout computation. - Fix React warning for update after unmount in
EditLayer>LinkLayer.
- Display "no results" in various cases in
ClassTree,InstancesSearchandLinksToolboxcomponents. - Auto-collapse
Navigatorwhen there is not enough space in the canvas viewport. - Change
LinkTypesToolboxto only use links on the diagram instead of requesting connected links from a data provider. - Display inline entity badges with its type style in
InstancesSearchandLinksToolbox. - Change cursor to "grabbed" style when panning the canvas.
- Improve default look for the overlay dialogs with a dedicated header with caption and close button:
- Allow to disable dialog resize in one or both axes via
DialogStyleProps.resizableByprop; - Improve
ConnectionsMenuandFindOrCreateEntitystyle and UX.
- Allow to disable dialog resize in one or both axes via
- Improve styles for
ToolbarLanguageSelector: remove extra background and border. - Allow to track canvas viewport bounds on the page with
CanvasMetrics.getViewportPageRect()andCanvasEvents.resize. - Separate
framedebounce mode inDebouncer, allow to change timeout after creation. - [🧪Experimental] Update metadata and validation provider contracts:
- Rename providers to
MetadataProviderandValidationProviderfor consistency; - Re-organize
MetadataProvidercontract to reduce slightly different variations to get similar metadata; - Support severity in validation result items (previously known as errors);
- Ignore metadata and validation provider changes after mount;
- Add separate method to toggle authoring mode:
EditorController.setAuthoringMode(). - Update
AuthoringStateandTemporaryState: use separate event types for added, changed and removed events;
- Rename providers to
- [🧪Experimental] Add
VisualAuthoringcanvas widget to configure and provide implementation for visual graph authoring:- Require
VisualAuthoringwidget in be in the canvas for visual graph authoring; - Move authoring-related methods from
OverlayControllertoEditorController.authoringCommands.
- Require
0.26.1 - 2024-11-26
- Fix bringing elements to front on selection (regression introduced at 0.25.0).
- Avoid accidental text selection on click with Shift pressed when multiple elements are selected with
Selectionwidget. - Fix missing count badges in
ClassTreewhich reappeared on requesting element type data (regression introduced at 0.25.0). - Fix element grouping incorrectly group links between different element pairs together due to
DiagramModel.findLink()returning non-matching links.
0.26.0 - 2024-11-17
- Support incremental links loading from
DataProvider:- [💥Breaking] Change
DataProvider.links()contract to return links between two sets of elements to allow partial link requests; - Extend
SparqlDataProviderSettings.linksInfoQueryto support partial link queries (with backwards compatibility fallback);
- [💥Breaking] Change
- Support auto-split
SparqlDataProviderrequests into chunks of configurable size (chunkSize):- Splitting
SparqlDataProvider.links()requests requires to migrate to the newlinksInfoQuerycontract, see above;
- Splitting
- Cache links via perfect mirroring for
IndexedDdCachedProvider.links():- Enabled by default, can be disabled by setting
IndexedDdCachedProviderOptions.cacheLinkstofalse;
- Enabled by default, can be disabled by setting
- Cache missing results for applicable methods in
IndexedDbCachedProvider:- Enabled by default, can be disabled by setting
IndexedDdCachedProviderOptions.cacheMissingtofalse;
- Enabled by default, can be disabled by setting
- Grouped entity width overflow when a label is too long in the
StandardTemplate. - Fix cached results from
IndexedDbCachedProvider.connectedLinkStats()ignoredinexactCountparameter.
- [💥Breaking] Change
placeElementsAround()function intoplaceElementsAroundTarget()command; - [💥Breaking] Replace
LinkTemplateProps.typeIndexwithmarkerSourceandmarkerTargetproperties; - [💥Breaking] Replace
EditableLabelon the link template by a separateRenameLinkProvider; - [💥Breaking] Replace
GenerateID.{forElement, forLink}with static methodsElement.generateId()andLink.generateId(); - Add JSDoc for almost all exported components, services, interfaces and functions.
- Increased IndexedDB database version in
IndexedDbCachedProvider: previous caches will be discarded on upgrade when using the new version. - Remove unused
LinkRedrawLeveltype with corresponding parameters; - Deprecate
SemanticTypeStylesandOntologyLinkTemplates; - Deprecate
WorkspaceProps.onIriClickhandler and relatedSharedCanvasState.onIriClick()method; - Deprecate
DataDiagramModel.requestLinksOfType()which is replaced byrequestLinks()method;
0.25.1 - 2024-08-31
- Fix missing default value for
zoomToFitoption inWorkspaceContext.performLayout().
0.25.0 - 2024-08-31
- Add ability to group elements and links:
- Add
EntityGroupelement type andRelationGrouplink type and corresponding commands; - Add
DataDiagramModel.{group, ungroupAll, ungroupSome}andWorkspaceContext.{group, ungroupAll, ungroupSome}methods to group and ungroup entities; - Auto-group relations when creating them using
DataDiagramModel.createLinks()with ability to manually regroup viaDataDiagramModel.regroupLinks(); - Add
SelectionActionGroupto group/ungroup fromHaloandSelection, update default actions and its dock placement; - Include
sourceIriandtargetIriwhen serializingRelationLink(required to restore entity groups).
- Add
- Support adding elements as group from
ConnectionMenuandInstancesSearch. - Add
OverlayController.startTask()method to start foreground canvas tasks:- Display overlay task while computing graph layout via
WorkspaceContext.performLayout().
- Display overlay task while computing graph layout via
- Fix
RenderingState.syncUpdate()not updating element sizes when called from React-managed handlers due to batching; - Store failed operation errors to display even when
WithFetchStatusis re-mounted:- Add
DataDiagramModel.getOperationFailReason()to check if latest fetch operation failed;
- Add
- Fix
WikidataSettingsforSparqlDataProviderto resolve property type labels;
- Allow to choose element template based on element itself in addition to its types in
CanvasProps.elementTemplateResolver. - Allow to fetch labels and property values only in specified languages in
SparqlDataProviderSettingsviafilterOnlyLanguagessetting. - Allow to skip "zoom to fit" in
WorkspaceContext.performLayout()by passingzoomToFit: false. - Export
EmptyDataProviderwhich implementsDataProviderinterface with no data. - Change search results component in
ConnectionMenuandInstancesSearchto select multiple items without holding Control/Meta;
- [💥Breaking] Prepare to decouple basic diagram renderer from entity and relation graph:
- Use separate
EntityElementandRelationLinktypes for elements and links with data; - Rename
AsyncModel->DataDiagramModel; - Move methods related to element / link / property types from
DiagramModeltoDataDiagramModel, including locale formatting; - Move link type visibility state from
LinkTypetoDiagramModelitself; - Change
TemplatePropsto haveelement: Elementinstead ofdata: ElementModelinside; - Inject additional type information to layout computation via
LayoutTypeProvider; - Change
InstancesSearchcriteria to use primitive values instead of element and type references; - Remove
DataDiagramModel.createLink()method: eitheraddLink()orcreateLinks()should be used instead; - Move
EditorController.{selection, setSelection, bringElements}toDiagramModel. - Rename
EditorControllermethods to reflect new terminology (element and link -> entity and relation). - Rename commands to globally change entity graph:
setElementData()->changeEntityData()andsetLinkData()->changeRelationData().
- Use separate
- [💥Breaking] Change
ElementType,LinkTypeandPropertyTypeto store original data inside instead of unpacking it into label and other properties. - [💥Breaking] Replace implicit element type and property subscriptions by explicit hook calls:
- Extract
useSyncStore()overload with equality comparator into separate functionuseSyncStoreWithComparator()for performance reasons; - Add
KeyedSyncStoretype anduseKeyedSyncStore()hook mirroring built-inSyncStore/useExternalSyncStore()React hook but for multiple subscriptions via keys at the same time; - Add
subscribeElementTypes,subscribePropertyTypesandsubscribeLinkTypeskeyed event stores;
- Extract
- Replace
Element.temporaryproperty with separateVoidElementtype; - Replace
Link.layoutOnlyproperty byTemplateProperties.LayoutOnlylink state property; - Remove legacy grouping functionality:
WorkspaceProps.groupByoption,EmbeddedLayerandGroupTemplatecomponents,Element.groupproperty and relevant events.
0.24.0 - 2024-03-27
- Track and display fetching state for the graph data:
- Expose
AsyncModel.operationsproperty andAsyncModel.changeOperationsevent to track active fetch operation; - Add
WithFetchStatuscomponent to decorate other component with fetch status on element or element/link/property type; - Update default templates to use
WithFetchStatus;
- Expose
- Support React component lifecycle for Link templates:
- [💥Breaking]
LinkTemplate.render()drastically changed to act as "render function" which returns React elements; - [💥Breaking] Changed
LinkTemplate.setLinkLabel()intoEditableLinkLabelobject on the link template; - Expose
LinkPath,LinkLabelandLinkVerticescomponents as building blocks for custom link templates; - Extract existing link rendering into
DefaultLinkTemplateandDefaultLinkPathTemplate;
- [💥Breaking]
- Support computing graph layout using web workers:
- Make default diagram layout algorithm configurable via
defaultLayoutprop onWorkspace; - Rename
layoutForcePaddeddefault layout function toblockingDefaultLayout; - Make
layoutFunctionandcanvasparameters of WorkspaceContext.performLayout() optional; - Add
defineWorker()anduseWorker()to register and use shared ref-counted workers; - Export
worker-protocolsub-module to ease creation of transparent worker proxies; - Export
layout.workersub-module (anddefineLayoutWorker()helper) with default layout algorithms to be imported as a worker script; - [💥Breaking] Change
LayoutFunctionto be a pure function fromLayoutGraphandLayoutStateintoLayoutState; - [💥Breaking] Change
layoutPaddedWith()/layoutBiasFreePaddedWith()to allow async usage aslayoutPadded()/layoutPaddedBiasFree();
- Make default diagram layout algorithm configurable via
- Support React 18
<StrictMode>workspace loading:- Add
DiagramModel.discardLayout()to be used for correctuseEffect()cleanup; - Add
useLoadedWorkspace()hook for easier and correct by default asynchronous workspace loading;
- Add
- Fix reloading/re-fetching class tree when importing a diagram with same data provider.
- Fix elements lagging behind when moving
Selectionbox. - Fix
SelectionActionEstablishLinkbeing displayed when authoring mode is not active. - Fix missing inheritable CSS defaults for links in the exported diagrams.
- Fix shrinking buttons for link types in
ConnectionsMenu. - Clear
InstancesSearchresults when loading a diagram.
- Add
useWorkspace()anduseCanvas()hooks to access workspace and canvas context with proper error handling:- Getting these context objects directly via
useContext(WorkspaceContext)anduseContext(CanvasContext)is deprecated and will be subject to removal in the future release;
- Getting these context objects directly via
- Support
acceptattribute for HTML file input inToolbarActionOpen. - [💥Breaking] Make random-delay data provider decorator configurable and expose its factory under new name
makeDelayProviderDecorator().
- [💥Breaking] Rename some functions and properties for consistency and documentation:
WorkspaceContext.overlayController->overlay;sameLink()->equalLinks();ElementType->ElementTypeModelandRichElementType->ElementType;LinkType->LinkTypeModelandRichLinkType->LinkType;PropertyType->PropertyTypeModelandRichProperty->PropertyType;DiagramModelEvents.classEvent->elementTypeEvent;DiagramModel.{getProperty, createProperty}->{getPropertyType, createPropertyType};LinkTypeOptions->SerializedLinkOptions;{LayoutData, LayoutElement, LayoutLink}->{SerializedLayout, SerializedLayoutElement, SerializedLayoutLink};makeLayoutData()->makeSerializedLayout();
0.23.0 - 2023-12-11
- Support customizable
Toolbarwidget with its actions decomposed into separate components:- Generic component for toolbar actions:
ToolbarAction; - Default menu items:
ToolbarActionClearAll,ToolbarActionExport(for PNG, SVG and print); - Default panel items:
ToolbarActionUndo,ToolbarActionRedo,ToolbarActionLayout,ToolbarLanguageSelector; - Additional specialized actions:
ToolbarActionOpen,ToolbarActionSave;
- Generic component for toolbar actions:
- Add
Selectioncanvas widget with rectangular element selection to the default workspace; - Made
HaloandSelectionwidgets customizable via action components:- Generic component for element actions:
SelectionAction; - Specialized actions:
SelectionActionRemove,SelectionActionZoomToFit,SelectionActionLayout,SelectionActionExpand,SelectionActionConnections,SelectionActionAddToFilter,SelectionActionAnchor,SelectionActionEstablishLink;
- Generic component for element actions:
- Support multi-navigation using
SelectionActionConnectionswhen multiple elements are selected. - Made
HaloLinkwidget customizable via action components:- Generic component for link actions:
LinkAction; - Specialized actions:
LinkActionEdit,LinkActionDelete,LinkActionMoveEndpoint,LinkActionRename;
- Generic component for link actions:
- When establishing new link and selecting an existing entity to put on canvas and connect, it should not mark the entity as "new".
- Re-route links on link type visibility change.
- Perform zoom-to-fit after loading an existing diagram instead of just centering the content.
- Fixed unintended element move when interacting with nested element scrollbar.
- Reset history after creating a new diagram or importing existing layout.
- Fix text lookup query to use public full-text search service for
WikidataSettings.
- Add selected link highlight to
HaloLink:- Label highlight: displayed by default as underline;
- Path highlight: unstyled by default, can be changed via CSS;
- Support customizable stroke and fill styles in
Navigatorand improve default colors. - Exposed SVG and raster image export options in corresponding
CanvasApimethods. - Support for graceful close and clearing the cache in
IndexedDbCachedProvider. - Added utility hooks for debounced event subscription:
useEventStore(),useFrameDebouncedStore(),useSyncStore(). - Add
inexactCountparameter toDataProvider.connectedLinkStats()to allow to avoid computing full connected link type statistics where only existence of a link type is enough. - [💥Breaking] Use synthetic type and label predicates in element query of
SparqlDataProvider:- Use
urn:reactodia:sparql:{type, label}instead ofrdf:typeandrdfs:labelas marker predicates inSparqlDataProviderSettings.elementInfoQueryto distinguish them from properties with same predicates;
- Use
- Add custom "zoom-to-fit" icon instead of reusing a different one from Codicons.
- Improve accessibility attribute placement (including
role,aria-*,title,name, etc).
- Optimize link route updates via batching.
- [💥Breaking] Split
DiagramViewtype:- Remove public
modelproperty to getDiagramModel(accessible via both canvas or workspace context); - Move
languageproperty with setter and corresponding event intoDiagramModel; - Move locale formatting methods under
DiagramModel.locale.*; - Move
getTypeStyle()intoWorkspaceContextasgetElementTypeStyle(); - Rename
DiagramView->SharedCanvasStateand move underRenderingState.shared;
- Remove public
- [💥Breaking] Rename some functions and properties for consistency and documentation:
DefaultToolbar->Toolbar;CanvasApi.exportPng()->CanvasApi.exportRaster();OverlayController.showEditLinkLabelForm()->OverlayController.showRenameLinkForm();visible/showLabelproperties onRichLinkType->visibilityproperty of string enum type.
- Removed deprecated
Dictionarytype (Record<string, T>can be used instead). - Removed untyped
keyparameter from event listeners. - Made private
EditorController.modelproperty (accessible via workspace context).
0.22.0 - 2023-11-24
- Support resources represented by blank nodes in
RdfDataProviderwhenacceptBlankNodesis enabled. - Support native scroll and pan in
PaperArea(e.g. using mouse wheel or touchpad scrolling). - Support touch input: native pan scroll and custom pinch zoom:
- Add new coordinate conversions to
CanvasMetrics:paperToPageCoords()andscrollablePaneToClientCoords(); - Add
Vector.{add, subtract, scale}functions;
- Add new coordinate conversions to
- Fix ignored lookup direction
linkDirectioninRdfDataProvider.lookup(). - Prevent creating loaded links from cluttering the command history.
- Prevent canvas scroll jumping on undo action after layout:
- Add
restoreViewport()command to undo/redo viewport state in similar cases;
- Add
- Fix diagram export/print to correctly embed CSS for pseudo-elements and SVG images.
- Display only property values in currently selected language if possible via
DiagramView.formatPropertyList().
- Use a dropdown menu to improve toolbar UI, make it more compact.
- Optimize
ElementLayerandLinkLayerrendering, reducing unnecessary React updates and DOM reflows:- [💥Breaking] Make
LinkStyle.renderLink()explicitly depend only on link data and state for future optimizations;
- [💥Breaking] Make
- Introduce
GraphStructureas a read-only view for theDiagramModel:- Use
GraphStructureinLinkRouter,LinkStyleandValidationApi;
- Use
- [💥Breaking] Use consistent naming for diagram model data accessors:
- Rename method
getLinkById()->getLink(); - Rename methods
getClass()/createClass()->getElementType()/createElementType(); - Remove unnecessary methods
linksOfType(),isSourceAndTargetVisible(); - Rename classes
FatClassModel/FatLinkType->RichElementType/RichLinkType;
- Rename method
0.21.0 - 2023-11-21
- Fix element does not redraw on its removal in some cases.
- Avoid error when trying to change element type when dragging out of another in the authoring mode.
- Ensure that a link is never lost when dragging its source or target connector in the authoring mode.
- [💥Breaking] Make
DiagramModel.addLink()consistent withaddElement():addLinkandremoveLinkuse command history;addLinkwill error on trying to add existing link, usecreateLink()for the previous behavior;
- [💥Breaking] Expose
Element.linksonly throughDiagramModel.getElementLinks().
0.20.0 - 2023-11-16
- Fork the library as OSS project, see previous CHANGELOG if needed.
- Implement in-memory
CommandHistoryinterface by default. - Support fully customizable workspace structure with the following elements:
Workspace- only defines shared context for other components;WorkspaceRoot,WorkspaceLayoutRow,WorkspaceLayoutColumn,WorkspaceLayoutItem- organizes components into resizable/collapsible sections;Canvas-- displays the diagram and canvas widgets;- Canvas widgets:
DefaultToolbar,ConnectionsMenu,DropOnCanvas,Halo,HaloLink,Navigator,ZoomControl; - Other components:
ClassTree,InstancesSearch,LinkToolbox;
- Properly batch commands to history when placing elements from the Connections dialog.
- [💥Breaking] Many changes to code structure and small changes to the naming.
- CSS classes prefix changed to
reactodia-. - Reimplemented
RdfDataProviderbased on RDF/JS-compatible in-memory RDF store. - Moved element property formatting from
ElementLayerinto element templates themselves. - Changed link type visibility settings to affect only link rendering without removing them from the graph.
- Bundle subset of Codicons for icons, removed dependency on the included Font Awesome on the host page.
- Moved default type style and link customizations into opt-in
SemanticTypeStylesandOntologyLinkTemplates.
- Enabled full
strictTypeScript compiler mode with null checks. - Migrated from legacy React Context to the modern one (
React.createContext()). - Use RDF/JS-compatible IRI and literal terms.
- Removed blank nodes discovery support from
SparqlDataProvider(might be reimplemented in the future).